I am using augeas to manipulate XML on some machines. Whereas creating new nodes and also setting a bunch of attributes worked like a charm I'm biting my nails of adding a simple attribute to an XML file. XML looks like the following:
<?xml version="1.0"?>
<Context>
<WatchedResource></WatchedResource>
</Context>
I'm no just trying to add allowLinking="true"
to the Context root node via
set /files/path/to/my/file.xml/Context/#attribute/allowLinking "true"
Which is unfortunately always failing with
/error = "put_failed"
/error/path = "/files/path/to/my/file.xml/Context"
/error/lens = "/usr/share/augeas/lenses/dist/xml.aug:134.10-.73:"
/error/message = "Failed to match \n { /#attribute/ }?({ /#text/ …
I'm using puppet opensource 3.4.2 with augeas 1.0.0.
Any suggestion what I'm doing wrong?
Order matters in the Augeas tree. In that case, XML node attributes need to be set before the #text
node and the child nodes.
So what you need is:
ins #attribute before /files/test.xml/Context/#text
set /files/test.xml/Context/#attribute/allowLinking true
Note that this change is not idempotent, since insert
is not an idempotent operation.
On Puppet, you could use onlyif
to make this idempotent.
来源:https://stackoverflow.com/questions/21289801/issues-adding-attribute-to-xml-root-node-via-augeas