Puppet - 迭代哈希

时间:2017-01-26 11:40:08

标签: arrays hash iteration puppet hiera

我们正在使用木偶3.8(遗憾的是还不能移动到木偶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 **)

然后我们点击了一个重复的资源。任何人都可以建议我如何处理该哈希值?

由于

1 个答案:

答案 0 :(得分:1)

问题从这里开始,其中setOnSMSListener()被赋予非唯一数据作为其名称:

processor::process_array

当重叠/相同define processor::hash_entry ($field1, $array_data) { processor::process_array { ${array_data}: # ... 调用processor::hash_entry两次时,会生成:

array_data

我猜是你报告的重复资源。

如果您使用唯一数据作为前缀,即Processor::Process_array[data1] Processor::Process_array[data2] Processor::Process_array[data3] Processor::Process_array[data2] 资源的“item1”/“item2”名称(或适当的field1),那么它们将是唯一的。

使用stdlib prefix()函数,在所有数据*条目前加上hash_entry名称:

processor::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值,则可以始终split process_array来取回数据。

$title