如何使用 Hiera 将模块分配给 Puppet 中的节点?

如何使用 Hiera 将模块分配给 Puppet 中的节点?

我决定从单个默认 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 层次结构级别,以将模块分配给服务器。

我自己从未尝试过,但我认为这可行。:)

相关内容