puppet 3.8を使用しています(残念ながら、まだpuppet 4に移行できません)
hieraに次のようなハッシュがあります。
hash_data:
item1:
field1: 'some data'
array_data:
- data1
- data2
item2:
field1: 'other data'
array_data:
- data3
- data4
次のようなコードでモジュールをまとめました。
class processor {
$data = hiera_hash('hash_data', {})
create_resources(processor::hash_entry, $data)
}
define processor::hash_entry ($field1, $array_data) {
# .. do_something ..
# process array items
processor::process_array { $array_data :
datavar = 'somevalue'
}
}
define processor::process_array($element, $datavar) {
# do something
}
これは、ハッシュ内のarray_dataフィールドにすべて一意のフィールドが含まれている限り、正常に機能します。ただし、一意でないデータを次のように配置する必要がある場合:
hash_data:
item1:
field1: 'some data'
array_data:
- data1
- data2
item2:
field1: 'other data'
array_data:
- data3
- data2 ( **non-unique value **)
次に、重複するリソースをヒットします。誰かがそのハッシュを処理する方法を提案できますか?
ありがとう
問題はここから始まります。ここでprocessor::process_array
は、名前として一意でないデータが指定されています。
define processor::hash_entry ($field1, $array_data) {
processor::process_array { ${array_data}:
# ...
ときにprocessor::hash_entry
、重複/同じで2回呼び出されarray_data
、これが生成します。
Processor::Process_array[data1]
Processor::Process_array[data2]
Processor::Process_array[data3]
Processor::Process_array[data2]
私が推測するのは、あなたが報告する重複したリソースです。
これに一意のデータ、つまりprocessor::hash_entry
リソースの「item1」/「item2」名(または適切な場合はfield1)をプレフィックスとして付けると、それらは一意になります。
stdlib prefix()関数を使用して、すべてのdata *エントリの前にhash_entry名を付けます。
define processor::hash_entry ($field1, $array_data) {
$prefixed_array_data = prefix($array_data, "${title}-")
processor::process_array { ${prefixed_array_data}:
# ...
これにより、以下が生成されます。
Processor::Process_array[item1-data1]
Processor::Process_array[item1-data2]
Processor::Process_array[item2-data3]
Processor::Process_array[item2-data2]
プレフィックスなしでdata2
内部の値にアクセスする必要があるprocess_array
場合は、いつでもを分割し$title
てデータを元に戻すことができます。
define processor::process_array($element, $datavar) {
$split_title = split($title, '-')
$data = $split_title[1]
# do something
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加