Como encontrar o ambiente Chef em uma receita?

30

Eu quero executar um recurso cookbook_file apenas se o ambiente atual for "dev". Como isso pode ser expresso?

A documentação sugere o seguinte:

Em uma receita, um bloco de código como este seria útil:

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

Mas não tenho certeza de que é isso que quero - o fato de ser um loop parece errado.

Steve Bennett
fonte

Respostas:

46

Procure no atributo chef_environment Ruby (não um atributo comum do Chef) no nó:

if node.chef_environment == "dev"
  # stuff
end
Tim Potter
fonte
7
Especificamente, chef_environment é um método no objeto Chef :: Node que retorna o valor do ambiente do nó. Não é um atributo do nó e não deve ser confundido como tal.
jtimberman
Obrigado @jtimberman. Eu sempre pensei que um ambiente fosse um atributo de um nó, mas faz sentido que não seja.
Tim Potter
3
Ótimo, isso funciona. Portanto, a resposta para minha pergunta original é adicionar only_if { node.chef_environment == "dev" }. Confirmado.
9788 Steve Bennett
Não foi possível obter esta resposta para o trabalho. Essa sintaxe funciona para mim: if "#{node.chef_environment}" == "dev"
spuder
2

outra maneira elegante:

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