在木偶定义中循环哈希

Dan*_*Dan 6 puppet

我将散列传递给像这样的定义:

节点.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',
        },
  }
  }
Run Code Online (Sandbox Code Playgroud)

地址文件

define net::addr (
    $routes={},
)
{
    if ($num != "") {
     $iname=${routes[route${num}][dev]}
     $num+1
    }
    else{
     $num=0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是定义一个名为 iname 的变量并将其设置为每个哈希元素下的 dev,所以在迭代 1 我希望 dev 设置为 eth3,它对应于“ipr1”元素,在下一次迭代中我是iname 设置为 eth2 等等。

我正在努力做到这一点,因为每次我的 num 变量一直未定义,然后最终被设置为 0,有人可以提出解决这个问题的方法或更智能的解决方案吗?

rob*_*byt 5

从 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)
Run Code Online (Sandbox Code Playgroud)

但是,从 Puppet 4.0 开始,Future Parser 现在支持使用 Lambdas 进行迭代:

$data = ['a','b','c']

$data.each |Integer $index, String $value| {
    notice("${index} = ${value}")
}
Run Code Online (Sandbox Code Playgroud)