木偶.迭代ERB中的嵌套哈希

Dan*_*ano 5 arrays hash nested erb puppet

我开始在木偶(红宝石)发展,我有以下问题.

我有我想要在模板文件中迭代的当前哈希.

$database_profile_hash = 
{
  cpu   => {
    governor => ondemand
    energy_perf_bias => powersave
  }
  sysctl => {
    kernel.sched.min.granularity.ns => 10000000
    kernel.sched.wakeup.granularity.ns => 15000000
    kernel.msgmnb => 6
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我目前的模板如下:

<% @database_profile_array.each do |arrayValue| %>
[<%= arrayValue %>]
<% database_profile_hash[arrayValue].each do |key,value| %>
<%= key %> <%= value %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

为了迭代数组,我试图使用一个数组来存储所有的第一级名称,然后用它来迭代哈希:

$ database_profile_array = [cpu,sysctl,...]

但我无法使它工作,我正在寻找这样的退出:

[cpu]
governor=ondemand
energy_perf_bias=powersave

[sysctl]
vm.laptop_mode=5
vm.dirty_writeback_centisecs=1500
kernel.nmi_watchdog=0
Run Code Online (Sandbox Code Playgroud)

我在模板中做错了什么?有一种方法可以传递变量"arrayValue"的内容来迭代哈希?

非常感谢...

dre*_*rew 13

你的模板大部分看起来很好,但这里很少.首先,您可能无法使用句点作为变量名,但更重要的是,不要忘记用逗号分隔键/值对:

$database_profile_array = [cpu,sysctl]
$database_profile_hash =
{
  cpu   => {
    governor => ondemand,
    energy_perf_bias => powersave,
  },
  sysctl => {
    kernel_sched_min_granularity_ns => 10000000,
    kernel_sched_wakeup_granularity_ns => 15000000,
    kernel_msgmnb => 6,
  }
}
Run Code Online (Sandbox Code Playgroud)

在模板中,您忘记了等号,并且您还可能希望通过使用-%>以下内容省略每次迭代的新行字符:

<% @database_profile_array.each do |arrayValue| -%>
[<%= arrayValue %>]
<% database_profile_hash[arrayValue].each do |key,value| -%>
<%= key %>=<%= value %>
<% end %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

 

编辑:OP,请注意其他人留下的评论.如果迭代序列无关紧要,则不需要单独的数组$database_profile_array来引用键,而是可以直接迭代哈希:

<% @database_profile_hash.each do |key, hash| -%>
[<%= key %>]
<% hash.each do |key,value| -%>
<%= key %>=<%= value %>
<% end %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

此外,这里-%>记录了erb木偶修剪标签.