傀儡和数组循环

Dan*_*Dan 6 puppet templates

嗨,我想要一些关于如何在木偶中的 erb 中编码的帮助,基本上我有

server::actionhost { 'details':
    servername[ 'felix', 'washington', ],
    ipa [ '192.168.43.5', '192.168.43.11', ],
    enviro [ 'prod', 'uat', ],
}
Run Code Online (Sandbox Code Playgroud)

我现在想将其打印到一个文件中,其中每个数组中的每个元素都在一行中,即我的类中模板文件的输出应该是这样的:

felix 192.168.43.5 prod
washington 192.168.43.11 uat
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我在模板文件中编写了以下代码:

<% servername.each do |name| -%>
    <% ipa.each do |ip| -%>
        <% enviro.each do |env| -%>
            <%= name %> <%= ip %> <%= env %>
        <% end -%>
    <% end -%>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

但我得到的是多次递归打印,而不是每个数组的打印,然后移动到下一个数组元素。

我正在考虑 for 循环,但不确定如何获取数组长度作为 for 循环的参数,希望得到一些有关如何完成正确输出的指导吗?

我试过做这样的事情,但它在木偶运行时失败了?

<% for id in servername.length %>
    <%= servername[id] %> <%= ipa[id] %> <%= enviro[id] %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

谢谢丹

Sha*_*den 12

您需要使用该数据结构的任何特殊原因?这将很快变得不可读,并且很容易通过意外地从数组之一而不是其他数组中添加或删除元素来破坏事物。像这样的东西怎么样?

$servers = [
  {
    name => 'felix',
    ip   => '192.168.43.5',
    env  => 'prod',
  },
  {
    name => 'washington',
    ip   => '192.168.43.11',
    env  => 'uat',
  },
]
Run Code Online (Sandbox Code Playgroud)

然后在 erb 中使用要简单得多:

<% servers.each do |server| -%>
  <%= server['name'] %> <%= server['ip'] %> <%= server['env'] %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

但是,如果您坚持使用当前的数据结构,那么应该这样做..

<% (1..servername.length).each do |i| -%>
Run Code Online (Sandbox Code Playgroud)