旧版本的木偶语言不支持循环。
但是您可以使用数组而不是简单的字符串作为标题,并使用相同的参数同时声明多个资源:
$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}
您还可以通过以 a 结束每个资源来声明许多具有不同参数的相同类型的资源;
,这比重复s 和file
s更紧凑:{
}
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;
}
(这将需要该目录结构的源以供 puppet 用作源)
您可以定义一个新的资源类型以多次重用参数的一部分:
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 中,他们引入了一些实验性循环,但是这些功能可能会在以后的版本中改变或消失。