2012-12-10 18 views
5

मैं chef_handler lwrp के माध्यम से एक शेफ हैंडलर स्थापित करने की कोशिश कर रहा हूं। यह हैंडलर (शेफ-हैंडलर-ईमेल) एक मणि में बंडल आता है।मैं शेफ हैंडलर के लिए निर्भरता कैसे स्थापित करूं?

chef_gem "chef-handler-mail" 

chef_handler "MailHandler" do 
    source 'chef/handler/mail' 
    arguments :to_address => "root" 
    action :nothing 
    supports :exception => true, :report => false 
end.run_action(:enable) 

यह ठीक काम करता है, तो मणि पहले से स्थापित है: मैं फिर एक ही नुस्खा है कि लगता है कि भीतर से हैंडलर पर बारी मणि स्थापित करने के लिए कोशिश कर रहा हूँ। हालांकि, अगर रत्न पहले से ही स्थापित नहीं है, मैं यह त्रुटि प्राप्त:

[2012-12-09T20:47:56-05:00] FATAL: LoadError: chef_handler[MailHandler] (chef_handler::email line 13) had an error: LoadError: no such file to load -- chef/handler/mail.rb 

ऐसा लगता है कि chef_handler संसाधन हैंडलर लोड करने के लिए इससे पहले कि chef_gem मार डाला और हैंडलर के लिए मणि स्थापित किया है कोशिश कर रहा है। मैं स्पष्ट रूप से दो चरणों की मैन्युअल प्रक्रिया में ऐसा कर सकता हूं जहां मेरे पास मणि स्थापित करने के लिए एक अलग नुस्खा है, फिर हैंडलर को कॉन्फ़िगर करने वाली दूसरी नुस्खा पर फ़्लिप करें, लेकिन मैं बहु-चरण मैन्युअल प्रक्रियाओं से बचने की उम्मीद कर रहा हूं। क्या यह एकल नुस्खा के माध्यम से किया जा सकता है?

chef_gem 'minitest' 
chef_gem 'minitest-chef-handler' 

require 'rubygems' 
require 'minitest-chef-handler' 

[... some unrelated code ...] 

chef_handler "MiniTest::Chef::Handler" do 
    source "minitest-chef-handler" 
    arguments :verbose => true 
    action :nothing 
end.run_action(:enable) 

chef_handler संसाधन बनाने से पहले अपनी मणि की आवश्यकता होती है प्रयास करें, या हो सकता है स्रोत अलग होना चाहिए ...

उत्तर

2

मैं महाराज minitest-बावर्ची-हैंडलर के लिए इसी तरह की एक नुस्खा है chef_handler संसाधन को "संकलन" चरण में तुरंत चलाने के लिए कारण बनता है जबकि chef_gem संसाधन सामान्य रूप से "निष्पादन" चरण के दौरान चलाया जाता है।

इसलिए भी मणि को संकलन चरण में स्थापित करने की आवश्यकता है। और ऐसा लगता है कि शेफ को मणि लोड करने के लिए require कथन की भी आवश्यकता है (जैसा कि किसी अन्य उत्तर में सुझाया गया है)।

chef_gem 'chef-handler-mail' do 
    action :nothing 
end.run_action(:install) 

require 'chef/handler/mail' 

chef_handler 'MailHandler' do 
    source 'chef/handler/mail' 
    # ... other attributes 
    action :nothing 
end.run_action(:enable) 
+0

यह सही उत्तर है। – sethvargo

-1

#run_action कॉल:

+0

यह सच नहीं है। 'Chef_gem' संसाधन हमेशा संकलन चरण में निष्पादित होता है। – sethvargo