Wie finde ich die Chefumgebung in einem Rezept?

30

Ich möchte eine cookbook_file-Ressource nur ausführen, wenn die aktuelle Umgebung "dev" ist. Wie kann das ausgedrückt werden?

Die Dokumentation schlägt Folgendes vor:

In einem Rezept wäre ein solcher Codeblock nützlich:

qa_nodes = search(:node,"chef_environment:QA")      
qa_nodes.each do |qa_node|                          
    # Do useful specific to qa nodes only
end

Aber ich bin mir nicht sicher, ob ich das will - die Tatsache, dass es sich um eine Schleife handelt, scheint falsch.

Steve Bennett
quelle

Antworten:

46

Sehen Sie sich das Ruby-Attribut chef_environment (kein reguläres Chef-Attribut) auf dem Knoten an:

if node.chef_environment == "dev"
  # stuff
end
Tim Potter
quelle
7
Insbesondere ist chef_environment eine Methode für das Chef :: Node-Objekt, die den Wert der Umgebung des Knotens zurückgibt. Es ist kein Knotenattribut und sollte nicht als solches verwechselt werden.
Jtimberman
Danke @jtimberman. Ich hatte immer gedacht, dass eine Umgebung ein Attribut eines Knotens ist, aber es macht Sinn, dass dies nicht der Fall ist.
Tim Potter
3
Großartig, das funktioniert. Also ist die Antwort auf meine ursprüngliche Frage hinzuzufügen only_if { node.chef_environment == "dev" }. Bestätigt.
Steve Bennett
Konnte diese Antwort nicht zum Laufen bringen. Diese Syntax funktioniert für mich: if "#{node.chef_environment}" == "dev"
Spuder
2

eine andere elegante Art:

if ['production','development'].include? node.chef_environment
    #do something here
end
Ilja
quelle