31

I want to run a cookbook_file resource only if the current environment is "dev". How can this be expressed?

The documentation suggests this:

In a recipe, a code block like this would be useful:

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

But I'm not sure that's what I want - the fact it's a loop seems wrong.

2 Answers 2

47

Look in the chef_environment Ruby attribute (not a regular Chef attribute) on the node:

if node.chef_environment == "dev"
  # stuff
end
4
  • 7
    Specifically, chef_environment is a method on the Chef::Node object that returns the value of the node's environment. It is not a node attribute and should not be confused as such.
    – jtimberman
    Aug 15, 2012 at 21:50
  • Thanks @jtimberman. I had always thought of an environment being an attribute of a node but it does make sense that it's not.
    – Tim Potter
    Aug 15, 2012 at 22:56
  • 3
    Great, this works. So the answer to my original question is to add only_if { node.chef_environment == "dev" }. Confirmed. Aug 16, 2012 at 0:39
  • Couldn't get this answer to work. This syntax does work for me: if "#{node.chef_environment}" == "dev"
    – spuder
    Aug 20, 2015 at 16:31
2

another elegant way:

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .