为什么数据不是来自我的 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
中定义事实值。
我正在使用 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
中定义事实值。