Puppet

如何排除少數節點的 Puppet 模組?

  • June 12, 2013

我有 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 文件中指定所有類。

這有幫助嗎?

引用自:https://serverfault.com/questions/514871