web-dev-qa-db-ja.com

Hieraを使用してモジュールをPup​​petのノードに割り当てる方法は?

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として環境を設定する必要があることです。サーバーのホスト名に基づいてこれを行うモジュールを作成することはできますが、これが別の環境でサーバーを編成するための最良の方法であるかどうかはわかりません。

  • サーバーごとに異なるPuppetモジュールを使用できるようにするための最良の方法は何ですか?
  • そして、サーバーのグループに特定のモジュールを追加するための最良の方法は何ですか?
  • 例えば私は10台のApacheWebサーバーを持っています... Apacheモジュールを持つためにtst/acc/dev/prdであるかどうかに関係なく、これらすべてのApacheノードが欲しいです。

私が避けたいのは、個々のサーバーのクラスのリストにクラスのリストを追加することです。これが、最初に単一のnode.ppからHieraバックエンドに移行した理由です。

1
ujjain

サーバーに役割を割り当て、それを使用してサーバーにパッケージを提供することをお勧めします。

例えば; /etc/facter/facts.dに、ロールファクトを設定するファイルを配置します。それをHiera階層レベルとして使用して、モジュールをサーバーに割り当てることができます。

自分で試したことはありませんが、うまくいくと思います。

0
Ger Apeldoorn