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

Puppet: замена create_resources () хеш-итерацией

Мы переходим с Puppet 2 на 5. Кажется, область видимости немного изменилась. Раньше при использовании create_resources() с hiera_hash и хешем по умолчанию переменные из вызывающего скрипта были доступны ERB, но теперь, похоже, нет. Например, я мог бы установить $a = 'hello world' в вызывающем скрипте прямо перед create_resources(), а затем в моем ERB я мог бы просто сослаться на $a и вернуться hello world. Похоже, что сейчас это не так.

Итак, идея - отказаться от create_resources() и используйте Puppet 5 each функция на hiera_hash просто создание нового файла в цикле. Однако у меня возникли проблемы с объединением значений по умолчанию для каждого элемента хэша. Я не могу повторно объявлять переменные, поэтому, похоже, я не могу выполнить слияние внутри цикла.

Вот пример того, что я пытаюсь сделать:

Data.file1.yaml

my::data:
  element_a:
    fname: 'Brian'
    lname: 'Detweiler'
  element_b:
    fname: 'Joe'
    lname: 'Schmoe'

Data.default.yaml

my::defaults
  mname: 'M.'

Прежде, чем я бы вытащил их обоих как hiera_hashс и делать create_resources('my::template::script', $names, $names_default) и я получу ожидаемые слияния:

'element_a' => { fname => 'Brian', lname => 'Detweiler', mname => 'M.'},
'element_b' => { fname => 'Joe', lname => 'Schmoe', mname => 'M.'}

Теперь я хочу сделать

$names.each | String $key, Hash $value | {
  $merged_hash_val = $names_default + $value
  file {
    # ... create file with $merged_hash_val in here
  }
}

Но поскольку переменные неизменяемы, я не могу переназначать значения. Есть ли способ обойти это?

Переменные по-прежнему доступны для шаблона. Меня беспокоит, что там происходит что-то еще. Возможно, вы не захотите менять свой create_resources() использование, если вы обратитесь к этому.

Видеть: https://puppet.com/docs/puppet/5.5/lang_template_erb.html#accessing-puppet-variables