¿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.

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.