2013-09-24 10 views
8

Es gibt mehr Möglichkeiten für die Existenz eines verschachtelten Attributs in Koch zu überprüfen, und ich bin nicht sicher, was richtig ist/gut, und wenn überhaupt in leeren Attributen führt auf dem Knoten gespeichert werden:Was ist der richtige Weg, um nach einem verschachtelten Attribut in Chef zu suchen?

node[:parent] and node[:parent][:child] 

node.attribute?(:parent) and node[:parent].attribute?(:child)) 

node[:parent].nil? and node[:parent][:child].nil? 

Es wäre sehr wünschenswert, in der Lage zu sein, gleichzeitig nach Eltern und Kind zu suchen, aber ich weiß nicht, ob das möglich ist. Ich benutze Chef 10, nicht Chef 11, obwohl Antworten erklären entweder willkommen sind.

Antwort

11

Knotenattribut Objekt ist HashMap. Sie können die native Ruby-API verwenden, um verschachtelte Attribute zu suchen.

Chef Node Objekt wie eine Reihe von Hilfsmethoden bestimmt:

node.attribute?() 
node[:foo].attribute?(:bar) 
node[:foo].member?(:bar) 

Es gibt auch eine neue Methode node.debug_value() in Koch 11 Sie Debug-Knoten Attribute zu helfen, das ist auch hilfreich:

node.debug_value(:foo, :bar) 

Details finden Sie im Artikel Chef 11 In-Depth: Attributes Changes

2

Schauen Sie sich das Koch-Zucker-Kochbuch deep_fetch Erweiterung, die al Lows für sichere Verweise auf tiefe Attribute.

4

Der Weg, den ich in letzter Zeit gelöst habe, war, immer die Standardwerte für die in einem Kochbuch verwendeten Attribute zu setzen, wo immer es möglich war.

Zum Beispiel cookbook/attributes/default.rb würde enthalten:

default[:parent][:child] = nil 

Und die im Rezept, jeder Scheck für den Wert Attribute können zu reduzieren:

node[:parent][:child].nil? 

Natürlich, es ist in der Regel viel nützlicher einen brauchbaren Standardwert haben und überhaupt nicht prüfen müssen.

Verwandte Themen