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

How come data is not coming from my hiera yaml file?

我正在使用 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

这个文件有一堆 class 参数值。例如有这个 文件中的行:

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 中获取它们的 class 参数并托管 pod_prefix设置为 ix-xyz 将从 /var/lib/hiera/ix-xyz.yaml 获得它们的 class 参数。我看不出如何在我的人偶大师上创建包含类似内容的文件 /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" 的正确方法是什么。

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

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