0

我想为所有服务器创建一个默认用户,但除了这个默认用户之外,除了默认用户之外,我只想为特定的服务器创建一个特定的用户。

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

在 /etc/puppet/hiera.yaml 我有以下内容:

:backends:
  - yaml
:yaml:
  :datadir: "/etc/puppet/hieradata"

:hierarchy:
 - node/%{::fqdn}
 - common

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

4

1 回答 1

1

请使用 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)

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

于 2015-07-15T21:57:39.327 回答