Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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.

share|improve this question
add comment

1 Answer

up vote 14 down vote accepted

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

if node.chef_environment == "dev"
  # stuff
end
share|improve this answer
2  
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 '12 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 '12 at 22:56
    
Great, this works. So the answer to my original question is to add only_if { node.chef_environment == "dev" }. Confirmed. –  Steve Bennett Aug 16 '12 at 0:39
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.