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

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

Таким образом, идея состоит в том, чтобы отказаться от 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 .по умолчанию.yaml

my::defaults
  mname: 'M.'

Прежде, чем я извлеку оба из них как hiera_hash s и сделаю 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
  }
}

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

3
задан 17 February 2019 в 04:10
1 ответ

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

См .: https://puppet.com/docs/puppet/5.5/lang_template_erb.html#accessing-puppet-variables

1
ответ дан 3 December 2019 в 07:21

Теги

Похожие вопросы