Назад | Перейти на главную страницу

Прокручивать хеш в марионеточном определении

Я передаю хэш такому определению:

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}")
}