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.

Respostas:


46

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

if node.chef_environment == "dev"
  # stuff
end

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.