augeas error

72 views
Skip to first unread message

windowsrefund

unread,
Jan 15, 2009, 3:53:58 PM1/15/09
to Puppet Users
augeas { "$name":
context => "/files",
changes => "set /etc/exports/foo bar",
require => File["/etc/exports"],
}


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

Bryan Kearney

unread,
Jan 15, 2009, 4:27:20 PM1/15/09
to puppet...@googlegroups.com
windowsrefund wrote:
> augeas { "$name":
> context => "/files",
> changes => "set /etc/exports/foo bar",
> require => File["/etc/exports"],
> }
>
>

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.

-- bk

windowsrefund

unread,
Jan 15, 2009, 5:10:57 PM1/15/09
to Puppet Users
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

augtool> print /files/etc/exports/
/files/etc/exports
/files/etc/exports/dir = "/foo"
/files/etc/exports/dir/client = "foo.example.com"
/files/etc/exports/dir/option = "rw"
augtool> save
/usr/share/augeas/lenses/exports.aug:17.16-19.58:Short split for
concat
Saving failed

Robin Lee Powell

unread,
Jan 15, 2009, 5:21:37 PM1/15/09
to puppet...@googlegroups.com

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.

-Robin

--
They say: "The first AIs will be built by the military as weapons."
And I'm thinking: "Does it even occur to you to try for something
other than the default outcome?" -- http://shorl.com/tydruhedufogre
http://www.digitalkingdom.org/~rlpowell/ *** http://www.lojban.org/

Robin Lee Powell

unread,
Jan 15, 2009, 5:22:37 PM1/15/09
to puppet...@googlegroups.com
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
>
> augtool> print /files/etc/exports/
> /files/etc/exports
> /files/etc/exports/dir = "/foo"
> /files/etc/exports/dir/client = "foo.example.com"
> /files/etc/exports/dir/option = "rw"
> augtool> save
> /usr/share/augeas/lenses/exports.aug:17.16-19.58:Short split for
> concat
> Saving failed

Because this:

> /files/etc/exports/dir/option = "rw"

is wrong. You want:

/files/etc/exports/dir/client/option = "rw"

But also, see my other mail for how to not destroy your old lines
when you add new ones.

windowsrefund

unread,
Jan 15, 2009, 5:33:06 PM1/15/09
to Puppet Users
Thanks so much :)


On Jan 15, 5:22 pm, Robin Lee Powell <rlpow...@digitalkingdom.org>
wrote:

windowsrefund

unread,
Jan 15, 2009, 5:43:02 PM1/15/09
to Puppet Users
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:

Peter Meier

unread,
Jan 15, 2009, 5:43:50 PM1/15/09
to puppet...@googlegroups.com
Hi

> 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.

cheers pete

Robin Lee Powell

unread,
Jan 15, 2009, 5:45:44 PM1/15/09
to puppet...@googlegroups.com
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.

-Robin

Robin Lee Powell

unread,
Jan 15, 2009, 5:48:04 PM1/15/09
to puppet...@googlegroups.com

If you can find a good place to put it, I'll see about writing
something up.

James Turnbull

unread,
Jan 15, 2009, 5:55:42 PM1/15/09
to puppet...@googlegroups.com
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.

http://reductivelabs.com/trac/puppet/wiki/PuppetAugeas

Regards

James Turnbull

--
Author of:
* Pulling Strings with Puppet
(http://www.amazon.com/gp/product/1590599780/)
* Pro Nagios 2.0
(http://www.amazon.com/gp/product/1590596099/)
* Hardening Linux
(http://www.amazon.com/gp/product/1590594444/)

signature.asc

David Lutterkort

unread,
Jan 15, 2009, 6:29:00 PM1/15/09
to puppet...@googlegroups.com
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
>
> augtool> print /files/etc/exports/
> /files/etc/exports
> /files/etc/exports/dir = "/foo"
> /files/etc/exports/dir/client = "foo.example.com"
> /files/etc/exports/dir/option = "rw"
> augtool> save
> /usr/share/augeas/lenses/exports.aug:17.16-19.58:Short split for
> concat
> Saving failed

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 ;)

David


David Lutterkort

unread,
Jan 15, 2009, 6:38:39 PM1/15/09
to puppet...@googlegroups.com
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 ?

David

[1] http://augeas.net/docs/references/lenses/


David Lutterkort

unread,
Jan 15, 2009, 6:49:49 PM1/15/09
to puppet...@googlegroups.com, Bryan Kearney
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)

David


Robin Lee Powell

unread,
Jan 17, 2009, 3:18:27 AM1/17/09
to puppet...@googlegroups.com
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 ?

http://linux.die.net/man/5/exports -- last example.

AFAICT, all Linux.

Robin Lee Powell

unread,
Jan 18, 2009, 1:05:37 AM1/18/09
to puppet...@googlegroups.com
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.
>
> http://reductivelabs.com/trac/puppet/wiki/PuppetAugeas

Done. It's not great, but it's a start.

Reply all
Reply to author
Forward
0 new messages