Hi Martin,

Have you considered using an Augeas provider here, using the Xml lens?


Cheers,

Raphaël



On Wednesday, February 25, 2015 at 6:18:02 PM UTC+1, Martin Alfke wrote:
>
> Hi, 
>
> I am stuck at a puppet provider where I need to read data from xml. 
>
> 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 (Note: I was never good at coding an will never be): 
>
> 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 
>
>
> But this code return: 
> :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"}]], 
>
> What would be proper code to build the hash as expected? 
>
> Thanks, 
>
> Martin 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/81914d3c-aeab-4991-80ca-4a4544e2f3cb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to