如何排除几个节点的Puppet模块?

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