悲しいことに、カスタムの「定義」を使用して、カスタムファクトをカンマで分割して配列を反復処理しても、結果は期待したものではなく、「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() の 2 つのカスタム関数があります。次に、inline_template() 関数を活用するハック内で提供される値を使用して、2 つの配列への並列アクセスを利用してファイルのコンテンツをレンダリングします。
結果は次のとおりです。
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/
これが少し役立つことを願っています:-)