可悲的是,即使您在用逗号分割您的自定义事实时使用自定义“定义”来迭代数组,结果也将不是您所期望的,甚至不会接近“for each”循环——除了让你头疼之外,可能。
话虽如此,我不确定这是否是您想要实现的目标,但请看一下这种方法:
$fact = '1.1.1.1,2.2.2.2,3.3.3.3'
$servers = split($::fact, ',')
$count = size($servers)
$names = bracket_expansion("host[01-${count}].address")
file { '/tmp/test.txt':
content => inline_template('<%= @servers.each_with_index.map {|v,i| "#{v}\t\t#{@names[i]}\n" } %>'),
ensure => present
}
我们有两个自定义函数:size() 和bracket_expansion();然后我们使用它们在 hack 中提供的值,该 hack 利用 inline_template() 函数通过并行访问两个数组来呈现文件的内容——一个具有来自您的事实的 IP 地址,另一个具有应遵循的主机名。
结果如下:
matti@acrux ~ $ cat | puppet apply
$fact = '1.1.1.1,2.2.2.2,3.3.3.3'
$servers = split($::fact, ',')
$count = size($servers)
$names = bracket_expansion("host[01-${count}].address")
file { '/tmp/test.txt':
content => inline_template('<%= @servers.each_with_index.map {|v,i| "#{v}\t\t#{@names[i]}\n" } %>'),
ensure => present
}
notice: /Stage[main]//File[/tmp/test.txt]/ensure: created
notice: Finished catalog run in 0.07 seconds
matti@acrux ~ $ cat /tmp/test.txt
1.1.1.1 host01.address
2.2.2.2 host02.address
3.3.3.3 host03.address
matti@acrux ~ $
size() 和 bracket_expansion() 函数都可以在这里找到:
https://github.com/kwilczynski/puppet-functions/tree/master/lib/puppet/parser/functions/
希望这会有帮助 :-)