我传递一个哈希来定义像这样:
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; } }
我想要做的是定义一个名为iname的variables,并将其设置到每个散列元素下面的dev,所以在迭代1中,我希望在下一次迭代时将dev设置为对应于“ipr1”元素的eth3 iname设置为eth2等。
我努力做到这一点,因为每次我的numvariables不断变得不明确,然后结果被设置为0,有人可以请build议一个方法,或更聪明的解决scheme吗?
从Puppet版本3.3开始,Puppet DSL语言不支持迭代。
你应该从Puppet Labs检查create_resources()函数:
http://docs.puppetlabs.com/references/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}") }