किसी एक स्क्रिप्ट में अलग-अलग प्लेबुक के लिए अलग-अलग होस्ट कैसे निर्दिष्ट करें


9

जैसा कि मैं समझता हूं, प्रत्येक प्लेबुक एक मेजबान प्रविष्टि लेता है। मैं जानना चाहता हूं कि यदि मैं एक कंटेनर प्लेबुक बनाता हूं जिसमें अन्य प्लेबुक शामिल हैं, तो क्या मैं प्रत्येक प्लेबुक में मेजबानों को शामिल कर सकता हूं। तो कुछ ऐसा है

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

मैं सभी अलग-अलग प्लेबुक को एक स्क्रिप्ट में डाल सकता हूं और कॉल कर सकता हूं, लेकिन फिर इस तरह मैं एक प्लेबुक से दूसरे में कुछ set_fact का पुन: उपयोग करने में सक्षम नहीं हूं और इसलिए बहुत अधिक दोहराव है।

इस सवाल का एक और प्रमाण है, क्या मैं am2 को amazon पर लॉन्च कर सकता हूँ जो होगा

hosts: localhost

और लॉन्च किए गए ec2s का कॉन्फ़िगरेशन, जो मूल रूप से इन्वेंट्री को कॉन्फ़िगर करेगा -i ec2.py, और इसके रूप में निर्दिष्ट होस्ट हैं

hosts: tag_<some_tag>

एक ही प्लेबुक या सम्‍मिलित प्‍लेबुक (अलग-अलग भूमिका) के सेट से हो रहा है?


क्या आप जानते हैं कि hosts:आपके याम्ल में एक से अधिक अनुभाग हो सकते हैं और संक्षेप में, आपकी इन्वेंट्री में विभिन्न होस्ट समूहों का उपयोग करके कई प्लेबुक हैं?
योनसी सॉलिस

जवाबों:


4

वास्तव में, आपके पास एक से अधिक होस्ट हो सकते हैं: प्लेबुक प्रति अनुभाग। ऐसा प्रतीत होता है कि एक मेजबान: एक नया नाटक शुरू करता है। उदाहरण के लिए http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ देखें ।

मेरे लिए कुछ ऐसा काम करता है (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

इसलिए, मेजबानों को शामिल करें: प्रत्येक शामिल के शीर्ष पर .yml, शामिल होने के बाद नहीं:।


4

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... ऐसी अन्य जगहें हैं जहाँ से चर आ सकते हैं, लेकिन ये एक प्रकार के चर हैं जो खोजे जाते हैं, उपयोगकर्ता द्वारा निर्धारित नहीं किए जाते हैं।

तथ्य आपके दूरस्थ सिस्टम के साथ बोलने से प्राप्त जानकारी हैं ...

तथ्य आपके दूरस्थ होस्ट से प्राप्त होते हैं। तो यही कारण है कि जब आपके * .yml फ़ाइल में कई प्लेबुक होती हैं तो आम तौर पर आप अपने अलग-अलग मेजबानों के बीच तथ्यों को साझा कर सकते हैं ।

यदि आप अपनी प्लेबुक के दूसरे भाग में ऐसा कुछ करते हैं, तो अब आप अन्य मेजबानों से तथ्यों को एक्सेस कर सकते हैं:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

लेकिन इस मामले में, आपको यह याद रखने की आवश्यकता है कि आपको इसके उपयोग से पहले तथ्यों को प्राप्त करने की आवश्यकता है । फिर आप अपनी प्लेबुक में पहले भाग को सेट कर सकते हैं जो सभी होस्ट के लिए सभी तथ्यों को प्राप्त करता है या इसके लिए तथ्य कैशिंग का उपयोग करता है (देखें: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

अब, यदि आप अपनी प्लेबुक में विकल्प साझा करना पसंद करते हैं, तो शायद चर में डालने के लिए जानकारी को फिर से सोचना बेहतर होगा और इसके साथ, आप अपने चर को उसी includeनिर्देश के साथ "साझा" कर सकते हैं, इसे देखें:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles


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

कृपया फिर से पढ़ें: "अब, आप अन्य होस्ट से तथ्यों को एक्सेस कर सकते हैं यदि आप अपनी प्लेबुक के दूसरे भाग में ऐसा कुछ करते हैं: ... लेकिन इस मामले में, आपको यह याद रखना होगा कि आपको उपयोग करने से पहले तथ्यों को प्राप्त करना होगा। यह "हां, हां, आप अपने मास्टर प्लेबुक में शामिल प्लेबुक के बीच अपने तथ्यों को साझा कर सकते हैं।
योंसी सोलिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.