请使用 hiera hash merge。在 中定义合并行为hiera.yaml
,可能的值为native, deep, deeper
例如:
:merge_behavior: deeper
而不仅仅是使用 hiera。根据文档:
在更深层次的哈希合并中,Hiera 递归地合并每个源哈希中的键和值。
在这里,您在示例中有合并行为。
更新:
我设置了以下简单示例:
hiera.yaml:
:hierarchy:
- apps
- common
:merge_behavior: deeper
apps.yaml:
test_hash:
abc1:
value: apps
abc2:
value: apps
common.yaml:
test_hash:
abc1:
value: comm
abc3:
value: comm
test_hash.pp
class test_hash
{
$normal_hash = hiera('test_hash')
$hiera_hash = hiera_hash('test_hash')
notify{ " normal: ${normal_hash}":}
notify{ " hiera : ${hiera_hash}":}
}
include test_hash
接下来调用 puppet scriptpuppet apply test_hash.pp
结果:
注意:正常:{"abc1"=>{"value"=>"apps"}, "abc2"=>{"value"=>"apps"}}
注意: hiera : {"abc1"=>{"value"=>"apps"}, "abc3"=>{"value"=>"comm"}, "abc2"=>{"value"=>"apps "}}}
UPDATE2:
您还可以考虑使用 stdlib 中的合并功能。但可能要使用它,你将不得不改变你的架构,例如:
在通用定义common
值中,在node/%{::fqdn}
定义节点特定值中,然后将其用作示例:
$common_hash = hiera('something_from_common')
$node_hash = hiera('something_from_fqdn')
$merged_hash = merge($node_hash, $common_hash)
(是的,它有点难看:))