Puppet2から5に移行しています。スコープが少し異なっているようです。以前は、hiera_hashとデフォルトのハッシュでcreate_resources()
を使用すると、呼び出し元のスクリプト内の変数をERBで使用できましたが、現在は使用できないようです。たとえば、呼び出しスクリプトでcreate_resources()
の直前に_$a = 'hello world'
_を設定し、ERB内で_$a
_を参照して、_hello world
_に戻ることができます。今はそうではないようです。
したがって、アイデアはcreate_resources()
を破棄し、_hiera_hash
_でPuppet5のeach
関数を使用して、ループ内に新しいファイルを作成することです。ただし、デフォルト値を各ハッシュ要素にマージするのに問題があります。変数を再宣言できないので、ループ内でマージを実行できないようです。
これが私がやろうとしていることの例です:
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
_ 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