对于hiera 5更深的merge_behaviour不起作用,但是在hiera 3中起作用

时间:2018-12-25 14:49:09

标签: puppet hiera

深度合并无法在hiera 5中使用。

我在主要的hiera.yaml版本3中使用merge_behavior: deeper,因此它将在找到它的位置合并所有hiera数据,但是现在我已升级到版本5,发现合并行为不起作用?

:merge_behavior: deeper

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

根据官方的伪造documentation for upgrading from Hiera 3 to Hiera 5

  

这些在版本5中没有同等的支持。如果您想   了解有关Hiera 5如何支持深度哈希合并的信息,请参见Merging data from multiple sources

我最终在人偶文件中使用lookup()函数代替了hiera_hash()函数。这样的事情。

来自

hiera_hash( 'firewall::firewalld::zones', {} )

lookup( { 'name' => 'firewall::firewalld::zones',
                                'merge' => { 
                                  'strategy' => 'deep',
                                  'knockout_prefix' => '--',
                                }, 
                                'default_value' => {} 
                      })

答案 1 :(得分:0)

文档Hiera: Merging data from multiple sources说:

  

注意:Hiera 5的深度合并等同于Hiera 3的“深度”合并。

您可以在某些YAML配置中定义查找规则:

lookup_options:
  "^firewall::(.*)":
    merge:
      strategy: deep

使用CLI中的puppet lookup --explain needle可能有助于理解正在发生的事情:

$ puppet lookup --explain firewall::firewalld::zones
Searching for "lookup_options"
  Global Data Provider (hiera configuration version 5)
    Using configuration "/etc/puppetlabs/puppet/hiera.yaml"
    Merge strategy hash
      Hierarchy entry "Defaults"
        Path "/etc/puppetlabs/puppet/hieradata/default.yaml"
          Original path: "default.yaml"
          Found key: "lookup_options" value: {
            "^firewall::(.*)" => {
              "merge" => {
                "strategy" => "deep"
              }
            }
          }
      Merged result: {
        "^firewall::(.*)" => {
          "merge" => {
            "strategy" => "deep"
          }
        }
      }
  ...

您可以将hiera_hash( 'firewall::firewalld::zones', {} )替换为:

lookup('firewall::firewalld::zones', Hash, {'strategy' => 'deep'}, {})

或使用预定义的lookup_options,您将得到简单的代码,例如:

lookup('firewall::firewalld::zones')