簡體   English   中英

Puppet - 迭代哈希

[英]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_arraydata2值,那么您始終可以拆分$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM