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]#
Tst-01サーバーとtst-02サーバーを除いて、allノードにldapモジュールを持たせたい。
このモジュールをこれら2つのサーバーから除外するにはどうすればよいですか?
解決策は、すべてのノードに80個の.yamlファイルを使用し、これらの.yamlファイルのうち78個に「-ldap」を追加することですが、これは設計が不十分なようです。継承されたリストからモジュールを除外する方がクリーンです。
問題は、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
}