Я начинаю развиваться в марионетке (ruby), и у меня есть следующая проблема.Кукольный. Итерация над вложенным хешем в 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 = [процессор, Sysctl ...]
Но я не могу заставить его работать, и я ищу для выхода, как это:
[cpu]
governor=ondemand
energy_perf_bias=powersave
[sysctl]
vm.laptop_mode=5
vm.dirty_writeback_centisecs=1500
kernel.nmi_watchdog=0
Что я делаю неправильно в шаблоне? Есть способ передать содержимое переменной "arrayValue", чтобы перебрать хэш?
Большое спасибо заранее ...
Обратите также внимание на то, что вам необязательно нужен отдельный массив ключей верхнего уровня. Вы можете повторить хэш верхнего уровня, чтобы получить эти ключи и связанные с ними хэши (значения). Отдельный массив полезен, только если вы хотите указать точную последовательность, в которой представлены разделы, или если вы хотите выбрать внешнее подмножество ключей верхнего уровня. –
RE ответ: вы можете захотеть упомянуть '-%>' потому, что режим обрезки Puppet ERB - '-'. RE комментарий: он также может автоматически сгенерировать этот массив с помощью 'keys' из' puppetlabs-stdlib'. –
@JohnBollinger Очень хороший момент, отредактировал мой ответ, чтобы включить ваш отзыв. Благодаря! – drewyupdrew