将配置应用于 puppet + hiera 中的服务器组

apply config to group of servers in puppet + hiera

需要一些帮助思考。

我有 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


We need more information here, to understand what the data is you are sending to your 100 nodes, and why you believe this is a data problem, i.e. a problem to be solved in Hiera rather than in your Puppet manifests. - Alex Harvey

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

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

读取值

common.yaml

---
classes:
    - base
    - ntp

ntp::server: '10.1.1.1'

ntp/init.pp

class ntp ($server) {
    ...
}

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

开头

我的问题是:如何?

无法在 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

当然,我会质疑基于主机名前三个字母的事实是 well-designed 事实。那 100 个节点的主机名是什么 zmb-?该问题的答案可能为您的新事实提供了正确的基础。