2012-03-12 6 views
14

के साथ चलाने के लिए कौन सी कुकबुक निर्दिष्ट करना मैं स्थानीय रूप से अपनी कुकबुक का परीक्षण करने के लिए शेफ-एकल का उपयोग कर रहा हूं, लेकिन मैं केवल उस कुकीज को चलाने में सक्षम होना चाहता हूं जिसे मैं परीक्षण कर रहा हूं। वर्तमान में, ऐसा लगता है जैसे शेफ-एकल अकेले में निर्दिष्ट cookbooks निर्देशिका में सभी कुकबुक चलाएगा। आरबी। मैंने json विशेषता फ़ाइल में रन सूची निर्दिष्ट की है और json फ़ाइल का स्थान solo.rb में निर्दिष्ट किया है, लेकिन यह मदद नहीं करता है। यह कम से कम अन्य सभी कुकबुक के लिए विशेषताओं को पार करता है, क्योंकि मेरे पास ऐसा है जो मेरी स्थानीय कॉन्फ़िगरेशन के लिए काम नहीं करता है और यह पूरे रन में विफल रहता है।शेफ सोलो

अब तक का सबसे अच्छा समाधान मैंने पाया है कि मुझे एक अलग निर्देशिका में परीक्षण करने के लिए आवश्यक कुकबुक (ओं) को स्थानांतरित करना है और इसे एकल.आरबी में निर्दिष्ट करना है। इसे करने का कोई बेहतर तरीका है?

उत्तर

27

अद्यतन: शेफ-एकल अब शेफ-क्लाइंट से "अलग" उपकरण नहीं है। documentation से:

chef-solo is a command that executes chef-client in a way that does not require the Chef server in order to converge cookbooks. chef-solo uses chef-client’s Chef local mode, and does not support the following functionality present in chef-client/server configurations

यह परिवर्तन Chef version 12.11 में लागू किया गया था, जो community RFC पूरा करता है। यह 8 जून, 2016 को जारी किया गया था। पुराना व्यवहार, जो नीचे वर्णित है (हालांकि इस समय 4 साल पहले से), --legacy-mode तर्क chef-solo पर उपलब्ध है।

सबसे वर्तमान के लिए और बावर्ची सोलो के बारे में तारीख की जानकारी के लिए ऊपर, कृपया इसे पढ़ें the official documentation

मेरे मूल जवाब नीचे है:

बावर्ची (एकल या ग्राहक) नहीं "रन" सभी पाक कला पुस्तकें करता है ।

यह भार सभी निम्न निर्देशिकाओं में रसोई की किताब के रूबी फ़ाइलें, इस क्रम में:।।।

  • पुस्तकालयों/* rb
  • प्रदाताओं/* आरबी
  • संसाधनों/* आरबी
  • गुण/*। rb
  • परिभाषाएँ/*। आरबी

फिर, यह नोड की विस्तारित रन सूची में मौजूद सभी व्यंजनों को लोड करता है।chef-solo के साथ, यह -j के साथ आपूर्ति की गई JSON फ़ाइल से आता है, या विशेषता फ़ाइलों में किया जा सकता है - हालांकि बाद वाले को बहिष्कृत किया गया है और अनुशंसित नहीं किया गया है।

include_recipe के माध्यम से विस्तारित रन सूची में शामिल किसी भी व्यंजन को भी लोड किया गया है। शेफ रूबी कोड के रूप में मूल्यांकन करके व्यंजनों को लोड करता है। जब यह रूबी कोड से मुकाबला करता है जो इसे संसाधन या परिभाषा मानता है, तो यह संसाधन संसाधन संग्रह में संसाधन जोड़ता है, जो सभी संसाधनों का एक क्रमिक क्रमबद्ध अनुक्रमित हैश है। परिभाषाएं विशेष हैं, जिसमें शेफ संसाधन संग्रह में परिभाषित संसाधनों को शामिल करता है, परिभाषा स्वयं नहीं। include_recipe के माध्यम से शामिल व्यंजनों के संसाधनों को जगह में डाला जाता है, फिर शेफ सहित नुस्खा में जारी रहता है।

एक बार शेफ ने अपने सभी संसाधनों के लिए सभी व्यंजनों को संसाधित कर लिया है, तो यह संसाधन संग्रह को प्रत्येक संग्रह पर जोड़े गए क्रम में निर्दिष्ट कार्रवाई करने के लिए चलता है।

मैं अत्यधिक इस प्रक्रिया पर दस्तावेज़ पढ़ने की सलाह देते हैं। यह शेफ सोलो पर लागू होता है; केवल वह हिस्सा जहां सर्वर से कुकबुक डाउनलोड किए जाते हैं।

सुनिश्चित करने के लिए कि केवल व्यंजनों आप परीक्षण करने के लिए परीक्षण कर रहे हैं चाहते हैं कि उन्हें एक JSON फ़ाइल के माध्यम से नोड के रन सूची में शामिल हैं। यह इस तरह दिखता है:

{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] } 

रन सूची सिर्फ एक सरणी है, और आइटम recipe[cookbookname] या role[somerole] हो सकता है। शेफ सोलो प्रलेखन पर शेफ सोलो के साथ भूमिकाओं का उपयोग करने के तरीके के बारे में आप और अधिक पढ़ सकते हैं।

आप प्रणाली जब बावर्ची, रसोई की किताब घटकों (प्रत्येक रसोई की किताब में माणिक फ़ाइलें) लोड हो रहा है तो (टीएम) "आप यह गलत कर रहे हैं" किए गए परिवर्तनों और चाहिए एक नुस्खा से बुलाए गए संसाधन में उन चीजों को दोबारा करने के लिए दोबारा दोहराएं।

+0

सभी लिंक – freedev

5

अफसोस की बात है, मुझे नहीं लगता कि वहां है। शेफ दो-पास मोड में चलता है: सबसे पहले, यह आपकी कुकबुक ("संकलन" चरण) का एक मॉडल बनाता है और बनाता है, और फिर यह केवल उन कुकीज को चलाता है जिन्हें आप रन सूची में निर्दिष्ट करते हैं। मेरा मानना ​​है कि यह सुनिश्चित करने के लिए यह संकलन चरण में कुकबुक के बीच निर्भरताओं को पकड़ता है। संकलन चरण को सुसंगत होना चाहिए या अन्यथा यह त्रुटियां होनी चाहिए।

वास्तव में इसे समझने के लिए, ruby block संसाधन देखें। आपके व्यंजनों में चारों ओर तैरने वाली कोई रूबी का मूल्यांकन संकलन पर किया जाएगा; मूल्यांकन पर किसी भी रूबी को आप रूबी ब्लॉक संसाधन में रखना चाहते हैं। एक बार जब आप इसे समझ लेंगे, तो दो-पास मूल्यांकन की प्रकृति स्पष्ट हो जाती है।

मुझे लगता है कि आपके एकमात्र विकल्प आपकी कुकीज को एक समय में लाने के लिए हैं, जैसे आप कर रहे हैं, या अपने गुणों को ठीक करने के लिए।

13

भी ध्यान देने योग्य बात यह है कि जब परीक्षण आप आसानी से runlist

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]" 
+0

टूट रहे हैं अपने cookbooks में परिभाषित कर रहे हैं, तो ओवरराइड कर सकते हैं लायक '/ आदिchef-solo.rb' आप इसे इस तरह से कम कर सकते हैं '$ sudo chef-solo -o nginx :: start' – JREAM

+0

यह आदेश मुझे fo देता है लूइंग त्रुटि: ऐसी कोई कुकबुक नहीं। कुकबुक नाम ठीक है और नुस्खा का नाम भी ठीक है। – Lechucico