बावर्ची - त्वरित गाइड

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

शेफ को अलग-अलग बिल्डिंग ब्लॉक्स के लिए अपना कन्वेंशन मिला है, जिन्हें इन्फ्रास्ट्रक्चर को मैनेज और ऑटोमेट करना जरूरी है।

क्यों महाराज?

बावर्ची एक विन्यास प्रबंधन तकनीक है जिसका उपयोग बुनियादी ढांचे के प्रावधान को स्वचालित करने के लिए किया जाता है। इसे रूबी डीएसएल भाषा के आधार पर विकसित किया गया है। इसका उपयोग कॉन्फ़िगरेशन के कार्य को सुव्यवस्थित करने और कंपनी के सर्वर को प्रबंधित करने के लिए किया जाता है। यह किसी भी क्लाउड तकनीक के साथ एकीकृत होने की क्षमता रखता है।

DevOps में, हम इन-हाउस और क्लाउड पर सर्वर और एप्लिकेशन को तैनात और प्रबंधित करने के लिए शेफ का उपयोग करते हैं।

बावर्ची की विशेषताएं

निम्नलिखित शेफ की सबसे प्रमुख विशेषताएं हैं -

  • डोमेन-विशिष्ट भाषा बनाने के लिए शेफ लोकप्रिय रूबी भाषा का उपयोग करते हैं।

  • रसोइये एक नोड की वर्तमान स्थिति पर धारणा नहीं बनाते हैं। यह मशीन की वर्तमान स्थिति प्राप्त करने के लिए अपने तंत्र का उपयोग करता है।

  • क्लाउड सर्वर की तैनाती, प्रबंधन और सॉफ्टवेयर के लिए बावर्ची आदर्श है।

शेफ के फायदे

बावर्ची निम्नलिखित लाभ प्रदान करता है -

  • Lower barrier for entry - जैसा कि शेफ कॉन्फ़िगरेशन के लिए देशी रूबी भाषा का उपयोग करता है, एक मानक विन्यास भाषा है जिसे आसानी से किसी भी विकास अनुभव वाले व्यक्ति द्वारा उठाया जा सकता है।

  • Excellent integration with cloud- चाकू की उपयोगिता का उपयोग करके, इसे आसानी से किसी भी क्लाउड प्रौद्योगिकियों के साथ एकीकृत किया जा सकता है। यह एक संगठन के लिए सबसे अच्छा उपकरण है जो मल्टी-क्लाउड पर्यावरण पर अपने बुनियादी ढांचे को वितरित करना चाहता है।

रसोइया के नुकसान

शेफ की कुछ प्रमुख कमियां इस प्रकार हैं -

  • बावर्ची का एक बड़ा नुकसान कुकबुक को नियंत्रित करने का तरीका है। इसे लगातार बच्चे की जरूरत होती है ताकि जो लोग काम कर रहे हैं उन्हें दूसरों की रसोई की किताबों से खिलवाड़ न करना पड़े।

  • केवल शेफ सोलो उपलब्ध है।

  • मौजूदा स्थिति में, यह केवल एडब्ल्यूएस क्लाउड के लिए एक अच्छा फिट है।

  • यदि व्यक्ति रूबी से परिचित नहीं है, तो यह सीखना बहुत आसान नहीं है।

  • डॉक्यूमेंटेशन में अभी भी कमी है।

शेफ के प्रमुख बिल्डिंग ब्लॉक

विधि

इसे उन विशेषताओं के संग्रह के रूप में परिभाषित किया जा सकता है जिनका उपयोग बुनियादी ढांचे के प्रबंधन के लिए किया जाता है। इन विशेषताओं को जो नुस्खा में मौजूद हैं, का उपयोग मौजूदा स्थिति को बदलने या किसी विशेष अवसंरचना नोड को स्थापित करने के लिए किया जाता है। उन्हें शेफ क्लाइंट रन के दौरान लोड किया जाता है और नोड (मशीन) की मौजूदा विशेषता के साथ तैयार किया जाता है। यह फिर उस स्थिति में पहुंच जाता है जिसे नुस्खा के नोड संसाधन में परिभाषित किया गया है। यह रसोई की किताब का मुख्य काम है।

रसोई की किताब

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

संसाधन

यह विभिन्न प्रकार के राज्यों के साथ बुनियादी ढांचे का प्रबंधन करने के लिए उपयोग किए जाने वाले एक नुस्खा का मूल घटक है। एक नुस्खा में कई संसाधन हो सकते हैं, जो बुनियादी ढांचे को कॉन्फ़िगर करने और प्रबंधित करने में मदद करेंगे। उदाहरण के लिए -

  • package - एक नोड पर संकुल का प्रबंधन करता है

  • service - नोड पर सेवाओं का प्रबंधन करता है

  • user - नोड पर उपयोगकर्ताओं को प्रबंधित करता है

  • group - समूहों का प्रबंधन करता है

  • template - एम्बेडेड रूबी टेम्पलेट के साथ फ़ाइलों का प्रबंधन करता है

  • cookbook_file - कुकबुक में फ़ाइलों को उपनिर्देशिका से फाइलों को नोड पर एक स्थान पर स्थानांतरित करता है

  • file - नोड पर एक फ़ाइल की सामग्री का प्रबंधन करता है

  • directory - नोड पर निर्देशिकाओं का प्रबंधन करता है

  • execute - नोड पर एक कमांड निष्पादित करता है

  • cron - नोड पर एक मौजूदा क्रोन फ़ाइल को संपादित करता है

गुण

वे मूल रूप से सेटिंग्स हैं। उन्हें किसी भी चीज़ की एक प्रमुख मूल्य जोड़ी के रूप में सोचा जा सकता है, जिसे कोई कुकबुक में उपयोग करना चाहता है। कई अलग-अलग प्रकार की विशेषताएं हैं जिन्हें लागू किया जा सकता है, अंतिम सेटिंग्स पर एक अलग स्तर की पूर्ववर्तीता के साथ नोड के तहत काम करता है।

फ़ाइल

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

टेम्पलेट्स

वे फ़ाइलों के समान हैं, लेकिन वे स्थिर नहीं हैं। टेम्पलेट फाइलें .ebr एक्सटेंशन के साथ समाप्त होती हैं, जिसका अर्थ है कि उनमें एम्बेडेड रूबी है। वे मुख्य रूप से फाइलों में एक विशेषता मान को अंतिम फ़ाइल संस्करण बनाने के लिए उपयोग करने के लिए उपयोग किए जाते हैं जो नोड पर रखे जाएंगे।

Metadata.rb

इसका उपयोग पैकेज के बारे में मेटाडेटा को प्रबंधित करने के लिए किया जाता है। इसमें पैकेज का नाम और विवरण जैसे विवरण शामिल हैं। इसमें निर्भरता जानकारी जैसी चीजें भी शामिल हैं, जो बताती हैं कि इस कुकबुक को कौन सी कुकबुक को संचालित करना है। यह शेफ सर्वर को नोड की रन-लिस्ट को सही ढंग से बनाने की अनुमति देता है और यह सुनिश्चित करता है कि सभी टुकड़े सही तरीके से स्थानांतरित हो जाएं।

डिफ़ॉल्ट रसोई की संरचना

C:\chef\cookbooks\nginx>tree 
Folder PATH listing for volume Local Disk 
Volume serial number is BE8B-6427 
C: ├───attributes 
├───definitions 
├───files 
│   └───default 
├───libraries 
├───providers 
├───recipes 
├───resources 
└───templates 
    └───default

शेफ - संबंधित प्रौद्योगिकी

निम्नलिखित शेफ संबंधित तकनीकों की सूची है।

कठपुतली

कठपुतली सॉफ्टवेयर का एक मानक तरीका और संचालन प्रदान करती है, चाहे वह कहीं भी चले। यह लिनक्स, यूनिक्स और विंडोज सिस्टम के लिए एक स्वचालित प्रशासनिक इंजन है जो केंद्रीयकृत विनिर्देश के आधार पर प्रशासनिक कार्य करता है।

प्राथमिक features of Puppet इस प्रकार हैं -

  • एक समान विन्यास के साथ नई प्रणालियों को लागू करना।
  • सिस्टम को अपडेट करना और सुरक्षा और सॉफ्टवेयर पैकेजों को अपग्रेड करना।
  • नई सुविधाओं को शामिल करना और निपुण क्षमताओं को जोड़ना।
  • डेटा स्रोतों की उपलब्धता सुनिश्चित करने के लिए विन्यास को अनुकूलित करना।
  • उपलब्ध संसाधनों का अनुकूलन और लागत को कम करना।
  • भूमिकाओं को सरल बनाना और टीम को मुख्य और उत्पादक मुद्दों पर ध्यान केंद्रित करने में सक्षम बनाना।
  • उपलब्ध अवसंरचना के बारे में विहंगम दृष्टि प्राप्त करना।

Ansible

Ansible एक मौलिक रूप से सरल आईटी स्वचालन प्लेटफ़ॉर्म है जो आपके एप्लिकेशन और सिस्टम को तैनात करना आसान बनाता है। अपने एप्लिकेशन को परिनियोजित करने और अपडेट करने के लिए स्क्रिप्ट या कस्टम कोड लिखने से बचें - ऐसी भाषा में स्वचालित करें जो दूरस्थ प्रणालियों पर स्थापित करने के लिए बिना एजेंटों के साथ, SSH का उपयोग करके पहुंचती है।

प्राथमिक features of Ansible इस प्रकार हैं -

  • सरल और सीखने में आसान
  • अजगर में लिखा है
  • Agentless
  • YAML- आधारित Playbooks
  • उत्तर देने योग्य आकाशगंगा

SaltStack

साल्टस्टैक का उपयोग डेटा-संचालित कॉन्फ़िगरेशन के लिए किया जाता है। यह गतिशील संचार बस पर निर्मित बुनियादी ढांचे के प्रबंधन का एक नया दृष्टिकोण है। इसका उपयोग डेटा-चालित ऑर्केस्ट्रेशन, किसी भी बुनियादी ढांचे के लिए दूरस्थ निष्पादन और किसी भी ऐप स्टैक के लिए कॉन्फ़िगरेशन प्रबंधन के लिए किया जाता है।

कपड़ा

Fabric एक पायथन-आधारित प्रोग्रामिंग भाषा है, जिसे पायथन के एपीआई के रूप में विकसित किया गया है, जिसे बुनियादी ढांचे को कॉन्फ़िगर करने और प्रबंधित करने के लिए पायथन कोड में आयात करने की आवश्यकता है।

शेफ एक त्रिस्तरीय क्लाइंट सर्वर मॉडल पर काम करता है जिसमें बावर्ची वर्कस्टेशन जैसी कार्यशील इकाइयों को विकसित किया जाता है। कमांड लाइन उपयोगिताओं जैसे कि चाकू से, उन्हें शेफ सर्वर पर अपलोड किया जाता है और आर्किटेक्चर में मौजूद सभी नोड्स शेफ सर्वर के साथ पंजीकृत होते हैं।

आदेश में काम कर रहे बावर्ची बुनियादी ढांचे को प्राप्त करने के लिए, हमें अनुक्रम में कई चीजों को स्थापित करने की आवश्यकता है।

उपरोक्त सेटअप में, हमारे पास निम्नलिखित घटक हैं।

शेफ वर्कस्टेशन

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

शेफ सर्वर

यह शेफ सेटअप की एक केंद्रीकृत कार्य इकाई के रूप में काम करता है, जहां सभी कॉन्फ़िगरेशन फ़ाइलों को पोस्ट डेवलपमेंट अपलोड किया जाता है। शेफ सर्वर के विभिन्न प्रकार हैं, कुछ होस्ट किए गए शेफ सर्वर हैं जबकि कुछ अंतर्निहित अंतर्निहित हैं।

शेफ नोड्स

वे वास्तविक मशीनें हैं जिन्हें शेफ सर्वर द्वारा प्रबंधित किया जा रहा है। सभी नोड्स में आवश्यकता के अनुसार विभिन्न प्रकार के सेटअप हो सकते हैं। शेफ क्लाइंट सभी नोड्स का प्रमुख घटक है, जो शेफ सर्वर और शेफ नोड के बीच संचार स्थापित करने में मदद करता है। शेफ नोड के अन्य घटक ओहाई हैं, जो किसी दिए गए बिंदु पर किसी भी नोड की वर्तमान स्थिति प्राप्त करने में मदद करता है।

वर्जन कंट्रोल सिस्टम का उपयोग करना इंफ्रास्ट्रक्चर ऑटोमेशन का एक मूलभूत हिस्सा है। कई प्रकार के संस्करण नियंत्रण प्रणाली हैं जैसे एसवीएन, सीवीएस और जीआईटी। शेफ समुदाय के बीच जीआईटी की लोकप्रियता के कारण, हम जीआईटी सेटअप का उपयोग करेंगे।

Note - एक संस्करण नियंत्रण प्रणाली के बिना एक कोड के रूप में एक बुनियादी ढांचे के निर्माण के बारे में मत सोचो।

विंडोज पर

Step 1- www.git-scm.org से विंडोज इंस्टॉलर डाउनलोड करें और इंस्टॉलेशन चरणों का पालन करें।

Step 2 - GitHub पर एक केंद्रीय भंडार के लिए साइन अप करें।

Step 3- ssh कुंजी को GitHub खाते में अपलोड करें, ताकि कोई भी इसके साथ आसानी से बातचीत कर सके। Ssh कुंजी के विवरण के लिए निम्न लिंक पर जाएँhttps://help.github.com/articles/generatingssh-keys।

Step 4 - अंत में जाकर github अकाउंट पर एक रेपो बनाएं https://github.com/new शेफ-रेपो के नाम के साथ।

वास्तव में एक रसोई की किताब लिखना शुरू करने से पहले, कोई विकास बॉक्स पर एक प्रारंभिक जीआईटी भंडार स्थापित कर सकता है और ऑप्सकोड द्वारा प्रदान की गई खाली भंडार को क्लोन कर सकता है।

Step 1 - Opscode शेफ रिपोजिटरी खाली संरचना डाउनलोड करें।

$ wget https://github.com/opscode/chef-repo/tarball/master

Step 2 - टार बॉल निकालें।

$ tar –xvf master

Step 3 - निर्देशिका का नाम बदलें।

$ mv opscode-chef-repo-2c42c6a/ chef-repo

Step 4 - वर्तमान कार्य निर्देशिका को रेफ़ो शेफ़ में बदलें।

$ cd chef-repo

Step 5 - एक नए सिरे से रेपो तैयार करें।

$ git init.

Step 6 - गिट हब पर अपने रेपो से कनेक्ट करें।

$ git remote add origin [email protected]:vipin022/chef-

Step 7 - स्थानीय रेपो को जीथुब में पुश करें।

$ git add. $ git commit –m “empty repo structure added” 
$ git push –u origin maste

उपरोक्त प्रक्रिया का उपयोग करके, आपको जगह में एक खाली शेफ रेपो मिलेगा। फिर आप व्यंजनों और रसोई की किताबों के विकास पर काम करना शुरू कर सकते हैं। एक बार हो जाने के बाद, आप गिटहब में बदलावों को आगे बढ़ा सकते हैं।

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

ऑप्सकोड पूरी तरह से पैक संस्करण प्रदान करता है, जिसमें कोई बाहरी पूर्वापेक्षाएँ नहीं होती हैं। यह पूरी तरह से पैक शेफ को कहा जाता हैomnibus installer

विंडोज मशीन पर

Step 1 - मशीन पर chefDK की सेटअप .msi फ़ाइल डाउनलोड करें।

Step 2 - स्थापना चरणों का पालन करें और इसे लक्ष्य स्थान पर स्थापित करें।

सेटअप निम्न स्क्रीनशॉट में दिखाया गया है।

शेफडीके पथ चर

$ echo $PATH 
/c/opscode/chef/bin:/c/opscode/chefdk/bin:

लिनक्स मशीन पर

लिनक्स मशीन पर स्थापित करने के लिए, हमें पहले मशीन पर कर्ल प्राप्त करना होगा।

Step 1 - एक बार मशीन पर कर्ल स्थापित हो जाने के बाद, हमें Opscode के omnibus Chef इंस्टॉलर का उपयोग करके कार्यस्थान पर शेफ को स्थापित करना होगा।

$ curl –L https://www.opscode.com/chef/install.sh | sudo bash

Step 2 - मशीन पर रूबी स्थापित करें।

Step 3 - पथ चर में रूबी जोड़ें।

$ echo ‘export PATH = ”/opt/chef/embedded/bin:$PATH”’ ≫ ~/.bash_profile && 
source ~/.bash_profile

ओम्निबस शेफ रूबी और सभी आवश्यक रूबी रत्नों को स्थापित करेगा /opt/chef/embedded जोड़ कर /opt/chef/embedded/bin निर्देशिका .bash_profile फ़ाइल के लिए।

यदि रूबी पहले से स्थापित है, तो निम्न आदेश चलाकर मशीन पर शेफ रूबी रत्न स्थापित करें।

$ gem install chef

शेफ नोड को शेफ सर्वर के साथ संवाद करने के लिए, आपको नोड पर शेफ क्लाइंट स्थापित करने की आवश्यकता है।

शेफ क्लाइंट

यह बावर्ची नोड के प्रमुख घटकों में से एक है, जो बावर्ची सर्वर से रसोई की किताबों को पुनर्प्राप्त करता है और उन्हें नोड पर निष्पादित करता है। इसे बावर्ची के प्रावधानकर्ता के रूप में भी जाना जाता है।

यहाँ, हम VM को प्रबंधित करने के लिए Vagrant का उपयोग करेंगे। वीएमआर को वांछित स्थिति में लाने के लिए वैगरेंट को शेल स्क्रिप्ट, शेफ और पपेट जैसे प्रावधान के साथ भी कॉन्फ़िगर किया जा सकता है। हमारे मामले में, हम Vagrant का उपयोग वर्चुअलबॉक्स और शेफ क्लाइंट का उपयोग कर एक प्रोम्यूटर के रूप में कर सकते हैं।

Step 1 - से VirtualBox डाउनलोड और इंस्टॉल करें https://www.virtualbox.org/wiki/downlod

Step 2 - डाउनलोड करें और Vagrant पर स्थापित करें http://downloads.vagrantup.com

Step 3 - Vagrant को VM पर Chef क्लाइंट स्थापित करने में सक्षम करने के लिए Vagrant Omnibus प्लगइन स्थापित करें।

$ vagrant plugin install vagrant-omnibus

वर्चुअल बनाना और बूट करना

Step 1- हम ओप्सोड आवारा रेपो से आवश्यक वैग्रेंट बॉक्स डाउनलोड कर सकते हैं। निम्न URL से opscode-ubuntu-12.04 बॉक्स डाउनलोड करेंhttps://opscode-vmbento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box

Step 2 - जब आपके पास वैग्रेंट फाइल हो जाए, तो वैग्रंट फाइल को संपादित करने के लिए जिस रास्ते पर जाना चाहिए, उसे डाउनलोड करें।

vipin@laptop:~/chef-repo $ subl Vagrantfile 
Vagrant.configure("2") do |config| 
   config.vm.box = "opscode-ubuntu-12.04" 
   config.vm.box_url = https://opscode-vm-bento.s3.amazonaws.com/ 
   vagrant/opscode_ubuntu-12.04_provisionerless.box 
   config.omnibus.chef_version = :latest  
   config.vm.provision :chef_client do |chef| 
      chef.provisioning_path = "/etc/chef" 
      chef.chef_server_url = "https://api.opscode.com/ 
      organizations/<YOUR_ORG>" 
      chef.validation_key_path = "/.chef/<YOUR_ORG>-validator.pem"
      chef.validation_client_name = "<YOUR_ORG>-validator" 
      chef.node_name = "server" 
   end 
end

उपरोक्त कार्यक्रम में, आपको सही या आवश्यक संगठन नाम के साथ <Your_ORG> नाम अपडेट करना होगा।

Step 3- कॉन्फ़िगरेशन के बाद अगला चरण है, योनि बॉक्स को प्राप्त करने के लिए। इसके लिए, आपको उस स्थान पर जाने की आवश्यकता है जहां Vagrant बॉक्स स्थित है और निम्न कमांड को चलाएं।

$ vagrant up

Step 4 - मशीन चालू होने के बाद, आप निम्न कमांड का उपयोग करके मशीन में प्रवेश कर सकते हैं।

$ vagrant ssh

उपरोक्त कमांड में, योनि वर्चुअल मशीन को कॉन्फ़िगर करने के लिए रूबी डोमेन स्पेसिफिक लैंग्वेज (डीएसएल) में योनिंटाइल लिखा गया है।

योनि फ़ाइल में, हमारे पास कॉन्फिग ऑब्जेक्ट है। वीएम को कॉन्फ़िगर करने के लिए वैग्रंट इस कॉन्फिग ऑब्जेक्ट का उपयोग करेगा।

Vagrant.configure("2") do |config| 
……. 
End

कॉन्फ़िगरेशन ब्लॉक के अंदर, आप नोड को बूट करने के लिए, वीएम को किस वीएम इमेज का उपयोग करने के लिए कहेंगे।

config.vm.box = "opscode-ubuntu-12.04" 
config.vm.box_url = https://opscode-vm-bento.s3.amazonaws.com/ 
   vagrant/opscode_ubuntu-12.04_provisionerless.box

अगले चरण में, आप वैगंट को omnibus प्लगइन डाउनलोड करने के लिए कहेंगे।

config.omnibus.chef_version = :latest

बूट करने के लिए VM बॉक्स का चयन करने के बाद, शेफ का उपयोग करके बॉक्स को कैसे व्यवस्थित करें, यह कॉन्फ़िगर करें।

config.vm.provision :chef_client do |chef| 
….. 
End

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

chef.provisioning_path = "/etc/chef"

टेस्ट किचन शेफ का एकीकृत परीक्षण ढांचा है। यह टेस्ट रेसिपी लिखने में सक्षम बनाता है, जो एक बार इंस्टेंटाइज्ड होने के बाद वीएम पर चलेगा और कुकबुक का उपयोग करके परिवर्तित हो जाएगा। परीक्षण व्यंजनों उस वीएम पर चलते हैं और यह सत्यापित कर सकते हैं कि सब कुछ उम्मीद के मुताबिक काम करता है।

ChefSpecएक ऐसी चीज है जो केवल एक शेफ रन का अनुकरण करती है। टेस्ट किचन असली नोड को बूट करता है और उस पर शेफ चलता है।

Step 1 - परीक्षण रसोई स्थापित करें रूबी मणि और परीक्षण रसोई योनि रत्न का परीक्षण करने के लिए योनि का उपयोग करने के लिए परीक्षण रसोई को सक्षम करें।

$ gem install kitchen 
$ gem install kitchen-vagrant

Step 2- टेस्ट किचन सेट करें। इसे बनाकर किया जा सकता है.kitchen.yml रसोई की निर्देशिका में।

driver_plugin: vagrant 
driver_config: 
   require_chef_omnibus: true 
platforms: 
   - name: ubuntu-12.04 
   driver_config: 
      box: opscode-ubuntu-12.04 
      box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ 
      ubuntu-12.04_provisionerless.box 
suites: 
   - name: default 
run_list: 
   - recipe[minitest-handler] 
   - recipe[my_cookbook_test] 
attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }

उपरोक्त कोड में, एक भाग परिभाषित करता है कि वीएमएन को स्पिन करने के लिए योनि की आवश्यकता होती है और यह परिभाषित करता है कि आप चाहते हैं कि ओमनीबस लक्ष्य नोड पर शेफ को स्थापित करें।

दूसरा भाग परिभाषित करता है कि आप किस प्लेटफ़ॉर्म पर कुकबुक का परीक्षण करना चाहते हैं। वैग्रंट हमेशा नए उदाहरणों का निर्माण और विनाश करेगा। आपको Vagrant फ़ाइल का उपयोग करके स्पिन करने वाले योनि VM के साथ दुष्प्रभावों के बारे में डरने की ज़रूरत नहीं है।

टेस्ट किचन को एक अस्थायी वातावरण माना जा सकता है जो उत्पादन के समान अस्थायी वातावरण में कुकबुक चलाने और परीक्षण करने में मदद करता है। टेस्ट किचन के साथ, कोई यह सुनिश्चित कर सकता है कि दिए गए कोड का काम कर रहा है, इससे पहले कि वह वास्तव में परीक्षण, प्रीप्रोडक्शन और प्रोडक्शन के माहौल पर तैनात हो रहा है। टेस्ट किचन की इस विशेषता का पालन कई संगठनों द्वारा वास्तविक कामकाजी माहौल में कुकबुक को रखने से पहले एक सेट के रूप में किया जाता है।

परीक्षण रसोई वर्कफ़्लो

निम्नलिखित परीक्षण रसोई वर्कफ़्लो में शामिल कदम हैं।

बावर्ची का उपयोग करके एक रसोई की किताब बनाना

कुकबुक बनाने के लिए निम्न कोड का उपयोग करें।

$ chef generate cookbook motd_rhel 
Installing Cookbook Gems: 

Compiling Cookbooks... 
Recipe: code_generator::cookbook
   * directory[C:/chef/cookbooks/motd_rhel] action create
      - create new directory C:/chef/cookbooks/motd_rhel
   
   * template[C:/chef/cookbooks/motd_rhel/metadata.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/metadata.rb
      - update content in file C:/chef/cookbooks/motd_rhel/metadata.rb from none to 
      d6fcc2 (diff output suppressed by config)
   
   * template[C:/chef/cookbooks/motd_rhel/README.md] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/README.md
      - update content in file C:/chef/cookbooks/motd_rhel/README.md from none to 50deab
         (diff output suppressed by config)
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/chefignore] action create
      - create new file C:/chef/cookbooks/motd_rhel/chefignore
      - update content in file C:/chef/cookbooks/motd_rhel/chefignore from none to 15fac5
         (diff output suppressed by config)
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/Berksfile] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/Berksfile
      - update content in file C:/chef/cookbooks/motd_rhel/Berksfile from none to 9f08dc
         (diff output suppressed by config)
   
   * template[C:/chef/cookbooks/motd_rhel/.kitchen.yml] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/.kitchen.yml
      - update content in file C:/chef/cookbooks/motd_rhel/.kitchen.yml
         from none to 49b92b (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec]
      action create 
      - create new directory 
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec
   
   * directory[C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec]
      action create 
      - create new directory 
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec
   
   * cookbook_file
      [C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb]
      action create_if_missing
      - create new file 
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb
            from none to d85df4 (diff output suppressed by config)
   
   * template
      [C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/defaul t_spec.rb]
      action create_if_missing
      - create new file
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb
            from none to 3fbdbd (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/spec/unit/recipes] action create
      - create new directory C:/chef/cookbooks/motd_rhel/spec/unit/recipes
   
   * cookbook_file
      [C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb from none to 587075
            (diff output suppressed by config)
   
   * template
      [C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb]
      action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb
            from none to ff3b17 (diff output suppressed by config)
   
   * directory[C:/chef/cookbooks/motd_rhel/recipes] action create
      - create new directory C:/chef/cookbooks/motd_rhel/recipes
   
   * template[C:/chef/cookbooks/motd_rhel/recipes/default.rb] action create_if_missing
      - create new file C:/chef/cookbooks/motd_rhel/recipes/default.rb
      - update content in file
         C:/chef/cookbooks/motd_rhel/recipes/default.rb from none to c4b029
            (diff output suppressed by config) 
   
   * execute[initialize-git] action run 
      - execute git init . 
   
   * cookbook_file[C:/chef/cookbooks/motd_rhel/.gitignore] action create
      - create new file C:/chef/cookbooks/motd_rhel/.gitignore
      - update content in file C:/chef/cookbooks/motd_rhel/.gitignore from none to 33d469
         (diff output suppressed by config)
   
   * execute[git-add-new-files] action run
      - execute git add .
   
   * execute[git-commit-new-files] action run 
      - execute git commit -m "Add generated cookbook content"

उपरोक्त कोड के आउटपुट के रूप में क्रिएटेड कुकबुक स्ट्रक्चर है।

रसोई विन्यास फाइल का परीक्षण करें

.kitchen.yaml फ़ाइल

driver: 
   name: vagrant 
provisioner: 
   name: chef_zero 
# verifier: 
# name: inspec 
# format: doc 
platforms: 
   - name: ubuntu-14.04 
suites: 
   - name: default 
   run_list: 
      - recipe[motd_rhel::default] 
   attributes:

Drivers - यह उस सॉफ्टवेयर को निर्दिष्ट करता है जो मशीन का प्रबंधन करता है।

Provisioner- यह विनिर्देशन प्रदान करता है कि शेफ कैसे चलता है। हम chef_zero का उपयोग कर रहे हैं क्योंकि यह स्थानीय मशीन पर एक शेफ सर्वर वातावरण की नकल करने में सक्षम बनाता है। यह नोड विशेषताओं और शेफ सर्वर विनिर्देशों के साथ काम करने की अनुमति देता है।

Platform - यह लक्ष्य ऑपरेटिंग सिस्टम को निर्दिष्ट करता है।

Suites- यह परिभाषित करता है कि आभासी पर्यावरण पर कोई क्या लागू करना चाहता है। यहां, आप कई परिभाषा परिभाषित करते हैं। यह वह स्थान है जहाँ आप रन लिस्ट को परिभाषित करते हैं, जो निर्दिष्ट करता है कि कौन सी रेसिपी को चलाना है और किस क्रम में हमें दौड़ना है।

सीक्वेंस में कमांड चला रहे हैं

रसोई सूची

$ kitchen list 
Instance  Driver  Provisioner Verifier   Transport Last Action 
ubuntu-1404 Vagrant ChefZero   Busser       Ssh   <Not Created>

रसोई बनाएँ

$ kitchen create
-----> Starting Kitchen (v1.4.2)
-----> Creating <default-centos-72>...
      Bringing machine 'default' up with 'virtualbox' provider...
      ==> default: Box 'opscode-centos-7.2' could not be found.
         Attempting to find and install...
      default: Box Provider: virtualbox
      default: Box Version: >= 0
      ==> default: Box file was not detected as metadata. Adding it directly...
         ==> default: Adding box 'opscode-centos-7.2' (v0) for provider: virtualbox
         default: Downloading:
            https://opscode-vmbento.s3.amazonaws.com/vagrant/virtualbox/
            opscode_centos-7.1_chefprovisionerless.box[...]
         Vagrant instance <default-centos-72> created.
         Finished creating <default-centos-72> (3m12.01s).
         -----> Kitchen is finished. (3m12.60s)

रसोई परिवर्तित

$ kitchen converge 
-----> Converging <default-centos-72>...        
      Preparing files for transfer        
      Preparing dna.json        
      Resolving cookbook dependencies with Berkshelf 4.0.1...
      Removing non-cookbook files before transfer       
      Preparing validation.pem        
      Preparing client.rb 
-----> Chef Omnibus   installation detected (install only if missing)        
      Transferring files to <default-centos-72>       
      Starting Chef Client, version 12.6.0        
      resolving cookbooks for run list: ["motd_rhel::default"]
      Synchronizing Cookbooks: - motd_rhel (0.1.0)       
      Compiling Cookbooks...       Converging 1 resources        
      Recipe: motd_rhel::default        (up to date)         
      Running handlers:       Running handlers complete       
      Chef Client finished, 0/1 resources updated in 01 seconds        
      Finished converging <default-centos-72> (0m3.57s). 
      -----> Kitchen is finished. (0m4.55s)

परीक्षण सेटअप

यदि परीक्षण वीएम को सही ढंग से प्रावधान किया गया है तो परीक्षण करने के लिए रसोई लॉगिन का उपयोग किया जाता है।

$ kitchen login 
Last login: Thu Jan 30 19:02:14 2017 from 10.0.2.2 
hostname:  default-centos-72 
fqdn:      default-centos-72 
memory:    244180kBcpu count: 1

अंत में बाहर निकलें

$ exit 
Logout 
Connection to 127.0.0.1 closed.

नष्ट करना सेटअप

$ Kitchen destroy 
-----> Starting Kitchen (v1.4.2) 
-----> Destroying <default-centos-72>...       
   ==> default: Forcing shutdown of VM...        
   ==> default: Destroying VM and associated drives...        
   Vagrant instance <default-centos-72> destroyed.        
   Finished destroying <default-centos-72> (0m4.94s). 
-----> Kitchen is finished. (0m5.93s)

चाकू शेफ सर्वर के साथ बातचीत करने के लिए शेफ का कमांड-लाइन टूल है। एक इसका उपयोग रसोई की किताबों को अपलोड करने और शेफ के अन्य पहलुओं को प्रबंधित करने के लिए करता है। यह स्थानीय मशीन और शेफ सर्वर पर शेफडीके (रेपो) के बीच एक इंटरफेस प्रदान करता है। यह प्रबंधन में मदद करता है -

  • शेफ नोड्स
  • Cookbook
  • Recipe
  • Environments
  • बादल संसाधन
  • क्लाउड प्रोविजनिंग
  • बावर्ची नोड पर बावर्ची ग्राहक पर स्थापना

चाकू बुनियादी ढांचे के प्रबंधन के लिए आदेशों का एक सेट प्रदान करता है।

बूटस्ट्रैप कमांड्स

  • चाकू बूटस्ट्रैप [SSH_USER @] FQDN (विकल्प)

क्लाइंट कमांड्स

  • चाकू ग्राहक थोक हटाएं REGEX (विकल्प)
  • चाकू ग्राहक CLIENTNAME (विकल्प) बनाएं
  • चाकू ग्राहक ग्राहक हटाएं (विकल्प)
  • चाकू ग्राहक संपादित करें (विकल्प)
  • उपयोग: C: / opscode / महाराज / बिन / चाकू (विकल्प)
  • चाकू ग्राहक कुंजी हटाएं KEYNAME (विकल्प)
  • चाकू क्लाइंट कुंजी संपादित करें KEYNAME (विकल्प)
  • चाकू ग्राहक कुंजी सूची ग्राहक (विकल्प)
  • चाकू ग्राहक कुंजी शो ग्राहक कुंजी (विकल्प)
  • चाकू ग्राहक सूची (विकल्प)
  • चाकू ग्राहक reregister ग्राहक (विकल्प)
  • चाकू ग्राहक दिखाने के विकल्प (विकल्प)

कमांड को कॉन्फ़िगर करें

  • चाकू कॉन्फ़िगर (विकल्प)
  • चाकू क्लाइंट डाइरेक्टरी को कॉन्फ़िगर करता है

कुकबुक कमांड्स

  • चाकू रसोई की किताब थोक हटाएं (विकल्प)
  • चाकू रसोई की किताब बनाएं कुकबुक (विकल्प)
  • चाकू कुकबुक हटाएं कुकबुक संस्करण (विकल्प)
  • चाकू कुकबुक डाउनलोड कुकबुक [संस्करण] (विकल्प)
  • चाकू रसोई की सूची (विकल्प)
  • चाकू रसोई की किताब मेटाडेटा कुकबुक (विकल्प)
  • चाकू कुक पुस्तिका मेटाडाटा FILE से (विकल्प)
  • चाकू कुकबुक शो कुकबुक [संस्करण] [भाग] [FILENAME] (विकल्प)
  • चाकू रसोई की किताब का परीक्षण [COOKBOOKS ...] (विकल्प)
  • चाकू कुकबुक अपलोड [COOKBOOKS ...] (विकल्प)

कुकबुक साइट कमांड्स

  • चाकू रसोई की किताब साइट डाउनलोड COOKBOOK [संस्करण] (विकल्प)
  • चाकू रसोई की किताब साइट स्थापित COOKBOOK [संस्करण] (विकल्प)
  • चाकू कुकबुक साइट सूची (विकल्प)
  • चाकू रसोई की किताब साइट खोज QUERY (विकल्प)
  • चाकू कुकबुक साइट शेयर COOKBOOK [CATEGORY] (विकल्प)
  • चाकू कुकबुक साइट शो कुकबुक [संस्करण] (विकल्प)
  • चाकू रसोई की किताब साइट खोलना नहीं है

डेटा बैग कमांड

  • चाकू डेटा बैग BAG [ITEM] (विकल्प) बनाएँ
  • चाकू डेटा बैग नष्ट बैग [आइटम] (विकल्प)
  • चाकू डेटा बैग संपादित करें बैग आइटम (विकल्प)
  • चाकू से बैग डेटा फ़ाइल बैग फ़ाइल | फ़ोल्डर [फ़ाइल | फ़ोल्डर ..] (विकल्प)
  • चाकू डेटा बैग सूची (विकल्प)
  • चाकू डेटा बैग दिखाएँ बैग [आइटम] (विकल्प)

पर्यावरण कमांड

  • चाकू पर्यावरण की तुलना [पर्यावरण ..] (विकल्प)
  • चाकू का वातावरण पर्यावरण (विकल्प) बनाएँ
  • चाकू पर्यावरण हटाएं पर्यावरण (विकल्प)
  • चाकू पर्यावरण संपादित करें विकल्प (विकल्प)
  • फ़ाइल से चाकू का वातावरण फ़ाइल [फ़ाइल ..] (विकल्प)
  • चाकू पर्यावरण सूची (विकल्प)
  • चाकू पर्यावरण दिखाएँ पर्यावरण (विकल्प)

निष्पादित करें

  • चाकू चलाना [SCRIPT] (विकल्प)

कमांड की मदद करें

  • चाकू मदद [सूची | TOPIC]

इंडेक्स कमांड्स

  • चाकू सूचकांक पुनर्निर्माण (विकल्प)

नोड कमांड्स

  • चाकू नोड बल्क हटाएं REGEX (विकल्प)
  • चाकू नोड NODE बनाएं (विकल्प)
  • चाकू नोड को हटाएं NODE (विकल्प)
  • चाकू नोड संपादित करें NODE (विकल्प)
  • चाकू नोड वातावरण सेट NODE पर्यावरण
  • फ़ाइल से चाकू नोड FILE (विकल्प)
  • चाकू नोड सूची (विकल्प)
  • चाकू नोड run_list [NODE] [ENTRY [, ENTRY]] (विकल्प) जोड़ें
  • चाकू नोड run_list [NODE] [ENTRY [, ENTRY]] (विकल्प) को हटा दें
  • चाकू नोड run_list सेट NODE ENTRIES (विकल्प)
  • चाकू नोड दिखाएँ NODE (विकल्प)

OSC Commands

  • चाकू osc_user USER बनाएं (विकल्प)
  • चाकू osc_user USER हटाएं (विकल्प)
  • चाकू osc_user USER संपादित करें (विकल्प)
  • चाकू osc_user सूची (विकल्प)
  • चाकू osc_user reregister USER (विकल्प)
  • चाकू osc_user शो USER (विकल्प)

पाथ-आधारित कमांड्स

  • चाकू हटाएं [PATTERN1 ... PATTERNn]
  • चाकू चित्र PATTERN1 [पैटर्न]
  • चाकू अलग पैटर्न
  • चाकू डाउनलोड पत्र
  • चाकू संपादित करें [PATTERN1 ... पैटर्न]
  • चाकू सूची [-dfR1p] [पथरी 1 ... पत्र]
  • चाकू दिखाने [PATTERN1 ... PATTERNn]
  • चाकू अपलोड पैटर्न
  • चाकू xargs [COMMAND]

रॉ कमांड्स

  • चाकू कच्चे REQUEST_PATH

पकाने की विधि

  • चाकू नुस्खा सूची [पैटर्न]

भूमिका कमांड

  • चाकू भूमिका थोक हटाएं REGEX (विकल्प)
  • चाकू की भूमिका रोल बनाएं (विकल्प)
  • चाकू की भूमिका को हटाएं (विकल्प)
  • चाकू की भूमिका संपादित करें (विकल्प)
  • चाकू की भूमिका env_run_list [ROLE] [पर्यावरण] [ENTRY [, ENTRY]] (विकल्प) जोड़ें
  • चाकू भूमिका env_run_list स्पष्ट [रोल] [पर्यावरण]
  • चाकू भूमिका env_run_list हटाएं [ROLE] [पर्यावरण] [ENTRIES]
  • चाकू की भूमिका env_run_list को बदलें [ROLE] [पर्यावरण] [OLD_ENTRY] [NEWVENTRY]
  • चाकू भूमिका env_run_list सेट [ROLE] [पर्यावरण] [ENTRIES]
  • फ़ाइल से चाकू की भूमिका फ़ाइल [फ़ाइल ..] (विकल्प)
  • चाकू की भूमिका सूची (विकल्प)
  • चाकू भूमिका run_list जोड़ने [ROLE] [ENTRY [, ENTRY]] (विकल्प)
  • चाकू भूमिका run_list स्पष्ट [ROLE]
  • चाकू भूमिका run_list हटाएं [ROLE] [ENTRY]
  • चाकू की भूमिका run_list को बदलें [ROLE] [OLD_ENTRY] [NEW_ENTRY]
  • चाकू भूमिका run_list सेट [ROLE] [ENTRIES]
  • चाकू भूमिका शो रोल (विकल्प)

कमांड्स सर्व करें

  • चाकू की सेवा (विकल्प)

एसएसएच कमांड्स

  • चाकू ssh QUERY कमान (विकल्प)

एसएसएल कमांड्स

  • चाकू एसएसएल जाँच [URL] (विकल्प)
  • चाकू ssl लाने [URL] (विकल्प)

स्थिति कमांड

  • चाकू की स्थिति QUERY (विकल्प)

टैग कमांड

  • चाकू टैग NODE TAG बनाएं ...
  • चाकू टैग हटाएं नोड टैग ...
  • चाकू टैग सूची NODE

उपयोगकर्ता कमांड्स

  • चाकू उपयोगकर्ता USERNAME DISPLAY_NAME FIRST_NAME LAST_NAME EMAIL PASSWORD (विकल्प) बनाएँ
  • चाकू उपयोगकर्ता USER हटाएं (विकल्प)
  • चाकू उपयोगकर्ता USER संपादित करें (विकल्प)
  • चाकू उपयोगकर्ता कुंजी बनाने USER (विकल्प)
  • चाकू उपयोगकर्ता कुंजी USER KEYNAME (विकल्प) हटाएं
  • चाकू उपयोगकर्ता कुंजी USER KEYNAME (विकल्प) संपादित करें
  • चाकू उपयोगकर्ता कुंजी सूची USER (विकल्प)
  • चाकू उपयोगकर्ता कुंजी शो USER KEYNAME (विकल्प)
  • चाकू उपयोगकर्ता की सूची (विकल्प)
  • चाकू उपयोगकर्ता reregister USER (विकल्प)
  • चाकू उपयोगकर्ता शो USER (विकल्प)

चाकू सेटअप

चाकू को स्थापित करने के लिए, एक को स्थानांतरित करने की आवश्यकता है .chef निर्देशिका और एक बनाएँ knife.rbशेफ रेपो के अंदर, जो चाकू को विन्यास विवरण के बारे में बताता है। इसमें एक युगल का विवरण होगा।

current_dir = File.dirname(__FILE__) 
log_level                :info 
log_location             STDOUT 
node_name                'node_name' 
client_key               "#{current_dir}/USER.pem" 
validation_client_name   'ORG_NAME-validator' 
validation_key           "#{current_dir}/ORGANIZATION-validator.pem" 
chef_server_url          'https://api.chef.io/organizations/ORG_NAME' 
cache_type               'BasicFile' 
cache_options( :path =>  "#{ENV['HOME']}/.chef/checksums" ) 
cookbook_path            ["#{current_dir}/../cookbooks"]

उपरोक्त कोड में, हम होस्ट किए गए शेफ सर्वर का उपयोग कर रहे हैं जो निम्नलिखित दो कुंजियों का उपयोग करता है।

validation_client_name   'ORG_NAME-validator' 
validation_key           "#{current_dir}/ORGANIZATION-validator.pem"

यहां, चाकू.आरबी चाकू को बताता है कि किस संगठन का उपयोग करना है और निजी कुंजी कहां खोजना है। यह बताता है कि उपयोगकर्ताओं की निजी कुंजी कहां से ढूंढनी है।

client_key               "#{current_dir}/USER.pem"

कोड की निम्नलिखित पंक्ति चाकू बताती है कि हम होस्ट किए गए सर्वर का उपयोग कर रहे हैं।

chef_server_url        'https://api.chef.io/organizations/ORG_NAME'

चाकू.rb फ़ाइल का उपयोग करके, सत्यापनकर्ता चाकू अब आपके संगठन के होस्ट किए गए Opscode से जुड़ सकता है।

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

स्थानीय मशीन पर शेफ-सोलो चलाने से पहले, स्थानीय मशीन पर निम्न दो फ़ाइलों को स्थापित करने की आवश्यकता होती है।

  • Solo.rb - यह फाइल शेफ को बताती है कि कहां से कुकबुक, रोल्स और डेटा बैग मिलेंगे।

  • Node.json - यह फ़ाइल यदि आवश्यक हो तो रन सूची और किसी भी नोड-विशिष्ट विशेषता को सेट करती है।

एकल.आरबी कॉन्फ़िगरेशन

निम्नलिखित एकल कॉन्फ़िगर करने के लिए कदम हैं।

Step 1 - शेफ रेपो के अंदर एक एकल। आरबी फ़ाइल बनाएँ।

current_dir       = File.expand_path(File.dirname(__FILE__)) 
file_cache_path   "#{current_dir}" 
cookbook_path     "#{current_dir}/cookbooks" 
role_path         "#{current_dir}/roles" 
data_bag_path     "#{current_dir}/data_bags"

Step 2 - फाइल को git repo में जोड़ें।

$ git add solo.rb

Step 3 - निम्न सामग्री के साथ शेफ रेपो के अंदर एक नोड .json फ़ाइल बनाएँ।

{ 
   "run_list": [ "recipe[ntp]" ] 
}

Step 4 - चाकू का उपयोग करके शेफ रेपो के अंदर एनटीपी कुकबुक प्राप्त करें।

vipin@laptop:~/chef-repo $ knife cookbook site install ntp 
Installing ntp to /Users/mma/work/chef-repo/cookbooks 
…TRUNCATED OUTPUT… 
Cookbook ntp version 1.3.0 successfully installed

Step 5 - Git में नोड.जेसन फ़ाइल जोड़ें।

$ git add node.json

Step 6 - रेपो को git करने के लिए फाइल को कमिट करें और पुश करें।

vipin@laptop:~/chef-repo $ git commit -m "initial setup for Chef Solo" 
vipin@laptop:~/chef-repo $ git push 
Counting objects: 4, done. 
Delta compression using up to 4 threads. 
...TRUNCATED OUTPUT... 
To [email protected]:mmarschall/chef-repo.git 
b930647..5bcfab6 master -> master

नोड पर कुकबुक चल रहा है

Step 1 - उस नोड पर लॉगिन करें जहां कोई शेफ-सोलो को प्रावधान करना चाहता है।

Step 2 - मशीन पर शेफ रेपो को क्लोन करें।

$ git clone $URL_PATH

Step 3 - महाराज रेपो को सीडी।

$ cd chef-repo

अंत में, नोड को परिवर्तित करने के लिए शेफ-सोलो चलाएं -

$ sudo chef-solo -c solo.rb -j node.json 
[2017-20-08T22:54:13+01:00] INFO: *** Chef 11.0.0 *** 
[2017-20-08T22:54:13+01:00] INFO: Setting the run_list to 
["recipe[ntp]"] from JSON 
...TRUNCATED OUTPUT... 
[2012-12-08T22:54:16+01:00] INFO: Chef Run complete in 2.388374 
seconds 
[2012-12-08T22:54:16+01:00] INFO: Running report handlers

solo.rb शेफ-सोलो को इसकी कुकबुक, भूमिका और डेटा बैग के लिए वर्तमान निर्देशिका के अंदर देखने के लिए कॉन्फ़िगर करता है: शेफ भंडार।

Chef-SoloJSON फ़ाइल से इसका नोड कॉन्फ़िगरेशन लेता है। हमारे उदाहरण में, हमने इसे node.json कहा है। यदि आप कई सर्वरों का प्रबंधन करने जा रहे हैं, तो आपको प्रत्येक नोड के लिए एक अलग फ़ाइल की आवश्यकता होगी। उसके बाद, शेफ-सोलो सिर्फ सोलो.आरबी और नोड.जॉसन में पाए गए कॉन्फ़िगरेशन डेटा के आधार पर एक शेफ रन निष्पादित करता है।

कुकबुक मौलिक शेफ की कार्यशील इकाइयाँ हैं, जिनमें कामकाजी इकाइयों से संबंधित सभी विवरण शामिल हैं, जिसमें कॉन्फ़िगरेशन को संशोधित करने की क्षमता और शेफ के बुनियादी ढांचे पर नोड के रूप में कॉन्फ़िगर किए गए किसी भी सिस्टम की स्थिति है। कुकबुक कई कार्य कर सकती है। कुकबुक में नोड की वांछित स्थिति के बारे में मूल्य शामिल हैं। यह वांछित बाहरी पुस्तकालयों का उपयोग करके बावर्ची में प्राप्त किया जाता है।

कुकबुक के प्रमुख घटक

  • Recipes
  • Metadata
  • Attributes
  • Resources
  • Templates
  • Libraries
  • कुछ और जो एक सिस्टम बनाने में मदद करता है

कुकबुक बनाना

रसोई की किताब को गतिशील रूप से बनाने के दो तरीके हैं।

  • शेफ कमांड का उपयोग करना
  • चाकू की उपयोगिता का उपयोग करना

शेफ कमांड का उपयोग करना

शेफ कमांड का उपयोग करके एक खाली कुकबुक बनाने के लिए, निम्न कमांड चलाएँ।

C:\Users\vipinkumarm>chef generate cookbook <Cookbook Name> 
C:\Users\vipinkumarm>chef generate cookbook VTest
Installing Cookbook Gems:

Compiling Cookbooks...
Recipe: code_generator::cookbook
   * directory[C:/Users/vipinkumarm/VTest] action create
      - create new directory C:/Users/vipinkumarm/VTest
   
   * template[C:/Users/vipinkumarm/VTest/metadata.rb] action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/metadata.rb
      - update content in file C:/Users/vipinkumarm/VTest/metadata.rb 
         from none to 4b9435 (diff output suppressed by config)

   * template[C:/Users/vipinkumarm/VTest/README.md] action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/README.md
      - update content in file C:/Users/vipinkumarm/VTest/README.md 
         from none to 482077 (diff output suppressed by config)

   * cookbook_file[C:/Users/vipinkumarm/VTest/chefignore] action create
      - create new file C:/Users/vipinkumarm/VTest/chefignore
      - update content in file C:/Users/vipinkumarm/VTest/chefignore 
         from none to 15fac5 (diff output suppressed by config)
   
   * cookbook_file[C:/Users/vipinkumarm/VTest/Berksfile] action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/Berksfile
      - update content in file C:/Users/vipinkumarm/VTest/Berksfile 
         from none to 9f08dc (diff output suppressed by config)

   * template[C:/Users/vipinkumarm/VTest/.kitchen.yml] action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/.kitchen.yml
      - update content in file C:/Users/vipinkumarm/VTest/.kitchen.yml 
         from none to 93c5bd (diff output suppressed by config)

   * directory[C:/Users/vipinkumarm/VTest/test/integration/default/serverspec]
      action create
      - create new directory
         C:/Users/vipinkumarm/VTest/test/integration/default/serverspec
   
   * directory[C:/Users/vipinkumarm/VTest/test/integration/helpers/serverspec]
      action create
      - create new directory
         C:/Users/vipinkumarm/VTest/test/integration/helpers/serverspec
   
   * cookbook_file
      [C:/Users/vipinkumarm/VTest/test/integration/helpers/serverspec/sp ec_helper.rb]
      action create_if_missing
      - create new file
         C:/Users/vipinkumarm/VTest/test/integration/helpers/serverspec/spec_helper.rb
      - update content in file
         C:/Users/vipinkumarm/VTest/test/integration/helpers/serverspec/spec_helper.rb
         from none to d85df4 (diff output suppressed by config)
   
   * template
      [C:/Users/vipinkumarm/VTest/test/integration/default/serverspec/default _spec.rb]
      action create_if_missing
      - create new file
         C:/Users/vipinkumarm/VTest/test/integration/default/serverspec/default_spec.rb
      - update content in file
         C:/Users/vipinkumarm/VTest/test/integration/default/serverspec/default_spec.rb
         from none to 758b94 (diff output suppressed by config)
   
   * directory[C:/Users/vipinkumarm/VTest/spec/unit/recipes] action create
      - create new directory C:/Users/vipinkumarm/VTest/spec/unit/recipes
   
   * cookbook_file[C:/Users/vipinkumarm/VTest/spec/spec_helper.rb]
      action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/spec/spec_helper.rb
      - update content in file C:/Users/vipinkumarm/VTest/spec/spec_helper.rb
         from none to 587075 (diff output suppressed by config)

   * template[C:/Users/vipinkumarm/VTest/spec/unit/recipes/default_spec.rb]
      action create_if_missing
      - create new file C:/Users/vipinkumarm/VTest/spec/unit/recipes/default_spec.rb
      - update content in file 
         C:/Users/vipinkumarm/VTest/spec/unit/recipes/default_spec.rb
         from none to 779503 (diff output suppressed by config)
      - create new file C:/Users/vipinkumarm/VTest/recipes/default.rb
      - update content in file C:/Users/vipinkumarm/VTest/recipes/default.rb
         from none to 8cc381 (diff output suppressed by config)

   * cookbook_file[C:/Users/vipinkumarm/VTest/.gitignore] action create
      - create new file C:/Users/vipinkumarm/VTest/.gitignore
      - update content in file C:/Users/vipinkumarm/VTest/.gitignore from none to 33d469
         (diff output suppressed by config)

VTest नाम के साथ रसोई की संरचना निर्देशिका में बनाई जाएगी और निम्नलिखित उसी के लिए संरचना होगी।

चाकू उपयोगिता का उपयोग करना

चाकू उपयोगिता का उपयोग करके रसोई की किताब बनाने के लिए निम्नलिखित कमांड का उपयोग करें।

C:\Users\vipinkumarm\VTest>knife cookbook create VTest2 
WARNING: No knife configuration file found 
** Creating cookbook VTest2 in C:/chef/cookbooks 
** Creating README for cookbook: VTest2 
** Creating CHANGELOG for cookbook: VTest2 
** Creating metadata for cookbook: VTest2

निम्नलिखित कुकबुक की संरचना होगी।

कुकबुक निर्भरता को परिभाषित करने की विशेषताएं कुकबुक के प्रबंधन में मदद करती हैं। इस सुविधा का उपयोग तब किया जाता है जब हम अन्य रसोई की किताबों में एक कुकबुक की कार्यक्षमता का उपयोग करना चाहते हैं।

उदाहरण के लिए, यदि कोई C कोड संकलित करना चाहता है, तो किसी को यह सुनिश्चित करने की आवश्यकता है कि संकलन के लिए आवश्यक सभी निर्भरताएं स्थापित हैं। ऐसा करने के लिए, अलग-अलग कुकबुक हो सकती है जो इस तरह के फ़ंक्शन का प्रदर्शन कर सकती है।

जब हम शेफ-सर्वर का उपयोग कर रहे होते हैं, तो हमें कुकबुक में ऐसी निर्भरताएं जानने की जरूरत होती है, जिन्हें कुकबुक मेटाडेटा फाइल में डिक्लेयर किया जाना चाहिए। यह फ़ाइल रसोई की निर्देशिका संरचना पर शीर्ष पर स्थित है। यह शेफ सर्वर को संकेत प्रदान करता है जो सही नोड पर कुकबुक को तैनात करने में मदद करता है।

मेटाडेटा.rb फ़ाइल की विशेषताएँ

  • कुकबुक निर्देशिका संरचना में शीर्ष पर स्थित है।

  • संकलित जब चाकू कमांड का उपयोग करके बावर्ची को शेफ सर्वर पर अपलोड किया जाता है।

  • चाकू रसोई की किताब मेटाडेटा subcommand के साथ संकलित।

  • जब चाकू कुकबुक क्रिएट कमांड चलती है तो अपने आप बन जाती है।

मेटाडेटा.rb का विन्यास

निम्नलिखित मेटाडेटा फ़ाइल की डिफ़ॉल्ट सामग्री है।

शेफ में भूमिकाएँ नोड्स को समूहीकृत करने का एक तार्किक तरीका है। विशिष्ट मामलों में वेब सर्वर, डेटाबेस सर्वर और इसी तरह की भूमिकाएँ होती हैं। सभी नोड्स के लिए कस्टम रन सूची सेट कर सकते हैं और भूमिकाओं के भीतर विशेषता मान को ओवरराइड कर सकते हैं।

एक भूमिका बनाएँ

vipin@laptop:~/chef-repo $ subl roles/web_servers.rb 
name "web_servers" 
description "This role contains nodes, which act as web servers" 
run_list "recipe[ntp]" 
default_attributes 'ntp' => { 
   'ntpdate' => { 
      'disable' => true 
   } 
}

एक बार हमारी भूमिका बन जाने के बाद, हमें शेफ सर्वर पर अपलोड करना होगा।

शेफ सर्वर पर रोल अपलोड करें

vipin@laptop:~/chef-repo $ knife role from file web_servers.rb

अब, हमें एक नोड को सर्वर नाम की भूमिका सौंपने की आवश्यकता है।

नोड को एक भूमिका सौंपें

vipin@laptop:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[web_servers]" 
] 
Saving updated run_list on node server

शेफ-क्लाइंट चलाएं

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-07-25T13:28:24+00:00] INFO: Run List is [role[web_servers]] 
[2013-07-25T13:28:24+00:00] INFO: Run List expands to [ntp] 
...TRUNCATED OUTPUT...

यह काम किस प्रकार करता है

  • शेफ रिपॉजिटरी के रोल्स फोल्डर के अंदर रूबी फाइल में एक भूमिका को परिभाषित करें।

  • एक भूमिका में एक नाम और एक विवरण विशेषता होती है।

  • भूमिका में विशिष्ट-विशिष्ट रन सूची और भूमिका-विशिष्ट विशेषता सेटिंग्स होती हैं।

  • प्रत्येक नोड जिसकी रन सूची में भूमिका है, भूमिका की रन सूची अपने आप में सटीक होगी।

  • भूमिका की सूची में सभी व्यंजनों को नोड पर निष्पादित किया जाएगा।

  • फ़ाइल कमांड से चाकू की भूमिका का उपयोग करते हुए भूमिका को शेफ सर्वर पर अपलोड किया जाएगा।

  • भूमिका को नोड रन सूची में जोड़ा जाएगा।

  • अपनी रन लिस्ट में भूमिका वाले नोड पर शेफ क्लाइंट चलाना भूमिका में सूचीबद्ध सभी व्यंजनों को निष्पादित करेगा।

बावर्ची पर्यावरण विशिष्ट विन्यास करने में मदद करता है। विकास, परीक्षण और उत्पादन के लिए एक अलग वातावरण होना हमेशा एक अच्छा विचार है।

शेफ एक आदेशित विकास प्रवाह का समर्थन करने के लिए अलग-अलग वातावरण में नोड्स को समूहीकृत करने में सक्षम बनाता है।

एक पर्यावरण बनाना

मक्खी पर पर्यावरण का निर्माण चाकू की उपयोगिता का उपयोग करके किया जा सकता है। निम्न आदेश शेल के डिफ़ॉल्ट संपादक को खोल देगा, ताकि कोई पर्यावरण परिभाषा को संशोधित कर सके।

vipin@laptop:~/chef-repo $ knife environment create book { 
   "name": "book", 
   "description": "", 
   "cookbook_versions": { 
   }, 
   "json_class": "Chef::Environment", 
   "chef_type": "environment", 
   "default_attributes": { 
   }, 
   "override_attributes": { 
   } 
} 
Created book

एक निर्मित पर्यावरण का परीक्षण

vipin@laptop:~/chef-repo $ knife environment list 
_default 
book

सभी वातावरण के लिए सूची नोड

vipin@laptop:~/chef-repo $ knife node list 
my_server

_default पर्यावरण

प्रत्येक संगठन हमेशा कम से कम एकल वातावरण के साथ शुरू करेगा जिसे डिफ़ॉल्ट वातावरण कहा जाता है, जो हमेशा शेफ सर्वर के लिए उपलब्ध होता है। डिफ़ॉल्ट वातावरण को वैसे भी संशोधित नहीं किया जा सकता है। हमारे द्वारा बनाए जाने वाले कस्टम वातावरण में किसी भी प्रकार के परिवर्तन को केवल समायोजित किया जा सकता है।

पर्यावरण गुण

एक विशेषता को एक वातावरण में परिभाषित किया जा सकता है और फिर नोड में डिफ़ॉल्ट सेटिंग्स को ओवरराइड करने के लिए उपयोग किया जा सकता है। जब शेफ क्लाइंट रन होता है, तो इन विशेषताओं की तुलना उन डिफ़ॉल्ट विशेषताओं के साथ की जाती है जो पहले से ही नोड में मौजूद हैं। जब पर्यावरण विशेषताएँ डिफ़ॉल्ट विशेषताओं पर पूर्वता लेती हैं, तो शेफ क्लाइंट प्रत्येक नोड पर होने पर इन सेटिंग्स और मूल्यों को लागू करेगा।

एक पर्यावरण विशेषता केवल default_attribute या ओवरराइड_attribute हो सकती है। यह एक सामान्य विशेषता नहीं हो सकती। एक default_attribute या override_attribute विधियों का उपयोग कर सकता है।

विशेषता प्रकार

Default - हर बावर्ची ग्राहक के शुरू में एक डिफ़ॉल्ट विशेषता हमेशा रीसेट होती है और सबसे कम विशेषता पूर्वता होती है।

Override- ओवरराइड विशेषता को हमेशा हर शेफ क्लाइंट रन की शुरुआत में रीसेट किया जाता है और इसमें डिफ़ॉल्ट, फोर्स_डेफॉल्ट और सामान्य की तुलना में उच्च विशेषता पूर्वता होती है। एक ओवरराइड विशेषता को अक्सर नुस्खा में परिभाषित किया जाता है, लेकिन एक भूमिका के लिए या एक वातावरण के लिए विशेषता फ़ाइल में भी निर्दिष्ट किया जा सकता है।

गुण लगाने का आदेश

डेफ के रूप में शेफ-क्लाइंट चलाने से किसी भी समय सभी नोड्स की स्थिति जानने में मदद मिलती है। यह किसी भी समय शेफ-क्लाइंट को चलाने में मदद करता है।

आवश्यक शर्तें

नोड को शेफ सर्वर के साथ पंजीकृत होना चाहिए और इसे बिना किसी त्रुटि के शेफ-क्लाइंट चलना चाहिए।

डेमन मोड में शेफ-क्लाइंट

डेमन मोड में शेफ-क्लाइंट शुरू करें, हर 30 मिनट में चल रहा है।

user@server:~$ sudo chef-client -i 1800

उपरोक्त कोड में, - i आवश्यक नोड पर डेमॉन मोड में शेफ-क्लाइंट को चलाने में सक्षम बनाता है और 1800 सेकंड परिभाषित करता है कि शेफ-क्लाइंट डेमन को हर 30 मिनट में चलना चाहिए।

डेमन रन को वैध बनाना

पुष्टि करें कि बावर्ची-ग्राहक डेमॉन के रूप में चल रहा है।

user@server:~$ ps auxw | grep chef-client

उपरोक्त कमांड शेफ-क्लाइंट की रनिंग डेमॉन प्रक्रिया को टाल देगा।

दूसरा तरीका

शेफ-क्लाइंट को डेमन के रूप में चलाने के बजाय, हम इसे एक के रूप में चला सकते हैं cron job

user@server:~$ subl /etc/cron.d/chef_client 
PATH=/usr/local/bin:/usr/bin:/bin 
# m h dom mon dow user command 
*/15 * * * * root chef-client -l warn | grep -v 'retrying [1234]/5 in'

उपरोक्त क्रोन नौकरी हर 15 मिनट के बाद चलेगी।

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

शेफ शेफ-शेल के साथ आता है, जो अनिवार्य रूप से शेफ के साथ एक इंटरैक्टिव रूबी सत्र है। शेफ-शेल में, हम बना सकते हैं -

  • Attributes
  • रेसिपी लिखिए
  • शेफ रन बनाना शुरू

इसका उपयोग मक्खी पर व्यंजनों के कुछ हिस्सों का मूल्यांकन करने के लिए किया जाता है, उन्हें शेफ सर्वर पर अपलोड करने से पहले और नोड पर संपूर्ण कुकबुक को निष्पादित किया जाता है।

चल रहा है खोल

Step 1 - एक स्टैंडअलोन मोड में शेफ-शेल चलाएं।

mma@laptop:~/chef-repo $ chef-shell 
loading configuration: none (standalone chef-shell session) 
Session type: standalone 
Loading...[2017-01-12T20:48:01+01:00] INFO: Run List is [] 
[2017-01-12T20:48:01+01:00] INFO: Run List expands to [] 
done. 
This is chef-shell, the Chef Shell. 
Chef Version: 11.0.0 
http://www.opscode.com/chef 
http://wiki.opscode.com/display/chef/Home 
run `help' for help, `exit' or ^D to quit. 
Ohai2u mma@laptop!  
chef >

Step 2 - शेफ-शेल में विशेषता मोड पर स्विच करें

  • chef > attributes_mode

Step 3 - सेटिंग मान।

  • chef:attributes > set[:title] = "Chef Cookbook"

    • "बावर्ची रसोई की किताब"

  • chef:attributes > quit

    • :attributes

  • chef >

Step 4 - नुस्खा मोड पर जाएं।

  • chef > recipe_mode

Step 5 - एक फ़ाइल संसाधन बनाएँ।

chef:recipe > file "/tmp/book.txt" do 
chef:recipe > content node.title 
chef:recipe ?> end  

=> <file[/tmp/book.txt] @name: "/tmp/book.txt" @noop: nil @ 
before: nil @params: {} @provider: Chef::Provider::File @allowed_ 
actions: [:nothing, :create, :delete, :touch, :create_if_missing] 
@action: "create" @updated: false @updated_by_last_action: false 
@supports: {} @ignore_failure: false @retries: 0 @retry_delay: 
2 @source_line: "(irb#1):1:in `irb_binding'" @elapsed_time: 0 @ 
resource_name: :file @path: "/tmp/book.txt" @backup: 5 @diff: nil 
@cookbook_name: nil @recipe_name: nil @content: "Chef Cookbook">   

chef:recipe >

Step 6 - दिए गए कंटेंट के साथ फाइल बनाने के लिए Commence Chef चलाते हैं।

  • chef:recipe > run_chef

[2017-01-12T21:07:49+01:00] INFO: Processing file[/tmp/book.txt] 
action create ((irb#1) line 1) 
--- /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/cheftempfile20121212- 
11348-dwp1zs 2012-12-12 21:07:49.000000000 
+0100 
+++ /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/chefdiff20121212- 
11348-hdzcp1 2012-12-12 21:07:49.000000000 +0100 
@@ -0,0 +1 @@ 
+Chef Cookbook 
\ No newline at end of file 
[2017-01-12T21:07:49+01:00] INFO: entered create 
[2017-01-12T21:07:49+01:00] INFO: file[/tmp/book.txt] created file 
/tmp/book.txt

यह काम किस प्रकार करता है

  • शेफ-शेल कुछ विशिष्ट विशेषताओं के साथ इंटरएक्टिव रूबी (आईआरबी) सत्र के साथ शुरू होता है।

  • यह एट्रिब्यूट्स_मोड और इंटरैक्टिव_मोड जैसे मोड प्रदान करता है।

  • यह कमांड लिखने में मदद करता है, जो एक रेसिपी या कुकबुक के अंदर लिखी जाती है।

  • यह एक इंटरैक्टिव मोड में सब कुछ चलाता है।

हम शेफ-शेल को तीन अलग-अलग तरीकों से चला सकते हैं: Standalone mode, Client mode, तथा Solo mode

  • Standalone mode- यह डिफ़ॉल्ट मोड है। कोई कुकबुक लोड नहीं है, और रन-लिस्ट खाली है।

  • Client mode - यहाँ, शेफ-शेल शेफ-क्लाइंट के रूप में कार्य करता है।

  • Solo mode - यहाँ, शेफ-शेल एक शेफ-सोलो क्लाइंट के रूप में काम करता है।

यदि कुकबुक को सीधे तैनात किया जाता है और उत्पादन सर्वर पर चलाया जाता है, तो उच्च संभावना है कि कुकबुक उत्पादन में टूट सकती है। इसे रोकने का सबसे अच्छा तरीका सेटअप वातावरण में कुकबुक का परीक्षण करना है।

निम्नलिखित परीक्षण के लिए कदम हैं।

Step 1 - निम्नलिखित कमांड का उपयोग करके रसोई की किताब स्थापित करें।

vipin@laptop:~/chef-repo $ knife cookbook site install <cookbook name>

Step 2 - काम करने वाली कुकबुक पर चाकू कुकबुक टेस्ट कमांड चलाएं।

vipin@laptop:~/chef-repo $ knife cookbook test VTest  
checking ntp 
Running syntax check on ntp 
Validating ruby files 
Validating templates

Step 3 - कुकबुक में कुछ तोड़ो और फिर से परीक्षण करो।

vipin@laptop:~/chef-repo $ subl cookbooks/VTest/recipes/default.rb 
... 
[ node['ntp']['varlibdir'] 
node['ntp']['statsdir'] ].each do |ntpdir| 
   directory ntpdir do 
      owner node['ntp']['var_owner'] 
      group node['ntp']['var_group'] 
      mode 0755 
   end 
end

Step 4 - चाकू परीक्षण कमान फिर से चलाएँ।

vipin@laptop:~/chef-repo $ knife cookbook test ntp 
checking ntp 
Running syntax check on ntp 
Validating ruby files 
FATAL: Cookbook file recipes/default.rb has a ruby syntax error: 
FATAL: cookbooks/ntp/recipes/default.rb:25: syntax error, 
unexpected tIDENTIFIER, expecting ']' 
FATAL: node['ntp']['statsdir'] ].each do |ntpdir| 
FATAL: ^ 
FATAL: cookbooks/ntp/recipes/default.rb:25: syntax error, 
unexpected ']', expecting $end 
FATAL: node['ntp']['statsdir'] ].each do |ntpdir| 
FATAL:

कार्य विधि

नाइफ कुकबुक टेस्ट कुकबुक के भीतर सभी रूबी फाइलों के साथ-साथ सभी ईआरबी टेम्प्लेट पर एक रूबी सिंटैक्स चेक निष्पादित करता है। यह रूबी फाइलों से गुजरता है और रूबी चलाता है–cउनमें से प्रत्येक के खिलाफ। माणिक–c स्क्रिप्ट के सिंटैक्स की जाँच करता है और उसे बिना चलाए छोड़ देता है।

सभी रूबी फ़ाइलों के माध्यम से जाने के बाद, चाकू कुकबुक टेस्ट सभी ईआरबी टेम्प्लेट्स और पाइपों के माध्यम से जाता है, द्वारा बनाया गया अनावश्यक संस्करण –x रूबी के माध्यम से –c

सीमाओं

नाइफ कुकबुक टेस्ट रूबी फाइलों और ईआरबी टेम्प्लेट पर केवल एक सरल वाक्यविन्यास जांच करता है। हम शेफस्पीक और टेस्ट किचन का उपयोग करके पूरी तरह से परीक्षण करके आगे बढ़ सकते हैं।

बिना किसी समस्या के अच्छी कुकबुक लिखना काफी मुश्किल काम है। लेकिन ऐसे तरीके हैं जो नुकसान की पहचान करने में मदद कर सकते हैं। शेफ कुकबुक में फ्लैगिंग संभव है। फूडक्रिटिक इसे संग्रहीत करने का सबसे अच्छा तरीका है, जो कुकबुक की तर्क और शैली के साथ संभावित मुद्दों की पहचान करने की कोशिश करता है।

फूडक्रिटिक सेटअप

Step 1 - फूडक्रिटिक रत्न जोड़ें।

vipin@laptop:~/chef-repo $ subl Gemfile 
source 'https://rubygems.org' 
gem 'foodcritic', '~>2.2.0'

Step 2 - रत्न स्थापित करें।

vipin@laptop:~/chef-repo $ bundle install 
Fetching gem metadata from https://rubygems.org/ 
...TRUNCATED OUTPUT... 
Installing foodcritic (2.2.0)

फूडक्रिटिक जेम

Step 1 - कुकबुक पर फूडक्रिटिक चलाएं।

vipin@laptop:~/chef-repo $ foodcritic ./cookbooks/<Cookbook Name> 
FC002: Avoid string interpolation where not required: ./cookbooks/ 
mysql/attributes/server.rb:220 
...TRUNCATED OUTPUT... 
FC024: Consider adding platform equivalents: ./cookbooks/<Cookbook Name>/ 
recipes/server.rb:132

Step 2 - एक विस्तृत रिपोर्ट तैयार करें।

vipin@laptop:~/chef-repo $ foodcritic -C ./cookbooks/mysql 
cookbooks/<cookbook Name>/attributes/server.rb 
FC002: Avoid string interpolation where not required 
[...] 
85| default['<Cookbook Name>']['conf_dir'] = "#{mysql['basedir']}" 
[...] 
cookbooks/<Cookbook Name>/recipes/client.rb 
FC007: Ensure recipe dependencies are reflected in cookbook 
metadata 
40| end 
41|when "mac_os_x" 
42| include_recipe 'homebrew' 
43|end 
44|

कार्य विधि

फूडक्रिटिक नियमों के एक समूह को परिभाषित करता है और नुस्खा एजेंटों की जांच करता है, उनमें से प्रत्येक। यह विभिन्न क्षेत्रों से संबंधित कई नियमों के साथ आता है: शैलियों, कनेक्टिविटी, गुण, स्ट्रिंग, संभावना, खोज, सेवाएं, फाइलें, मेटाडेटा, और इसी तरह।

Test Driven Development (TDD)किसी भी वास्तविक नुस्खा कोड को लिखने से पहले यूनिट टेस्ट लिखने का एक तरीका है। परीक्षण वास्तविक होना चाहिए और यह सत्यापित करना चाहिए कि एक नुस्खा क्या करता है। यह वास्तव में विफल होना चाहिए क्योंकि विकसित कोई नुस्खा नहीं था। एक बार नुस्खा विकसित होने के बाद, परीक्षण पास होना चाहिए।

शेफस्पीक लोकप्रिय RSpec ढांचे पर बनाया गया है और शेफ रेसिपी के परीक्षण के लिए एक सिलसिलेवार सिंटैक्स प्रदान करता है।

बावर्ची बनाना

Step 1 - शेफस्पीक रत्न युक्त एक मणि फ़ाइल बनाएँ।

vipin@laptop:~/chef-repo $ subl Gemfile 
source 'https://rubygems.org' 
gem 'chefspec'

Step 2 - रत्न स्थापित करें।

vipin@laptop:~/chef-repo $ bundler install 
Fetching gem metadata from https://rubygems.org/ 
...TRUNCATED OUTPUT... 
Installing chefspec (1.3.1) 
Using bundler (1.3.5) 
Your bundle is complete!

Step 3 - एक विशेष निर्देशिका बनाएँ।

vipin@laptop:~/chef-repo $ mkdir cookbooks/<Cookbook Name>/spec

Step 4 - एक युक्ति बनाएँ

vipin@laptop:~/chef-repo $ subl  
cookbooks/my_cookbook/spec/default_spec.rb  
require 'chefspec'  
describe 'my_cookbook::default' do  
   let(:chef_run) {  
      ChefSpec::ChefRunner.new(  
         platform:'ubuntu', version:'12.04'  
      ).converge(described_recipe)  
   }  

   it 'creates a greetings file, containing the platform  
   name' do  
      expect(chef_run).to  
      create_file_with_content('/tmp/greeting.txt','Hello! ubuntu!')  
   end  
end

Step 5 - मान्य शेफस्पीक।

vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb 
F 
Failures: 
1) <CookBook Name> ::default creates a greetings file, containing the platform name 
Failure/Error: expect(chef_run.converge(described_recipe)).to 
create_file_with_content('/tmp/greeting.txt','Hello! ubuntu!') 
File content: 
does not match expected: 
Hello! ubuntu! 
# ./cookbooks/my_cookbook/spec/default_spec.rb:11:in `block 
(2 levels) in <top (required)>' 
Finished in 0.11152 seconds 
1 example, 1 failure  

Failed examples: 
rspec ./cookbooks/my_cookbook/spec/default_spec.rb:10 # my_ 
cookbook::default creates a greetings file, containing the 
platform name

Step 6 - कुकबुक डिफॉल्ट रेसिपी संपादित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
template '/tmp/greeting.txt' do 
   variables greeting: 'Hello!' 
end

Step 7 - एक टेम्पलेट फ़ाइल बनाएँ।

vipin@laptop:~/chef-repo $ subl cookbooks/< Cookbook Name>/recipes/default.rb 
<%= @greeting %> <%= node['platform'] %>!

Step 8 - फिर से rspec चलाएं।

vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb 
. 
Finished in 0.10142 seconds 
1 example, 0 failures

यह काम किस प्रकार करता है

इसे काम करने के लिए, हमें पहले रसोइये के साथ RSpec का उपयोग करने के लिए आधारभूत संरचना स्थापित करने की आवश्यकता है। फिर हमें शेफस्पी रूबी रत्न की जरूरत है और रसोई की किताब को एक निर्देशिका की आवश्यकता है जिसे कल्पना कहा जाता है जहां सभी परीक्षण सहेजे जाएंगे।

टेस्ट किचन शेफ का एकीकरण परीक्षण ढांचा है। यह लेखन परीक्षण को सक्षम करता है, जो VM के तुरंत बाद चलाया जाता है और कुकबुक का उपयोग करके परिवर्तित किया जाता है। परीक्षण वीएम पर चलते हैं और सत्यापित कर सकते हैं कि सब कुछ उम्मीद के मुताबिक काम करता है।

यह ChefSpec के लिए नोड कॉन्ट्रैक्ट है, जो केवल एक शेफ रन का अनुकरण करता है। टेस्ट किचन एक वास्तविक नोड को बूट करता है और उस पर शेफ चलाता है।

की स्थापना

ऐसा करने के लिए, हमें मशीन पर वैग्रैंट को स्थापित करने की आवश्यकता है जो एक आभासी मशीन को प्रबंधित करने में मदद करता है। तब हमें रसोई की निर्भरता को प्रबंधित करने के लिए बुकशेल्फ़ को स्थापित करने और वैग्रंट के साथ हुक करने की आवश्यकता है।

Step 1 - कुकबुक में डिफॉल्ट रेसिपी एडिट करें।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
file "/tmp/greeting.txt" do 
   content node['my_cookbook']['greeting'] 
end

Step 2 - कुकबुक विशेषताओं को संपादित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/attributes/default.rb 
default['my_cookbook']['greeting'] = "Ohai, Chefs!"

Step 3 - आवश्यक रूबी जवाहरात स्थापित करने के लिए मणि फ़ाइल को संपादित करें।

vipin@laptop:~/chef-repo $ subl Gemfile 
gem 'test-kitchen', '~> 2.0.0.alpha.7' 
gem 'kitchen-vagrant'

Step 4 - आवश्यक रूबी रत्न स्थापित करें।

vipin@laptop:~/chef-repo $ bundle install 
...TRUNCATED OUTPUT... 
Installing test-kitchen (1.0.0.alpha.7) 
Installing kitchen-vagrant (0.10.0) ...TRUNCATED OUTPUT...

Step 5 - रसोई की किताब में .kitchen.yml फ़ाइल बनाएँ।

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl .kitchen.yml 
--- 
driver_plugin: vagrant 
driver_config: 
   require_chef_omnibus: true  
platforms: 
   - name: ubuntu-12.04 
  driver_config: 
      box: opscode-ubuntu-12.04 
      box_url: 
         https://opscode-vm.s3.amazonaws.com/vagrant/
            opscode_ubuntu12.04_provisionerless.box  
suites: 
   - name: default 
   run_list: 
      - recipe[minitest-handler] 
      - recipe[my_cookbook_test] 
attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }

Step 6 - रसोई की किताब के अंदर एक परीक्षण निर्देशिका बनाएँ।

vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>$ mkdir test

Step 7 - एकीकरण परीक्षण के लिए एक टेस्ट कुकबुक बनाएं।

vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>/test $ knife 
cookbook create my_cookbook_test 
** Creating cookbook my_cookbook_test 
** Creating README for cookbook: my_cookbook_test 
** Creating CHANGELOG for cookbook: my_cookbook_test 
** Creating metadata for cookbook: my_cookbook_test

Step 8 - टेस्ट कुकबुक डिफ़ॉल्ट नुस्खा संपादित करें।

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl 
test/cookbooks/my_cookbook_test/recipes/default.rb 
include_recipe 'my_cookbook::default'

Step 9 - कुकबुक के अंदर मिनिटेस्ट स्पेस बनाएं।

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ mkdir -p 
   test/cookbooks/my_cookbook_test/files/default/tests/minitest  

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl 
   test/cookbooks/my_cookbook_test/files/default/tests/minitest/default_test.rb  

require 'minitest/spec'  
describe_recipe 'my_cookbook::default' do 
   describe "greeting file" do 
      it "creates the greeting file" do 
         file("/tmp/greeting.txt").must_exist 
      end 
       
      it "contains what's stored in the 'greeting' node 
         attribute" do 
         file('/tmp/greeting.txt').must_include 'Ohai, Minitest!' 
      end 
end

Step 10 - अपनी मुख्य रसोई की किताब बर्कसफाइल को संपादित करें।

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl Berksfile 
site :opscode 
metadata 
cookbook "apt" 
cookbook "minitest-handler" 
cookbook "my_cookbook_test", path: 
"./test/cookbooks/my_cookbook_test"

सेटअप का परीक्षण

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ kitchen test 
-----> Starting Kitchen (v1.0.0.alpha.7) 
...TRUNCATED OUTPUT... 
-----> Converging <default-ubuntu-1204> 
-----> Installing Chef Omnibus (true) 
...TRUNCATED OUTPUT... 
Starting Chef Client, version 11.4.4 
[2013-06-29T18:33:57+00:00] INFO: *** Chef 11.4.4 *** 
[2013-06-29T18:33:58+00:00] INFO: Setting the run_list to 
["recipe[minitest-handler]", "recipe[my_cookbook_test]"] 
from JSON 
...TRUNCATED OUTPUT... 
# Running tests: 
recipe::my_cookbook::default::greeting 
file#test_0001_creates the greeting file = 0.00 s = . 
recipe::my_cookbook::default::greeting 
file#test_0002_contains what's stored in the 'greeting' 
node attribute = 0.00 s = . 
Finished tests in 0.011190s, 178.7277 tests/s, 178.7277 
assertions/s. 
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips 
...TRUNCATED OUTPUT...  
-----> Kitchen is finished. (2m5.69s)

Knife preflight सभी नोड्स के बारे में विवरण दिखाता है जो इसे शेफ सर्वर पर अपलोड करने से पहले एक निश्चित कुकबुक का उपयोग करता है।

शुरू करना

आरंभ करने के लिए, हमें चाकू-प्रीफ़लाइट रत्न स्थापित करना होगा।

Step 1 - रत्न फ़ाइल में पथ को परिभाषित करें।

vipin@laptop:~/chef-repo $ subl Gemfile 
source 'https://rubygems.org' 
gem 'knife-preflight'

Step 2 - चाकू-प्रीफ्लाट मणि स्थापित करने के लिए बंडलर चलाएं।

vipin@laptop:~/chef-repo $ bundle install 
Fetching gem metadata from https://rubygems.org/ 
...TRUNCATED OUTPUT... 
Installing knife-preflight (0.1.6)

कार्य विधि

दिए गए कुकबुक पर चाकू-प्रीफ़लाइट चलाएं।

हम प्रीफ़्लाइट कमांड को यह पता लगाने के लिए चला सकते हैं कि उनकी विस्तारित रन सूचियों में कौन सी नोड्स और भूमिकाएं दी गई कुकबुक हैं।

vipin@laptop:~/chef-repo $ knife preflight ntp 
Searching for nodes containing ntp OR ntp::default in their 
expanded run_list... 
2 Nodes found 
www-staging.example.com 
cms-staging.example.com 
Searching for roles containing ntp OR ntp::default in their 
expanded run_list... 
3 Roles found 
your_cms_role 
your_www_role 
your_app_role 
Found 6 nodes and 3 roles using the specified search 
criteria

नोड पर निष्पादित करने के लिए रसोई की किताब के कई तरीके हैं।

  • आप नोड की रन लिस्ट में जोड़कर सीधे कुकबुक को एक नोड में असाइन कर सकते हैं।

  • आप भूमिका में कुकबुक जोड़ सकते हैं और नोड की रन सूची में भूमिका जोड़ सकते हैं।

  • आप भूमिका को किसी अन्य भूमिका की रन सूची में जोड़ सकते हैं और नोड की रन सूची में उस अन्य भूमिका को जोड़ सकते हैं।

  • एक रसोई की किताब दूसरे इस्तेमाल की गई रसोई की किताब की निर्भरता हो सकती है।

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

शेफ-क्लाइंट रन का परीक्षण करने के लिए, हमें होस्ट किए गए शेफ या होस्ट किए गए सर्वर का उपयोग करने के लिए शेफ-क्लाइंट को कॉन्फ़िगर करना होगा।

डिबग मोड में शेफ-क्लाइंट चलाना

vipin@server:~$ sudo chef-client -l debug 
…TRUNCATED OUTPUT… 
Hashed Path:A+WOcvvGu160cBO7IFKLYPhh9fI= 
X-Ops-Content-Hash:2jmj7l5rSw0yVb/vlWAYkK/YBwk= 
X-Ops-Timestamp:2012-12-27T11:14:07Z 
X-Ops-UserId:vagrant' 
Header hash: {"X-Ops-Sign"=>"algorithm=sha1;version=1.0;", 
"X-Ops-Userid"=>"vagrant", "X-Ops-Timestamp"=>"2012-12- 
27T11:14:07Z", "X-Ops-Content- 
Hash"=>"2jmj7l5rSw0yVb/vlWAYkK/YBwk=", "X-Ops- 
Authorization- 
1"=>"HQmTt9U/ 
LJJVAJXWtyOu3GW8FbybxAIKp4rhiw9O9O3wtGYVHyVGuoilWDao", 
"X-Ops-Authorization- 
2"=>"2/uUBPWX+YAN0g1/ 
fD2854QAU2aUcnSaVM0cPNNrldoOocmA0U5HXkBJTKok", 
"X-Ops-Authorization- 
3"=>"6EXPrEJg5T+ 
ddWd5qHAN6zMqYc3untb41t+eBpigGHPhtn1LLInMkPeIYwBm", 
"X-Ops-Authorization- 
4"=>"B0Fwbwz2HVP3wEsYdBGu7yOatq7fZBXHfIpeOi0kn/ 
Vn0P7HrucnOpONmMgU", "X-Ops-Authorization- 
5"=>"RBmmbetFSKCYsdg2v2mW/ 
ifLIVemhsHyOQjffPYPpNIB3U2n7vji37NxRnBY", 
"X-Ops-Authorization- 
6"=>"Pb3VM7FmY60xKvWfZyahM8y8WVV9xPWsD1vngihjFw=="} 
[2012-12-27T11:14:07+00:00] DEBUG: Sending HTTP Request via 
GET to api.opscode.com:443/organizations/agilewebops/ 
nodes/vagrant
[2012-12-27T11:14:09+00:00] DEBUG: ---- HTTP Status and 
Header Data: ---- 
[2012-12-27T11:14:09+00:00] DEBUG: HTTP 1.1 200 OK 
[2012-12-27T11:14:09+00:00] DEBUG: server: nginx/1.0.5 
[2012-12-27T11:14:09+00:00] DEBUG: date: Thu, 27 Dec 2012

अंतिम बावर्ची-ग्राहक चलाने के परिणाम का निरीक्षण करना

जब हम एक नई रसोई की किताब विकसित कर रहे हैं तो विशेष रूप से विफलता वाले अंतिम शेफ-क्लाइंट रन की जांच करने के लिए, हमें यह जानना होगा कि वास्तव में क्या गलत हुआ। हालांकि शेफ सब कुछ स्टडआउट में प्रिंट करते हैं, फिर भी कोई डिबग लॉग को फिर से देखना चाहता है।

यदि हम परीक्षण करना चाहते हैं, तो हमें एक टूटी हुई रसोई की किताब की आवश्यकता है जो संकलन पर विफल हो रही है।

user@server:~$ sudo chef-client 
================================================================== 
============== 
Recipe Compile Error in /srv/chef/file_store/cookbooks/my_ 
cookbook/recipes/default.rb 
================================================================== 
============== 
NoMethodError 
------------- 
undefined method `each' for nil:NilClass 
Cookbook Trace: 
--------------- 
/srv/chef/file_store/cookbooks/my_cookbook/recipes/default. 
rb:9:in `from_file' 
Relevant File Content: 
---------------------- 
/srv/chef/file_store/cookbooks/my_cookbook/recipes/default.rb: 
2: # Cookbook Name:: my_cookbook 
3: # Recipe:: default 
4: # 
5: # Copyright 2013, YOUR_COMPANY_NAME 
6: # 
7: # All rights reserved - Do Not Redistribute 
8: # 
9≫ nil.each {}  
10:

अधिक जानकारी के लिए, हम स्टैकट्रेस में देख सकते हैं।

user@server:~$ less /srv/chef/file_store/chef-stacktrace.out 
Generated at 2013-07-21 18:34:05 +0000 
NoMethodError: undefined method `each' for nil:NilClass 
/srv/chef/file_store/cookbooks/my_cookbook/recipes/default.rb:9:in 
`from_file' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.4/lib/chef/ 
mixin/from_file.rb:30:in `instance_eval' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.4/lib/chef/ 
mixin/from_file.rb:30:in `from_file' 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.4/lib/chef/ 
cookbook_version.rb:346:in `load_recipe'

विशेषताएँ कुकबुक को गतिशील रूप से कॉन्फ़िगर करने के लिए प्रमुख घटक हैं। विशेषताएँ रसोई की किताबों को विन्यास योग्य बनाने में लेखकों को सक्षम बनाती हैं। कुकबुक में निर्धारित डिफ़ॉल्ट मानों को ओवरराइड करके, उपयोगकर्ता अपने स्वयं के मूल्यों को इंजेक्ट कर सकता है।

Step 1 - कुकबुक विशेषताओं के लिए एक डिफ़ॉल्ट फ़ाइल बनाएं और उसमें एक डिफ़ॉल्ट विशेषता जोड़ें।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb 
default['my_cookbook']['message'] = 'hello world!'

Step 2 - नुस्खा के अंदर की विशेषता को परिभाषित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
message = node['my_cookbook']['message'] 
Chef::Log.info("** Saying what I was told to say: #{message}")

Step 3 - संशोधित कुकबुक को अपलोड करना।

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 4 - परिभाषित नोड के शेफ-क्लाइंट को चलाना।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to 
say: hello world! 
...TRUNCATED OUTPUT...

कार्य विधि

इसे निष्पादित करने से पहले बावर्ची विशेषता फ़ाइल से सभी विशेषताओं को लोड करता है। विशेषताओं को नोड ऑब्जेक्ट के साथ संग्रहीत किया जाता है। एक व्यंजनों के भीतर नोड ऑब्जेक्ट के साथ संग्रहीत सभी विशेषताओं का उपयोग कर सकते हैं और अपने वर्तमान मूल्यों को पुनः प्राप्त कर सकते हैं।

शेफ में डिफ़ॉल्ट से शुरू होने वाला एक प्रतिबंधित ढांचा है जो सबसे कम है, फिर सामान्य आता है (जो सेट के साथ उतारा जाता है) और फिर ओवरराइड करता है। रेसिपी में सेट की गई विशेषता स्तर की विशेषता फ़ाइल में समान स्तर सेट पर पूर्ववर्ती है।

नोड और एनवायरनमेंट लेवल पर ओवरराइडिंग अट्रैक्शन

भूमिकाओं या परिवेश में परिभाषित गुण की सर्वोच्चता होती है।

Step 1 - एक भूमिका बनाएँ।

vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb 
name "german_hosts" 
description "This Role contains hosts, which should print out 
their messages in German" 
run_list "recipe[my_cookbook]" 
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }

Step 2 - शेफ सर्वर पर भूमिका अपलोड करें।

vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - नोड को भूमिका सौंपें।

vipin@laptop:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[german_hosts]" 
] 
Saving updated run_list on node server

Step 4 - शेफ-क्लाइंट चलाएं।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to 
say: Hallo Welt! 
...TRUNCATED OUTPUT...

इन्फ्रास्ट्रक्चर में, configuration managementसभी के बारे में कितनी अच्छी तरह से एक मेजबान को कॉन्फ़िगर करता है। सामान्य तौर पर, सभी कॉन्फ़िगरेशन कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके किया जाता है। शेफ गतिशील मूल्यों के साथ कॉन्फ़िगरेशन फ़ाइल को भरने में सक्षम होने के लिए टेम्पलेट्स का उपयोग करता है।

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

इसका इस्तेमाल कैसे करें?

Step 1 - नुस्खा में टेम्पलेट जोड़ें।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb  
template '/tmp/message' do 
   source 'Test.erb' 
   variables( 
      hi: 'Tesing', 
      world: 'Welt', 
      from: node['fqdn'] 
   ) 
end

Step 2 - जोड़ें ERB टेम्पलेट फ़ाइल।

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/templates/default/test.erb 
<%- 4.times do %> 
<%= @hi %>, <%= @world %> from <%= @from %>! 
<%- end %>

Step 3 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload <Cookbook Name> 
Uploading my_cookbook [0.1.0] 
Run Chef Client on your node: 
user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2017-01-14T20:41:21+00:00] INFO: Processing template[/tmp/ 
message] action create (my_cookbook::default line 9) 
[2017-01-14T20:41:22+00:00] INFO: template[/tmp/message] updated 
content

Step 4 - अपलोड की गई फ़ाइल की सामग्री को सत्यापित करें।

user@server:~$ sudo cat /tmp/message 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm!

कार्यप्रवाह

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

  • यदि आप किसी चर या रूबी अभिव्यक्ति के मान को जनरेट की गई फ़ाइल में प्रिंट करना चाहते हैं तो <% =%> का उपयोग किया जाता है।

  • यदि आप रूबी लॉजिक को अपनी टेम्पलेट फ़ाइल में एम्बेड करना चाहते हैं तो <% -%> का उपयोग किया जाता है। हम इसका उपयोग हमारी अभिव्यक्ति को चार बार लूप करने के लिए करते हैं।

शेफ में, अगर किसी को सरल रेसिपी बनाने की जरूरत है, तो शेफ में उपलब्ध संसाधनों का उपयोग कर सकते हैं, जैसे कि टेम्पलेट, रिमोट_फाइल, और सेवाएं। हालाँकि जैसे-जैसे व्यंजन विस्तृत होते जाते हैं, किसी को उन्नत तकनीकों की आवश्यकता होती है, जैसे कि हालत पर नुस्खा के कुछ हिस्सों को निष्पादित करने के लिए सशर्त वक्तव्य। यह शेफ डोमेन विशिष्ट भाषा (डीएसएल) के साथ सादा रूबी को मिलाने की शक्ति है।

इसका इस्तेमाल कैसे करें?

शेफ सर्वर का उपयोग करने में सक्षम होने के लिए क्लाइंट मोड में किसी भी नोड पर शेफ शेल शुरू करें।

user@server:~$ sudo chef-shell --client 
loading configuration: /etc/chef/client.rb 
Session type: client 
...TRUNCATED OUTPUT... 
run `help' for help, `exit' or ^D to quit. 
Ohai2u user@server! 
Chef>

बावर्ची डीएसएल के साथ बुनियादी शर्तें

सादे रूबी का उपयोग करके नाम के आधार पर छाँटें।

chef > nodes.sort! {|a,b| a.name <=> b.name } 
=> [node[alice],node[server]]

नोड्स के माध्यम से लूप, उनके ऑपरेटिंग सिस्टम को प्रिंट करना।

chef > nodes.each do |n| 
   chef > puts n['os'] 
   chef ?> 
end  
linux 
windows 
=> [node[server], node[alice]]

मणि नामों के निर्माण के लिए एक सरणी, एक लूप और स्ट्रिंग विस्तार का उपयोग करके कई रूबी रत्न स्थापित करें।

chef > %w{ec2 essentials}.each do |gem| 
   chef > gem_package "knife-#{gem}" 
   chef ?> end   => ["ec2", "essentials"]

कार्य विधि

शेफ रेसिपी रूबी फाइलें हैं, जिन्हें शेफ चलाने के संदर्भ में मूल्यांकन किया जाता है। उनमें सादा रूबी कोड हो सकता है जैसे कि स्टेटमेंट और लूप और साथ ही शेफ डीएसएल जैसे संसाधन।

नुस्खा के अंदर, कोई बस रूबी चर घोषित कर सकता है और इसे मान प्रदान कर सकता है।

व्यंजनों रसोई की किताब के प्रमुख निर्माण खंड हैं जो मूल रूप से रूबी कोड है। शेफ नुस्खा के अंदर रूबी भाषा की सभी विशेषताओं का उपयोग करना संभव है। अधिकांश समय रूबी कार्यक्षमता में निर्माण पर्याप्त है लेकिन कभी-कभी किसी को अतिरिक्त रूबी रत्न का उपयोग करने की आवश्यकता हो सकती है। उदाहरण के लिए, यदि किसी को रेसिपी से MySQL डेटाबेस को एक्सेस करने की आवश्यकता है।

शेफ की रेसिपी में आवश्यक रूबी रत्नों को प्राप्त करने की क्षमता होती है ताकि वे उसी रेसिपी के अंदर उपयोग कर सकें।

दिया गया नुस्खा में iptable रत्न का उपयोग करना

Step 1 - कुकबुक की डिफॉल्ट रेसिपी को एडिट करें और रेसिपी के अंदर इस्तेमाल होने वाले रत्न को स्थापित करें।

vipin@laptop:~/chef-repo $ subl 
cookbooks/my_cookbook/recipes/default.rb 
chef_gem 'ipaddress' 
require 'ipaddress' 
ip = IPAddress("192.168.0.1/24") 
Chef::Log.info("Netmask of #{ip}: #{ip.netmask}")

Step 2 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - आउटपुट देखने के लिए शेफ क्लाइंट चलाना।

user@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T14:02:02+00:00] INFO: Netmask of 192.168.0.1: 
255.255.255.0 
...TRUNCATED OUTPUT...

कार्य विधि

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

Chef_gem संसाधन ठीक वैसा ही करेगा, और शेफ में, ओम्निबस काम करने का एकमात्र तरीका है। इसका मुख्य कार्य शेफ को रत्न उपलब्ध कराना है।

शेफ में लाइब्रेरी संकलित तर्क को संक्षिप्त करने के लिए एक जगह प्रदान करती है ताकि कुकबुक व्यंजनों को साफ और स्वच्छ रहें।

लाइब्रेरी बनाना

Step 1 - कुकबुक की लाइब्रेरी में एक सहायक विधि बनाएं।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe 
def netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

Step 2 - सहायक विधि का उपयोग करें।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb 
ip = '10.10.0.0/24' 
mask = netmask(ip) # here we use the library method 
Chef::Log.info("Netmask of #{ip}: #{mask}")

Step 3 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

लाइब्रेरी का परीक्षण

user@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T14:38:26+00:00] INFO: Netmask of 10.10.0.0/24: 
255.255.255.0 
...TRUNCATED OUTPUT...

कार्य विधि

शेफ लाइब्रेरी कोड शेफ :: रेसिपी क्लास खोल सकते हैं और चरण 1 में किए गए नए तरीके जोड़ सकते हैं। यह कदम सबसे साफ नहीं है लेकिन इसे करने का सबसे सरल तरीका है।

class Chef::Recipe 
def netmask(ipaddress) 
... 
end 
end

सर्वोत्तम प्रथाएं

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

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe::IPAddress 
def self.netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

हम रेसिपी के अंदर की विधि का उपयोग कर सकते हैं जैसे

IPAddress.netmask(ip)

परिभाषा को समूहीकरण संसाधनों के तार्किक तरीके के रूप में परिभाषित किया जा सकता है, जो बार-बार उपयोग किए जाते हैं। इस प्रवाह में, हम संसाधनों को समूहीकृत करते हैं और उन्हें परिभाषित कुकबुक की पठनीयता हासिल करने के लिए एक नाम देते हैं।

ऐसा करने के लिए, हमारे पास एक नुस्खा होना चाहिए। इस मामले में, हम test_cookbook और नोड्स की एक रन सूची का उपयोग कर रहे हैं, जिसमें रसोई की किताब शामिल है।

एक परिभाषा बनाना

Step 1 - कुकबुक परिभाषा फ़ोल्डर में एक नई परिभाषा फ़ाइल बनाएँ।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/definitions/ 
capistrano_deploy_dirs.rb 
define :capistrano_deploy_dirs, :deploy_to => '' do 
   directory "#{params[:deploy_to]}/releases" 
   directory "#{params[:deploy_to]}/shared" 
   directory "#{params[:deploy_to]}/shared/system" 
end

Step 2 - कुकबुक डिफॉल्ट रेसिपी के अंदर एक परिभाषा का उपयोग करें।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
capistrano_deploy_dirs do 
   deploy_to "/srv" 
end

Step 3 - रसोइया सर्वर पर रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading test_cookbook [0.1.0]

Step 4 - वांछित नोड पर शेफ क्लाइंट चलाएं।

vipin@laptop:~/chef-repuser@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
releases] action create (my_cookbook::default line 2) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/releases] created 
directory /srv/releases 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
shared] action create (my_cookbook::default line 3) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared] created 
directory /srv/shared 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
shared/system] action create (my_cookbook::default line 4) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared/system]

कुकबुक में परिभाषा माइक्रोस की तरह होती है, जो संसाधनों का समूह बनाते हैं और उन्हें एक नाम देते हैं। एक परिभाषा का एक नाम है जिसके द्वारा कोई भी उन्हें बता सकता है जिसमें से नुस्खा के अंदर कहा जा सकता है और इसमें परिधि की एक सूची है।

परिभाषा में, हमारे पास पैरामीटर हैं जो हमारे कोड में निम्नलिखित की तरह दिखता है।

….. 
directory "#{params[:deploy_to]}/releases" 
directory "#{params[:deploy_to]}/shared" 
directory "#{params[:deploy_to]}/shared/system” 
……

इसका उपयोग डिफ़ॉल्ट नुस्खा के अंदर निम्नानुसार किया जा सकता है।

capistrano_deploy_dirs do 
   deploy_to "/srv"` 
end

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

ऐसा करने के लिए, हमारे पास एक कुकबुक होनी चाहिए, यहां हम test_cookbook और एक रन सूची का उपयोग करेंगे जिसमें test_cookbook शामिल है।

शेफ पकाने की विधि का उपयोग कर पर्यावरण चर सेट करना

Step 1 - पर्यावरण चर के साथ रसोई की किताब का डिफ़ॉल्ट नुस्खा अपडेट करें।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
ENV['MESSAGE'] = 'Testing environment variable update with chef !'  
execute 'print value of environment variable $MESSAGE' do command 'echo $MESSAGE > /tmp/message' 
end

Step 2 - अपडेटेड कुकबुक को सर्वर पर अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - एक अस्थायी फ़ाइल बनाने के लिए शेफ़ क्लाइंट चला रहा है।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-25T15:01:57+00:00] INFO: Processing execute[print 
value of environment variable $MESSAGE] action run (my_cookbook::default line 11) [2013-01-25T15:01:57+00:00] INFO: execute[print value of environment variable $MESSAGE] ran successfully 
...TRUNCATED OUTPUT...

वैरिएबल को मान्य करना

user@server:~$ cat /tmp/message 
Hello from Chef

कार्य विधि

रूबी ईएनवी के माध्यम से वर्तमान पर्यावरण चर को उजागर करता है –a पर्यावरण चर को पढ़ने और संशोधित करने के लिए हैश।

संसाधन निष्पादित करें

हम कुकबुक की शेफ डिफ़ॉल्ट रेसिपी के अंदर भी ऐसा करने के लिए एग्जीक्यूट रिसोर्स का उपयोग कर सकते हैं।

mma@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
execute 'print value of environment variable $MESSAGE' do command 'echo $MESSAGE > /tmp/message' 
   environment 'MESSAGE' => 'Hello from the execute resource' 
end

Note- ईएनवी का उपयोग करके एक पर्यावरण चर स्थापित करना उस चर को पूरे शेफ रन के दौरान उपलब्ध कराएगा। इसके विपरीत, इसे निष्पादित करने वाले संसाधन में पास करना केवल इसे उपलब्ध कराएगा जो संसाधन द्वारा निष्पादित एक कमांड के लिए है।

शेफ डेटा बैग को डेटा के एक मनमाने संग्रह के रूप में परिभाषित किया जा सकता है, जिसका उपयोग कुकबुक के साथ किया जा सकता है। जब कोई व्यंजनों में हार्डकोड विशेषताओं की इच्छा नहीं रखता है और न ही कुकबुक में विशेषताओं को संग्रहीत करने के लिए डेटा बैग का उपयोग करना बहुत सहायक होता है।

कार्य विधि

निम्नलिखित सेटअप में, हम http एंडपॉइंट URL से संवाद करने का प्रयास कर रहे हैं। इसके लिए, हमें एक डेटा बैग बनाने की आवश्यकता है, जो एंडपॉइंट URL विवरण को रखेगा और हमारे नुस्खा में इसका उपयोग करेगा।

Step 1 - हमारे डेटा बैग के लिए एक निर्देशिका बनाएँ।

mma@laptop:~/chef-repo $ mkdir data_bags/hooks

Step 2- बिन के लिए डेटा बैग आइटम बनाएं। किसी को यह सुनिश्चित करने की आवश्यकता है कि कोई परिभाषित अनुरोध URL का उपयोग कर रहा है।

vipi@laptop:~/chef-repo $ subl data_bags/hooks/request_bin.json { 
   "id": "request_bin", 
   "url": "http://requestb.in/1abd0kf1" 
}

Step 3 - शेफ सर्वर पर डेटा बैग बनाएं

vipin@laptop:~/chef-repo $ knife data bag create hooks 
Created data_bag[hooks]

Step 4 - डेटा बैग को शेफ सर्वर पर अपलोड करें।

vipin@laptop:~/chef-repo $ knife data bag from file hooks requestbin.json 
Updated data_bag_item[hooks::RequestBin]

Step 5 - डेटा बैग से आवश्यक कुकबुक प्राप्त करने के लिए कुकबुक की डिफ़ॉल्ट रेसिपी को अपडेट करें।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb 
hook = data_bag_item('hooks', 'request_bin') 
http_request 'callback' do 
   url hook['url'] 
end

Step 6 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 7 - HTTP अनुरोध बिन निष्पादित हो जाता है, तो जाँच करने के लिए नोड पर शेफ क्लाइंट चलाएँ।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-02-22T20:37:35+00:00] INFO: http_request[callback] 
GET to http://requestb.in/1abd0kf1 successful 
...TRUNCATED OUTPUT...

यह काम किस प्रकार करता है

डेटा बैग संरचना डेटा प्रविष्टियों का एक नामित संग्रह है। एक डेटा प्रविष्टि को परिभाषित करने और JSON फ़ाइल में डेटा बैग आइटम को कॉल करने की आवश्यकता है। एक भी डेटा बैग में संग्रहीत डेटा का उपयोग करने के लिए व्यंजनों के भीतर से डेटा बैग आइटम के लिए खोज कर सकते हैं।

हमने एक डेटा बैग बनाया जिसे हुक कहा जाता है। एक डेटा बैग बावर्ची भंडार के भीतर एक निर्देशिका है। हमने इसे सर्वर पर बनाने के लिए चाकू का इस्तेमाल किया।

कुछ स्थितियों में, सर्वर को शेफ के पूर्ण नियंत्रण में रखना संभव नहीं है। ऐसे मामलों में, किसी को स्क्रिप्ट से शेफ डेटा बैग में मूल्यों तक पहुंचने की आवश्यकता हो सकती है। ऐसा करने के लिए, किसी को JSON फ़ाइल में डेटा बैग मानों को संग्रहीत करने की आवश्यकता होती है और जोड़े गए स्क्रिप्ट को उन मानों तक पहुंचने देते हैं।

इसके लिए किसी के पास कुकबुक होना जरूरी है। हमारे मामले में हम पहले की तरह test_cookbook का उपयोग करेंगे और इसमें नोड की रन सूची होनी चाहिए जिसमें test_cookbook की परिभाषा शामिल है।

कार्य विधि

Step 1 - एक डाटा बैग बनाएं।

vipin@laptop:~/chef-repo $ mkdir data_bags/servers 
vipin@laptop:~/chef-repo $ knife data bag create servers 
Created data_bag[servers]

Step 2 - डेटा बैग आइटम बनाएं।

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Step 3 - डेटा बैग आइटम को अपडेट करें।

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

कुकबुक में उपयोग करना

Step 1 - उपरोक्त कुकबुक का उपयोग करके डेटा बैग मूल्यों वाले JSON फ़ाइल बनाने की आवश्यकता है ताकि बाहरी स्क्रिप्ट उन मूल्यों तक पहुंच सकें।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

Step 2 - Chef सर्वर पर test_cookbook अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - नोड क्लाइंट को नोड पर चलाएँ।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT...

Step 4 - उत्पन्न JSON फ़ाइल की सामग्री को मान्य करना।

user@server:~$ cat /etc/backup_config.json 
"10.0.0.12"

लिपियों का वर्कफ़्लो

उपरोक्त कमांड में, फ़ाइल संसाधन जो हमने उपयोग किया है जो JSON फ़ाइल को अंदर बनाता है /etcडिफॉल्ट कुकबुक में डायरेक्टरी को परिभाषित किया गया है। यह डेटा बैग से data_bag_item विधि का उपयोग करके सीधे फ़ाइल सामग्री प्राप्त करता है। हम डेटा बैग आइटम से होस्ट मानों को एक्सेस करते हैं और इसे JSON में परिवर्तित करते हैं। फ़ाइल संसाधन JSON- परिवर्तित मानों को अपनी सामग्री के रूप में उपयोग करता है और इसे डिस्क पर लिखता है।

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

ऐसा करने के लिए, हमें एक कुकबुक की आवश्यकता है। हमारे मामले में यह test_cookbook और एक रन सूची होगी जिसमें कुकबुक की परिभाषा होगी।

कार्य विधि

नोड्स प्लेटफ़ॉर्म विवरण को पुनः प्राप्त करना और हमारी रसोई की किताब में सशर्त तर्क को निष्पादित करना प्लेटफॉर्म पर निर्भर करता है। हमारे मामले में, हम इसे उबंटू के लिए परीक्षण करेंगे।

Step 1 - एक संदेश लॉग करें यदि नोड उबंटू है।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Log.info("Running on ubuntu") if node.platform['ubuntu']

Step 2 - रसोइये को शेफ सर्वर पर अपलोड करें।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Uploading my_cookbook [0.1.0] 
Uploaded 1 cookbook.

Step 3 - नोड क्लाइंट को नोड पर चलाएँ।

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu 
...TRUNCATED OUTPUT...

वैकल्पिक रूप से, यदि कोई एक विशिष्ट प्लेटफ़ॉर्म में दिलचस्पी नहीं रखता है, लेकिन केवल यह जानना आवश्यक है कि कौन सा घोषणापत्र उपयोग कर रहा है, तो निम्नलिखित कथन का उपयोग किया जा सकता है।

Log.info("Running on a debian derivative") if 
platform_family?('debian')

संशोधित कुकबुक अपलोड करना और उबंटू नोड पर शेफ क्लाइंट चलाना निम्न परिणाम दिखाएगा।

[2013-03-03T20:16:14+00:00] INFO: Running on a debian 
derivative

लिपियों का वर्कफ़्लो

उपरोक्त कमांड में, Ohai नोड के ऑपरेटिंग सिस्टम की वर्तमान स्थिति की खोज करेगा और नोड ऑब्जेक्ट के साथ एक प्लेटफॉर्म विशेषता के रूप में संग्रहीत करेगा।

node['platform']

या, आप विधि शैली वाक्यविन्यास का उपयोग कर सकते हैं -

node.platform

प्लेटफ़ॉर्म विशिष्ट मान सेट करना

प्लेटफ़ॉर्म विशिष्ट मान सेट करने के लिए शेफ सुविधा के तरीके value_for_platform और value_for_platform_family प्रदान करता है। उनका उपयोग जटिल केस स्टेटमेंट से बचने और इसके बजाय एक साधारण हैश का उपयोग करने के लिए किया जा सकता है।

उदाहरण रसोई की किताब

execute "start-runsvdir" do 
   command value_for_platform( 
      "debian" => { "default" => "runsvdir-start" }, 
      "ubuntu" => { "default" => "start runsvdir" }, 
      "gentoo" => { "default" => "/etc/init.d/runit-start start" } 
   ) 
   action :nothing 
end

उपरोक्त उदाहरण में, कमांड ओएस विशिष्ट है जैसा कि परिभाषित किया गया है।

  • डेबियन के लिए, "रनवदिर-स्टार्ट" काम करेगा
  • उबंटू के लिए, "स्टार्ट रनवदिर" काम करेगा
  • Gentoo के लिए, "/etc/init.d/runit-start" काम करेगा

बावर्ची संसाधन अपनी इच्छित स्थिति में ऑपरेटिंग सिस्टम के एक टुकड़े का प्रतिनिधित्व करता है। यह कॉन्फ़िगरेशन नीति का एक बयान है जो एक नोड की वांछित स्थिति का वर्णन करता है जिसमें कोई संसाधन प्रदाताओं का उपयोग करके वर्तमान कॉन्फ़िगरेशन लेना चाहता है। यह शेफ के ओहाई तंत्र का उपयोग करके लक्ष्य मशीन की वर्तमान स्थिति को जानने में मदद करता है। यह उस राज्य को लक्ष्य मशीन प्राप्त करने के लिए आवश्यक चरणों को परिभाषित करने में भी मदद करता है। संसाधनों को व्यंजनों में वर्गीकृत किया गया है जो काम करने वाले कॉन्फ़िगरेशन का वर्णन करता है।

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

संसाधन सिंटेक्स

type 'name' do 
   attribute 'value' 
   action :type_of_action 
end

उपरोक्त वाक्य रचना में, 'टाइप' संसाधन प्रकार है और 'नाम' वह नाम है जिसका हम उपयोग करने जा रहे हैं। 'डू' और 'एंड' ब्लॉक में, हमारे पास उस संसाधन की विशेषता है और उस विशेष संसाधन के लिए हमें जो कार्रवाई करने की आवश्यकता है।

रेसिपी में हमारे द्वारा उपयोग किए जाने वाले प्रत्येक संसाधन का अपना कार्य है, जिसे 'डू' और 'एंड' ब्लॉक के अंदर परिभाषित किया गया है।

उदाहरण

type 'name' do 
   attribute 'value' 
   action :type_of_action 
end

सभी संसाधन कार्यक्षमता, क्रियाओं, गुणों, सशर्त निष्पादन, अधिसूचना और कार्रवाई के प्रासंगिक पथ का एक सामान्य सेट साझा करते हैं।

कार्रवाई :nothing कार्रवाई का उपयोग किसी भी संसाधन या कस्टम संसाधन के साथ किया जा सकता है।
गुण Ign_failure, प्रदाता, रिट्रीट, retry_delay, और समर्थन गुण किसी भी संसाधन या कस्टम संसाधनों के साथ उपयोग किया जा सकता है।
गार्ड Not_if और only_if सशर्त निष्पादनों का उपयोग कुछ संसाधनों के आसपास अतिरिक्त गार्ड लगाने के लिए किया जा सकता है, ताकि वे केवल तब ही चलें जब शर्त पूरी हो जाए।
गार्ड इंटरप्रिटेटर एक का उपयोग कर एक स्ट्रिंग कमांड का मूल्यांकन करता है scriptसंसाधन आधारित: bash, csh, perl, powershell_script, python, या ruby
सूचनाएं सूचनाओं और सूचनाओं को किसी भी संसाधन के साथ उपयोग किया जा सकता है।
सापेक्ष पथ # {ENV ['HOME']} सापेक्ष पथ का उपयोग किसी भी संसाधन के साथ किया जा सकता है।
विंडोज फ़ाइल सुरक्षा template, file, remote_file, cookbook_file, directory, तथा remote_directory संसाधन व्यंजनों के भीतर वंशानुक्रम और अभिगम नियंत्रण सूची (एसीएल) के उपयोग का समर्थन करते हैं।
कम्पाइल फेज में चलाएं कभी-कभी किसी संसाधन को हर दूसरे संसाधन से पहले या सभी संसाधनों को संसाधन संग्रह में जोड़ने के बाद चलाने की आवश्यकता होती है।

उपलब्ध संसाधन

apt_package

उपयोग apt_package संसाधन डेबियन और उबंटू प्लेटफार्मों के लिए पैकेज का प्रबंधन करने के लिए।

दे घुमा के

उपयोग bashबैश दुभाषिया का उपयोग करके स्क्रिप्ट निष्पादित करने के लिए संसाधन। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो कि उपलब्ध हैंexecuteसंसाधन। इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

जत्था

उपयोग batchcmd.exe दुभाषिया का उपयोग करके एक बैच स्क्रिप्ट निष्पादित करने के लिए संसाधन। batch संसाधन एक अस्थायी फ़ाइल बनाता है और निष्पादित करता है (समान कैसे करें script संसाधन व्यवहार करता है), कमांड इनलाइन चलाने के बजाय।

यह संसाधन क्रिया (: रन और: कुछ नहीं) और गुण (बनाता है, cwd, पर्यावरण, समूह, पथ, टाइमआउट और उपयोगकर्ता) से विरासत में मिला है executeसंसाधन। इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। उपयोगnot_if तथा only_if इस संसाधन की रक्षा करने के लिए।

bff_package

उपयोग bff_package AIX प्लेटफ़ॉर्म के लिए संकुल को प्रबंधित करने के लिए संसाधन installpउपयोगिता। जब एक पैकेज स्थानीय फ़ाइल से स्थापित किया जाता है, तो इसे नोड का उपयोग करके जोड़ा जाना चाहिएremote_file या cookbook_file resources

chef_gem

उपयोग chef_gemकेवल रूबी के उदाहरण के लिए एक मणि स्थापित करने के लिए संसाधन जो बावर्ची-ग्राहक को समर्पित है। जब कोई रत्न स्थानीय फ़ाइल से स्थापित किया जाता है, तो इसे नोड का उपयोग करके जोड़ा जाना चाहिएremote_file या cookbook_file संसाधनों।

chef_gem संसाधन सभी समान गुणों और विकल्पों के साथ काम करता है gem_packageसंसाधन, लेकिन मणिभ संपत्ति को स्वीकार नहीं करता है क्योंकि यह हमेशा करंटग्रेन का उपयोग करता है जिसके तहत बावर्ची-ग्राहक चल रहा है। इसके समान कार्य करने के अलावाgem_package संसाधन, chef_gem संसाधन ऊपर करता है।

cookbook_file

उपयोग cookbook_file COOKBOOK_NAME / फ़ाइलों / उप-निर्देशिका से फ़ाइलों को एक होस्ट पर स्थित निर्दिष्ट पथ पर स्थानांतरित करने के लिए संसाधन जो शेफक्लाइंट चल रहा है।

फ़ाइल को फ़ाइल विशिष्टता के अनुसार चुना जाता है, जो होस्टनाम, होस्ट प्लेटफ़ॉर्म (ऑपरेटिंग सिस्टम, डिस्ट्रो, या उपयुक्त के रूप में), या प्लेटफ़ॉर्म संस्करण के आधार पर विभिन्न स्रोत फ़ाइलों का उपयोग करने की अनुमति देता है। COOKBOOK_NAME / फ़ाइलें / डिफ़ॉल्ट उपनिर्देशिका में स्थित फ़ाइलें किसी भी प्लेटफ़ॉर्म पर उपयोग की जा सकती हैं।

क्रॉन

समय-आधारित नौकरी शेड्यूलिंग के लिए क्रोन प्रविष्टियों का प्रबंधन करने के लिए क्रोन संसाधन का उपयोग करें। एक अनुसूची के लिए गुण प्रदान नहीं करने पर डिफ़ॉल्ट रूप से *। क्रोन संसाधन को एक क्रॉस्टैब प्रोग्राम तक पहुंच की आवश्यकता होती है, आमतौर पर क्रोन।

csh

Csh इंटरप्रेटर का उपयोग करके स्क्रिप्ट निष्पादित करने के लिए csh रिसोर्स का उपयोग करें। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो निष्पादन संसाधन के लिए उपलब्ध हैं।

इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

तैनाती

उपयोग deployतैनाती को प्रबंधित और नियंत्रित करने के लिए संसाधन। यह एक लोकप्रिय संसाधन है, लेकिन यह भी जटिल है, जिसमें अधिकांश गुण, कई प्रदाता, कॉलबैक की अतिरिक्त जटिलता, प्लस चार विशेषताएं हैं जो एक नुस्खा के भीतर से लेआउट संशोधनों का समर्थन करती हैं।

निर्देशिका

उपयोग directoryएक निर्देशिका का प्रबंधन करने के लिए संसाधन, जो फ़ोल्डर्स का एक पदानुक्रम है जिसमें कंप्यूटर पर संग्रहीत सभी जानकारी शामिल होती है। रूट निर्देशिका शीर्ष-स्तर है, जिसके तहत बाकी निर्देशिका का आयोजन किया जाता है।

directoryस्रोत में किसी स्थान पर पथ निर्दिष्ट करने के लिए संसाधन नाम गुण का उपयोग करता है। आमतौर पर, निर्देशिका में उस स्थान तक पहुंचने की अनुमति आवश्यक है।

dpkg_package

उपयोग dpkg_package संसाधन पैकेज के प्रबंधन के लिए dpkgमंच। जब एक पैकेज स्थानीय फ़ाइल से स्थापित किया जाता है, तो इसे नोड का उपयोग करके जोड़ा जाना चाहिएremote_file या cookbook_file संसाधनों।

easy_install_package

उपयोग easy_install_package पायथन प्लेटफ़ॉर्म के लिए पैकेज का प्रबंधन करने के लिए संसाधन।

env

उपयोग envMicrosoft Windows में पर्यावरण कुंजी का प्रबंधन करने के लिए संसाधन। वातावरण कुंजी सेट होने के बाद, टास्क शेड्यूलर के लिए पर्यावरण कुंजी उपलब्ध होने से पहले Microsoft विंडोज को फिर से शुरू करना होगा।

erl_call

उपयोग erl_callवितरित एर्लांग प्रणाली के भीतर स्थित नोड से जुड़ने के लिए संसाधन। इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

निष्पादित

उपयोग executeएकल कमांड निष्पादित करने के लिए संसाधन। इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। उपयोगnot_if तथा only_if इस संसाधन की रक्षा करने के लिए।

फ़ाइल

उपयोग file संसाधन नोड पर सीधे फ़ाइलों का प्रबंधन करने के लिए।

freebsd_package

उपयोग freebsd_package FreeBSD प्लेटफ़ॉर्म के लिए संकुल प्रबंधित करने के लिए संसाधन।

gem_package

उपयोग gem_packageमणि संकुल का प्रबंधन करने के लिए संसाधन जो केवल व्यंजनों में शामिल हैं। जब एक पैकेज स्थानीय फ़ाइल से स्थापित किया जाता है, तो इसे नोड का उपयोग करके जोड़ा जाना चाहिएremote_file या cookbook_file संसाधनों।

Git

उपयोग gitस्रोत नियंत्रण संसाधनों को प्रबंधित करने के लिए संसाधन जो एक गिट रिपॉजिटरी में मौजूद हैं। git संसाधन में सभी कार्यक्षमता का उपयोग करने के लिए git संस्करण 1.6.5 (या उच्चतर) की आवश्यकता होती है।

समूह

उपयोग group स्थानीय समूह को प्रबंधित करने के लिए संसाधन।

homebrew_package

उपयोग homebrew_package Mac OS X प्लेटफ़ॉर्म के लिए संकुल प्रबंधित करने के लिए संसाधन।

http_request

उपयोग http_requestएक मनमाना संदेश के साथ HTTP अनुरोध (GET, PUT, POST, DELETE, HEAD, या विकल्प) भेजने के लिए संसाधन। कस्टम कॉलबैक आवश्यक होने पर यह संसाधन अक्सर उपयोगी होता है।

ifconfig

उपयोग ifconfig इंटरफेस का प्रबंधन करने के लिए संसाधन।

ips_package

उपयोग ips_package सोलारिस 11 प्लेटफ़ॉर्म पर पैकेज (इमेज पैकेजिंग सिस्टम (आईपीएस) का उपयोग करके) का प्रबंधन करने के लिए संसाधन।

क्ष

उपयोग kshKorn खोल (ksh) दुभाषिया का उपयोग करके स्क्रिप्ट निष्पादित करने के लिए संसाधन। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो निष्पादन संसाधन के लिए उपलब्ध हैं।

इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

संपर्क

उपयोग link प्रतीकात्मक या कठिन लिंक बनाने के लिए संसाधन।

लॉग

उपयोग logलॉग एंट्री बनाने के लिए संसाधन। लॉग संसाधन किसी अन्य संसाधन की तरह व्यवहार करता है: संकलन चरण के दौरान संसाधन संग्रह में बनाया गया है, और फिर निष्पादन चरण के दौरान चलता है। (एक लॉग प्रविष्टि बनाने के लिए जिसे संसाधन संग्रह में नहीं बनाया गया है, लॉग संसाधन के बजाय बावर्ची :: लॉग का उपयोग करें)

macports_package

Mac OS X प्लेटफ़ॉर्म के लिए संकुल प्रबंधित करने के लिए macports_package संसाधन का उपयोग करें।

mdadm

उपयोग mdadmmdadm उपयोगिता का उपयोग करके लिनक्स वातावरण में RAID उपकरणों का प्रबंधन करने के लिए संसाधन। Mdadm प्रोवाइडर एक एरे को बनाएगा और असेम्बल करेगा, लेकिन यह उस रिंफ़ाइ फाइल को नहीं बनाएगा, जिसका इस्तेमाल रिबूट के लिए ऐरे को बनाए रखने के लिए किया जाता है।

यदि कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है, तो इसे सही सरणी लेआउट के साथ टेम्पलेट निर्दिष्ट करके और फिर फ़ाइल सिस्टम तालिका (fstab) प्रविष्टि बनाने के लिए माउंट प्रदाता का उपयोग करके किया जाना चाहिए।

पर्वत

आरोहित फ़ाइल सिस्टम को प्रबंधित करने के लिए माउंट संसाधन का उपयोग करें।

Ohai

उपयोग ohaiसंसाधन नोड पर Ohai कॉन्फ़िगरेशन को फिर से लोड करने के लिए। यह उन व्यंजनों को बदलने की अनुमति देता है जो सिस्टम विशेषताओं को बदलते हैं (एक नुस्खा की तरह जो उपयोगकर्ता जोड़ता है) उन विशेषताओं को संदर्भित करने के लिए बाद में शेफ-क्लाइंट रन के दौरान।

पैकेज

उपयोग packageपैकेज का प्रबंधन करने के लिए संसाधन। जब पैकेज एक स्थानीय फ़ाइल (जैसे कि RubyGems, dpkg, या RPM पैकेज मैनेजर) के साथ स्थापित किया जाता है, तो फ़ाइल को दूरस्थ_फ़ाइल या cookbook_file संसाधनों का उपयोग करके नोड में जोड़ा जाना चाहिए।

pacman_package

उपयोग pacman_package आर्क लिनक्स प्लेटफ़ॉर्म पर पैकेज (पेसमैन का उपयोग करके) प्रबंधन करने के लिए संसाधन।

powershell_script

उपयोग powershell_scriptWindows PowerShell दुभाषिया का उपयोग करके स्क्रिप्ट को निष्पादित करने के लिए संसाधन, जैसे स्क्रिप्ट और स्क्रिप्ट-आधारित संसाधन- bash, csh, perl, python, और ruby- का उपयोग कैसे किया जाता है। पावरशेल_स्क्रिप्ट Microsoft Windows प्लेटफ़ॉर्म और Windows PowerShell दुभाषिया के लिए विशिष्ट है।

अजगर

उपयोग pythonपायथन दुभाषिया का उपयोग करके स्क्रिप्ट निष्पादित करने के लिए संसाधन। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो निष्पादन संसाधन के लिए उपलब्ध हैं।

इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

रीबूट

उपयोग rebootकुछ प्लेटफार्मों पर कुछ प्रतिष्ठानों के साथ एक आवश्यक कदम के लिए एक नोड को रिबूट करने के लिए संसाधन। यह संसाधन Microsoft Windows, Mac OS X और Linux प्लेटफ़ॉर्म पर उपयोग के लिए समर्थित है।

रजिस्ट्री चाबी

उपयोग registry_key Microsoft Windows में रजिस्ट्री कुंजियों को बनाने और हटाने के लिए संसाधन।

remote_directory

उपयोग remote_directoryकिसी निर्देशिका को किसी रसोई की किताब से नोड में स्थानांतरित करने के लिए संसाधन। कुकी से कॉपी की गई निर्देशिका COOKBOOK_NAME / फ़ाइलों / डिफ़ॉल्ट / REMOTE_DIRECTORY के अंतर्गत स्थित होनी चाहिए।

Remote_directory संसाधन फ़ाइल विशिष्टता का पालन करेगा।

remote_file

उपयोग remote_fileफ़ाइल विशिष्टता का उपयोग करके दूरस्थ स्थान से फ़ाइल स्थानांतरित करने के लिए संसाधन। यह संसाधन फ़ाइल संसाधन के समान है।

मार्ग

लिनक्स वातावरण में सिस्टम रूटिंग टेबल का प्रबंधन करने के लिए मार्ग संसाधन का उपयोग करें।

rpm_package

उपयोग rpm_package RPM पैकेज प्रबंधक प्लेटफ़ॉर्म के लिए संकुल प्रबंधित करने के लिए संसाधन।

माणिक

उपयोग rubyरूबी दुभाषिया का उपयोग करके स्क्रिप्ट निष्पादित करने के लिए संसाधन। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो निष्पादन संसाधन के लिए उपलब्ध हैं।

इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

ruby_block

उपयोग ruby_blockबावर्ची-ग्राहक चलाने के दौरान रूबी कोड निष्पादित करने के लिए संसाधन। रूबी_ब्लॉक संसाधन में रूबी कोड का अभिसरण के दौरान अन्य संसाधनों के साथ मूल्यांकन किया जाता है, जबकि रूबी_ब्लॉक संसाधन के बाहर रूबी कोड का मूल्यांकन अन्य संसाधनों से पहले किया जाता है, क्योंकि यह नुस्खा संकलित है।

लिपि

स्क्रिप्ट संसाधन का उपयोग एक निर्दिष्ट दुभाषिया, जैसे बैश, csh, पर्ल, पायथन, या रूबी का उपयोग करके स्क्रिप्ट को निष्पादित करने के लिए करें। यह संसाधन किसी भी क्रिया और गुण का उपयोग कर सकता है जो निष्पादन संसाधन के लिए उपलब्ध हैं।

इस संसाधन के साथ निष्पादित होने वाले कमांड (उनके स्वभाव से) उदासीन नहीं हैं, क्योंकि वे आम तौर पर उस वातावरण के लिए अद्वितीय होते हैं जिसमें वे चलाए जाते हैं। इस संसाधन की सुरक्षा के लिए not_if और only_if का उपयोग करें।

सर्विस

उपयोग service एक सेवा का प्रबंधन करने के लिए संसाधन।

smart_os_package

उपयोग smartos_package SmartOS प्लेटफ़ॉर्म के लिए पैकेज प्रबंधित करने के लिए संसाधन।

solaris_package

solaris_package संसाधन का उपयोग सोलारिस प्लेटफ़ॉर्म के लिए पैकेज को प्रबंधित करने के लिए किया जाता है।

विनाश

उपयोग subversion स्रोत नियंत्रण संसाधनों को प्रबंधित करने के लिए संसाधन जो एक तोड़फोड़ भंडार में मौजूद हैं।

टेम्पलेट

उपयोग templateसंसाधन जो बावर्ची-क्लाइंट चला रहे होस्ट पर स्थित निर्दिष्ट पथ के लिए COOKBOOK_NAME / टेम्प्लेट की उप-निर्देशिका से फ़ाइलों को स्थानांतरित करके एंबेडेड रूबी (ईआरबी) टेम्पलेट का उपयोग करके फ़ाइल की सामग्री का प्रबंधन करने के लिए संसाधन। इस संसाधन में फ़ाइल संसाधन से क्रियाएँ और गुण शामिल हैं। टेम्प्लेट संसाधन द्वारा प्रबंधित टेम्प्लेट फ़ाइलें रिमोट_फाइल और फाइल रिसोर्स के समान ही फाइल विशिष्टता नियमों का पालन करती हैं।

उपयोगकर्ता

उपयोग user उपयोगकर्ताओं को जोड़ने, मौजूदा उपयोगकर्ताओं को अपडेट करने, उपयोगकर्ताओं को हटाने और उपयोगकर्ता पासवर्ड लॉक / अनलॉक करने के लिए संसाधन।

windows_package

उपयोग windows_package Microsoft Windows प्लेटफ़ॉर्म के लिए Microsoft इंस्टालर पैकेज (MSI) पैकेज को प्रबंधित करने के लिए संसाधन।

windows_service

उपयोग windows_service Microsoft Windows प्लेटफ़ॉर्म पर एक सेवा का प्रबंधन करने के लिए संसाधन।

yum_package

उपयोग yum_packageRed Hat और CentOS प्लेटफार्मों के लिए Yum के साथ संकुल को संस्थापित, अपग्रेड और निकालने के लिए संसाधन। Yum_package संसाधन को हल करने में सक्षम है पैकेज के लिए डेटा प्रदान करता है जैसे कि यम कमांड लाइन से चलने पर कर सकता है। यह संकुल को स्थापित करने के लिए कई प्रकार के विकल्प देता है, जैसे न्यूनतम संस्करण, आभासी प्रदान करता है, और पुस्तकालय के नाम।

Lightweight resource provider (LWRP) यह उपलब्ध सुविधाओं को बढ़ाकर उपलब्ध संसाधनों की सूची का विस्तार करने का एक विकल्प प्रदान करता है और शेफ उपयोगकर्ता को कस्टम संसाधन बनाने की अनुमति देता है।

कस्टम संसाधन बनाकर कोई भी आसानी से कुकबुक लिख सकता है क्योंकि शेफ डीएसएल का उपयोग करके कस्टम कस्टमर्स समृद्ध हो सकते हैं जो रेसिपी कोड को अधिक अभिव्यंजक बनाने में मदद करता है।

शेफ समुदाय में, LWRPs का उपयोग करके कई कस्टम संसाधन लागू किए जाते हैं। LWRP के कई कार्य उदाहरण हैं जैसे किiptables_rules तथा apt_repository

कार्य विधि

सुनिश्चित करें कि किसी के पास कुकबुक का नाम Test_resource और नोड का एक run_list है, जिसमें Test_resource रसोई की किताब शामिल है।

भवन LWRP

Step 1 - Test_resource रसोई की किताब में एक कस्टम संसाधन बनाएँ।

vipin@laptop:~/chef-repo $ subl cookbooks/Testing_resource/resources/default.rb 
actions :create, :remove 
attribute :title, kind_of: String, default: "World" 
attribute :path, kind_of: String, default: "/tmp/greeting.txt"

Step 2 - Tesing_resource रसोई की किताब में संसाधनों के लिए एक प्रदाता बनाएँ।

vipin@laptop:~/chef-repo $ subl cookbooks/Testing_resource/provider/default.rb 
action :create do 
   log "Adding '#{new_resource.name}' greeting as #{new_resource. 
      path}" 
   file new_resource.path do 
      content "#{new_resource.name}, #{new_resource.title}!" 
      action :create 
end  
action :remove do 
   Chef::Log.info "Removing '#{new_resource.name}' greeting #{new_resource.path}" 
   file new_resource.path do 
      action :delete 
   end 
end

Step 3 - Test_resource डिफ़ॉल्ट नुस्खा संपादित करके एक नए संसाधन का उपयोग करें।

vipin@laptop:~/chef-repo $ subl cookbooks/Tesing_resource/recipes/default.rb 
greeting "Ohai" do 
   title "Chef" 
   action :create 
end

Step 4 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

vipin@laptop:~/chef-repo $ knife cookbook upload greeting 
Uploading greeting [0.1.0]

Step 5 - नोड पर शेफ-क्लाइंट चलाएं।

vipin@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
2013-06-28T21:32:54+00:00] INFO: Processing greeting[Ohai] action 
create (greeting::default line 9) 
[2013-06-28T21:32:54+00:00] INFO: Adding 'Ohai' greeting as /tmp/ 
greeting.txt 
[2013-06-28T21:32:54+00:00] INFO: Processing file[/tmp/greeting. 
txt] action create (/srv/chef/file_store/cookbooks/greeting/ 
providers/default.rb line 7) 
[2013-06-28T21:32:54+00:00] INFO: entered create 
[2013-06-28T21:32:54+00:00] INFO: file[/tmp/greeting.txt] created 
file /tmp/greeting.txt 
...TRUNCATED OUTPUT...

Step 6 - उत्पन्न फ़ाइल की सामग्री को सत्यापित करें।

user@server:~$ cat /tmp/greeting.txt 
Ohai, Chef!

वर्कफ़्लो लिपियों

LWRPs कुकबुक में रहते हैं। एक कस्टम संसाधन रसोई की किताबों के अंदर रहता है, और यह रसोई की किताब के नाम से उपलब्ध होगा। वर्कफ़्लो में, पहले हम परिभाषाओं को परिभाषित करते हैं और फिर उन विशेषताओं को पास करते हैं जो कुकबुक में इस्तेमाल होने वाली हैं। अंत में, हम अपने नुस्खा में उन कार्यों और विशेषताओं का उपयोग करते हैं।

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

चिंता करने की विधि

हमें उस नोड पर पायथन और गिट स्थापित करना होगा जहां हमें ब्लूप्रिंट चलाने की आवश्यकता होती है।

Step 1 - खाका स्थापित करें।

vipin@server:~$ pip install blueprint

Step 2 - एक खाका बनाएं।

user@server:~$ sudo blueprint create internal-cookbook 
# [blueprint] using cached blueprintignore(5) rules 
# [blueprint] searching for Python packages 
# [blueprint] searching for PEAR/PECL packages 
# [blueprint] searching for Yum packages 
# [blueprint] searching for Ruby gems 
# [blueprint] searching for npm packages 
# [blueprint] searching for software built from source 
# [blueprint] searching for configuration files 
# [blueprint] /etc/ssl/certs/AC_Ra\xc3\xadz_Certic\xc3\ 
xa1mara_S.A..pem not UTF-8 - skipping it 
# [blueprint] /etc/ssl/certs/NetLock_Arany_=Class_Gold=_F\xc5\ 
x91tan\xc3\xbas\xc3\xadtv\xc3\xa1ny.pem not UTF-8 - skipping it 
# [blueprint] /etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sa\ 
xc4\x9flay\xc4\xb1c\xc4\xb1s\xc4\xb1.pem not UTF-8 - skipping it 
# [blueprint] /etc/ssl/certs/Certinomis_-_Autorit\xc3\xa9_Racine. 
pem not UTF-8 - skipping it 
# [blueprint] /etc/ssl/certs/T\xc3\x9cB\xc4\xb0TAK_UEKAE_K\xc3\ 
xb6k_Sertifika_Hizmet_Sa\xc4\x9flay\xc4\xb1c\xc4\xb1s\xc4\xb1_-_S\ 
xc3\xbcr\xc3\xbcm_3.pem not UTF-8 - skipping it 
# [blueprint] searching for APT packages 
# [blueprint] searching for service dependencies

Step 3 - ब्लूप्रिंट से कुकबुक बनाएं।

user@server:~$ blueprint show -C internal-cookbook my-server/recipes/default.rb

Step 4 - उत्पन्न फ़ाइल की सामग्री को सत्यापित करें।

user@server:~$ cat internal-cookbook /recipes/default.rb 
# 
# Automatically generated by blueprint(7). Edit at your own risk. 
# 
cookbook_file('/tmp/96468fd1cc36927a027045b223c61065de6bc575.tar') 
do 
   backup false 
   group 'root' 
   mode '0644' 
   owner 'root' 
   source 'tmp/96468fd1cc36927a027045b223c61065de6bc575.tar' 
end 
execute('/tmp/96468fd1cc36927a027045b223c61065de6bc575.tar') do 
   command 'tar xf "/tmp/96468fd1cc36927a027045b223c61065de6bc575.tar"' 
   cwd '/usr/local' 
end 
directory('/etc/apt/apt.conf.d') do 
...TRUNCATED OUTPUT... 
service('ssh') do 
   action [:enable, :start] 
   subscribes :restart, resources('cookbook_file[/etc/default/ 
      keyboard]', 'cookbook_file[/etc/default/console-setup]', 
      'cookbook_file[/etc/default/ntfs-3g]', 'package[openssh-server]', 
      'execute[96468fd1cc36927a027045b223c61065de6bc575.tar]') 
end

वर्कफ़्लो स्क्रिप्ट

ब्लूप्रिंट एक पायथन पैकेज है जो सर्वर के सभी प्रासंगिक कॉन्फ़िगरेशन डेटा का पता लगाता है और इसे गिट रेपो में संग्रहीत करता है। प्रत्येक ब्लूप्रिंट का अपना नाम है।

व्यक्ति विभिन्न फॉर्मेंट में अपने गिट रेपो की सामग्री को दिखाने के लिए खाका पूछ सकता है।

user@server:~$ ls -l internal-cookbook / 
total 8 
drwxrwxr-x 3 vagrant vagrant 4096 Jun 28 06:01 files 
-rw-rw-r-- 1 vagrant vagrant 0 Jun 28 06:01 metadata.rb 
drwxrwxr-x 2 vagrant vagrant 4096 Jun 28 06:01 recipes

ब्लूप्रिंट संकेत कमाते हैं

user@server:~$ blueprint show-packages my-server 
...TRUNCATED OUTPUT... 
apt wireless-regdb 2011.04.28-1ubuntu3 
apt zlib1g-dev 1:1.2.3.4.dfsg-3ubuntu4 
python2.7 distribute 0.6.45 
python2.7 pip 1.3.1 
pip blueprint 3.4.2 
pip virtualenv 1.9.1

पूर्ववर्ती कमांड सभी प्रकार के स्थापित पैकेज दिखाता है। अन्य शो कमांड इस प्रकार हैं -

  • show-files
  • show-services
  • show-sources

शेफ में, कॉन्फिगरेशन फाइल और मूविंग पैकेज प्रमुख घटक हैं। कई तरीके हैं कि शेफ कैसे प्रबंधित करता है। कई तरीके हैं कि शेफ फ़ाइलों और सॉफ़्टवेयर पैकेजों से निपटने में कैसे समर्थन करते हैं।

थर्ड-पार्टी रेपो से पैकेज स्थापित करना

Step 1 - रसोई की किताब का डिफ़ॉल्ट नुस्खा संपादित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
include_recipe "apt" 
apt_repository "s3tools" do 
   uri "http://s3tools.org/repo/deb-all" 
   components ["stable/"] 
   key "http://s3tools.org/repo/deb-all/stable/s3tools.key" 
   action :add 
end 
package "s3cmd"

Step 2 - उपयुक्त कुकबुक पर निर्भरता जोड़ने के लिए मेटाडेटा संपादित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/metadata.rb 
... 
depends "apt"

Step 3 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

Step 4 - पुष्टि करें कि आप जिस पैकेज को स्थापित करने का प्रयास कर रहे हैं, वह अभी तक स्थापित नहीं है।

Step 5 - डिफ़ॉल्ट रेपो को मान्य करें।

Step 6 - नोड पर शेफ-क्लाइंट चलाएं।

Step 7 - सत्यापित करें कि आवश्यक पैकेज स्थापित है।

सोर्स से सॉफ्टवेयर इंस्टॉल करना

यदि किसी को किसी ऐसे सॉफ़्टवेयर के टुकड़े को स्थापित करने की आवश्यकता होती है जो किसी दिए गए प्लेटफ़ॉर्म के लिए पैकेज के रूप में उपलब्ध नहीं है, तो किसी को इसे संकलित करने की आवश्यकता है। शेफ में, हम स्क्रिप्ट संसाधन का उपयोग करके ऐसा कर सकते हैं।

Step 1 - डिफ़ॉल्ट नुस्खा संपादित करें।

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/ 
default.rb 
version = "1.3.9" 
bash "install_nginx_from_source" do 
   cwd Chef::Config['file_cache_path'] 
   code ≪-EOH 
      wget http://nginx.org/download/nginx-#{version}.tar.gz 
      tar zxf nginx-#{version}.tar.gz && 
      cd nginx-#{version} && 
      ./configure && make && make install 
   EOH

Step 2 - बावर्ची सर्वर के लिए संशोधित रसोई की किताब अपलोड करें।

Step 3 - नोड पर शेफ-क्लाइंट चलाएं।

Step 4 - पुष्टि करें कि नगेंक्स स्थापित है।

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

कुकबुक को अपडेट, अपलोड और डाउनलोड करने के लिए अपने सिस्टम पर चाकू को कॉन्फ़िगर करना होगा। चाकू कुकबुक कमांड का उपयोग करके कुकबुक के साथ बातचीत करें। चाकू कुकबुक के साथ, आप कुकबुक बना सकते हैं, हटा सकते हैं, दिखा सकते हैं, सूची, डाउनलोड और अपलोड कर सकते हैं। अध्याय 7 में अधिक जानकारी के लिए चाकू कुकबुक कमांड प्रलेखन पढ़ें।

निम्नलिखित समुदाय कुकबुक की लिंक है: https://supermarket.chef.io/cookbooksdirectory