paint-brush
Ansible 101: तथ्यों और टेम्पलेट्स के साथ कार्य करनाद्वारा@cloudkungfu
976 रीडिंग
976 रीडिंग

Ansible 101: तथ्यों और टेम्पलेट्स के साथ कार्य करना

द्वारा cloud-kung-fu4m2024/01/30
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

अनुकूलनीय स्वचालन वर्कफ़्लो बनाने के लिए Ansible चर, तथ्यों और टेम्पलेट्स का उपयोग करता है। वेरिएबल गतिशील कॉन्फ़िगरेशन प्रबंधन को सक्षम करते हैं, तथ्य सिस्टम-विशिष्ट जानकारी प्रदान करते हैं, और टेम्पलेट अनुकूलन योग्य कॉन्फ़िगरेशन फ़ाइलें उत्पन्न करते हैं। यह दृष्टिकोण सुनिश्चित करता है कि प्लेबुक विभिन्न वातावरणों में पुन: प्रयोज्य और लचीली हों।
featured image - Ansible 101: तथ्यों और टेम्पलेट्स के साथ कार्य करना
cloud-kung-fu HackerNoon profile picture
0-item

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


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


ये उपकरण प्लेबुक को पुन: प्रयोज्य और अनुकूलनीय बनाते हैं, जिससे आप हार्ड-कोडिंग मूल्यों से बच सकते हैं और विभिन्न वातावरणों के लिए अनुकूलन को सक्षम कर सकते हैं।

चर और तथ्य

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

तथ्य, चर और टेम्पलेट एक साथ कैसे काम करते हैं

  • चर के प्रकार:
    • बूलियन: सही या गलत मान।

    • सूची: वस्तुओं का क्रमबद्ध संग्रह।

    • शब्दकोश: जटिल डेटा संरचनाओं के लिए कुंजी-मूल्य जोड़े।

    • पंजीकृत चर: आपके प्लेबुक में बाद में उपयोग करने के लिए कार्यों के आउटपुट को कैप्चर करता है।

    • तथ्य: ऑटो-एकत्रित वेरिएबल जो आपके द्वारा प्रबंधित किए जा रहे रिमोट सिस्टम के बारे में विवरण प्रदान करते हैं।


ध्यान दें: ब्रैकेट नोटेशन का उपयोग करके परिवर्तनीय नामों में टकराव से बचें।


 - name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"

टेम्प्लेट और फ़ाइलें

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


 - name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file

अभ्यास

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


  1. रेपो को क्लोन करें.
 git clone https://github.com/perplexedyawdie/ansible-learn.git


2. निर्देशिका को तथ्य-और-टेम्प्लेट में बदलें

 cd ansible-learn/facts-and-templates


3. डॉकर-कंपोज़ का उपयोग करके पर्यावरण को स्पिन करें

 docker compose up -d --build


4. Ansible सर्वर में SSH

 ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123

चर और तथ्य

server_setup.yaml नामक एक प्लेबुक बनाएं। यहां, हम एनजीआईएनएक्स और लाइटटीपीडी सेटअप करेंगे, और फिर, प्रत्येक रिमोट होस्ट के लिए डिस्ट्रो का नाम आउटपुट करेंगे।


 - name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"


6. ansible-lint.

 ansible-lint server_setup.yaml


7. प्लेबुक चलाएँ.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml


8. पुष्टि करें कि सेटअप सफल रहा।

 ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v

टेम्प्लेट और फ़ाइलें

9. index.html.j2 नाम से एक Jinja2 टेम्प्लेट फ़ाइल बनाएं


यह ओएस परिवार और वितरण के साथ स्वतः भर जाएगा।


 <html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>


10. custom_homepage.yaml.


हम ऊपर बनाए गए कस्टम होमपेज को एनजीआईएनएक्स पर तैनात कर रहे हैं और फिर सर्वर को पुनरारंभ कर रहे हैं।


 - name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1


11. लिंटर चलाओ.

 ansible-lint custom_homepage.yaml


12. प्लेबुक चलाएँ.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml


13. अपने ब्राउज़र में http://localhost:2203 जाकर तैनाती की पुष्टि करें।

संक्षिप्त

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