Как найти среду шеф-повара в рецепте?

30

Я хочу запустить ресурс cookbook_file только в том случае, если текущая среда - "dev". Как это можно выразить?

Документация предлагает это:

В рецепте полезен такой блок кода:

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

Но я не уверен, что это то, чего я хочу - тот факт, что это петля, кажется неправильным.

Стив Беннетт
источник

Ответы:

46

Посмотрите в атрибуте Ruby chef_environment (не обычный атрибут Chef) на узле:

if node.chef_environment == "dev"
  # stuff
end
Тим Поттер
источник
7
В частности, chef_environment - это метод объекта Chef :: Node, который возвращает значение среды узла. Это не атрибут узла, и его не следует путать как таковой.
Jtimberman
Спасибо @jtimberman. Я всегда думал, что среда является атрибутом узла, но имеет смысл, что это не так.
Тим Поттер
3
Отлично, это работает. Таким образом, ответ на мой оригинальный вопрос должен добавить only_if { node.chef_environment == "dev" }. Подтверждено.
Стив Беннетт
Не удалось получить этот ответ на работу. Этот синтаксис работает для меня: if "#{node.chef_environment}" == "dev"
spuder
2

еще один элегантный способ:

if ['production','development'].include? node.chef_environment
    #do something here
end
Ilja
источник