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
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/
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.
> 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
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/)
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
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/
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
http://linux.die.net/man/5/exports -- last example.
AFAICT, all Linux.
Done. It's not great, but it's a start.