我将哈希传递给定义,如下所示:
节点.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',
},
}
}
地址.pp
define net::addr (
$routes={},
)
{
if ($num != "") {
$iname=${routes[route${num}][dev]}
$num+1
}
else{
$num=0;
}
}
我要做的是定义一个名为 iname 的变量并将其设置为每个哈希元素下的 dev,因此在迭代 1 中我希望将 dev 设置为 eth3,它对应于“ipr1”元素,在下一次迭代中我将 iname 设置为 eth2,依此类推。
我正在努力做到这一点,因为每次我的 num 变量都变得未定义,然后最终被设置为 0,有人可以建议一种解决这个问题的方法或更智能的解决方案吗?
答案1
从 Puppet 3.3 版开始,Puppet DSL 语言不再支持迭代。
您应该查看create_resources()
Puppet Labs 的功能:
https://puppet.com/docs/puppet/latest/function.html#createresources
例子
# A hash of user resources:
$myusers = {
'nick' => { uid => '1330',
group => allstaff,
groups => ['developers', 'operations', 'release'], }
'dan' => { uid => '1308',
group => allstaff,
groups => ['developers', 'prosvc', 'release'], }
}
create_resources(user, $myusers)
但是,从 Puppet 4.0 开始,Future Parser 现在支持使用 Lambdas 进行迭代:
$data = ['a','b','c']
$data.each |Integer $index, String $value| {
notice("${index} = ${value}")
}