Tuesday 3 September 2013

Creating XML with "set" in Puppet Augeas

Creating XML with "set" in Puppet Augeas

I am using the Augeas tool for Puppet 3.2 and I am trying to create an XML
file. I want to be able to add multiple fields with the same name into my
XML doc. For instance, I want to separate node2/location2 from
node1/location1 by placing it in its own "node" field. This is my code:
augeas { "update template":
lens => "Xml.lns",
require => File["${buildpath}/tempfile.xml"],
incl => "${buildpath}/tempfile.xml",
changes => [
"set
member/acceptors[#attribute]/node[#attribute]/nodeIdentity[#attribute]/#text
node2",
"set member/acceptors/node/nodeLocation[#attribute]/#text
location2",
"set member/acceptors/node/nodeIdentity[#attribute]/#text node1",
"set member/acceptors/node/nodeLocation[#attribute]/#text
location1"
],
}
This is the XML output that I get:
<member>
<acceptors>
<node>
<nodeIdentity>node2</nodeIdentity>
<nodeLocation>location2</nodeLocation>
<nodeIdentity>node1</nodeIdentity>
<nodeLocation>location1</nodeLocation>
</node>
</acceptors>
</member>
This is the output I want:
<member>
<acceptors>
<node>
<nodeIdentity>node2</nodeIdentity>
<nodeLocation>location2</nodeLocation>
</node>
<node>
<nodeIdentity>node1</nodeIdentity>
<nodeLocation>location1</nodeLocation>
</node>
</acceptors>
</member>
I have tried adding [#attribute] to the node1 line like the following:
"set member/acceptors/node[#attribute]/nodeIdentity[#attribute]/#text
node1",
But "node1" doesn't get outputted. Any suggestions?

No comments:

Post a Comment