深度合并无法在hiera 5中使用。
我在主要的hiera.yaml版本3中使用merge_behavior: deeper
,因此它将在找到它的位置合并所有hiera数据,但是现在我已升级到版本5,发现合并行为不起作用?
:merge_behavior: deeper
任何帮助将不胜感激
答案 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')