パラメータ化されたクラスは、コードの構造を改善するのに役立つ言語構造です。グローバル変数を過度に使用することを防ぎます(例のように)。
ノードの説明にさらに20のクラスを含めると、マニフェストのグローバルスコープまたはノードスコープで設定されるいくつかの変数がすべて必要になります。また、パラメータ化されたクラスを使用すると、デフォルトのパラメータを簡単に設定できるため、複数の異なる場所で$file_owner
同じ値(例:)を提供する代わりに、デフォルト値を使用できますlarry
。
サンプルスニペット(2つの追加ノード)は、次のように記述できます。
node 'example.com' {
class { bar: }
}
node 'example.net' {
class { bar: owner = "harry" }
}
node 'example.net' {
class { bar: file_name = "barry.txt" }
}
class bar($owner = "larry", $file_name = "larry.txt") {
class { do_stuff: owner => $owner, file_name => $file_name }
}
class do_stuff($owner, $file_name) {
file { $file_name:
ensure => file,
owner => $owner,
}
}
グローバル変数を使用する場合$owner
、各ノードで名前が付けられた変数を宣言する必要があり、ノードごとに$file_name
変数/パラメーターを上書きすることはできません。代わりにbar
、各ノードに別のクラスを宣言する必要があります。
Puppetの言語の進化に関するドキュメントと、もちろん言語ガイドは、パラメーター化されたクラスの使用方法と、この言語構成の背後にある理論的根拠に関するいくつかの良い例を提供します。
$bar::file_name
し$::file_owner
てアクセスする必要があります。ただし、パラメーター化されたクラスを使用する場合、パラメーターを介してクラスに渡される変数はローカルスコープの変数になります。