Ok I've got it sorted now and I'll submit the recipe to the wiki after somebody here reviews it as I'm only new to puppet.
After writing tests in ruby with the libaugeas-ruby bindings it turns out the problem is that the bindings do not like set values to be quoted. Works: set \"/dir[.='<%= name %>']\" <%= name %> Does not work: set \"/dir[.='<%= name %>']\" '<%= name %>' Template: define augeas_nfs_export($client='*', $options=['ro','sync']) { $exports_template = "set \"/dir[.='<%= name %>']\" '<%= name %>' set \"/dir[.='<%= name %>']/client[.='<%= client %>']\" '<%= client %>' remove \"/dir[.='<%= name %>']/client[.='<%= client %>']/option\" <% options.each do |option| %>set \"/dir[.='<%= name %>']/client[.='<%= client %>']/option[.='<%= option %>']\" '<%= option %>' <% end %>" augeas { "etc_exports_${name}": context => "/files/etc/exports", changes => inline_template($exports_template) } } Usage: class my_export { augeas_nfs_export { '/home/server01': client => '*.example.com', options => ['rw','sync','no_subtree_check']; '/svr/backups': client => '*.example.com', options => ['rw','sync','no_subtree_check','no_root_squash']; '/svr/backups': client => '*.another.domain.com', options => ['ro','sync']; } } Any suggestions? Ps: Cant express how pleasurable puppet + augeas is now too! Regards, Karl On Wed, Apr 8, 2009 at 12:49 AM, Karl Bowden <karlbow...@gmail.com> wrote: > Ok, the error's are still the same with puppet-0.24.8. But I had to > change the way I quoted args in changes lines for it to work. > > If I use an [.='somevalue'] def in an augeas changes var in puppet I'm > still getting: change from need_to_run to 0 failed: Save failed with > return code false > > I have checked the changes string I am using in augtool again and it > saves ok, but the libruby-augeas bindings provide only true and false > as options for augeas_save() and no extra information as to what is > going wrong. > > - Karl > > On Tue, Apr 7, 2009 at 10:41 PM, Karl Bowden <karlbow...@gmail.com> wrote: >> Sorry, my statements could have been clearer. >> >> The example you listed works great in augtool. It was just the syntax >> I hoped for. >> >> It seems that puppet is balking on the /dir[.='/path'] syntax though. >> Only on the second augeas run when the changes get applied to the >> filesystem as the log files correctly state that there is 1 change to >> apply, but fails to write the change on the second run. >> It also reports the invalid command error when I include the remove >> (or rm) statement. >> >> So it seems to now be a bug in puppet. I'm just packaging 0.24.8 for >> ubuntu to retest. I'm currently using: >> puppet-0.24.7 >> augeas-0.5.0 >> libruby-augeas-0.2.0 >> >> - Karl >> >> On Tue, Apr 7, 2009 at 10:24 PM, Bryan Kearney <bkear...@redhat.com> wrote: >>> >>> Just checking if these came out of order. Is this working or not for you? >>> >>> -- bk >>> >>> Karl Bowden wrote: >>>> On Tue, Apr 7, 2009 at 11:46 AM, Karl Bowden <karlbow...@gmail.com> wrote: >>>>> On Mon, Apr 6, 2009 at 11:59 PM, Bryan Kearney <bkear...@redhat.com> >>>>> wrote: >>>>>> agentk wrote: >>>>>>> I'm not sure if I'm kicking tyres again, but first off: I like the >>>>>>> possibilities with puppet + augeas. >>>>>>> >>>>>>> Trying to make a working example with /etc/exports but not sure of how >>>>>>> to proceed. I want to be able to define exports in the following form: >>>>>>> >>>>>>> my_exports_def { >>>>>>> ['/home/server01', '/svr/logs']: >>>>>>> client => '*.example.com', >>>>>>> options => 'rw,sync', >>>>>>> '/other/export': >>>>>>> client => '*.example.com', >>>>>>> options => 'rw,sync,no_root_squash', >>>>>>> } >>>>>>> >>>>>> Try something like this: >>>>>> >>>>>> augeas{"test": >>>>>> context=>"/files/etc/exports", >>>>>> changes => ["set /dir[.='/home/server01'] '/home/server01'", >>>>>> "set /dir[.='/home/server01']/client >>>>>> '*.example.com'", >>>>>> "set >>>>>> /dir[.='/home/server01']/client[.='*.example.com']/option[.='rw'] rw"] >>>>>> >>>>>> } >>>>>> >>>>>> The commands work in augtool. The iteration may be an issue if you have >>>>>> many options. Perhaps you can set that up in a wrapper call and use >>>>>> conditionals? >>>>>> >>>>>> -- bk >>>>> Cheers! Your example did not work at first, but I just needed to >>>>> package the latest augeas for ubuntu. I think that is where half of my >>>>> trouble was. Oh well. All good now thank you. >>>>> >>>>> - Karl >>>>> >>>> >>>> Ok, I'm almost there. But not quite. >>>> >>>> First here is the code I'm using: >>>> >>>> templates/augeas/exports.erb: >>>> set /dir[.='<%= name %>'] '<%= name %>' >>>> set /dir[.='<%= name %>']/client[.='<%= client %>'] '<%= client %>' >>>> remove /dir[.='<%= name %>']/client[.='<%= client %>']/option >>>> <% options.each do |option| %>set /dir[.='<%= name %>']/client[.='<%= >>>> client %>']/option[.='<%= option %>'] '<%= option %>' >>>> <% end %> >>>> >>>> manifests/templates.pp: >>>> define augeas_nfs_export($client='*', $options=['ro','sync']) { >>>> augeas { >>>> "$name": >>>> context => "/files/etc/exports", >>>> changes => template('augeas/exports.erb'), >>>> } >>>> } >>>> class virt02_export { >>>> augeas_nfs_export { >>>> '/home/server01': >>>> client => '*.example.com', >>>> options => ['rw','sync','no_subtree_check']; >>>> } >>>> } >>>> >>>> Now the debug output shows that puppets is producing the right augeas >>>> commands and the work in augtool when I run the manually, but I have >>>> not been able to get puppet to save /etc/exports >>>> >>>> Trimed log output from sudo puppetd --test --debug: >>>> debug: >>>> //Node[virt02.nugan.com.au]/virt02_export/Augeas_nfs_export[/home/server01]/Augeas[/home/server01]: >>>> Changing returns >>>> debug: >>>> //Node[virt02.nugan.com.au]/virt02_export/Augeas_nfs_export[/home/server01]/Augeas[/home/server01]: >>>> 1 change(s) >>>> debug: Augeas[/home/server01](provider=augeas): Opening augeas with >>>> root /, lens path , flags 0 >>>> debug: Augeas[/home/server01](provider=augeas): sending command 'set' >>>> with params ["/files/etc/exports/dir[.='/home/server01']", >>>> "'/home/server01'"] >>>> debug: Augeas[/home/server01](provider=augeas): sending command 'set' >>>> with params >>>> ["/files/etc/exports/dir[.='/home/server01']/client[.='*.example.com']", >>>> "'*.example.com'"] >>>> debug: Augeas[/home/server01](provider=augeas): sending command >>>> 'remove' with params >>>> ["/files/etc/exports/dir[.='/home/server01']/client[.='*.example.com']/option"] >>>> debug: Augeas[/home/server01](provider=augeas): sending command 'set' >>>> with params >>>> ["/files/etc/exports/dir[.='/home/server01']/client[.='*.example.com']/option[.='rw']", >>>> "'rw'"] >>>> debug: Augeas[/home/server01](provider=augeas): sending command 'set' >>>> with params >>>> ["/files/etc/exports/dir[.='/home/server01']/client[.='*.example.com']/option[.='sync']", >>>> "'sync'"] >>>> debug: Augeas[/home/server01](provider=augeas): sending command 'set' >>>> with params >>>> ["/files/etc/exports/dir[.='/home/server01']/client[.='*.example.com']/option[.='no_subtree_check']", >>>> "'no_subtree_check'"] >>>> err: >>>> //Node[virt02.nugan.com.au]/virt02_export/Augeas_nfs_export[/home/server01]/Augeas[/home/server01]/returns: >>>> change from need_to_run to 0 failed: invalid command >>>> >>>> The first two lines indicate to me that puppet is seeing that on the >>>> test run augeas has one line to change in exports, but always fails on >>>> the actual run. >>>> Also to not is the remove command seems to produce errors on the final >>>> run too. if I remove the remove line the error is: >>>> err: >>>> //Node[virt02.nugan.com.au]/virt02_export/Augeas_nfs_export[/home/server01]/Augeas[/home/server01]/returns: >>>> change from need_to_run to 0 failed: Save failed with return code >>>> false >>>> >>>> I have tried putting these commands directly into an augeas statement, >>>> but it still produces the same errors. Where do I look next? >>>> >>>> - Karl >>>> >>>> > >>> >>> >>> >>> >>> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---