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