Я передаю хэш такому определению:
node.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;
}
}
Что я хочу сделать, так это определить переменную с именем iname и установить ее для dev под каждым элементом хэша, поэтому на итерации 1 я хочу, чтобы dev было установлено значение eth3, что соответствует элементу «ipr1», на следующей итерации я был iname установлен на eth2 и так далее.
Я изо всех сил пытаюсь сделать это, поскольку каждый раз, когда моя переменная num продолжает становиться неопределенной, а затем становится равной 0, может ли кто-нибудь предложить способ обойти это или более разумное решение?
Начиная с версии 3.3 Puppet, язык 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 теперь поддерживает итерацию с лямбдами:
$data = ['a','b','c']
$data.each |Integer $index, String $value| {
notice("${index} = ${value}")
}