ansible - रीलोडेड की गतिशील सूची




ansible-inventory (4)

Ansible 2.0+ के साथ, आप task चलाकर अपनी इन्वेंट्री मिड-प्ले को रीफ्रेश कर सकते हैं:

- meta: refresh_inventory

मैं EC2 इंस्टेंसेस सेटअप करने के लिए Ansible का उपयोग कर रहा हूं और एक ऐप को तैनात कर रहा हूं। एक होस्ट स्क्रिप्ट है जो टैग संबंधित सर्वर और समूह जानकारी एकत्र करती है। मैं इन क्रियाओं को एक ही प्लेबुक के रूप में चलाना चाहता हूँ, इसलिए

  1. जरूरत पड़ने पर नए उदाहरण बनाए जाते हैं
  2. होस्ट स्क्रिप्ट स्क्रिप्ट सूची (सर्वर के तथ्यों सहित)
  3. परिनियोजन प्लेबुक काम करता है

हालाँकि, इन्वेंट्री को पहले से लोड किया जाता है ताकि सर्वर / समूह डेटा न हो अगर सर्वर प्ले के दौरान बनाया / अपडेट किया गया हो। मैं 1) अलग प्रावधान और तैनाती प्लेबुक 2) सर्वर अपडेट होने पर डायनामिक इन्वेंट्री का अनुकरण करने के लिए add_host ट्रिक का उपयोग करता हूं, लेकिन उन तरीकों में कमियां हैं।

क्या मैं इन्वेंट्री को पुनः लोड करने के लिए सक्षम कर सकता हूं? मेरी परीक्षण फ़ाइलें हैं: hosts स्क्रिप्ट:

#!/bin/sh
echo `date` >> log.log
echo "{\"standalone\":[\"localhost\"]}"

नमूना playbook.yml :

---
- hosts: all
  tasks:
    - name: show inventory_hostname
      command: echo {{ inventory_hostname }}

मैं इसे ansible-playbook -i hosts playbook.yml -v चलाता हूं और दो रन देखता हूं:

$> cat log.log
Thu Mar 12 09:43:16 SAMT 2015
Thu Mar 12 09:43:16 SAMT 2015

लेकिन मुझे इसे दोगुना करने की आज्ञा नहीं मिली है।


आप ec2.ini फ़ाइल को भी संपादित कर सकते हैं और विकल्प सेट कर सकते हैं:

cache_max_age = 0

यह सुनिश्चित करने के लिए पुनः लोड की आवश्यकता को रोकने के लिए कि पहली जगह में कुछ भी कैश नहीं है।


वर्तमान में Ansible इसका समर्थन नहीं करता है। यदि आप ansible या ansible-playbook कमांड्स के सोर्स कोड को देखते हैं, तो आप देखेंगे कि इन्वेंट्री को पहले लोड किया गया है और फिर इन्वेंट्री ऑब्जेक्ट ansible कमांड को दिया गया है जो निर्दिष्ट कार्य या प्लेबुक चलाता है। इन्वेंट्री प्रोसेसिंग को आगे बढ़ाना ताकि यह कार्य / प्लेबुक हैंडलर के भीतर हो जाए, संभवतः कई कारणों से एक बहुत बड़ा उपक्रम होगा।

आपका सबसे अच्छा दांव जब ऐसा कुछ करना है तो बस अपनी प्लेबुक को दो में तोड़ना है और एक शेल स्क्रिप्ट में अपने कॉल को लपेटना है जिसे आपको केवल एक बार आमंत्रित करना है।


add_host पर एक नज़र add_host

यह एक होस्ट (और वैकल्पिक रूप से एक समूह) को मेमोरी इन्वेंट्री में ansible-playbook में जोड़ता है





ansible-inventory