Puppetモジュールの構成のベストプラクティスは何ですか?私は人形を持っています2.7.11
。この方法は非常に厄介で、グローバル変数を使用しているように見えます。
node default {
$always_apt_update = true
include apt
}
ほとんどの構成を元のクラスから継承するクラスを作成する必要がありますか?ドキュメントのバージョンが多すぎるようで、どれが自分に当てはまるのかわかりません。
更新:
私がこれを試したとき:
class { 'apt':
always_update => 'true',
}
エラーが発生します:
Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32
グローバル変数の代わりにパラメータ化されたクラスを使用する必要があります。
例えば:
node default {
class {'apt':
always_update =>true
}
}
class apt ($always_update = true ) {
// code
}
node 'example.com' {
class { bar: }
}
詳細については、人形のドキュメントを参照してください。
これらの回答は少し時代遅れのようです。Puppetの新しいバージョン、つまり3.7.xでは、Hieraを使用してクラスパラメーターを渡すことができます。クラス宣言のようなリソースは、もはやベストプラクティスとは見なされていません。
2番目の答えはHieraを使用しますが、「hiera」関数を明示的に使用していますが、これもあまりお勧めできない方法です。
新しいソリューションは次のようになります。
/etc/puppet/manifests/site.pp
:
node default {
include apt
}
/etc/puppet/modules/apt/manifests/init.pp
:
class apt ($always_update = true ) {
// code
}
/etc/puppet/hieradata/<filename>.yaml
apt::always_update: true
Hieraデータyamlファイルは、必要に応じてパラメーターの異なる値を持つことができます。
最近の推奨プラクティスは Hiera を使用することです。 3.xに組み込まれていますが、2.7では個別にインストールする必要があります。
次に、apt
クラスのマニフェストでHieraからデータを取得できます。
$always_apt_update = hiera("always_apt_update")
このようなHiera構成では...
:hierarchy:
- %{::clientcert}
- common
..ノード(clientcert
ファクトからプルされた)は、common.yaml
ファイルよりもルックアップで優先順位が高くなります。
したがって、always_apt_update: false
のnode1.example.com.yaml
とalways_apt_update: true
のcommon.yaml
を使用すると、node1はその変数がfalseに設定され、他のノードはデフォルトでtrueになります。