Chef- und Ruby-Vorlagen - Wie schleift man Schlüssel-Wert-Paare?

8

1) Ich habe einen Datensack wie folgt:

%Vor%

2) In meinem Rezept bekomme ich den Hash wie folgt.

%Vor%

3) Auch in meinem Rezept habe ich eine Vorlage wie folgt:

%Vor%

4) Ich muss meine Vorlage so aussehen lassen

%Vor%

Meine Frage ist das. Wie gebe ich den Hash an die Vorlage weiter, damit ich den Hash durchlaufen und die Vorlage erstellen kann? Ich bin kein starker Ruby Coder.

zum Beispiel:

%Vor%     
Tampa 15.07.2012, 09:18
quelle

1 Antwort

25

Es gibt einige kleine Unstimmigkeiten in Ihrem Setup. In Ihrem Datenpaket weisen Sie IP-Adressen einen Namen zu (indem Sie einen Hash in Ihrem JSON verwenden). Sie scheinen jedoch den Namen in Ihrer generierten Vorlage überhaupt nicht zu verwenden. Dies hat einige Auswirkungen, die Sie beachten sollten:

Bei der Verwendung von assoziativen Arrays (in Ruby oder JavaScript-Objekten aufgerufene Hashes) wird die Reihenfolge der Elemente im Allgemeinen nicht beibehalten und kann sich beim Hinzufügen weiterer Elemente erheblich ändern. Während einige Anstrengungen in Ruby 1.9 unternommen werden, um die Einfügereihenfolge beim Durchlaufen des Hash zu erhalten, sollten Sie sich im Allgemeinen nicht darauf verlassen. Dies führt zu zwei möglichen Alternativen zur Verbesserung Ihres Datenbeutels. Welche zu wählen ist hängt von Ihrem tatsächlichen Anwendungsfall ab:

  • Verwenden Sie ein Array anstelle des Hash. In einem Array wird die Reihenfolge garantiert eingehalten. Wenn Sie den Namen trotzdem nicht verwenden (d. H. Den Schlüssel in Ihrem ursprünglichen Hash), können Sie einfach einen Hash verwenden und hier sicher sein. Wenn Sie diesen Weg gehen, können wir das Array in der Vorlage durchlaufen und die Anzahl daraus generieren.
  • Wenn die Reihenfolge keine Rolle spielt, sollten Sie den Schlüssel im Hash verwenden, um den Server so zu benennen, wie er in Ihrer Vorlage generiert wird. Momentan verwenden Sie server<Number> in Ihrem Datenpaket, aber server.<Number> in Ihrer Vorlage. Auf diese Weise können wir den Schlüssel verwenden, um Ihre Server zu benennen und möglicherweise die generierten Namen zu überschreiben.

Verwenden eines Arrays

Wenn Sie das Array in Ihrem Datenbeutel verwenden, also wenn Sie etwas in der Art haben:

%Vor%

Sie können das Array wie folgt in Ihrer Vorlage durchlaufen:

%Vor%

Dies verwendete die ERB-Vorlagensprache , um Ihre Datei zu erstellen. Es verwendete die Methode each_with_index , um über jedes Element im Array zu iterieren.

Einen Hash verwenden

Wenn Sie stattdessen die Hash-Variante verwenden, vorausgesetzt, Sie haben die Schlüssel in Ihrem Datenbeutel so geändert, dass sie der Syntax in Ihrer endgültigen generierten Datei entsprechen, können Sie den Hash wie folgt durchlaufen:

%Vor%

Dies verwendet die Methode each_pair des Hashs, um die Schleife zu durchlaufen jedes Schlüssel-Wert-Paar und erzeugt somit eine Ausgabezeile für jedes dieser Paare.

Übergeben von Daten an die Vorlage

Als letzte Bemerkung ist Ihre Syntax zum Übergeben von Daten an die Vorlage in Ihrem Rezept seltsam. Als erstes sollten Sie niemals Namen verwenden, die mit einem Großbuchstaben für Variablen beginnen (wie Ihre ZOOKEEPER Variable). In Ruby identifizieren diese Konstanten (wie Wertkonstanten, Klassen, Module, ...). Verwenden Sie stattdessen einen Kleinbuchstaben. Ruby verwendet snake_case für Variablennamen per Konvention.

Wenn Sie den Wert an Ihre Vorlage übergeben, können Sie die Variable einfach übergeben:

%Vor%     
Holger Just 15.07.2012, 09:47
quelle

Tags und Links