为什么数据不是来自我的hiera yaml文件?

时间:2015-07-20 17:04:31

标签: hiera puppet-enterprise

我正在使用Puppet Enterprise 3.7.2并在我的一个节点上创建文件:

[root@vii-osc4-mgmt-001 ~]# cat /etc/profile.d/POD_prefix.sh 
export FACTER_pod_prefix=vii-osc4

然后我重新启动了该节点并重新登录并验证了该节点 FACTER_pod_prefix得到设置,并且facter pod_prefix输出 期望值。

[root@vii-osc4-mgmt-001 ~]# env | grep FACTER_pod_prefix
FACTER_pod_prefix=vii-osc4
[root@vii-osc4-mgmt-001 ~]# facter pod_prefix
vii-osc4

在我的PE 3.7 Puppet master上,我创建了文件/var/lib/hiera/vii-osc4.yaml。 我从/var/lib/hiera/defaults.yaml创建了/var/lib/hiera/vii-osc4.yaml 我一直在使用的文件:

# cp /var/lib/hiera/defaults.yaml /var/lib/hiera/vii-osc4.yaml

此文件包含许多类参数值。例如,有这个 文件中的行:

controller_vip_name: vii-osc4.example.com 

然后我将hiera.yaml文件更改为:

[root@osc4-ppt-001 ~]# cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
  - yaml
:hierarchy:
  - "%{pod_prefix}"
  - defaults
  - "%{clientcert}"
  - "%{environment}"
  - global

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /var/lib/hiera on *nix
# - %CommonAppData%\PuppetLabs\hiera\var on Windows
# When specifying a datadir, make sure the directory exists.
  :datadir:

然后我重启了我的pe-httpd服务(RHEL7):

# systemctl restart pe-httpd

然后我对/var/lib/hiera/vii-osc4.yaml进行了一些小改动,例如 我改变了行......

controller_vip_name: vii-osc4.example.com

...到......

controller_vip_name: VII-osc4.example.com

但是当我在我的节点上运行puppet agent -t --noop时,vii-osc4-mgmt-001,我看不到变化 我希望看到。如果我在/var/lib/hiera/defaults.yaml中进行更改,然后 在我的节点上运行puppet agent -t --noop我确实看到了预期的更改。我在这里做错了什么?

更新:使用/etc/facter/facts.d方法设置自定义事实。

我考虑使用/etc/facter/facts.d来做我想做的事情。我要做的是设置一个自定义事实" pod_prefix"。我想在我的hiera.yaml中使用这个事实,就像这样......

---
:backends:
  - yaml
:hierarchy:
  - "%{::pod_prefix}"
  - defaults
  - "%{clientcert}"
  - "%{environment}"
  - global

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /var/lib/hiera on *nix
# - %CommonAppData%\PuppetLabs\hiera\var on Windows
# When specifying a datadir, make sure the directory exists.
  :datadir:

...以便将pod_prefix设置为vii-osc4的节点将从文件/var/lib/hiera/vii-osc4/yaml获取其类参数,并将pod_prefix设置为ix-xyz的主机获取来自/var/lib/hiera/ix-xyz.yaml的班级参数。我没有看到如何在我的木偶大师上创建包含类似内容的文件/etc/facter/facts.d/pod_prefix.txt ...

# cat pod_prefix.txt 
pod_prefix=vii-osc4

......可能是我问题的解决方案。我想我必须在这里误解一些东西。有人可以帮忙吗?

更新2。

/etc/facter/facts.d/pod_prefix.txt文件在我的节点上。 我认为我最大的问题是只执行systemctl restart pe-httpd是不够的,在我完全重启我的木偶大师之前,事情还没有开始。我需要去查看文档并找出重新启动" puppet master"的正确方法。

1 个答案:

答案 0 :(得分:1)

通过环境变量管理自定义事实的方法非常脆弱。在这种情况下,我怀疑它不起作用,因为您通过/etc/profile.d更改了登录shell 的环境。但是,系统服务不会在这样的shell中运行。

干净的方法是在/etc/facter/facts.d中定义您的事实价值。