web-dev-qa-db-ja.com

いくつかのノードのPuppetモジュールを除外するにはどうすればよいですか?

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」を追加することですが、これは設計が不十分なようです。継承されたリストからモジュールを除外する方がクリーンです。

3
ujjain

問題は、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ファイルですべてのクラスを指定する必要があることです。

それは役に立ちますか?

2
Ger Apeldoorn

nodes.ppでは次のようなものを使用できます。

node default {
  hiera_include('classes')
}

node /^tst-0(1|2)\.example\.com$/ inherits default {
}

node /.*example\.com$/ inherits default {
  include ldap
}
2
dawud