我想为所有服务器创建默认用户,但除了此默认用途之外,仅针对我想要创建的特定服务器以及特定服务器的默认用户。
我的问题是,当我运行puppet agent -t时,puppet只为第一场比赛创建用户。如果服务器匹配in-node /%{:: fqdn}只创建特定用户而不是默认用户。
/etc/puppet/hiera.yaml中的我有以下内容:
<myelementtag id="myid" data-defaultvalue="defaultvalue" />
如何设置hiera以便始终运行公共文件?
答案 0 :(得分:1)
请使用hiera hash merge。在hiera.yaml
中定义合并行为,可能的值为native, deep, deeper
,例如:
:merge_behavior: deeper
而不仅仅是使用hiera。根据{{3}}
在更深层次的哈希合并中,Hiera以递归方式合并每个源哈希中的键和值。
此处您在documentation:中有合并行为。
<强>更新强> 我设置了以下简单示例:
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 apply test_hash.pp
结果:
注意:正常:{“abc1”=&gt; {“value”=&gt;“apps”},“abc2”=&gt; {“value”=&gt;“apps”}}
注意:hiera:{“abc1”=&gt; {“value”=&gt;“apps”},“abc3”=&gt; {“value”=&gt;“comm”},“abc2”=&gt; { “值”=&gt; “中的应用”}}}
<强> UPDATE2:强> 您还可以考虑使用stdlib中的examples函数。但是可能要使用它,你将不得不改变你的架构,例如:
通常定义common
值,在node/%{::fqdn}
中定义节点特定值,然后在示例中使用它:
$common_hash = hiera('something_from_common')
$node_hash = hiera('something_from_fqdn')
$merged_hash = merge($node_hash, $common_hash)
(是的,它有点难看:))