[英]Puppet - iterate over hash
我們正在使用 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}:
# ...
當使用重疊/相同的array_data
調用processor::hash_entry
兩次時,這會生成:
Processor::Process_array[data1]
Processor::Process_array[data2]
Processor::Process_array[data3]
Processor::Process_array[data2]
我猜這是您報告的重復資源。
如果您使用唯一數據作為前綴,即processor::hash_entry
資源的“item1”/“item2”名稱(或processor::hash_entry
如果合適),那么它們將是唯一的。
使用stdlib prefix()函數,使用 hash_entry 名稱作為所有 data* 條目的前綴:
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]
如果您需要在沒有前綴的情況下訪問process_array
的data2
值,那么您始終可以拆分$title
以取回數據。
define processor::process_array($element, $datavar) {
$split_title = split($title, '-')
$data = $split_title[1]
# do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.