[chef] Re: how to manage dependent resources?


Chronological Thread 
  • From: Bryan Berry < >
  • To:
  • Subject: [chef] Re: how to manage dependent resources?
  • Date: Wed, 29 Feb 2012 10:10:51 +0100
  • Authentication-results: mr.google.com; spf=pass (google.com: domain of designates 10.52.17.82 as permitted sender) ; dkim=pass

argh my fears confirmed

The tomcat lwrp requires that the skeleton tomcat already exist in /usr/local/tomcat/, created by the tomcat::base recipe. Using `run_action` causes the tomcat lwrp to run before tomcat::base, argh

The only way I can see to fix this is hang the calculated values off of the node object, so that the tomcat lwrp adds the base attribute to node['jira']['base'] = t.base

and then create a special attribute for my ivy lwrp dest_attr that tells the ivy lwrp to look in a node attribute for the value

ivy "mysql" do
  groupId "mysql"
  version "5.1.18"
  dest    "jira_base/lib"  # tells ivy to look in node['jira']['base']/lib
end

but frankly, this is pretty damn ugly



On Wed, Feb 29, 2012 at 9:53 AM, Bryan Berry < "> > wrote:
I have an issue where I need to provide values generated dynamically by one resource to resources that follow it

My tomcat lwrp generates a base directory for each new instance that is a readable attribute "base"

Following resources will use that base attribute. In this example, the ivy resource should place a .jar file in the #{base}/lib directory 


include_recipe "ark"                                                                                                                          
include_recipe "tomcat::base"                                                                                                                 
include_recipe "ivy"                                                                                                                          
                                                                                                                                              
t = tomcat "jira" do                                                                                                                          
  user node['jira']['user']                                                                                                                   
  action :install                                                                                                                             
end                                                                                                                                           

                                                                                                                                             
# get mysql connector                                                                                                                         
ivy "mysql-connector-java" do                                                                                                                 
  groupId "mysql"                                                                                                                             
  version "5.1.18"                                                                                                                            
  dest    "#{t.base}/lib"    # evaluates to "/lib"                                                                                                                      
end                                                                                                                                           
                                                                                                                                              
ruby_block "foobarbaz" do                                                                                                                     
  block do                                                                                                                                    
    Chef::Log.debug("t.base is #{t.base}")    # t.base evaluates to  "/usr/local/tomcat/jira"                                                                                                
  end                                                                                                                                         
end                                                                                                                                           

I have found a solution thanks to Jorge Espada, but there really should be a more straightforward way to do this. 
       
t = tomcat "jira" do                                                                                                                          
  user node['jira']['user']                                                                                                                   
  action :nothing                                                                                                                             
end                                                                                                                                  
t.run_action :install




Archive powered by MHonArc 2.6.16.

§