红宝石和嵌套循环

时间:2013-02-12 17:20:53

标签: erb 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 -%>

但我得到的是网络掩码和ipa的递归打印,而不是每个数组的打印,然后移动到下一个数组元素。

对于如何完成正确的输出会有一些指导吗?

由于 丹

3 个答案:

答案 0 :(得分:2)

尝试像字典这样的东西怎么样?类似的方法对我有用,希望它对你有所帮助。我的问题是,我有不同的变量,每个变量应该有不同的值或参数。

定义变量,如

 $file_threshold = {
          'received' => '10',
          'doneJobs' => '20',
          'recvq'    => '30',
          'sendq'    => '40',
          'doneq'    => '50',
          'docq'     => '60',}

在模板文件中

<%  @file_threshold.each do |key,value| -%>

cmd = check_file.sh <%=  key %>  <%= value%>

<% end -%>

输出:

....
cmd = check_file.sh doneq 50
....

答案 1 :(得分:1)

如果需要,可以在.erb中执行Ruby代码(以下是Ruby代码)。在这种情况下,主要的是:定义一个多维数组,并使用Ruby的数组转置方法。

<% details = [servername, ipa, env]; transposed = details.transpose; transposed.each {|x| print x.at(0), " ", x.at(1), " ", x.at(2), "\n"}  %>

答案 2 :(得分:0)

这有点冒险,因为它假设您完全确定阵列排队,但是:

...&lt;%servername.each_with_index do | name,i | - %GT;
.....&lt;%=名称%&gt; &lt;%= ipa [i]%&gt; &lt;%= enviro [i]%&gt;
...&lt;%end%&gt;

(请忽略......否则我无法正确显示模板代码!)