Puppet
如何排除少數節點的 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]#
我希望所有節點都有 ldap 模組,除了 tst-01 和 tst-02 伺服器。
如何從這 2 台伺服器中排除此模組?
一種解決方案是為所有節點使用 80 個 .yaml 文件,並將“-ldap”添加到其中的 78 個 .yaml 文件中,但這似乎是糟糕的設計。從繼承列表中排除模組會更乾淨。
問題是 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 文件中指定所有類。
這有幫助嗎?