puppet 言語の古いバージョンでは、ループがサポートされていません。
ただし、タイトルに単純な文字列の代わりに配列を使用して、同じパラメータで同時に複数のリソースを宣言できます。
$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}
また、各リソースを で終了することにより、異なるパラメーターを持つ同じタイプの多くのリソースを宣言することもできます。これは、と とを;
繰り返すよりも少しコンパクトです。file
{
}
file {
[ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0755;
[ "$b/app1/secret", "$b/app2/secret" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0700;
}
ファイルの特定のケースでは、ソースを設定して再帰を使用できます。
file { "/opt/app":
source => "puppet:///appsmodule/appsdir",
recurse => true;
}
(パペットがソースとして使用するには、そのディレクトリ構造のソースが必要です)
新しいリソース タイプを定義して、param の一部を複数回再利用できます。
define foo {
file {
"/tmp/app/${title}":
ensure => directory,
owner => 'root',
mode => 0755;
"/tmp/otherapp/${title}":
ensure => link,
target => "/tmp/app/${title}",
require => File["/tmp/app/${title}"]
}
}
foo { ["app1", "app2", "app3", "app4"]: }
Puppet 2.6 から、必要なすべてのループ機能を備えた Ruby DSL が利用可能になりました: http://www.puppetlabs.com/blog/ruby-dsl/ (しかし、私はそれを使用したことはありません)。Puppet 3.2 では、いくつかの実験的なループが導入されましたが、これらの機能は後のリリースで変更または廃止される可能性があります。