Làm thế nào để tìm môi trường Chef trong một công thức?


30

Tôi chỉ muốn chạy tài nguyên cookbook_file nếu môi trường hiện tại là "dev". Làm thế nào điều này có thể được thể hiện?

Các tài liệu cho thấy điều này:

Trong một công thức, một khối mã như thế này sẽ hữu ích:

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

Nhưng tôi không chắc đó là điều tôi muốn - thực tế đó là một vòng lặp có vẻ sai.

Câu trả lời:


46

Tìm trong thuộc tính Chef_en môi trường Ruby (không phải thuộc tính Chef thông thường) trên nút:

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

7
Cụ thể, Chef_en môi trường là một phương thức trên đối tượng Chef :: Node trả về giá trị của môi trường của nút. Nó không phải là một thuộc tính nút và không nên nhầm lẫn như vậy.
jtimberman

Cảm ơn @jtimberman. Tôi đã luôn nghĩ rằng một môi trường là một thuộc tính của một nút nhưng nó có nghĩa là nó không.
Tim Potter

3
Tuyệt vời, công trình này. Vì vậy, câu trả lời cho câu hỏi ban đầu của tôi là thêm only_if { node.chef_environment == "dev" }. Khẳng định.
Steve Bennett

Không thể có câu trả lời này để làm việc. Cú pháp này có tác dụng với tôi: if "#{node.chef_environment}" == "dev"
spuder 20/08/2015

2

một cách thanh lịch khác:

if ['production','development'].include? node.chef_environment
    #do something here
end
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.