Issue #3387 has been updated by Marc Fournier.

File 3_more_tests.patch added
File 2_typos.patch added

Thanks for this patch Bryan ! It works fine, as far as I can tell.

I still get the warning with a single-backslash. If I double it, the warning 
goes away. In both cases, the augeas resource works as expected.

The attached file contains 2 tests which fail if your patch isn't applied. I 
suspect James will refuse the patch without tests...


I unfortunately disovered another bug while testing this. If the path contains 
unescaped whitespaces, augeas doesn't apply the change, even if it should:

<pre>
$ cat /etc/rsyncd.conf 
pid file= /var/run/rsyncd.pid2
</pre>

<pre>
augeas { "set rsyncd pidfile":
  context => "/files/etc/rsyncd.conf/.anon/",
  changes => "set 'pid file' /var/run/rsyncd.pid",
}
</pre>

<pre>
debug: Creating default schedules
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::User::ProviderUser_role_add: file roledel does not exist
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does 
not exist
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Puppet::Type::User::ProviderLdap: true value when expecting false
debug: Failed to load library 'ldap' for feature 'ldap'
debug: /File[/var/puppet/run]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/lib]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/clientbucket]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/log]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/facts]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/certs]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/etc/puppet/ssl/certificate_requests]: Autorequiring 
File[/etc/puppet/ssl]
debug: /File[/etc/puppet/ssl/private_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/etc/puppet/ssl/public_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/state]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/private]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/client_yaml]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl]: Autorequiring File[/etc/puppet]
debug: /File[/var/puppet/state/graphs]: Autorequiring File[/var/puppet/state]
debug: Finishing transaction 70310612840420 with 0 changes
info: Applying configuration version '1269175484'
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): Will attempt to save and 
only run if files changed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["/files/etc/rsyncd.conf/.anon/pid file", "/var/run/rsyncd.pid"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Skipping becuase no files 
were changed
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
debug: Finishing transaction 70310612535900 with 0 changes
</pre>

A workaround would be to automatically add a backslash to such cases (the third 
test in the attached file checks this), but I wonder if this is really the best 
solution. Maybe would it be more coherent to have the same behaviour users can 
experience with augool, and have puppet fail with an error similar to what 
augtool does:

<pre>
augtool> set '/files/etc/rsyncd.conf/.anon/pid file' /var/run/rsyncd.pid
error: Invalid path expression
error: garbage at end of path expression
error: /files/etc/rsyncd.conf/.anon/pid |=|file
Failed
</pre>

Finally, while we're at it, I've added a second mini-patch which corrects a 
couple of typos...

----------------------------------------
Bug #3387: backslashes aren't correctly passed to augeas anymore
http://projects.reductivelabs.com/issues/3387

Author: Marc Fournier
Status: Accepted
Priority: Normal
Assigned to: Bryan Kearney
Category: augeas
Target version: 0.25.5
Affected version: 0.25.4
Keywords: 
Branch: 


The following code snippet used to work on 0.24.8:

<pre>
augeas { "set rsyncd pidfile":
  context => "/files/etc/rsyncd.conf/.anon/",
  changes => "set 'pid\ file' /var/run/rsyncd.pid",
}
</pre>

But I now get the following error (tested on the tip of 
bkearney/ticket/0.25.x/3379 as well as 0.25.4, on redhat and debian, with 
augeas 0.7.0):

<pre>
warning: Unrecognised escape sequence '\ ' in file 
/home/marc/src/puppet/augbug.pp at line 3
debug: Creating default schedules
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::User::ProviderLdap: true value when expecting false
debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does 
not exist
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Failed to load library 'ldap' for feature 'ldap'
debug: /File[/etc/puppet/ssl/private_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/lib]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/client_yaml]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/public_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/clientbucket]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/state]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl]: Autorequiring File[/etc/puppet]
debug: /File[/etc/puppet/ssl/certs]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/run]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/certificate_requests]: Autorequiring 
File[/etc/puppet/ssl]
debug: /File[/var/puppet/log]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/private]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/state/graphs]: Autorequiring File[/var/puppet/state]
debug: /File[/var/puppet/facts]: Autorequiring File[/var/puppet]
debug: Finishing transaction 70143984607080 with 0 changes
info: Applying configuration version '1268907221'
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): Will attempt to save and 
only run if files changed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["/files/etc/rsyncd.conf/.anon/'pid\\ file'", "/var/run/rsyncd.pid"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Files changed, should 
execute
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
debug: //Augeas[set rsyncd pidfile]: Changing returns
debug: //Augeas[set rsyncd pidfile]: 1 change(s)
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["/files/etc/rsyncd.conf/.anon/'pid\\ file'", "/var/run/rsyncd.pid"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
err: //Augeas[set rsyncd pidfile]/returns: change from need_to_run to 0 failed: 
Save failed with return code false
debug: Finishing transaction 70143984239220 with 1 changes
</pre>

Removing the backslash:

<pre>
augeas { "set rsyncd pidfile":
  context => "/files/etc/rsyncd.conf/.anon/",
  changes => "set 'pid file' /var/run/rsyncd.pid",
}
</pre>

... makes the warning disappear but not the error (which is slightly different):

<pre>
debug: Creating default schedules
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::User::ProviderLdap: true value when expecting false
debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does 
not exist
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Failed to load library 'ldap' for feature 'ldap'
debug: /File[/var/puppet/state]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/clientbucket]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/private_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/etc/puppet/ssl/certificate_requests]: Autorequiring 
File[/etc/puppet/ssl]
debug: /File[/etc/puppet/ssl/private]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/state/graphs]: Autorequiring File[/var/puppet/state]
debug: /File[/var/puppet/log]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/client_yaml]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/run]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl]: Autorequiring File[/etc/puppet]
debug: /File[/etc/puppet/ssl/certs]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/lib]: Autorequiring File[/var/puppet]
debug: /File[/etc/puppet/ssl/public_keys]: Autorequiring File[/etc/puppet/ssl]
debug: /File[/var/puppet/facts]: Autorequiring File[/var/puppet]
debug: Finishing transaction 69911763370840 with 0 changes
info: Applying configuration version '1268907443'
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): Will attempt to save and 
only run if files changed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["/files/etc/rsyncd.conf/.anon/'pid", "file'"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Files changed, should 
execute
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
debug: //Augeas[set rsyncd pidfile]: Changing returns
debug: //Augeas[set rsyncd pidfile]: 1 change(s)
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["/files/etc/rsyncd.conf/.anon/'pid", "file'"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
err: //Augeas[set rsyncd pidfile]/returns: change from need_to_run to 0 failed: 
Save failed with return code false
debug: Finishing transaction 69911763001060 with 1 changes
</pre>


Changing the resource like this:

<pre>
augeas { "set rsyncd pidfile":
  #context => "/files/etc/rsyncd.conf/.anon/",
  changes => "set '/files/etc/rsyncd.conf/.anon/pid\ file' /var/run/rsyncd.pid",
}
</pre>

... removes the error but not the warning, and fails to add/change the line as 
expected (so I guess this should produce an error and fail instead of the 
warning):

<pre>
warning: Unrecognised escape sequence '\ ' in file /tmp/aug.pp at line 3
debug: Creating default schedules
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does 
not exist
debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist
debug: Failed to load library 'ldap' for feature 'ldap'
debug: Puppet::Type::User::ProviderLdap: feature ldap is missing
debug: /File[/var/lib/puppet/ssl/certs/kisvm5.epfl.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl/certs]
debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/puppet/facts]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/run]: Autorequiring File[/var/puppet]
debug: /File[/var/lib/puppet/ssl/private]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/puppet/state/graphs]: Autorequiring File[/var/puppet/state]
debug: /File[/var/puppet/state/state.yaml]: Autorequiring 
File[/var/puppet/state]
debug: /File[/var/lib/puppet/ssl/private_keys/kisvm5.epfl.ch.pem]: 
Autorequiring File[/var/lib/puppet/ssl/private_keys]
debug: /File[/var/lib/puppet/ssl/public_keys/kisvm5.epfl.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl/public_keys]
debug: /File[/var/puppet/state]: Autorequiring File[/var/puppet]
debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring 
File[/var/lib/puppet/ssl/certs]
debug: /File[/var/lib/puppet/ssl/csr_kisvm5.epfl.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/puppet/clientbucket]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/lib]: Autorequiring File[/var/puppet]
debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/puppet/state/classes.txt]: Autorequiring 
File[/var/puppet/state]
debug: /File[/var/puppet/client_yaml]: Autorequiring File[/var/puppet]
debug: /File[/var/puppet/log]: Autorequiring File[/var/puppet]
debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: Finishing transaction 23456254014360 with 0 changes
info: Applying configuration version '1268908267'
debug: Augeas[set rsyncd pidfile](provider=augeas): Opening augeas with root /, 
lens path , flags 0
debug: Augeas[set rsyncd pidfile](provider=augeas): Augeas version 0.7.0 is 
installed
debug: Augeas[set rsyncd pidfile](provider=augeas): Will attempt to save and 
only run if files changed
debug: Augeas[set rsyncd pidfile](provider=augeas): sending command 'set' with 
params ["'/files/etc/rsyncd.conf/.anon/pid\\ file'", "/var/run/rsyncd.pid"]
debug: Augeas[set rsyncd pidfile](provider=augeas): Skipping becuase no files 
were changed
debug: Augeas[set rsyncd pidfile](provider=augeas): Closed the augeas connection
debug: Finishing transaction 23456254927480 with 0 changes
</pre>


This is the syntax which works, using the cli tool:

<pre>
# augtool
augtool> set "/files/etc/rsyncd.conf/.anon/pid\ file" /var/run/rsyncd.pid
augtool> save
Saved 1 file(s)
</pre>

I'm not sure if this is an augeas bug or if it could be something that changed 
in the way puppet deals with backslashes.




-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://reductivelabs.com/redmine/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to