puppet 中的环境特定配置

puppet 中的环境特定配置

我有一个自定义的 puppet 模块用于设置 Apache Web 服务器,我使用模板来复制配置。我们有不同的环境,如生产、质量保证、集成测试。

每个环境都有一个或多个服务器。模板使用基于这些环境的变量,这确保在所有环境中使用相同的模板文件,而不是使用不同的环境指定文件

到目前为止,我知道我们可以在 heira 中使用 {environment}.yaml 类型的文件,但我不喜欢这样做,因为我不想为环境维护两组文件,如 production.yaml 和 qa.yaml

实现这一场景的最佳实践是什么?

  1. 我的观点是我们在 /etc/puppet/manifest/site.pp 中分配主机的环境
  2. 我们应该在哪里维护特定于环境的变量(例如 domain=mysite.qa.example.com)。这是根据来自节点的 site.pp 的环境在模块内的事实中打包的,还是在每个节点的 /etc/facter/facts.d/ 中作为特定于节点的配置进行维护?

上述内容是否有一个可行的示例。

答案1

管理特定于环境的数据的正确方法是使用 Hiera - Hiera 的目的是分离配置数据(例如域、IP 地址)和逻辑 Puppet 代码。如果您有类似的环境,则配置重复是可以预料的。

您可以使用静态事实来确定环境,并使用%{::environment}(对于 Puppet3)或%{facts.environment}(对于 Puppet4)在您的 Hiera 结构中访问它。

您的模块应该使用参数化来允许 Hiera 将值传递到类中。

要存储静态事实,请在/etc/facter/facts.d(必要时创建目录)中创建一个文件,其内容为environment=production,例如:

odin ~ # echo 'environment=production' >> /etc/facter/facts.d/env.txt
odin ~ # facter -p environment
production

相关内容