Puppetでノードを管理し、モジュールをノードに割り当てるために、単一のデフォルトのnodes.ppからHieraバックエンドに切り替えることにしました。
ホスト名は次のように使用します。
nyc-Apache-prod-01
was-mysql-tst-01
これは、hiera.yamlとhierdata-directoryの構造です。
# cat hiera.yaml
:backends:
- yaml
:hierarchy:
- environment/tst/%{::hostname}
- environment/tst
- %{::osfamily}
- common
:logger: console
:yaml:
:datadir: '/etc/puppet/hieradata'
# find hieradata
hieradata
hieradata/RedHat.yaml
hieradata/OracleRAC.yaml
hieradata/common.yaml
hieradata/environment
hieradata/environment/dev
hieradata/environment/tst.yaml
hieradata/environment/acc
hieradata/environment/dev.yaml
hieradata/environment/acc.yaml
hieradata/environment/tst
hieradata/environment/tst/nyc-ks-tst-02.yaml
hieradata/environment/tst/nyc-ks-tst-01.yaml
hieradata/environment/prd
hieradata/environment/prd.yaml
問題は、個々のノードの/etc/puppet/puppet.confでenvironment = tstとして環境を設定する必要があることです。サーバーのホスト名に基づいてこれを行うモジュールを作成することはできますが、これが別の環境でサーバーを編成するための最良の方法であるかどうかはわかりません。
私が避けたいのは、個々のサーバーのクラスのリストにクラスのリストを追加することです。これが、最初に単一のnode.ppからHieraバックエンドに移行した理由です。
サーバーに役割を割り当て、それを使用してサーバーにパッケージを提供することをお勧めします。
例えば; /etc/facter/facts.dに、ロールファクトを設定するファイルを配置します。それをHiera階層レベルとして使用して、モジュールをサーバーに割り当てることができます。
自分で試したことはありませんが、うまくいくと思います。