2013-04-19 8 views
5

में हल्के प्रदाता का विस्तार कैसे करें मैं विभिन्न प्रकार के अनुप्रयोगों को तैनात करने के लिए विभिन्न शेफ प्रदाताओं का एक समूह बना रहा हूं। Extend a Lightweight Provider के लिए शेफ के दस्तावेज़ीकरण से पता चलता है कि यह संभव है लेकिन वास्तव में यह नहीं कहता कि क्या करना है। उस पृष्ठ से पता चलता है कि शायद mixin पर कॉल की आवश्यकता है, लेकिन मुझे नहीं पता कि /libraries के तहत फ़ाइल में मेरे कोड में कौन सी संरचना होनी चाहिए या वास्तव में /providers के तहत उस कोड को वास्तव में कैसे शामिल किया जाए।शेफ

यहां दिए गए उदाहरण हैं जो मैं करना चाहता हूं।

मेरी आधार वर्ग में /libraries के तहत:

repository "http://my.svn.server/#{deployment[:project]}/branches/#{node[:chef_environment]}/" 
user "deploy" 
scm_provider Chef::Provider::Subversion 
svn_username "svn_user" 
svn_password "password" 

Torquebox रेल एप्लिकेशन की तैनाती के लिए अपने प्रदाता में:

deploy_revision "/my/deployment/directory/#{deployment[:project]}" do 
    # Magically mixin the code from libraries 
    environment "RAILS_ENV" => node[:chef_environment] 
    restart_command "rake torquebox:deploy" 
end 

और फिर निश्चित रूप से अनुप्रयोगों के विभिन्न प्रकार के लिए प्रदाताओं के अन्य प्रकार।

क्या कोई मुझे इस पर सही दिशा में इंगित कर सकता है? क्या वहां कहीं दस्तावेज है जो मुझे याद आ रही है?

उत्तर

7

शेफ रनटाइम पर automatically convert the LWRP DSL into a full-blown Ruby class होगा। यह फ़ाइल के नाम के बाद कुकबुक के नाम से निर्धारित होता है (यह वही तरीका है जो वास्तविक संसाधन नाम बनाया गया है)।

तो अगर आप एक रसोई की किताब bacon नामित और bacon/resources/eat.rb में एक LWRP है, जुड़े LWRP bacon_eat है। संबंधित वर्ग इस मामले में ऊंट-आधारित, निरंतर संस्करण - Chef::Resource::BaconEat और Chef::Provider::BaconEat है।

इस पैटर्न के लिए एक अपवाद है - default। शेफ भूमि में "डिफ़ॉल्ट" विशेष है, क्योंकि यह उपसर्ग नहीं है। तो अगर आपके पास bacon नामक एक कुकबुक है और bacon/resources/default.rb में एक एलडब्लूआरपी है, तो संबंधित एलडब्लूआरपी bacon है (bacon_default नहीं)। संबंधित वर्ग इस मामले में ऊंट-आधारित, निरंतर संस्करण - Chef::Resource::Bacon और Chef::Provider::Bacon ("BaconDefault" नहीं) है।

ठीक है, तो बैकस्ट्रीरी क्यों? एलडब्लूआरपी बढ़ाने के लिए, आप एलडब्लूआरपी की कक्षा (रूबीवाद) से उत्तराधिकारी बनना चाहते हैं।

class Chef 
    class Resource::MyResource < Resource::Bacon # <- this 
    end 
end 

तो, अपने उदाहरण में:

class Chef 
    class Resource::MyDeployRevision < Resource::DeployRevision 
    def initialize(name, run_context = nil) 
     super 

     # This is what you'll use in the recipe DSL 
     @resource_name = :my_deploy_revision 

     # Things like default action and parameters are inherited from the parent 

     # Set your default options here 
     @repository = "http://my.svn.server/#{node['deployment']['project']}/branches/#{node.chef_environment}/" 
     @user = 'deploy' 
     @scm_provider = Chef::Provider::Subversion 
     @svn_username = 'svn_user' 
     @svn_password = 'password' 
    end 
    end 
end 

फिर अपने व्यंजनों में my_deploy_revision उपयोग करती हैं इसलिए अपने libraries/ निर्देशिका में, आप अपने कस्टम संसाधन का विस्तार करना चाहते हैं।

+1

बहुत बढ़िया, लिखने के लिए धन्यवाद। मैं जल्द ही शेफ-लैंड में फिर से उद्यम करने के लिए कुछ समय निकालने की कोशिश करूंगा और इसे आजमाएं। –

+0

@ सेठवर्गो आपका उत्तर यहां आपके अन्य उत्तरों [एलडब्ल्यूआरपी को विस्तारित करने के बारे में] लगता है (http://stackoverflow.com/a/21152840/1995977), जहां आपने कहा था कि एलडब्लूआरपी का विस्तार करना काफी मुश्किल है। क्या आप कृपया स्पष्टीकरण दे सकते हैं? मुझे 'simple_iptables' LWRPs के साथ ऐसा करने में काफी दिलचस्पी है ... –

+1

मुश्किल! = असंभव ... – sethvargo

संबंधित मुद्दे