As you can see, I've got a very simple resource defined for testing
purposes but am seeing this error on the client. Can someone point me
in the right direction?
err: //Node[e5puppetclient1]/Nfs::Export[/foo]/Augeas[/foo]/returns:
change from need_to_run to 0 failed: Save failed with return code false
Augeas will validate the structure of what you are setting. Look in /usr/share/augeas/lenses/exports.lns for a description of the regular expression voodoo. My guess is that you are not setting a valid structure.
Thanks so much for the pointer. I think I'm on the right track now but
could use a hand understanding why I'm getting this error when
attempting to write out to disk
> Augeas will validate the structure of what you are setting. Look in
> /usr/share/augeas/lenses/exports.lns for a description of the regular
> expression voodoo. My guess is that you are not setting a valid structure.
> Augeas will validate the structure of what you are setting. Look > in /usr/share/augeas/lenses/exports.lns for a description of the > regular expression voodoo. My guess is that you are not setting a > valid structure.
Yes, you have to actually set something that matches the structure of the file in question, which varies by file. Most of the lenses have shit for documentation, unfortunately, and this one is no exception.
So, the easiest thing to do is to set up the file with some examples (I pulled examples from the bottom of "man 5 exports") and see what they look like:
$ augtool augtool> ls /files/etc/exports/ comment[1] = /etc/exports: the access control list for filesystems which may be exported comment[2] = to NFS clients. See exports(5). comment[3] = sample /etc/exports file dir[1]/ = / dir[2]/ = /projects dir[3]/ = /usr dir[4]/ = /home/joe
It took several tries to get this; it turns out the augeas lens for this file is a bit pickier than it should be: it won't accept:
/pub (ro,insecure,all_squash)
Anyways, from here you can investigate the structure, like so:
augtool> ls /files/etc/exports/dir[1] client[1]/ = master client[2]/ = trusty
The corresponding line in the file is:
/ master(rw) trusty(rw,no_root_squash)
Digging further:
augtool> ls /files/etc/exports/dir[1]/client[1] option = rw
So, if you want to add a new entry, you'd do something like this:
augtool> set /files/etc/exports/dir[10000] /foo augtool> set /files/etc/exports/dir[last()]/client[1] weeble augtool> set /files/etc/exports/dir[last()]/client[1]/option[1] ro augtool> set /files/etc/exports/dir[last()]/client[1]/option[2] all_squash augtool> save Saved 1 file(s)
Which creates the line:
/foo weeble(ro,all_squash)
Doing this in Puppet is left as an exercise for the reader. I'll go see about getting better docs in Augeas for this thing.
On Thu, Jan 15, 2009 at 02:10:57PM -0800, windowsrefund wrote:
> Bryan,
> Thanks so much for the pointer. I think I'm on the right track now but > could use a hand understanding why I'm getting this error when > attempting to write out to disk
> On Thu, Jan 15, 2009 at 02:10:57PM -0800, windowsrefund wrote:
> > Bryan,
> > Thanks so much for the pointer. I think I'm on the right track now but
> > could use a hand understanding why I'm getting this error when
> > attempting to write out to disk
Now that I'm more comfortable working with the schemas of each
supported file, I'm seeing a potential issue when it comes to
appending. Is there a way to determine the length of each object so I
can avoid doing things like /files/etc/exports/dir[100] ?
Best,
Adam
On Jan 15, 5:22 pm, Robin Lee Powell <rlpow...@digitalkingdom.org>
wrote:
> On Thu, Jan 15, 2009 at 02:10:57PM -0800, windowsrefund wrote:
> > Bryan,
> > Thanks so much for the pointer. I think I'm on the right track now but
> > could use a hand understanding why I'm getting this error when
> > attempting to write out to disk
Not that I'm aware of. You can use last() instead of a number (and,
in fact, you have to in this case; see my long mail), but for
appending the current standard is to use a very large number (like
10000). A bit weak, I know. Feel free to complain to the Augeas
mailing list.
On Thu, Jan 15, 2009 at 02:43:02PM -0800, windowsrefund wrote:
> Now that I'm more comfortable working with the schemas of each
> supported file, I'm seeing a potential issue when it comes to
> appending. Is there a way to determine the length of each object
> so I can avoid doing things like /files/etc/exports/dir[100] ?
> Best,
> Adam
> On Jan 15, 5:22 pm, Robin Lee Powell <rlpow...@digitalkingdom.org>
> wrote:
> > On Thu, Jan 15, 2009 at 02:10:57PM -0800, windowsrefund wrote:
> > > Bryan,
> > > Thanks so much for the pointer. I think I'm on the right track now but
> > > could use a hand understanding why I'm getting this error when
> > > attempting to write out to disk
Robin Lee Powell wrote: > On Thu, Jan 15, 2009 at 11:43:50PM +0100, Peter Meier wrote: >>> Doing this in Puppet is left as an exercise for the reader. >>> I'll go see about getting better docs in Augeas for this thing. >> would be nice if somebody could document her/his experiences with >> puppet and augeas on the wiki.
> If you can find a good place to put it, I'll see about writing > something up.
On Thu, 2009-01-15 at 14:10 -0800, windowsrefund wrote: > Bryan,
> Thanks so much for the pointer. I think I'm on the right track now but > could use a hand understanding why I'm getting this error when > attempting to write out to disk
What version of Augeas are you using ? Or did you edit the output ? augtool shouldn't print the error on the console, but stick it into /augeas/files/etc/exports/error; with augeas-0.3.5 and the example above, I get
augtool> rm /files/etc/exports/* rm : /files/etc/exports/* 18 augtool> set /files/etc/exports/dir /foo augtool> set /files/etc/exports/dir/client foo.example.com augtool> set /files/etc/exports/dir/option rw augtool> save Saving failed augtool> print /augeas/files/etc/exports/error /augeas/files/etc/exports/error = "put_failed" /augeas/files/etc/exports/error/path = "/files/etc/exports/dir" /augeas/files/etc/exports/error/message = "Failed to match /(())(())(())(client/)(((())(client/))*)(())/ with client/option/"
which (minus all the redundant () in the regexp) is almost readable ;)
On Thu, 2009-01-15 at 14:21 -0800, Robin Lee Powell wrote: > Yes, you have to actually set something that matches the structure > of the file in question, which varies by file. Most of the lenses > have shit for documentation, unfortunately, and this one is no > exception.
I'd argue there's even less docs than that ;)
> It took several tries to get this; it turns out the augeas lens for > this file is a bit pickier than it should be: it won't accept:
> /pub (ro,insecure,all_squash)
I followed the man page when writing the exports lens, which doesn't mention anything about omitting the client all together - is that really legal ? On what systems ?
> Doing this in Puppet is left as an exercise for the reader. I'll > go see about getting better docs in Augeas for this thing.
Yes, better docs are sorely needed; if you send patches (or even just text that you want to see in there), I'll add it to the autogenerated lens docs[1]
Another way to document at least the expected tree structure would be to generate that from the lens definition, and spit out something like Relax-NG .. but would anybody read that ?
On Thu, 2009-01-15 at 14:43 -0800, windowsrefund wrote: > Now that I'm more comfortable working with the schemas of each > supported file, I'm seeing a potential issue when it comes to > appending. Is there a way to determine the length of each object so I > can avoid doing things like /files/etc/exports/dir[100] ?
The cleanest way to append is
augtool> ins dir after /files/etc/exports/dir[last()] augtool> set /files/etc/exports/dir[last()]/client foo
It seems though that insert for the Augeas type won't work (there's no way to specify the new label or whether to insert before or after an existing node)
On Thu, Jan 15, 2009 at 11:38:39PM +0000, David Lutterkort wrote:
> On Thu, 2009-01-15 at 14:21 -0800, Robin Lee Powell wrote: > > It took several tries to get this; it turns out the augeas lens for > > this file is a bit pickier than it should be: it won't accept:
> > /pub (ro,insecure,all_squash)
> I followed the man page when writing the exports lens, which > doesn't mention anything about omitting the client all together - > is that really legal ? On what systems ?
On Fri, Jan 16, 2009 at 09:55:42AM +1100, James Turnbull wrote: > Robin Lee Powell wrote: > > On Thu, Jan 15, 2009 at 11:43:50PM +0100, Peter Meier wrote: > >>> Doing this in Puppet is left as an exercise for the reader. > >>> I'll go see about getting better docs in Augeas for this > >>> thing. > >> would be nice if somebody could document her/his experiences > >> with puppet and augeas on the wiki.
> > If you can find a good place to put it, I'll see about writing > > something up.