我使用的是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/vii-osc4从/var/lib/hiera/defaults.yaml我一直在使用的文件,如下所示:
# cp /var/lib/hiera/defaults.yaml /var/lib/hiera/vii-osc4.yaml
这个文件有一堆类参数值。举个例子文件中的行:
controller_vip_name: vii-osc4.example.com
然后我改变了我的等级。
[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%PuppetLabshieravar 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
但是当我在我的节点vii-osc4-mgmt-001上运行puppet agent -t --noop
时,我没有看到变化我期望看到的如果我在/var/lib/hiera/defaults.然后是Yaml在我的节点上运行puppet agent -t --noop
,我确实看到了预期的变化。我哪里做错了?
更新:使用/etc/facter/facts.d
方法设置自定义事实。
我研究了使用/etc/facter/facts.d
我想做什么。我要做的是设置一个自定义的事实"pod_prefix"。我想在我的分层中使用这个事实。我喜欢这样…
---
: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%PuppetLabshieravar 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
获得它们的类参数。我不知道如何在我的puppet master上创建包含以下内容的文件/etc/facter/facts.d/pod_prefix.txt
…
# cat pod_prefix.txt
pod_prefix=vii-osc4
…也许能解决我的问题。我想我一定是误会了什么。有人能帮忙吗?
2 .更新
/etc/factor/facts.d/pod_prefix.txt文件放在我的节点上。我认为我最大的问题是仅仅执行systemctl restart pe-httpd
是不够的,直到我完全重新启动我的puppet master,事情才开始工作。我需要去看看文档,找出重启"puppet master"的正确方法。
通过环境变量管理自定义事实的方法非常脆弱。在这种情况下,我怀疑它不起作用,因为您通过/etc/profile.d
更改了登录shell 的环境。但是,系统服务不能在这样的shell中运行。
一种干净的方法是在/etc/facter/facts.d
中定义事实值。