嗨,我想获得一些关于如何在 puppet 中的 erb 中编写代码的帮助,基本上我有
server::actionhost { 'details':
servername[ 'felix', 'washington', ],
ipa [ '192.168.43.5', '192.168.43.11', ],
enviro [ 'prod', 'uat', ],
}
我现在想将其打印到一个文件中,每个数组中的每个元素都在一行中,即我的类中的模板文件的输出应该是这样的:
felix 192.168.43.5 prod
washington 192.168.43.11 uat
当我尝试这样做时,我在模板文件中写了以下代码:
<% servername.each do |name| -%>
<% ipa.each do |ip| -%>
<% enviro.each do |env| -%>
<%= name %> <%= ip %> <%= env %>
<% end -%>
<% end -%>
<% end -%>
但我得到的是多个递归打印,而不是从每个数组打印,然后移动到下一个数组元素。
我正在考虑一个 for 循环,但不确定如何将数组长度作为 for 循环的参数,希望得到一些关于如何实现正确输出的指导?
我尝试做这样的事情,但是在 Puppet 运行时出现错误并失败?
<% for id in servername.length %>
<%= servername[id] %> <%= ipa[id] %> <%= enviro[id] %>
<% end -%>
谢谢丹
答案1
您需要使用该数据结构有什么特别的原因吗?这会很快变得不可读,并且很容易因为意外地在其中一个数组中添加或删除元素而不是其他数组而破坏事物。不如改用这样的方法?
$servers = [
{
name => 'felix',
ip => '192.168.43.5',
env => 'prod',
},
{
name => 'washington',
ip => '192.168.43.11',
env => 'uat',
},
]
那么在 erb 中工作就简单多了:
<% servers.each do |server| -%>
<%= server['name'] %> <%= server['ip'] %> <%= server['env'] %>
<% end -%>
但是,如果你被当前的数据结构所困扰,那么这应该可以做到。
<% (1..servername.length).each do |i| -%>
答案2
Shane Madden 的回答很棒,但我认为缺少“@”:
代替
<% servers.each do |server| -%>
应该使用
<% @servers.each do |server| -%>
有更高声誉的人可以在原始答案中评论这一点和/或承认这一点,以便删除我的“答案”
这也是记录的方式木偶食谱第三版
谢谢,马特