शुरुआती लोगों के लिए Ansible ट्यूटोरियल: प्लेबुक, कमांड और उदाहरण
क्या है अनुत्तेजक?
Ansible सॉफ़्टवेयर प्रोविज़निंग, कॉन्फ़िगरेशन प्रबंधन और सॉफ़्टवेयर परिनियोजन के लिए एक ओपन सोर्स ऑटोमेशन और ऑर्केस्ट्रेशन टूल है। Ansible आसानी से Unix-जैसे सिस्टम को चला और कॉन्फ़िगर कर सकता है Windows सिस्टम को कोड के रूप में बुनियादी ढांचा प्रदान करने के लिए। इसमें सिस्टम कॉन्फ़िगरेशन और प्रबंधन के लिए अपनी स्वयं की घोषणात्मक प्रोग्रामिंग भाषा शामिल है।
Ansible अपनी स्थापना की सरलता, क्लाइंट से कनेक्टिविटी के मामले में उपयोग में आसानी, Ansible क्लाइंट के लिए एजेंट की कमी और कौशल की बहुलता के लिए लोकप्रिय है। यह कनेक्ट करके काम करता है एसएसएच क्लाइंट्स को, इसलिए क्लाइंट-साइड पर विशेष एजेंट की आवश्यकता नहीं होती है, और क्लाइंट्स को मॉड्यूल्स पुश करने से, मॉड्यूल्स को क्लाइंट-साइड पर स्थानीय रूप से निष्पादित किया जाता है और आउटपुट को वापस Ansible सर्वर पर पुश कर दिया जाता है।
चूंकि यह SSH का उपयोग करता है, इसलिए यह SSH-Keys का उपयोग करके क्लाइंट से बहुत आसानी से जुड़ सकता है, जिससे पूरी प्रक्रिया सरल हो जाती है। क्लाइंट विवरण, जैसे होस्टनाम या IP पते और SSH पोर्ट, इन्वेंटरी फ़ाइल नामक फ़ाइलों में संग्रहीत होते हैं। एक बार जब आप एक इन्वेंटरी फ़ाइल बना लेते हैं और उसे भर देते हैं, तो ansible उसका उपयोग कर सकता है।
Ansible का उपयोग क्यों करें?
Ansible का उपयोग करने के कुछ महत्वपूर्ण पक्ष/लाभ इस प्रकार हैं
- Ansible का सबसे महत्वपूर्ण लाभ यह है कि इसका उपयोग हर कोई निःशुल्क कर सकता है।
- Ansible को स्थापित करने और उपयोग करने के लिए किसी विशेष सिस्टम प्रशासक कौशल की आवश्यकता नहीं है, और आधिकारिक दस्तावेज बहुत व्यापक है।
- प्लगइन्स, मॉड्यूल्स, इन्वेंटरी और प्लेबुक के संबंध में इसकी मॉड्यूलरिटी, बड़े वातावरण को व्यवस्थित करने के लिए Ansible को एक आदर्श साथी बनाती है।
- एंसिबल बहुत हल्का और सुसंगत है, और इसमें ऑपरेटिंग सिस्टम या अंतर्निहित हार्डवेयर से संबंधित कोई बाधा मौजूद नहीं है।
- यह अपनी एजेंट रहित क्षमताओं और ओपनएसएसएच सुरक्षा सुविधाओं के उपयोग के कारण बहुत सुरक्षित भी है।
- एक अन्य लाभ जो Ansible को अपनाने के लिए प्रोत्साहित करता है, वह है इसका सुगम शिक्षण वक्र, जो व्यापक दस्तावेज़ीकरण और सीखने में आसान संरचना और कॉन्फ़िगरेशन द्वारा निर्धारित होता है।
एंसिबल का इतिहास
यहाँ, ansible के इतिहास से महत्वपूर्ण मील के पत्थर हैं:
- फरवरी 2012 में Ansible प्रोजेक्ट शुरू हुआ। इसे सबसे पहले माइकल डेहान ने विकसित किया था, जो कोबलर और फंक, फेडोरा यूनिफाइड नेटवर्क कंट्रोलर के निर्माता हैं।
- शुरू में AnsibleWorks Inc कहलाने वाली, ansible टूल को वित्तपोषित करने वाली कंपनी को 2015 में RedHat द्वारा अधिग्रहित कर लिया गया था और बाद में, RedHat के साथ, के छत्र के नीचे चला गया। IBM.
- वर्तमान में, Ansible Fedora Linux, RHEL, Centos और जैसे वितरणों में शामिल है Oracle लिनक्स।
Ansible में प्रयुक्त महत्वपूर्ण शब्द
-
एंसिबल सर्वर
वह मशीन जहां Ansible स्थापित है और जहां से सभी कार्य और प्लेबुक चलाए जाएंगे
-
मॉड्यूल
मूलतः, मॉड्यूल एक कमांड या समान Ansible कमांडों का समूह होता है, जिसे क्लाइंट-साइड पर निष्पादित किया जाना होता है
-
कार्य
कार्य एक ऐसा खंड है जिसमें एक ही प्रक्रिया पूरी की जानी होती है
-
भूमिका
कार्यों और संबंधित फ़ाइलों को व्यवस्थित करने का एक तरीका जिसे बाद में प्लेबुक में बुलाया जाएगा
-
तथ्य
गैदर-फैक्ट्स ऑपरेशन के साथ वैश्विक चरों से क्लाइंट सिस्टम से प्राप्त जानकारी
-
इन्वेंटरी
एन्सिबल क्लाइंट सर्वर के बारे में डेटा युक्त फ़ाइल। बाद के उदाहरणों में होस्ट फ़ाइल के रूप में परिभाषित
-
प्ले
प्लेबुक का निष्पादन
-
संचालक
कार्य जिसे केवल तभी बुलाया जाता है जब नोटिफ़ायर मौजूद हो
-
सूचक
किसी कार्य को जिम्मेदार ठहराया गया अनुभाग जो आउटपुट परिवर्तित होने पर हैंडलर को कॉल करता है
-
टैग
किसी कार्य के लिए नाम सेट करें जिसका उपयोग बाद में केवल उस विशिष्ट कार्य या कार्यों के समूह को जारी करने के लिए किया जा सकता है।
लिनक्स में Ansible की स्थापना
एक बार जब आप अपने विकल्पों की तुलना कर लेते हैं और Ansible को चुनने का फैसला कर लेते हैं, तो अगला कदम इसे अपने सिस्टम पर इंस्टॉल करना है। हम अलग-अलग तरीकों से इंस्टॉलेशन के चरणों से गुजरेंगे। Linux अगले छोटे ट्यूटोरियल में, सबसे लोकप्रिय वितरणों के बारे में चर्चा करेंगे।
Centos/RedHat सिस्टम पर Ansible स्थापित करें
चरण 1) EPEL रेपो स्थापित करें
[root@ansible-server ~]# sudo yum install epel-release
चरण 2) ansible पैकेज स्थापित करें
[root@ansible-server ~]# sudo yum install -y ansible
ansible को इस पर स्थापित करें Ubuntu/डेबियन सिस्टम
चरण 1) पैकेजों का अद्यतन करें
$ sudo apt update
चरण 2) सॉफ्टवेयर-प्रॉपर्टीज-कॉमन पैकेज स्थापित करें
$ sudo apt install software-properties-common
चरण 3) ansible व्यक्तिगत पैकेज संग्रह स्थापित करें
$ sudo apt-add-repository ppa:ansible/ansible
चरण 4) ansible स्थापित करें
$ sudo apt update $ sudo apt install ansible
Ansible एड-हॉक कमांड
Ansible का उपयोग करने का सबसे सरल तरीका एड-हॉक कमांड का उपयोग करना है। इनका उपयोग तब किया जा सकता है जब आप किसी सर्वर या सर्वरों के समूह पर कुछ कमांड जारी करना चाहते हैं। एड-हॉक कमांड भविष्य के उपयोग के लिए संग्रहीत नहीं किए जाते हैं, लेकिन वांछित सर्वरों के साथ बातचीत करने का एक तेज़ तरीका दर्शाते हैं।
इस Ansible ट्यूटोरियल के लिए, एक सरल दो सर्वर होस्ट फ़ाइल कॉन्फ़िगर की जाएगी, जिसमें host1 और host2 शामिल होंगे।
आप सभी होस्ट पर पिंग कमांड जारी करके यह सुनिश्चित कर सकते हैं कि होस्ट ansible सर्वर से पहुँच योग्य हैं।
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
स्पष्टीकरण:
- इस मामले में आदेश की स्थिति, सफल
- वह होस्ट जिस पर कमांड चलाया गया
- इस मामले में -m पैरामीटर के माध्यम से जारी किया गया आदेश, पिंग
- -i पैरामीटर के साथ, आप होस्ट्स फ़ाइल को इंगित कर सकते हैं।
यदि आवश्यक हो तो आप वही आदेश केवल किसी विशिष्ट होस्ट पर ही जारी कर सकते हैं।
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
स्पष्टीकरण:
- सीमा पैरामीटर का उपयोग होस्ट की फ़ाइल में केवल विशिष्ट होस्ट पर ही आदेश जारी करने के लिए किया जा सकता है
- इन्वेंट्री फ़ाइल में परिभाषित होस्ट का नाम
यदि आपको किसी फ़ाइल को तेज़ी से कई गंतव्यों पर कॉपी करने की आवश्यकता है, तो आप ansible में कॉपी मॉड्यूल का उपयोग कर सकते हैं जो SCP का उपयोग करता है। तो कमांड और उसका आउटपुट नीचे जैसा दिखता है:
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
"state": "file",
"uid": 0
}
host2 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
"state": "file",
"uid": 0
}
स्पष्टीकरण:
- मॉड्यूल परिभाषित कॉपी करें
- इस मामले में, मॉड्यूल तर्क स्रोत निरपेक्ष पथ और गंतव्य निरपेक्ष पथ हैं।
- कॉपी कमांड की सफलता को दर्शाने वाला एन्सिबल कमांड आउटपुट और फ़ाइल अखंडता जाँच के लिए sha1 या md5 चेकसम और स्वामी, आकार या अनुमतियों जैसे मेटाडेटा जैसे अन्य विवरण। सर्वर के एक समूह पर पैकेज स्थापित करना आसान है। एन्सिबल में कई मॉड्यूल हैं जो इस्तेमाल किए गए इंस्टॉलर, जैसे yum, apt, dnf, आदि के साथ इंटरैक्ट करते हैं।
अगले उदाहरण में, आप जानेंगे कि दो Centos होस्ट पर yum मॉड्यूल के माध्यम से पैकेज कैसे स्थापित किया जाता है।
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
स्पष्टीकरण:
- इस उदाहरण में Yum मॉड्यूल का उपयोग किया गया है
- यह मॉड्यूल तर्कों को परिभाषित करता है, और इस मामले में, आप पैकेज का नाम और उसकी स्थिति चुनेंगे। यदि स्थिति अनुपस्थित है, उदाहरण के लिए, पैकेज की खोज की जाएगी और यदि पाया जाता है, तो उसे हटा दिया जाएगा
- पीले रंग में रंगने पर, आपको ansible कमांड का आउटपुट परिवर्तित अवस्था के साथ दिखाई देगा, जिसका अर्थ है कि इस मामले में, पैकेज मिल गया है और इंस्टॉल हो गया है।
- ansible के माध्यम से जारी yum install कमांड की स्थिति। इस मामले में पैकेज ncdu.x86_64 0:1.14-1.el7 स्थापित किया गया था।
बेशक, सभी yum इंस्टॉलर विकल्पों का उपयोग ansible के माध्यम से किया जा सकता है, जिसमें अपडेट, इंस्टॉल, नवीनतम संस्करण या हटाना शामिल है।
नीचे दिए गए उदाहरण में पहले से स्थापित ncdu पैकेज को हटाने के लिए वही कमांड जारी किया गया था।
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
स्पष्टीकरण:
- yum कमांड का आउटपुट दिखाता है कि पैकेज हटा दिया गया था।
क्लाइंट के सर्वर के साथ बातचीत करने के लिए ansible द्वारा उपयोग की जाने वाली एक और उपयोगी और आवश्यक सुविधा सिस्टम के बारे में कुछ तथ्य एकत्र करना है। इसलिए, यह सिस्टम से हार्डवेयर, सॉफ़्टवेयर और संस्करण संबंधी जानकारी प्राप्त करता है और प्रत्येक मान को एक वैरिएबल में संग्रहीत करता है जिसे बाद में उपयोग किया जा सकता है।
यदि आपको ansible के माध्यम से संशोधित किए जाने वाले सिस्टम के बारे में विस्तृत जानकारी चाहिए, तो अगला कमांड इस्तेमाल किया जा सकता है। सेटअप मॉड्यूल सिस्टम वैरिएबल से तथ्य एकत्र करता है।
एंसिबल प्लेबुक
एंसिबल प्लेबुक स्क्रिप्ट के माध्यम से दूरस्थ सिस्टम को कमांड भेजने का तरीका है। एक या अधिक सिस्टम पर स्क्रिप्ट निष्पादित करके लचीलापन बढ़ाने के लिए जटिल सिस्टम वातावरण को कॉन्फ़िगर करने के लिए एन्सिबल प्लेबुक का उपयोग किया जाता है। एन्सिबल प्लेबुक प्रोग्रामिंग भाषा की तुलना में कॉन्फ़िगरेशन भाषा अधिक होती है।
एन्सिबल प्लेबुक कमांड YAML प्रारूप का उपयोग करते हैं, इसलिए बहुत अधिक सिंटैक्स की आवश्यकता नहीं होती है, लेकिन इंडेंटेशन का सम्मान किया जाना चाहिए। जैसा कि नाम से पता चलता है, प्लेबुक नाटकों का एक संग्रह है। प्लेबुक के माध्यम से, आप कुछ होस्ट को विशिष्ट भूमिकाएँ और अन्य होस्ट को अन्य भूमिकाएँ निर्दिष्ट कर सकते हैं। ऐसा करके, आप बहुत ही विविध परिदृश्यों में कई सर्वरों को ऑर्केस्ट्रेट कर सकते हैं, सभी एक प्लेबुक में।
Ansible प्लेबुक उदाहरणों के साथ आगे बढ़ने से पहले सभी विवरणों को सटीक बनाने के लिए, हमें पहले एक कार्य को परिभाषित करना होगा। ये भूमिकाओं और प्लेबुक के लिए ansible मॉड्यूल के लिए इंटरफ़ेस हैं।
अब, आइए एक उदाहरण के माध्यम से Ansible प्लेबुक सीखें, जिसमें एक प्लेबुक के साथ एक प्लेबुक है, जिसमें नीचे दिए अनुसार कई कार्य शामिल हैं:
---
- hosts: group1
tasks:
- name: Install lldpad package
yum:
name: lldpad
state: latest
- name: check lldpad service status
service:
name: lldpad
state: started
उपरोक्त Ansible प्लेबुक उदाहरण में, होस्ट की फ़ाइल में होस्टों के समूह 1 को yum मॉड्यूल का उपयोग करके lldpad पैकेज की स्थापना के लिए लक्षित किया जाता है और उसके बाद स्थापना के बाद बनाई गई सेवा lldpad को सेवा मॉड्यूल का उपयोग करके शुरू किया जाता है जिसका उपयोग ज्यादातर systemd ensemble के साथ बातचीत करने के लिए किया जाता है।
स्पष्टीकरण:
- होस्ट्स का समूह जिस पर प्लेबुक चलेगी
- इस कार्य में lldpad स्थापना के लिए Yum मॉड्यूल का उपयोग किया जाता है
- सर्विस मॉड्यूल का उपयोग यह जांचने के लिए किया जाता है कि स्थापना के बाद सेवा चालू है या नहीं
प्रत्येक ansible प्लेबुक एक इन्वेंट्री फ़ाइल के साथ काम करता है। इन्वेंट्री फ़ाइल में सर्वर की एक सूची होती है जो विवरणों के लिए बेहतर नियंत्रण के लिए समूहों में विभाजित होती है आईपी एड्रेस और प्रत्येक होस्ट के लिए SSH पोर्ट.
इस Ansible प्लेबुक उदाहरण के लिए आप जिस इन्वेंट्री फ़ाइल का उपयोग कर सकते हैं वह नीचे दी गई है। दो समूह हैं, जिनका नाम group1 और group2 है, जिनमें से प्रत्येक में क्रमशः host1 और host2 शामिल हैं।
[group1] host1 ansible_host=192.168.100.2 ansible_ssh_port=22 [group2] host2 ansible_host=192.168.100.3 ansible_ssh_port=22
स्पष्टीकरण:
- समूह का नाम
- होस्टनाम, आईपी पता और एसएसएच पोर्ट के साथ, इस मामले में, डिफ़ॉल्ट, 22.
दो होस्ट के लिए इस बार दो प्ले को शामिल करने वाला एक और उपयोगी Ansible प्लेबुक उदाहरण अगला है। होस्ट के पहले समूह, ग्रुप 1 के लिए, selinux सक्षम किया जाएगा। यदि यह सक्षम है, तो होस्ट की स्क्रीन पर एक संदेश दिखाई देगा।
होस्ट के दूसरे समूह के लिए, httpd पैकेज केवल तभी स्थापित किया जाएगा जब ansible_os_family RedHat हो और ansible_system_vendor HP हो।
Ansible_os_family और ansible_system_vendor, gather_facts विकल्प के साथ एकत्रित किए गए चर हैं और इनका उपयोग इस सशर्त उदाहरण की तरह किया जा सकता है।
---
- hosts: group1
tasks:
- name: Enable SELinux
selinux:
state: enabled
when: ansible_os_family == 'Debian'
register: enable_selinux
- debug:
Imsg: "Selinux Enabled. Please restart the server to apply changes."
when: enable_selinux.changed == true
- hosts: group2
tasks:
- name: Install apache
yum:
name: httpd
state: present
when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'
स्पष्टीकरण:
- जब क्लॉज़ का उदाहरण, इस मामले में, जब OS प्रकार डेबियन है। ansible_os_family चर gather_facts कार्यक्षमता के माध्यम से एकत्र किया जाता है।
- कार्य आउटपुट को भविष्य में उपयोग के लिए पंजीकृत किया जाता है, जिसका नाम enable_selinux है
- जब क्लॉज़ का एक और उदाहरण। इस मामले में, होस्ट उपयोगकर्ता के लिए एक संदेश प्रदर्शित किया जाएगा यदि SELinux वास्तव में पहले सक्षम था।
- दो नियमों से युक्त when खंड का एक और उदाहरण
कार्यों के अलावा, कुछ विशेष कार्य भी हैं जिन्हें हैंडलर कहा जाता है। पूरे प्लेबुक में हैंडलर का एक अनूठा नाम होना चाहिए। ये एक नियमित कार्य की तरह ही काम करते हैं, लेकिन हैंडलर को नोटिफ़ायर के ज़रिए सूचित किया जा सकता है।
यदि प्लेबुक चलाने के दौरान हैंडलर को सूचित नहीं किया जाता है, तो यह नहीं चलेगा। हालाँकि, यदि एक से अधिक कार्य हैंडलर को सूचित करते हैं, तो यह सभी कार्य समाप्त होने के बाद केवल एक बार चलेगा।
नीचे दिखाए गए उदाहरण में, आप देख सकते हैं कि कैसे एक विशिष्ट कार्य में एक अधिसूचना अनुभाग होता है जो दूसरे कार्य को कॉल करता है। यदि पहले कार्य का आउटपुट बदल दिया जाता है, तो एक हैंडलर कार्य को कॉल किया जाएगा। सबसे अच्छा उदाहरण कॉन्फ़िगरेशन फ़ाइल को बदलना और उसके बाद उस विशिष्ट सेवा को पुनरारंभ करना है।
---
- hosts: group2
tasks:
- name: sshd config file modify port
lineinfile:
path: /etc/ssh/sshd_config
regexp: 'Port 28675'
line: '#Port 22'
notify:
- restart sshd
handlers
- name: restart sshd
service: sshd
name: sshd
state: restarted
इस स्थिति में, यदि पहला कार्य, "sshd कॉन्फ़िगरेशन फ़ाइल संशोधित पोर्ट" को बदल दिया जाता है, जिसका अर्थ है कि यदि पोर्ट पहले स्थान पर 28675 नहीं है, तो इसे संशोधित किया जाएगा और कार्य समान नाम वाले हैंडलर को चलाने के लिए सूचित करेगा, और यह sshd सेवा को पुनः आरंभ करेगा।
स्पष्टीकरण:
- नोटिफ़ायर का उदाहरण
- हैंडलर का उदाहरण
Ansible भूमिकाएँ
व्यापक प्लेबुक से निपटने के दौरान, कार्यों को भूमिकाओं में विभाजित करना आसान होता है। इससे भविष्य में भूमिकाओं का पुनः उपयोग करने में भी मदद मिलती है। भूमिकाएँ कार्यों का एक संग्रह होती हैं, जिन्हें एक प्लेबुक से दूसरी प्लेबुक में ले जाया जा सकता है, उन्हें स्वतंत्र रूप से चलाया जा सकता है लेकिन केवल प्लेबुक फ़ाइल के माध्यम से।
भूमिकाएं अलग-अलग निर्देशिकाओं में संग्रहित होती हैं और उनकी एक विशेष निर्देशिका संरचना होती है।
[root@ansible-server test2]# tree
.
`-- role1
|-- defaults
| `-- main.yml
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- README.md
|-- tasks
| `-- main.yml
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
7 directories, 8 files
डिफ़ॉल्ट निर्देशिका में yaml फ़ाइल में डिफ़ॉल्ट चर की एक सूची होती है जिसका उपयोग प्लेबुक के साथ किया जाना है। हैंडलर्स निर्देशिका का उपयोग हैंडलर्स को संग्रहीत करने के लिए किया जाता है। मेटा-निर्देशिका में लेखक और भूमिका निर्भरता के बारे में जानकारी होनी चाहिए। कार्य निर्देशिका में, भूमिका के लिए मुख्य yaml फ़ाइल होती है।
परीक्षण निर्देशिका में एक नमूना yaml प्लेबुक फ़ाइल और एक नमूना इन्वेंट्री फ़ाइल होती है और इसका उपयोग अधिकतर वास्तविक भूमिका बनाने से पहले परीक्षण के उद्देश्य से किया जाता है।
vars निर्देशिका में yaml फ़ाइल होती है जिसमें भूमिका द्वारा उपयोग किए जाने वाले सभी चर परिभाषित किए जाएँगे। निर्देशिका टेम्प्लेट और निर्देशिका फ़ाइलों में वे फ़ाइलें और टेम्प्लेट होने चाहिए जिनका उपयोग भूमिका में कार्यों द्वारा किया जाएगा।
किसी भूमिका के लिए निर्देशिका वृक्ष बनाने के लिए, आपको अंतिम पैरामीटर, भूमिका नाम के साथ निम्नलिखित कमांड का उपयोग करना चाहिए:
[root@ansible-server test2]# ansible-galaxy init role1
Ansible टेम्प्लेट के साथ भी अच्छी तरह से काम करता है। टेम्प्लेटिंग के लिए एक भाषा के रूप में, यह Jinja2 का उपयोग करता है।
अगले उदाहरण में, आप जानेंगे कि मूल जिन्जा2 टेम्पलेट कैसा दिखता है और इसे एक भूमिका में कैसे उपयोग करें।
रन टाइम पर, मान लीजिए कि आपका सर्वर किस डेटासेंटर में स्थित है, इस पर निर्भर करते हुए, आप वेरिएबल “resolver_ip_addresses” का उपयोग करके एक से अधिक नेमसर्वर में से चयन कर सकते हैं, जिनमें से प्रत्येक एक डेटासेंटर से संबंधित होता है।
{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}
options timeout:1
options attempts:5
options rotate
इस उदाहरण में, प्लेबुक निर्देशिका में कुछ चर परिभाषित किए गए हैं, जिनमें डेटासेंटर के आधार पर अलग-अलग मान वाले रिज़ॉल्वर_आईपी_एड्रेसेस नामक चर भी शामिल है।
- name: Set resolver for server
template:
src: dns.j2
dest: /etc/resolv.conf
group: root
owner: root
mode: "0644"
tag: resolver
स्पष्टीकरण:
- उपयोग किए जाने वाले टेम्पलेट का नाम। टेम्पलेट रोल पथ में टेम्पलेट निर्देशिका में स्थित है
- क्लाइंट-साइड पर टेम्पलेट से प्रतिस्थापित किए जाने वाले फ़ाइल नाम का गंतव्य पथ।
- गंतव्य फ़ाइल की अनुमतियाँ
भूमिका कार्यों में एक टैग फ़ील्ड भी हो सकता है, जिसमें एक नाम होता है। एक से अधिक कार्य एक ही टैग साझा कर सकते हैं। जब आप ansible प्लेबुक चलाते हैं, तो आप टैग भी निर्दिष्ट कर सकते हैं, ताकि वे कार्य निष्पादित हो जाएँ।
एंसिबल केस स्टडी
इस खंड में, हम एक आवश्यक ansible प्लेबुक के केस स्टडी का विश्लेषण करेंगे जिसमें तीन भूमिकाएँ हैं। इसका उद्देश्य उस बात का व्यावहारिक उदाहरण देना है जिसके बारे में हमने पहले बात की थी। इस Ansible प्लेबुक ट्यूटोरियल में पहले इस्तेमाल किए गए कुछ उदाहरणों को इस प्लेबुक में अनुकूलित और उपयोग किया जाएगा।
नीचे प्लेबुक की निर्देशिका संरचना दी गई है। उपयोग की जाने वाली Yaml फ़ाइल p4.yml होगी।
[root@ansible-server test_ansible]# ls -lrth total 16K -rw-r--r--. 1 root root 0 Jul 3 10:13 testfile -rw-r--r--. 1 root root 203 Jul 3 13:30 p1.yml -rw-r--r--. 1 root root 125 Jul 3 15:00 hosts -rw-r--r--. 1 root root 488 Jul 3 16:40 p2.yml -rw-r--r--. 1 root root 188 Jul 4 17:33 p4.yml drwxr-xr-x. 5 root root 47 Jul 4 17:35 roles [root@ansible-server test_ansible]# cd roles [root@ansible-server roles]# ls -lrth total 12K drwxr-xr-x. 9 root root 4.0K Jul 4 12:52 httpd drwxr-xr-x. 9 root root 4.0K Jul 4 13:55 selinux drwxr-xr-x. 9 root root 4.0K Jul 4 16:54 resolver
प्लेबुक में तीन भूमिकाएँ हैं, एक को रिज़ॉल्वर कहा जाता है जो सर्वर से /etc/resolv.conf गंतव्य पर फ़ाइल कॉपी करके सर्वर पर एक विशिष्ट नेमसर्वर सेट करता है। दूसरे को httpd कहा जाता है, और यह yum मॉड्यूल के साथ httpd पैकेज स्थापित करता है, और तीसरा SELinux को सक्षम करता है और लॉग इन उपयोगकर्ता को सिस्टम को रीबूट करने के लिए सूचित करता है। प्रत्येक भूमिका ansible-galaxy कमांड का उपयोग करके बनाई गई थी।
रिज़ॉल्वर भूमिका, main.yml कार्य:
Httpd भूमिका, main.yml कार्य:
Selinux भूमिका, main.yml कार्य:
नीचे p4.yml प्लेबुक परिभाषित की गई है। यह सभी होस्ट पर चलेगा यदि कमांड लाइन में अन्यथा निर्दिष्ट नहीं किया गया है, यह पोर्ट 22 (SSH) पर रूट उपयोगकर्ता के रूप में चलेगा, यह भूमिकाओं को चलाने से पहले तथ्य एकत्र करेगा, और यह पहले बताई गई सभी तीन भूमिकाओं को चलाएगा। प्रत्येक भूमिका को –t पैरामीटर के साथ ansible-playbook कमांड लाइन में टैग निर्दिष्ट करके स्वतंत्र रूप से चलाया जा सकता है।
---
- hosts: all
user: root
port: 22
gather_facts: True
roles:
- { role: selinux, tags: selinux }
- { role: httpd, tags: httpd }
- { role: resolver, tags: resolver }
दो होस्ट पर p4.yml प्लेबुक चलाना और आउटपुट की व्याख्या करना। ड्राई-रन के लिए उसी कमांड को –check पैरामीटर के साथ चलाया जा सकता है। यदि आप पासवर्ड प्रमाणीकरण का उपयोग करना चाहते हैं, तो -k पैरामीटर का उपयोग करें।
स्पष्टीकरण:
- Ansible-प्लेबुक कमांड जो p4.yml चलाता है
- प्लेबुक SELinux भूमिका को छोड़ देता है क्योंकि यह पहले से ही सक्षम है।
- Ansible ने पाया कि httpd पैकेज पहले से ही स्थापित है, इसलिए यह ठीक है।
- रिज़ॉल्वर सेट किया गया, और भूमिका रिज़ॉल्वर की स्थिति बदल दी गई।
Ansible कमांड चीट शीट
Centos/RHEL सिस्टम पर EPEL रेपो स्थापित करें
[root@ansible-server ~]# sudo yum install epel-release
Centos/RHEL सिस्टम पर ansible पैकेज स्थापित करें
[root@ansible-server ~]# sudo yum install -y ansible
डेबियन पर पैकेजों का अद्यतन करें/Ubuntu सिस्टम
$ sudo apt update
डेबियन पर सॉफ्टवेयर-प्रॉपर्टीज-कॉमन पैकेज स्थापित करें/Ubuntu सिस्टम
$ sudo apt install software-properties-common
डेबियन पर ansible व्यक्तिगत पैकेज संग्रह स्थापित करें/Ubuntu सिस्टम
$ sudo apt-add-repository ppa:ansible/ansible
डेबियन पर ansible स्थापित करें/Ubuntu सिस्टम
$ sudo apt update $ sudo apt install ansible
होस्ट्स नामक इन्वेंट्री फ़ाइल में परिभाषित सभी सर्वरों पर पिंग कमांड जारी करें
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
केवल होस्ट2 पर पिंग कमांड जारी करें
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
इन्वेंट्री फ़ाइल में सभी होस्ट पर फ़ाइल “testfile” की प्रतिलिपि बनाएँ
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
सभी होस्ट पर ncdu पैकेज स्थापित करें
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
सभी होस्ट्स पर ncdu पैकेज हटाएँ
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
role1 नामक भूमिका के लिए निर्देशिका संरचना बनाएँ.
[root@ansible-server test2]# ansible-galaxy init role1
ड्राई-रन p4.yml प्लेबुक
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
सभी होस्ट के लिए पासवर्ड प्रमाणीकरण के साथ p4.yml प्लेबुक चलाएँ
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k
सारांश
ऐसी दुनिया में जहां प्रौद्योगिकी लगातार तीव्र गति से बदल रही है और साथ ही अविश्वसनीय रूप से तेजी से बढ़ रही है, सिस्टम प्रशासकों और डेवऑप्स इंजीनियरों को नियमित कार्यों को स्वचालित करने और सर्वरों के बड़े पूल को व्यवस्थित करने के लिए विभिन्न तरीकों के बारे में सोचना होगा।
जबकि कई हैं Ansible का विकल्प (शेफ, पपेट) जो कुछ अंतरों के साथ एक ही काम करते हैं, Ansible अपनी सादगी, बेहतर सुरक्षा और सबसे महत्वपूर्ण अपने सहज सीखने की अवस्था के साथ उन सभी से ऊपर उठने में कामयाब रहा। इन गुणों और Ansible के तेजी से अपनाने के कारण, हमने उदाहरणों से भरा एक ट्यूटोरियल बनाया है ताकि आप Ansible के साथ काम करने में और भी अधिक सहज पहला अनुभव प्राप्त कर सकें।
इस Ansible बेसिक्स ट्यूटोरियल में, हमने ansible का वर्णन किया और इसके इतिहास के बारे में थोड़ी बात की। हमने Ansible के मजबूत बिंदुओं और ansible द्वारा विभिन्न आकारों के इंफ्रास्ट्रक्चर के स्वचालन और ऑर्केस्ट्रेशन में लाए जा सकने वाले लाभों का उल्लेख किया। हमने ansible में इस्तेमाल किए जाने वाले आवश्यक शब्दों को परिभाषित किया और Ansible प्लेबुक की संरचना को परिभाषित किया। विस्तृत उदाहरणों के साथ विस्तृत स्पष्टीकरण के साथ सभी जानकारी दी गई।















