Мы переходим с 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
}
}
Но поскольку переменные неизменяемы, я не могу переназначать значения. Есть ли способ обойти это?
Переменные по-прежнему доступны для шаблона. Меня беспокоит, что там происходит что-то еще. Возможно, вы не захотите изменять использование create_resources ()
, если решите это.
См .: https://puppet.com/docs/puppet/5.5/lang_template_erb.html#accessing-puppet-variables