¿Cómo encontrar el ambiente Chef en una receta?

30

Quiero ejecutar un recurso cookbook_file solo si el entorno actual es "dev". ¿Cómo se puede expresar esto?

La documentación sugiere esto:

En una receta, un bloque de código como este sería útil:

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

Pero no estoy seguro de que eso sea lo que quiero: el hecho de que sea un bucle parece incorrecto.

Steve Bennett
fuente

Respuestas:

46

Busque en el atributo chef_environment Ruby (no es un atributo Chef habitual) en el nodo:

if node.chef_environment == "dev"
  # stuff
end
Tim Potter
fuente
77
Específicamente, chef_environment es un método en el objeto Chef :: Node que devuelve el valor del entorno del nodo. No es un atributo de nodo y no debe confundirse como tal.
jtimberman
Gracias @ jtimberman. Siempre había pensado que un entorno era un atributo de un nodo, pero tiene sentido que no lo sea.
Tim Potter
3
Genial, esto funciona. Entonces la respuesta a mi pregunta original es agregar only_if { node.chef_environment == "dev" }. Confirmado.
Steve Bennett
No se pudo obtener esta respuesta para trabajar. Esta sintaxis funciona para mí: if "#{node.chef_environment}" == "dev"
spuder
2

Otra forma elegante:

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