如何在食谱中找到Chef环境?


30

我只想在当前环境为“ dev”时运行cookbook_file资源。如何表达呢?

该文档建议这样做:

在配方中,这样的代码块将很有用:

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

但是我不确定那不是我想要的-这实际上是一个循环似乎是错误的。

Answers:


46

在节点上查看chef_environment Ruby属性(不是常规的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"
有用

2

另一种优雅的方式:

if ['production','development'].include? node.chef_environment
    #do something here
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.