web-dev-qa-db-ja.com

多くのノードでsite.ppを維持する方法は?

すべてのノードを1つのファイルsite.ppに保存していますが、ノードを追加するにつれて、それらを維持するのは非常に困難です。

インポートディレクティブは非常に有望に見えますが、ドキュメントを理解しているので、何かが変更されるたびにpuppermasterを再起動する必要があります。私にとってそれは受け入れられません。

それを行う他の方法はありますか?大きなコメントを使用してノード/グループを分離する代わりに。今はrdocだけを使用しています。

私はどんな提案でも喜ぶでしょう:-)

私の現在のpuppetディレクトリ構造は次のようになります。

  • マニフェスト/site.pp
  • マニフェスト/ extdata /(extlookup用)
  • モジュール/モジュール1
  • モジュール/モジュール2
  • ファイル/ pubkeys.。

変更されたファイルのみをオーバーライドするために、git/rsyncを使用してpuppet構成をデプロイします。

3

私は site.pp のように見えます:

import "nodes/*.pp"

nodes/manifests/ディレクトリがあります

"workstations.pp""webservers.pp"などにノードのセットがあるようにします。

7
Tom O'Connor

マニフェストの外部でノードを定義します。 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つの特定のノード)に設定できます。

5
Shane Madden