पाठकों को इस सवाल और भविष्य में जवाब यह है कि बावर्ची से परिचित नहीं हो सकता है के लिए आ रहा के लिए, एक बावर्ची रन नोड "अभिसरण", या नीति में घोषित के साथ लाइन में यह लाता है यह नुस्खा चल रहा है। इसे "अभिसरण" भी कहा जाता है। इसमें दो चरण हैं, "संकलित करें" और "निष्पादित करें।" संकलन चरण तब होता है जब शेफ रिसोर्स संग्रह में जोड़ने के लिए संसाधनों की तलाश में व्यंजनों के रूबी कोड का मूल्यांकन करता है ("संकलित")। एक बार यह पूरा होने के बाद, यह प्रत्येक संसाधन के लिए इच्छित कार्यों में इसे "निष्पादित" करता है। सिस्टम कमांड चलाए जाते हैं, आदि
एरिक होलेन्सबे ने उत्कृष्टhow this works in 2013 के माध्यम से चलना लिखा।
अब, उत्तर के लिए:
ऐसे कई तरीके हैं एक बावर्ची रन अंत, या एक बावर्ची नुस्खा बाहर निकलते हैं, आप कैसे इसके बारे में जाने के लिए, के बाद से बावर्ची व्यंजनों रूबी कोड हैं चाहते हैं पर निर्भर करता है के लिए कर रहे हैं।
यदि आपका लक्ष्य किसी शर्त के आधार पर नुस्खा को प्रसंस्करण करना बंद करना है, लेकिन शेष रन के साथ जारी रखें, तो return
रूबी कीवर्ड का उपयोग करें। उदाहरण के लिए:
file '/tmp/ponies' do
action :create
end
return if node['platform'] == 'windows'
package 'bunnies-and-flowers' do
action :install
end
हम अनुमान है कि अगर सिस्टम विंडोज है, यह एक पैकेज प्रबंधक कि खरगोशों और फूल पैकेज स्थापित कर सकते हैं नहीं है, तो हम वापस लौटें।
आप बावर्ची निरस्त करने के लिए चाहते हैं, तो पूरी तरह से चलाने के
जानने के कुछ अन्य बातों के आप कर सकते हैं। महाराज बाहर निकलता है अगर यह शेफ रन में कहीं भी एक अनचाहे अपवाद का सामना करता है। उदाहरण के लिए, यदि कोई टेम्पलेट संसाधन अपनी स्रोत फ़ाइल नहीं ढूंढ सकता है, या यदि शेफ चलाने वाले उपयोगकर्ता को निर्देशिका बनाने जैसी कुछ करने की अनुमति नहीं है। यही कारण है कि raise
का उपयोग एक रन समाप्त करने के लिए काम करता है।
जहां आप raise
मामले डालते हैं। यदि आप इसे ruby_block
संसाधन में उपयोग करते हैं, तो यह केवल अभिसरण चरण में अभिसरण चरण के दौरान उठाएगा। यदि आप उपरोक्त उदाहरण return
उदाहरण के संसाधन के बाहर इसका उपयोग करते हैं, तो यह संकलन चरण के दौरान होगा।
file '/tmp/ponies' do
action :create
end
raise if node['platform'] == 'windows'
package 'bunnies-and-flowers' do
action :install
end
शायद हमारे पास विंडोज़ पर एक पैकेज मैनेजर है, और हम यह पैकेज स्थापित करना चाहते हैं। बढ़ोतरी के परिणामस्वरूप शेफ मोटे तौर पर बाहर निकलता है और एक स्टैक ट्रेस दे रहा है।
एक और तरीका Chef::Application.fatal!
का उपयोग करना है। यह शेफ लॉगर और एसटीडीईआरआर को fatal
संदेश लॉग करता है, और एप्लिकेशन से बाहर निकलता है। आप इसे एक रिटर्न कोड भी दे सकते हैं (शायद आपके पास एक स्क्रिप्ट है जो उनको जांचती है?)।
Chef::Application.fatal!("Didn't expect the Spanish Inquistion", 42) if spanish_inquisition
(निश्चित रूप से spanish_inquisition
आमतौर पर शून्य के बाद से कोई भी इसे उम्मीद है ... मैं पीछे हटना है ...)
इसके परिणामस्वरूप शेफ बाहर निकलने, लॉग संदेश भेजा गया, और प्रक्रिया से वापसी कोड 42 होगा।
नोट: यह, बाहर निकलने के लिए पूरा आवेदन का कारण बनता है, जिसका अर्थ है कि यह एक daemonized सेवा के रूप में चल रहा है, यह समाप्त होगा, और कैसे सेवा प्रबंधित किया जाता है पर निर्भर करता है, यह या फिर से शुरू नहीं हो सकता है। उदाहरण के लिए, init.d
सेवा पुनरारंभ नहीं होगी, लेकिन runit
सेवा होगी।
व्यंजनों रूबी हैं, इसलिए आप begin..rescue
ब्लॉक के साथ त्रुटि स्थितियों को भी गहन रूप से संभाल सकते हैं।
begin
dater = data_bag_item(:basket, "flowers")
rescue Net::HTTPServerException
# maybe some retry code here?
raise "Couldn't find flowers in the basket, need those to continue!"
end
data_bag_item
बावर्ची सर्वर पर एक डेटा बैग के लिए एक HTTP अनुरोध बनाता है, और वहाँ सर्वर से कोई समस्या होने पर एक Net::HTTPServerException
वापस आ जाएगी (404 नहीं मिला, 403 अनधिकृत, आदि)। हम संभवतः पुनः प्रयास करने या कुछ अन्य हैंडलिंग करने का प्रयास कर सकते हैं, और फिर raise
पर वापस आ सकते हैं।
रिपोर्टिंग त्रुटियाँ
सीधे शब्दों में बाहर निकलने और एक स्टैक ट्रेस घालना ठीक आप कमांड लाइन से बावर्ची चला रहे हैं है। हालांकि, अगर आप क्रॉन में या कुछ, या यहां तक कि दर्जनों या सैकड़ों मशीनों में डेमॉन के रूप में इसे चला रहे हैं, तो समस्या होने पर स्वच्छता रखने का यह एक अच्छा तरीका नहीं है।
Chef's report/exception handler feature दर्ज करें। आप अपने शेफ रन के लिए हैंडलर का उपयोग कर सकते हैं। शेफ रन के अंत में सभी रिपोर्ट हैंडलर चलाए जाते हैं। अपर्याप्त शेफ रन के अंत में अपवाद हैंडलर चलाए जाते हैं। रन की स्थिति को ट्रैक किया जाता है, और हैंडलर में चेक किया जा सकता है, ताकि आप एक ऐसे व्यक्ति को लिख सकें जो दोनों प्रकार के रन (सफल/पूर्ण या असफल/निरस्त) को संभालता है।
documentation आपको बताता है कि एक कैसे लिखना है। यह भी है कि आप सेवाओं की एक किस्म के लिए उपयोग कर सकते हैं, सहित उपलब्ध open source handlers की एक सूची में शामिल हैं:
- एसएमटीपी
- आईआरसी
- ग्रेफाइट
- HipChat से अधिक ईमेल
और कई और अधिक ।
बहुत बढ़िया जवाब! बहुत उपयोगी। मैंने इसे विभिन्न शेफ संसाधनों में देखा था, लेकिन इसे नहीं मिला। अगर मेरे पास था, तो यह प्रश्न मौजूद नहीं होगा।हाल ही में, मैंने फैसला किया कि जब मैंने किसी प्रश्न के उत्तर की खोज की और उसे या तो स्टैक ओवरफ्लो या अपेक्षाकृत संसाधनों से आसानी से नहीं मिला, तो एक बार जब मैंने जवाब दिया तो मैं एक स्टैक ओवरफ्लो प्रश्न और उत्तर जोड़ी जो मैंने सीखा । –
मैं कभी भी काम करने के लिए 'बचाव नेट :: HTTPServerException' प्राप्त करने में सक्षम नहीं हूं। यह अपवाद को बचाता नहीं है। – Zabba
स्पेनिश पूछताछ टिप्पणी से प्यार था :-) – Mamun