1

I am trying to use a local variable in an included file. I get the error that's it's not defined. I am not sure a way to do this, do you? I have a recipe folder with:

recipes/
    development.rb
    testing.rb
    config.rb

development.rb

username = "vagrant"
static = []
django = ["project1", "project2"]

include_recipe "server::config"   # <-- Trying to use static and django in there.

config.rb

static.each do |vhost|  #  <-- How do I get the "static" var in here?
    ...
end

django.each do |vhost|  #  <-- How do I get the "django" var in here?
    ...
end

2 Answers 2

6

You can't share variables between recipes, but there are two ways to share data between recipes.

  1. The preferred route would be to externalize static and django as attributes in attributes/default.rb. This means they'll become available on the node object and accessible from each recipe.

attributes/default.rb

default["server"]["static"] = []
default["server"]["django] = ["project1", "project2"]

recipes/config.rb

node["server"]["static"].each do |vhost|
  ...
end

node["server"]["django"].each do |vhost|
  ...
end
  1. Use Chef libraries to make a common method that returns these arrays.

My suggestion is to definitely stick with option one, it's the most common approach. Hope that helps!

2
  • You are the man!!!!!!!!
    – JREAM
    Feb 5, 2015 at 0:23
  • 1
    Glad to help :) Feb 5, 2015 at 2:59
3

A bit late to the party on this one, and I think the accepted solution is the preferred option here, but...

It is possible to set a variable in a 'parent' recipe and have it used in an included recipe by modifying the node at converge e.g.

node.default['django'] = ["project1", "project2"]

I have done this in the past where I want a helper recipe to behave slightly differently when called from different 'parent' recipes i.e. installing a different git repo, based on a accessing a slightly different set of config from the attributes.

As to whether this is best practise, I welcome comments, but it seemed easier than writing a resource to wrap the git lwrp.

You must log in to answer this question.

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