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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.