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

时间:2018-03-14 19:29:45

标签: puppet hiera facter

需要一些帮助思考。

我有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:中改变什么?

puppet version:4.10.10

  

我们需要更多信息,以了解您的数据   发送到您的100个节点,以及为什么您认为这是一个数据问题,   即在Hiera而不是在你的Puppet中要解决的问题   体现。 - Shiny documentation

一个非常简单的例子:

直到昨天所有节点都有相同的NTP服务器,10.1.1.1
这是由类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-开头

我的问题是:如何?

1 个答案:

答案 0 :(得分: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

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