[chef] Re: Re: How to pass a variable to another recipe?


Chronological Thread 
  • From: Robert Freiberger < >
  • To:
  • Subject: [chef] Re: Re: How to pass a variable to another recipe?
  • Date: Sat, 14 Mar 2015 00:18:25 +0000

I have that defined in the recipe, but I want to make the steps easier by only changing one instance of the script name. Here's what I'm thinking (also not even sure it's recommended for the Chef way). 

/recipes/default.rb

1) Defines a runstate as follows, this is the script name the user wants to copy to the host. 

node.run_state[:script_1] = "check_httpd.rb" 

2) Includes the second recipe that would copy over the script defined in step 1. 

include mycookbook::copyscript

/recipes/copyscript.rb

1) Would first assign the node run_state to the filename. 

filename = node.run_state[:script_1]

2) Copy this from the cookbook_file resource.

cookbook_file "/bin/tools/#{filename}" do
  source "#{filename}"
  mode "0755"
end

The problem I'm having is that I still need to define the name "script_1" in my copy recipe. So it's not able to share across other recipes that may want to use this recipe. Ideally I would like to somehow call copyscript.rb and send the variable name when I include it in a recipe. But I think this is better suited for a lwrp? Apologies as it was confusing to explain over word. 

Thanks,
Robert


On Fri, Mar 13, 2015 at 2:29 PM Steven Murawski < " target="_blank"> > wrote:
Wouldn't an attribute suffice to share the location?  You have to define where the cookbook_file is going and if you use an attribute to define the target location, it'll be available for other recipes as well.

Steve

Steven Murawski
Community Software Development Engineer @ Chef
Microsoft MVP - PowerShell
http://stevenmurawski.com

On 3/13/2015 4:14:37 PM, Robert Freiberger < " target="_blank"> > wrote:

Hello Chef, 

I have a recipe that copies a file over from <cookbook>/files/default/myscript.rb to the node locally. Right now I have this hard coded where it's using the name listed in the recipe, but I would like to make this use a variable listed in another recipe. 

So the end goal would be a recipe like launch_script.rb would call the script copy the file over using the copy recipe, only based upon a variable name listed in the launch_script.rb recipe. 

From what I found, this is only possible using a node runtime like

node.run_state[:script_1] = "check_httpd.rb"
filename = node.run_state[:script_1]

But this still requires me to add the "node.run_state[:script_1] added to the copy recipe. 

Is there any way to send a variable to a recipe without hardcoding the name in the recipe? Or what is really the correct Chef way? Create a new resource?

Thanks,
Robert



Archive powered by MHonArc 2.6.16.

§