我决定从单个默认 nodes.pp 切换到 Hiera 后端来管理 Puppet 中的节点并将模块分配给节点。
我们使用这样的主机名:
nyc-apache-prod-01
was-mysql-tst-01
这是我们的 hiera.yaml 和 hierdata-directory 结构:
# cat hiera.yaml
:backends:
- yaml
:hierarchy:
- environment/tst/%{::hostname}
- environment/tst
- %{::osfamily}
- common
:logger: console
:yaml:
:datadir: '/etc/puppet/hieradata'
# find hieradata
hieradata
hieradata/RedHat.yaml
hieradata/OracleRAC.yaml
hieradata/common.yaml
hieradata/environment
hieradata/environment/dev
hieradata/environment/tst.yaml
hieradata/environment/acc
hieradata/environment/dev.yaml
hieradata/environment/acc.yaml
hieradata/environment/tst
hieradata/environment/tst/nyc-ks-tst-02.yaml
hieradata/environment/tst/nyc-ks-tst-01.yaml
hieradata/environment/prd
hieradata/environment/prd.yaml
问题是,需要在每个节点的 /etc/puppet/puppet.conf 中将环境设置为 environment=tst。我可以编写一个模块来根据服务器的主机名执行此操作,但我不确定这是在单独的环境中组织服务器的最佳方式。
- 为不同的服务器提供不同的 Puppet 模块的最佳方法是什么?
- 向服务器组添加特定模块的最佳方法是什么?
- 例如,我有 10 个 Apache 网络服务器...我希望拥有所有这些 apache 节点,无论它们是否是 tst/acc/dev/prd,都拥有 apache 模块。
我想避免的是在每个单独的服务器的类列表中添加一个类列表。这就是我们首先从单个 node.pp 迁移到 Hiera 后端的原因。
答案1
您可能想要为服务器分配一个角色,并使用该角色为它们提供软件包。
例如,在 /etc/facter/facts.d 中,您放置了一个设置角色事实的文件。然后,您可以将其用作 Hiera 层次结构级别,以将模块分配给服务器。
我自己从未尝试过,但我认为这可行。:)