如何排除少数节点的 Puppet 模块?

如何排除少数节点的 Puppet 模块?

我有 80 个节点,除了 2 个之外,其他 78 个都需要有特定的模块。

[root@puppetmaster puppet]# cat hiera.yaml
:backends:
    - yaml

:hierarchy:
    - environment/%{::environment}/%{::hostname}
    - environment/%{::environment}
    - common

:logger: console

:yaml:
    :datadir: '/etc/puppet/hieradata'
[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
  - ldap
  - motd
  - ntp
  - puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
  - puppet-update
  - public-keys
[root@puppetmaster puppet]#

我想全部节点具有 ldap 模块,tst-01 和 tst-02 服务器除外。

我如何将该模块从这两台服务器中排除?

一种解决方案是使用 80 个 .yaml 文件来管理所有节点,并在其中 78 个 .yaml 文件中添加“-ldap”,但这似乎设计得不太好。将模块从继承列表中排除会更简洁。

答案1

问题是 hiera_include 将使用所有级别的类(可能使用 hiera_array)。

这可能会有用:

[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
  - ldap
  - motd
  - ntp
  - puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
  - puppet-update
  - public-keys
  - motd
  - ntp
  - puppet-conf

在节点定义中:

class { hiera('classes'): }

缺点是,如果您覆盖默认值,则必须在主机特定的 hiera 文件中指定所有类。

这有帮助吗?

答案2

您可以在自己的中使用类似这样的内容nodes.pp

node default {
  hiera_include('classes')
}

node /^tst-0(1|2)\.example\.com$/ inherits default {
}

node /.*example\.com$/ inherits default {
  include ldap
}

相关内容