I'm passing a hash to a define like so:
nodes.pp
net::addr { 'routes':
ipr => {
ipr1 => {
address => '192.168.34.38',
netmask => '255.255.255.0',
gateway => '192.168.34.1',
dev => 'eth3',
},
ipr22 => {
address => '10.1.5.33',
netmask => '255.255.255.0',
gateway => '10.1.5.1',
dev => 'eth2',
},
}
}
addr.pp
define net::addr (
$routes={},
)
{
if ($num != "") {
$iname=${routes[route${num}][dev]}
$num+1
}
else{
$num=0;
}
}
What I want to do is define a variable called iname and set it to the dev under each hash element, so on iteration 1 I want dev to be set to eth3, which corresponds to the "ipr1" element, on the next iteration I was iname set to eth2 and so on.
I'm struggling to do this as everytime my num variable keeps getting undefined and then ends up being set to 0, can someone please suggest a way round this or a more intelligent solution?
Best Answer
As of Puppet version 3.3, the Puppet DSL language does not support iteration.
You should check out the
create_resources()
function from Puppet Labs:https://puppet.com/docs/puppet/latest/function.html#createresources
Example
However, as of Puppet 4.0, the Future Parser now supports iteration with Lambdas: