在木偶中设置环境

时间:2015-12-08 13:28:36

标签: puppet hiera

刚接触Puppet,我被困在一个我想在Puppet中设置环境( production, test, dev )的地方。具体来说,我有一个Hiera文件,我已经定义了一些数据。现在我想为一些Hiera键提供特定于环境的值。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

您提出了两个相当不同的问题:如何设置节点的环境以及如何使用节点的环境来自定义将从Hiera上绘制的数据他们代表。您错过了一个非常重要的初步问题:我应该定义和使用环境吗?

由于 是Puppet的新手,我建议您尽可能多地忽略环境。在您的站点配置中使用多个环境并不重要,虽然沿着您描述的方向建立单独的环境并不罕见,但这样做的价值或适当性远不如您想象的那么明确。你可以在不钻研环境的情况下学到很多东西;我建议至少现在,你只需将所有内容保留在默认环境“生产”中。而是专注于更紧迫的主题。

如果您坚持直接进入环境,那么您提出的第一个问题就更容易回答:通过在{1}}中插入所需的值,可以在节点的侧面设置节点的环境节点的configuration file,或主节点(假设您正在使用主节点),设置external node classifier(ENC)并让它为全局变量environment提供值。如果你两个都做,那么主人赢了。

对于按环境自定义Hiera数据,您通常会通过中心hiera.yaml配置文件设置Hiera数据层次结构的特定于环境的级别。您可以将环境名称插入到此文件($environment)中,以在一个级别上形成数据文件的部分或全部基本名称。对于您想要自定义数据的每个环境,您可以在相应的数据目录中为您配置的一个或多个Hiera后端提供相应的Hiera数据文件。

答案 1 :(得分:0)

另一种解决此问题的方法是应用程序层与Puppet环境

在Puppet中,这些并不总是一样的。如果您正在管理test / production / dev是相同的,那么您将拥有默认生产木偶环境中的所有这些服务器。您可以在Puppet中创建其他环境来处理puppet开发。我同意@John Bollinger的建议,除非你需要,否则你应该避免接触Puppet Environments,你可能不会这样做。如果您这样做,请查看R10k以促进更改。

Hiera可以根据任何事实更改层次结构。所以我所做的就是使用正则表达式匹配基于主机名向我的节点添加application_tier事实。

您的hiera.yaml文件可能如下所示:

---
:backends:
  - yaml

:hierarchy:
  - "node/%{::hostname}"
  - "tier/%{::application_tier}"
  - "common"

:yaml:
  :datadir: '/hiera'

请注意我是如何使用我为每个节点定义的%{::application_tier},而不是%{environment},它是Puppet实现的构造。

这是我的自定义事实档案application_tier.rb

require 'facter'

Facter.add(:application_tier) do
  setcode do
    location = case Facter.value(:hostname)
               when /dev(\d|)$/ then 'development'
               when /test(\d|)$/ then 'test'
               when /staging(\d|)$/ then 'staging'
               else 'production'
               end
  end
end

然后通过我的角色清单将此文件部署到每个节点,因此路径为manifests\roles\lib\facter\application_tier.rb。如您所见,它与Regex匹配,因此我的节点名为staging1,dev3等,我的生产节点遵循不同的方案,因此是生产的默认值。

我希望有所帮助。