Ich fange an, in Marionette (Rubin) zu entwickeln, und ich habe das folgende Problem.Marionette. Iterate über einen verschachtelten Hash in ERB
Ich habe den aktuellen Hash, den ich in einer Vorlagendatei iterieren möchte.
$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
}
...
}
Und meine aktuelle Vorlage ist die folgende:
<% @database_profile_array.each do |arrayValue| %>
[<%= arrayValue %>]
<% database_profile_hash[arrayValue].each do |key,value| %>
<%= key %> <%= value %>
<% end %>
<% end %>
das Array iterieren ich ein Array zu verwenden, ich versuche, alle Namen der ersten Ebene zu speichern und dann den Hash iterieren verwenden:
$ database_profile_array = [cpu, sysctl, ...]
Aber ich bin nicht in der Lage, damit es funktioniert und ich bin auf der Suche nach einem Ausgang wie folgt aus:
[cpu]
governor=ondemand
energy_perf_bias=powersave
[sysctl]
vm.laptop_mode=5
vm.dirty_writeback_centisecs=1500
kernel.nmi_watchdog=0
Was mache ich falsch in der Vorlage? Es gibt eine Möglichkeit, den Inhalt der Variablen "arrayValue" an den Hash zu übergeben.
Vielen Dank im Voraus ...
Beachten Sie auch, dass Sie nicht unbedingt ein separates Array der Top-Level-Schlüssel benötigen. Sie können den Hash der obersten Ebene durchlaufen, um diese Schlüssel und die zugehörigen Hashwerte (Werte) abzurufen. Das separate Array ist nur dann nützlich, wenn Sie die genaue Reihenfolge angeben möchten, in der die Abschnitte angezeigt werden, oder wenn Sie eine extern gerichtete Teilmenge der Schlüssel der obersten Ebene auswählen möchten. –
RE Antwort: Sie können erwähnen, '-%>' ist, weil Puppet ERB Trimmmodus '-' ist. RE-Kommentar: Er kann dieses Array auch automatisch mit 'keys' aus' puppetlabs-stdlib' erzeugen. –
@JohnBollinger Sehr guter Punkt, bearbeitete meine Antwort mit Ihrem Tipp. Vielen Dank! – drewyupdrew