私はこの質問をするのに十分な人形をほとんど知りません。
特定のノードの構成は、いくつかのノード固有の接着剤を備えたモジュールのコレクションで構成されることを理解していると思います。チュートリアルとドキュメントから、ノード固有のリソースはnode /nodename/ { }
リソースのmanifests/site.ppファイルにあり、関連するクラスの「インクルード」とノード固有の構成を作成するリソースがあるようです変更。
次に、Foremanなどの外部Node Classifier(ENC))を入力します。
ENCドキュメントを読んだところ、site.ppでnode /nodename/ { }
リソースを使用できたが、新しいリソースを宣言できなかった。基本的にはお勧めしません。生成されたYAMLはすべて、単にインクルードと変数設定です。
それで、特定のノードまたはホストグループに固有の構成に対して何をしますか?含まれるすべてのクラスを統合する配線ですか?
ノードに固有のクラスを作成することになりますか?そのクラスをノード固有のモジュールのどこに配置しますか?または、特定のノードに割り当てることができるクラスを使用して、サイト固有の構成のキャッチオールモジュールを作成しますか?
これに対する1つのアプローチは Designing Puppet – Roles and Profiles で表されます。基本的な原則は次のとおりです。
Foremanにパペットマスターからインポートするように指示していると仮定します。その場合は、パペットディレクトリを次のように設定することをお勧めします。
puppet
puppet/manifests
puppet/manifests/site.pp
puppet/manifests/nodes/default.pp
puppet/manifests/nodes/{server-type}.pp
...
puppet/modules
puppet/modules/{module1}
puppet/modules/{module1}/files
puppet/modules/{module1}/manefests
puppet/modules/{module1}/templates
...
etc
次に、この行をsite.ppファイルに含めます。
import 'nodes/*'
次に、default.ppでベースサーバーを作成します。
node default {
#this is where you put all of the puppet directives you want on every server.
#for example if you wanted screen on all of your servers
package{ "screen": ensure -> installed; }
}
次に、ノードの下の別のファイル、たとえばweb.ppにそれを含めて、すべてのWebサーバーのディレクティブを次のように設定します。
node /^web0[1-9]\.example\.com$/ inherits default {
#this will inherit all of the settings in the default node and then do anything else you add.
#like installing nginx
package { "nginx": ensure -> installed; }
}
このdb.ppファイルのように継承をチェーンすることもできます。
node db inherits default {
#install postgresql-9.3
package { "postgresql-9.3": ensure -> installed; }
}
node /^db0[1-9]\.example\.com$/ inherits db {
#This block can even be empty unless you need something here.
}