Мы переходим с 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