簡體   English   中英

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

[英]Puppet. Iterate over a nested hash in ERB

我開始在木偶(紅寶石)發展,我有以下問題。

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

$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
  }
  ...
}

我目前的模板如下:

<% @database_profile_array.each do |arrayValue| %>
[<%= arrayValue %>]
<% database_profile_hash[arrayValue].each do |key,value| %>
<%= key %> <%= value %>
<% end %>
<% end %>

為了迭代數組,我試圖使用一個數組來存儲所有的第一級名稱,然后用它來迭代哈希:

$ 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

我在模板中做錯了什么? 有一種方法可以傳遞變量“arrayValue”的內容來迭代哈希值嗎?

非常感謝...

你的模板大部分看起來很好,但這里很少。 首先,您可能無法使用句點作為變量名,但更重要的是,不要忘記用逗號分隔鍵/值對:

$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,
  }
}

在模板中,您忘記了等號,並且您還可能希望使用-%>省略每次迭代的新行字符:

<% @database_profile_array.each do |arrayValue| -%>
[<%= arrayValue %>]
<% database_profile_hash[arrayValue].each do |key,value| -%>
<%= key %>=<%= value %>
<% end %>
<% end -%>

編輯:OP,請注意其他人留下的評論。 如果迭代序列無關緊要,則不需要單獨的數組$database_profile_array來引用鍵,而是可以直接迭代哈希:

<% @database_profile_hash.each do |key, hash| -%>
[<%= key %>]
<% hash.each do |key,value| -%>
<%= key %>=<%= value %>
<% end %>
<% end -%>

此外, 此處還記錄了-%> erb木偶修剪標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM