Skip to content

Instantly share code, notes, and snippets.

@tuxmea
Last active August 29, 2015 14:16
Show Gist options
  • Select an option

  • Save tuxmea/3f32a15c7febbc699a8f to your computer and use it in GitHub Desktop.

Select an option

Save tuxmea/3f32a15c7febbc699a8f to your computer and use it in GitHub Desktop.
XML parsing in a puppet provider
Data which needs to get parsed:
<AR>
<AR_ID><![CDATA[8]]></AR_ID>
<IP><![CDATA[172.16.100.208]]></IP>
<MAC><![CDATA[02:00:ac:10:64:d0]]></MAC>
<SIZE><![CDATA[1]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
<USED_LEASES>0</USED_LEASES>
<LEASES/>
</AR>
<AR>
<AR_ID><![CDATA[9]]></AR_ID>
<IP><![CDATA[172.16.100.209]]></IP>
<MAC><![CDATA[02:00:ac:10:64:d1]]></MAC>
<SIZE><![CDATA[1]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
<USED_LEASES>0</USED_LEASES>
<LEASES/>
</AR>
Expected result:
addressrange => {
'1' => {
'ip' => ‘172.16.100.208’,
'mac' => ’02:00:ac:10:64:d0’
},
'2' => {
'ip' => ‘172.16.100.209’,
'mac' => ’02:00:ac:10:64:d1’
}
}
Actual code:
vnets.collect do |vnet|
new(
:addressrange => Hash[vnet.xpath('./AR_POOL/AR/AR_ID').collect { |ar| [ar.text, ar.xpath('..').collect { |singlear| singlear.xpath('./*').collect { |arvalue| {arvalue.name, arvalue.text} } } ] } ]
)
end
Returns:
=> [#<Puppet::Type::Onevnet::ProviderCli:0x7f17a8fb17d0
@property_hash=
{:addressrange=>
{"9"=>
[[{"AR_ID"=>"9"},
{"IP"=>"172.16.100.209"},
{"MAC"=>"02:00:ac:10:64:d1"},
{"SIZE"=>"1"},
{"TYPE"=>"IP4"}]],
"8"=>
[[{"AR_ID"=>"8"},
{"IP"=>"172.16.100.208"},
{"MAC"=>"02:00:ac:10:64:d0"},
{"SIZE"=>"1"},
{"TYPE"=>"IP4"}]],
"7"=>
[[{"AR_ID"=>"7"},
{"IP"=>"172.16.100.207"},
{"MAC"=>"02:00:ac:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment