अन्सिबल में, वैरिएबल और तथ्य, टेम्प्लेट के साथ, लचीले स्वचालन वर्कफ़्लो बनाने के लिए मूलभूत उपकरण हैं। वेरिएबल आपको अपनी कॉन्फ़िगरेशन को गतिशील रूप से प्रबंधित करने और बदलने की अनुमति देते हैं। तथ्य वेरिएबल्स का एक विशेष उपसमूह हैं, जिन्हें एन्सिबल दूरस्थ सिस्टम से इकट्ठा करता है, जो संदर्भ-विशिष्ट जानकारी प्रदान करता है।
टेम्प्लेट वेरिएबल-संचालित कॉन्फ़िगरेशन फ़ाइलों के निर्माण को सक्षम करते हैं, जिससे आपकी प्लेबुक विभिन्न वातावरणों और परिदृश्यों के अनुकूल बन जाती है।
ये उपकरण प्लेबुक को पुन: प्रयोज्य और अनुकूलनीय बनाते हैं, जिससे आप हार्ड-कोडिंग मूल्यों से बच सकते हैं और विभिन्न वातावरणों के लिए अनुकूलन को सक्षम कर सकते हैं।
वेरिएबल प्लेबुक के मूल तर्क को बदले बिना मापदंडों को संशोधित करने की अनुमति देते हैं।
बूलियन: सही या गलत मान।
सूची: वस्तुओं का क्रमबद्ध संग्रह।
शब्दकोश: जटिल डेटा संरचनाओं के लिए कुंजी-मूल्य जोड़े।
पंजीकृत चर: आपके प्लेबुक में बाद में उपयोग करने के लिए कार्यों के आउटपुट को कैप्चर करता है।
तथ्य: ऑटो-एकत्रित वेरिएबल जो आपके द्वारा प्रबंधित किए जा रहे रिमोट सिस्टम के बारे में विवरण प्रदान करते हैं।
ध्यान दें: ब्रैकेट नोटेशन का उपयोग करके परिवर्तनीय नामों में टकराव से बचें।
- 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
हम यह निर्धारित करने के लिए ओएस परिवार का उपयोग करने जा रहे हैं कि लाइटटीपीडी के एनजीआईएनएक्स को स्थापित करना है या नहीं, और फिर, हम हार्डकोडिंग होस्टनाम के बिना एनजीआईएनएक्स युक्त रिमोट होस्ट पर एक कस्टम होमपेज तैनात करेंगे।
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
जाकर तैनाती की पुष्टि करें।
अद्भुत प्रयास! 🙌 हमने टेम्प्लेट का उपयोग करके डायनामिक फ़ाइलें बनाने के साथ-साथ प्लेबुक में वेरिएबल्स और तथ्यों का उपयोग करना सीखा है। इसके बाद, हम मॉड्यूलरलाइजेशन और एरर हैंडलिंग पर गौर करेंगे। तब तक, अपना ख्याल रखें!