Comment retrouver l'environnement Chef dans une recette?

30

Je veux exécuter une ressource cookbook_file uniquement si l'environnement actuel est "dev". Comment cela peut-il s'exprimer?

La documentation suggère ceci:

Dans une recette, un bloc de code comme celui-ci serait utile:

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

Mais je ne suis pas sûr que ce soit ce que je veux - le fait que ce soit une boucle semble faux.

Steve Bennett
la source

Réponses:

46

Regardez dans l'attribut Ruby chef_environment (pas un attribut Chef normal) sur le nœud:

if node.chef_environment == "dev"
  # stuff
end
Tim Potter
la source
7
Plus précisément, chef_environment est une méthode sur l'objet Chef :: Node qui renvoie la valeur de l'environnement du nœud. Ce n'est pas un attribut de nœud et ne doit pas être confondu en tant que tel.
jtimberman
Merci @jtimberman. J'avais toujours pensé qu'un environnement était un attribut d'un nœud, mais il est logique que ce ne soit pas le cas.
Tim Potter
3
Génial, cela fonctionne. Donc, la réponse à ma question initiale est d'ajouter only_if { node.chef_environment == "dev" }. Confirmé.
Steve Bennett
Impossible de faire fonctionner cette réponse. Cette syntaxe fonctionne pour moi: if "#{node.chef_environment}" == "dev"
spuder
2

une autre manière élégante:

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