我有80个节点,78个需要有一个特定的模块,除了2个。
[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]#
除了tst-01和tst-02服务器之外,我希望所有节点都具有ldap模块。
我如何从这两台服务器中排除这个模块?
一个解决scheme将是所有节点使用80.yaml文件,并添加“ – ldap”78这些.yaml文件,但这似乎是糟糕的devise。 从inheritance列表中排除模块将是更清洁的。
问题是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
在node-def中:
class { hiera('classes'): }
不利的一面是,如果覆盖默认值,则必须指定主机特定的hiera文件中的所有类。
这有帮助吗?
你可以在你的nodes.pp使用这样的东西:
node default { hiera_include('classes') } node /^tst-0(1|2)\.example\.com$/ inherits default { } node /.*example\.com$/ inherits default { include ldap }