【问题标题】:Assigning a class to a node based on host name via Hiera通过 Hiera 根据主机名将类分配给节点
【发布时间】:2017-02-19 17:21:41
【问题描述】:

我过去经常使用 Puppet,从 0.x 到 1.0 左右,然后换了工作,但现在我又回来了。 Puppet 中的 Hiera 对我来说是新的(还有很多其他的东西)。

我的理解是否正确,基本上不可能根据与 Hiera 匹配的主机名(或证书名称)模式将类分配给节点组?

例如,如果主机类似于“ntp1.foo.com”,我曾经分配 ntp 服务器类。在site.pp 中直接定义node 非常容易,我正试图将这个概念转移到基于Hiera 的世界中。我让 Hiera 分配其他课程,并希望将所有这些作业集中到一个地方。

我发现这样做的唯一方法是通过一些非 Hiera 方式设置参数并使用其在 Hiera 中的值来匹配路径。例如,在我的 enc 脚本中,我导出一个参数,如下所示:

echo "parameters:"
if [ ... ]; do echo "  ntpRole: server; else echo "  ntpRole: client"; fi

在 Hiera 中,我会做类似的事情:

- "roles/ntp-%{ntpRole}"

我认为人们也可以通过自定义事实来做到这一点。

这行得通,但似乎是个杂牌。有没有更好/推荐的替代方案?

这样做的一个问题是每个节点必须都有一个值(所有东西都被分配了一个 ntp-something 类)。这适用于 NTP,因为所有机器要么是 NTP 客户端,要么是服务器,但对于存在的东西则不然。

例如:Web 服务器角色。有些机器不会是 Web 服务器,所以我不想包含那个类,但对于其他我做的,我真的不想在每个节点的文件中维护它,也不想到处都有空的*-none 角色类(例如web-noneweb-server)。我希望所有名为 www* 或基于其他一些标准的机器加载 roles/web 类。这可以用 Hiera 完成吗?

【问题讨论】:

  • 我们为此使用外部自定义事实,因此事实将具有该节点所属角色的逻辑,并且在您的层次结构中,您可以使用该事实来包含角色类。

标签: puppet hiera


【解决方案1】:

如果您的角色与服务器事实有关,那么您可以使用自定义事实来分配角色。既然你说你以前是根据服务器名称进行节点分类,我会假设这是你想走的路线。

# custom role fact
require 'facter'

Facter.add(:role) do
  case Facter.value(:hostname)
  when /ntp/ then 'ntp-server'
  when /www/ then 'web-server'
  else abort 'Hostname does not provide a role.'
  end
end    

然后您可以像这样设置层次结构:

:hierarchy:
  - "nodes/%{::trusted.certname}"
  - role/%{role}
  - "common"

在你的角色数据文件中,你可以提供一个类名数组:

# role/web-server.yaml
classes:
  - web-server

在你的主清单中(通常是$environment/manifest/site.pp:

# if no classes array, traverse the else block
if hiera('classes', false) {
  hiera_include('classes')
}
else {
  # logic for your 'none' situations since the classes array was not present
}

查看hiera_include 信息:https://docs.puppet.com/hiera/3.2/puppet.html#assigning-classes-to-nodes-with-hiera-hierainclude。请注意,它还会从您的特定 fqdn.yaml 数据文件中合并到类中。

这将为您提供您所请求的功能,并使用 Hiera 按节点分组/主机名包含类。

【讨论】:

  • 那么如果role 为空,Hiera 在通过层次结构查找类时会跳过role/%{role} 行?
  • @Josh 从某种意义上说,是的。更准确地说,Hiera 将在自定义事实中查找适合您的 else 案例的数据文件,并且该文件不存在,因此该层次结构级别将不提供任何数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多