すべてのノードを1つのファイルsite.ppに保存していますが、ノードを追加するにつれて、それらを維持するのは非常に困難です。
インポートディレクティブは非常に有望に見えますが、ドキュメントを理解しているので、何かが変更されるたびにpuppermasterを再起動する必要があります。私にとってそれは受け入れられません。
それを行う他の方法はありますか?大きなコメントを使用してノード/グループを分離する代わりに。今はrdocだけを使用しています。
私はどんな提案でも喜ぶでしょう:-)
私の現在のpuppetディレクトリ構造は次のようになります。
変更されたファイルのみをオーバーライドするために、git/rsyncを使用してpuppet構成をデプロイします。
私は site.pp のように見えます:
import "nodes/*.pp"
nodes/
にmanifests/
ディレクトリがあります
"workstations.pp"
"webservers.pp"
などにノードのセットがあるようにします。
マニフェストの外部でノードを定義します。 extlookupの後継であるHieraをお勧めしますが、実際には、ノードデータをマニフェストから移動するには、外部ノード分類子で十分です。
これは、最近のノード定義を処理するための推奨される方法です docs から:
ほとんどの状況のほとんどのユーザーは、インクルードのような宣言を使用し、外部データにパラメーター値を設定する必要があります。ただし、以前のバージョンのPuppetとの互換性には妥協が必要な場合があります。
HieraはPuppet3.0に含まれています-古いバージョンでは個別にインストールする必要があります。ノード定義を処理するようにHieraを設定するには、次の行に沿って何かを実行する必要があります。
site.pp(全体):
hiera_include(classes)
hiera.yaml:
:backends:
- yaml
:hierarchy:
- %{clientcert}
- os-%{osfamily}
- common
:yaml:
:datadir: /etc/puppet/hieradata
# A good alternative if you want different node data based on environments:
#:datadir: /etc/puppet/environments/%{environment}/hieradata
:puppet:
:datasource: data
これで、Puppetは/etc/puppet/hieradata
を調べて、ノード上のデータをプルします。すべてに必要なntp
クラスがあり、1つの特定のノードにのみ必要なApache
クラスがあるとします。
/etc/puppet/hieradata/common.yaml:
classes:
- ntp
/etc/puppet/hieradata/nodename.example.com.yaml:
classes:
- Apache
この配列は集約されています。nodename.example.com
ノードは、共通ファイルからntp
クラスと、それ自体のファイルからApache
クラスの両方を取得します。
Hieraは、クラスパラメータも処理します。 Apache
パラメータを期待するport
クラスがあるとします。
class Apache ( $port ) {
...
これは、Hieraデータファイルでも設定できます。デフォルトでポート80にしたい場合。
/etc/puppet/hieradata/common.yaml:
classes:
- ntp
Apache::port: 80
ただし、nodename.example.com
の場合はそれをオーバーライドして、8080に設定します。
/etc/puppet/hieradata/nodename.example.com.yaml:
classes:
- Apache
Apache::port: 8080
または、os-%{osfamily}
ファイルのhiera.yaml
を使用して、特定のノードに関するファクト(この場合はosfamily
ファクト)に基づく設定を行うことができます。
/etc/puppet/hieradata/os-debian.yaml:
Apache::package_name: Apache2
/etc/puppet/hieradata/os-redhat.yaml:
Apache::package_name: httpd
(3.0より前のバージョンを実行している場合、パラメーターのルックアップ動作は少し異なることに注意してください 詳細はこちらを参照 )
このようにして、含まれるクラスとパラメーター/変数設定を、すべて異なるファイルの異なるスコープ(すべてのノード、ファクトに基づく一部のノード、または1つの特定のノード)に設定できます。