Issue #12199 has been updated by Daniel Pittman.

Subject changed from augeas "set" silently truncates values to augeas type 
should use arrays, not parsed strings, to represent operations.
Status changed from Needs More Information to Accepted

David Schmitt wrote:
> Daniel Pittmann wrote:
> > If you use Augeas, can you comment on what would work from your point of 
> > view about this? How should it be expressed in the Puppet DSL?
> 
> My first thought was something along these lines:
> 
> 1. Quote function does all the work
> 
>     $quoted_arg = augeas_quote($arg)
> 
>     command => "set ${path} ${quoted_arg}"
> 
> 2. Improved datastructure
> 
>     command => [ set, $path, $arg ]
> 
> I'd prefer the second form (see execve(2) vs. system(3)), but I'm only 
> starting with augeas, so you might want to get a second opinion.

I strongly lean to the second form, also, which is much saner: it avoids having 
any sort of parsing, or escaping, in the system - which is really something 
that we don't want, because it adds stupendous amounts of complexity to the 
system.

Ultimately, if we can't invoke Augeas directly from the array, the type / 
provider should be able to take the nicely separated strings, paste them 
together, quote them, and pass them on - strictly internally, so that the 
complexity of quoting is entirely hidden from the user in the Puppet DSL.

----------------------------------------
Bug #12199: augeas type should use arrays, not parsed strings, to represent 
operations.
https://projects.puppetlabs.com/issues/12199

Author: David Schmitt
Status: Accepted
Priority: Normal
Assignee: 
Category: augeas
Target version: 
Affected Puppet version: 2.6.2
Keywords: 
Branch: 


A simple augeas { '...': changes => 'set ... xxx' } can fail to put the 
complete value into the target while wrongly reporting a successful application.

Example manifest:

        define puppet::conf ($ensure) {
                augeas {
                        "puppet.conf_${name}" :
                                changes => "set 
/files/etc/puppet/puppet.conf/${name} ${ensure}" ;
                        "puppet.conf_${name}_sq" :
                                changes => "set 
/files/etc/puppet/puppet.conf/${name}_sq '${ensure}'" ;
                        "puppet.conf_${name}_dq" :
                                changes => "set 
/files/etc/puppet/puppet.conf/${name}_dq \"${ensure}\"" ;
                }
        }

        puppet::conf {
                "agent/server" :
                        ensure => 'puppetmaster-dev.edvbus' ;

                "agent/pluginsync" :
                        ensure => 'true' ;

                "test/sq" :
                        ensure => "'" ;
                "test/sqsq" :
                        ensure => "''" ;
                "test/sqsqsq" :
                        ensure => "'''" ;
                "test/sqsqsqsq" :
                        ensure => "''''" ;
                "test/dq" :
                        ensure => '"' ;
                "test/dqdq" :
                        ensure => '""' ;
                "test/dqdqdq" :
                        ensure => '"""' ;
                "test/dqdqdqdq" :
                        ensure => '""""' ;
                "test/truncated_dq" :
                        ensure => '"s"bc"d"ef' ;
                "test/truncated_sq" :
                        ensure => "'s'bc'd'ef" ;
                "test/truncated_dq_mix" :
                        ensure => '"s"bc\'d\'ef' ;
                "test/truncated_sq_mix" :
                        ensure => "'s'bc\"d\"ef" ;
                "test/truncated_space" :
                        ensure => "before after" ;                      
                "test/mix" :
                        ensure => "a\"b'c\"d'e" ;                       
        }

Result in /etc/puppet/puppet.conf (sorted for convenience): 

    [test]
    dqdqdqdq_sq=""""
    dqdqdq_sq="""
    dqdq_sq=""
    dq_sq="
    mix=a"b'c"d'e
    mix_dq=a
    mix_sq=a"b
    sq_dq='
    sqsq_dq=''
    sqsqsq_dq='''
    sqsqsqsq_dq=''''
    truncated_dq_mix=s
    truncated_dq_mix_sq="s"bc
    truncated_dq=s
    truncated_dq_sq="s"bc"d"ef
    truncated_space=before
    truncated_space_dq=before after
    truncated_space_sq=before after
    truncated_sq_dq='s'bc'd'ef
    truncated_sq_mix_dq='s'bc
    truncated_sq_mix=s
    truncated_sq=s

    
As you can see, depending on the used quoting style, different parts of the 
values are silently truncated. Only values that cannot be written at all into 
the file cause an error.

I've tested this with 2.6. on squeeze and 2.7.10 on centos 6.2 with the same 
results.


-- 
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://projects.puppetlabs.com/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