2016-04-10 2 views
1

Ich versuche, eine leere Chef-Attribut wie so zu initialisieren:Anfügen an Chef-Array-Attribut

node.default['tool_list'] = Array.new

und ich möchte Elemente dieses Array als Kochbuch läuft hinzuzufügen, und verwenden Sie schließlich, dass eine vollständige Array als eine Eingabe zum letzten Rezept im Kochbuch. So

wie jedes Rezept läuft, ich versuche, auf das Attribut wie folgt anhängen:

node['tool_list'] << "tool:Python_2.7"

, die ich ein paar Mal für verschiedene Werkzeuge zu tun, und dann schließlich zitieren in einer Ressource in meinem letzten Rezept:

resource "example" do 
    labels   node['tool_list'] 
end 

Ausgenommen das scheint nicht zu funktionieren und das endgültige Attribut scheint leer zu sein. Was mache ich falsch? Wie kann man das Attribut so anhängen?

Antwort

2

Dies ist wirklich sehr nicht zu empfehlen. Arrays haben keine Semantik für eine überlagerte Zusammenführung, so dass das Zeug sehr schnell merkwürdig wird. Ein besserer Ansatz ist es, einen Hash zu verwenden und dann node['tool_list'].keys oder etwas ähnliches zu verwenden. Außerdem könnten Sie in eine Kompilierungs-/Konvergenz-Diskrepanz geraten und müssen Dinge für eine verzögerte Auswertung einbinden (lazy { node['tool_list'].keys }).