puppet - 如何将数组传递给 ruby​​ 中的 erb 模板并对其进行迭代?

标签 puppet ruby templates

我需要一些关于 erb 模板的帮助,我似乎无法理解传递数组然后迭代它。 我的问题是这样的。 我想传递几个数组: `

device      => ["eth0", "br0"],
ipaddr      => ["192.168.12.166", "192.168.12.199"],
netmask     => ["255.255.255.0", "255.255.255.0"], 
hwaddr      => '',
network     => '',
gateway     => ["192.168.12.254", "192.168.12.204"],                                                                                                                

到迭代数组中的每个项目并将其打印出来的模板:

auto <%= device %> inet static                                                                                                                                        
address <%= ipaddr %>
netmask <%= netmask %>
broadcast <%= broadcast %>
gateway <%= gateway %>

据我所知,我需要用 device.each |device| 做点什么。 puts device,但我不知道语法应该是什么样子。 我相信您可以从这些片段中看出我正在尝试做什么,然后您可能会明白条目需要分开,而不是插入。 您能提供的任何帮助将不胜感激。我知道我应该在 irb 中尝试一些事情并从那里弄清楚它们,这就是我现在正在阅读的内容。

谢谢!

最佳答案

在 ruby​​ 中使用 each 的基本语法是这样的:

array.each do |item_from_array| BLOCK

所以如果你只有一个数组,那么你可以这样做: (为了清楚起见,我会在垂直条内使用不同的名称)

<% device.each do |dev| %>
  auto <%= dev %> inet static
<% end %>

然而,在移动到您的 ipaddr 数组之前,这将首先遍历您的所有设备。我猜你希望它们依次为自动、地址、网络掩码等。在这种情况下,你最好使用更“传统”的索引并循环 N 次,如下所示:

<% for idx in (0..1) %>
  auto <%= device[idx] %> inet static
  address <%= address[idx] %>
  netmask <%= netmask[idx] %>
  broadcast <%= broadcast[idx] %>
<% end %>

当然,您需要考虑数组的最大大小是多少,以及如果数组包含的条目少于其他数组时该怎么办。您可以通过执行以下操作找到所有数组的最大大小:[device,address,netmask,broadcast].map{|a| a.length}.max

你可以像这样跳过一个特定的数组:<% if idx < address.length %> address <%= address[idx] %><% end %>

关于puppet - 如何将数组传递给 ruby​​ 中的 erb 模板并对其进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079857/

相关文章:

python - pip install -r requirements.txt 来自 puppet ?

ruby - Gitlab dpl 问题与 ruby​​ 版本

ruby - Minitest 中 RSpecs instance_double 的对应物是什么?

c++ - 多态基类指针

Puppet评估错误: Error while evaluating a Resource Statement,找不到声明的类

puppet - 使用 Puppetfile 在 master 上安装 puppet 模块

Puppet - 测试一个包是否已经定义?

mysql gem 无法在 Leopard 上运行

javascript - 异步模板加载 - 如何仅加载一次?

c++ - 关于自定义分配器的问题