Bagaimana menemukan lingkungan Chef dalam resep?

30

Saya ingin menjalankan sumber daya cookbook_file hanya jika lingkungan saat ini adalah "dev". Bagaimana ini bisa diungkapkan?

Dokumentasi menyarankan ini:

Dalam resep, blok kode seperti ini akan berguna:

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

Tapi saya tidak yakin itu yang saya inginkan - fakta bahwa perulangan itu keliru.

Steve Bennett
sumber

Jawaban:

46

Lihat di atribut Ruby chef_environment (bukan atribut Chef biasa) pada node:

if node.chef_environment == "dev"
  # stuff
end
Tim Potter
sumber
7
Secara khusus, chef_environment adalah metode pada objek Chef :: Node yang mengembalikan nilai lingkungan node. Ini bukan atribut simpul dan tidak boleh bingung seperti itu.
jtimberman
Terima kasih @jtimberman. Saya selalu berpikir bahwa lingkungan adalah atribut dari sebuah node tetapi masuk akal bahwa itu bukan.
Tim Potter
3
Bagus, ini berhasil. Jadi jawaban untuk pertanyaan awal saya adalah menambahkan only_if { node.chef_environment == "dev" }. Dikonfirmasi
Steve Bennett
Tidak dapat jawaban ini berfungsi. Sintaks ini bekerja untuk saya: if "#{node.chef_environment}" == "dev"
spuder
2

cara elegan lain:

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