0

需要一些帮助思考。

我有 200 台服务器,必须将特定配置应用于 100 台。

它们唯一的共同点是名称前缀:它们都以zmb-

hiera.yaml

---
:backends:
  - yaml

:yaml:
  :datadir:

:hierarchy:
  - "nodes/pro/%{::trusted.certname}"
  - "nodes/hom/%{::trusted.certname}"
  - "nodes/%{::trusted.certname}"
  - "%{::os.family}"
  - common

:logger: puppet

我应该改变:hierarchy:什么?


木偶版:4.10.10


我们在这里需要更多信息,以了解您要发送到 100 个节点的数据是什么,以及为什么您认为这是一个数据问题,即需要在 Hiera 而不是 Puppet 清单中解决的问题。-亚历克斯哈维

一个非常简单的例子来让事情顺利进行:

直到昨天所有节点都拥有相同的 NTP 服务器,10.1.1.1
这是由类设置的ntp,它从common

common.yaml

---
classes:
    - base
    - ntp

ntp::server: '10.1.1.1'

ntp/init.pp

class ntp ($server) {
    ...
}

现在,今天,我想将 IP 更改10.1.1.99为 100 台服务器,它们的主机名都以zmb-

我的问题是:如何?

4

1 回答 1

2

没有办法在 Hiera 层次结构定义中使用正则表达式匹配(据我所知,据我所知)。

您需要首先创建一个自定义事实。例如,您可以编写:

Facter.add(:host_code) do
  setcode do
    Facter.value(:hostname).slice(0..2)
  end
end

然后你可以添加一个级别:

:hierarchy:
  - "nodes/%{::host_code}" # here
  - "nodes/pro/%{::trusted.certname}"
  - "nodes/hom/%{::trusted.certname}"
  - "nodes/%{::trusted.certname}"
  - "%{::os.family}"
  - common

然后创建一个文件hieradata/nodes/zmb.yaml

当然,我会质疑基于主机名前三个字母的事实是否是精心设计的事实。这 100 个节点是什么导致它们拥有主机名zmb-?这个问题的答案可能会为你的新事实提供适当的基础。

于 2018-03-15T14:22:55.080 回答