David Lutterkort <[email protected]> writes: > On Mon, 2009-06-15 at 12:50 +0200, Kjetil Torgrim Homme wrote: >> I was trying to use defnode as a simple way to declare state >> idempotently, and defnode seems to be the ticket. let's say I wanted >> to add a new entry in /etc/services >> >> defnode svc '/files/etc/services/service-name[. = "foo" and protocol = >> "tcp"]' foo >> set $svc/port 4711 >> set $svc/protocol tcp >> >> this works fine for known services, but when adding a new entry, it >> fails. > > The problem is that 'defnode var path value' is roughly equivalent to > > if !exists(path) > set path value > end > defvar var path > > The path you use will only find the service-name node for 'foo' if it > has a protocol child set to 'tcp' - but the set that defnode does, does > not create a protocol child. With that, you wind up with a defvar with a > path that matches no nodes, and var contains the empty node set.
exactly. the bug is that it doesn't add the new node to the node set. after all, it's not a dynamic evaluation, so adding it statically should work. I dare say it's expected and wanted behaviour. an orphaned node is not very useful. augtool> print /files/etc/services/*[last()] /files/etc/services/service-name[10313] = "foo" augtool> print $svc augtool> set /files/etc/services/service-name[10313]/port 4711 augtool> set /files/etc/services/service-name[10313]/protocol tcp augtool> print $svc augtool> > Short of support for a full-blown 'if' (and the ensuing need for > boolean expressions), I don't see how this could be implemented in > augtool. I do! :) although I couldn't quite get my head around the C code at first attempt... > Of course, if you use Augeas from your favorite programming language, > you can easily achieve what you want. I do not want "if" statements, "if" statements are fragile and you can easily get uncovered cases etc. I want a declarative language, and defnode + XPath is *almost* there for many uses. -- Kjetil T. Homme Redpill Linpro AS - Changing the game _______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
