web-dev-qa-db-ja.com

Puppet:create_resources()をハッシュ反復に置き換える

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
  }
}
_

しかし、変数は不変であるため、値を再割り当てすることはできません。これを回避する方法はありますか?

3
bdetweiler

テンプレートから変数に引き続きアクセスできます。私はそこで何か他のことが起こっているのではないかと心配しています。それに対処する場合は、create_resources()の使用法を変更したくない場合があります。

参照: https://puppet.com/docs/puppet/5.5/lang_template_erb.html#accessing-puppet-variables

1
Aaron Copley