Hiera只运行第一场比赛

时间:2015-07-15 15:38:23

标签: puppet hiera

我想为所有服务器创建默认用户,但除了此默认用途之外,仅针对我想要创建的特定服务器以及特定服务器的默认用户。

我的问题是,当我运行puppet agent -t时,puppet只为第一场比赛创建用户。如果服务器匹配in-node /%{:: fqdn}只创建特定用户而不是默认用户。

/etc/puppet/hiera.yaml中的

我有以下内容:

<myelementtag id="myid" data-defaultvalue="defaultvalue" /> 

如何设置hiera以便始终运行公共文件?

1 个答案:

答案 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)

(是的,它有点难看:))