如何访问 Puppet 清单中的数组元素,即创建 for/while 循环?假设我的 nodes.pp 中有
Name [ 'testserver', 'floor1', 'floor3' ],
我如何对其进行迭代,以便当我定义文件资源时,我可以对其进行迭代并确保每个元素都有正确的文件资源?
谢谢丹
答案1
没有办法以传统方式进行循环,但您仍然可以实现您想要的目标。数组在用作资源标题时将自动扩展。
因此,对于一个简单的情况,你只需要一个像这样的数组
$packages = [ 'httpd', 'mysql', 'puppet' ]
然后在资源中使用它,例如:
package { $packages:
ensure => installed,
}
对于更复杂的情况,您可以使用已定义类型。我不太清楚您的示例要表达什么 - 如果这对您的用例没有意义,请告诉我。
举例来说,您正在发送一个数组,[ 'testserver', 'floor1', 'floor3' ]
而您需要对该列表执行的操作是创建一个文件(针对第一个元素),然后在完成后/etc/foo/testserver
运行以设置某些内容。exec
define datafiles {
file { "/etc/foo/${title}":
ensure => present,
content => $title,
}
exec { "setup-${title}":
command => "/usr/local/bin/something -a /etc/foo/${title}",
require => File["/etc/foo/${title}"],
}
}
然后,使用定义类型的标题中的数组将扩展它,为数组的每个成员创建文件和执行资源。
$names = [ 'testserver', 'floor1', 'floor3' ]
datafiles { $names: }