Come trovare l'ambiente Chef in una ricetta?


30

Voglio eseguire una risorsa cookbook_file solo se l'ambiente attuale è "dev". Come può essere espresso?

La documentazione suggerisce questo:

In una ricetta, un blocco di codice come questo sarebbe utile:

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

Ma non sono sicuro che sia quello che voglio - il fatto che sia un loop sembra sbagliato.

Risposte:


46

Cerca l'attributo chef_environment Ruby (non un normale attributo Chef) sul nodo:

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

7
In particolare, chef_environment è un metodo sull'oggetto Chef :: Node che restituisce il valore dell'ambiente del nodo. Non è un attributo del nodo e non deve essere confuso come tale.
jtimberman,

Grazie @jtimberman. Ho sempre pensato che un ambiente fosse un attributo di un nodo, ma ha senso che non lo sia.
Tim Potter,

3
Ottimo, questo funziona. Quindi la risposta alla mia domanda originale è aggiungere only_if { node.chef_environment == "dev" }. Confermato.
Steve Bennett,

Impossibile ottenere questa risposta per funzionare. Questa sintassi funziona per me: if "#{node.chef_environment}" == "dev"
spuder

2

un altro modo elegante:

if ['production','development'].include? node.chef_environment
    #do something here
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.