आप Ansible Wait_for मॉड्यूल का उपयोग कर सकते हैं जो एक विशिष्ट TCP पोर्ट की जांच करता है जो खुला है।
चूंकि इस मामले में, सभी पोर्ट पहले से ही खुले होने चाहिए, इसलिए हम न्यूनतम संख्या का उपयोग कर सकते हैं। रिट्रीट, नेटवर्क मुद्दों को कवर करने के लिए पर्याप्त:
- name: Check all port numbers are accessible from current host
wait_for:
host: mywebserver.com
port: "{{ item }}"
state: started # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
ignore_errors: yes
with_items:
- 443
- 80
- 80443
डिफ़ॉल्ट रूप से, Ansible प्रत्येक सेकंड में एक बार जांच करेगा ( sleepविशेषता का उपयोग करके Ansible 2.3 में कॉन्फ़िगर किया गया है), इसलिए यह प्रति पोर्ट 3 बार जांच करेगा।
इसे 400+ मेजबानों की अपनी इन्वेंट्री के खिलाफ प्लेबुक में चलाएं - अन्सिबल समानांतर में जांच करेगा कि सभी होस्ट mywebserver.comउन बंदरगाहों पर पहुंच सकते हैं ।
हम ignore_errors: yesयहां उपयोग करते हैं ताकि किसी भी त्रुटि को लाल रंग में चिह्नित किया जाए लेकिन निष्पादन बंद न करें।
खुले बंदरगाहों को okआउटपुट में आइटम के रूप में सूचित किया जाता है और बंद बंदरगाहों को रिपोर्ट किया जाता है failed(आपको इस आउटपुट को देखने के लिए -vvध्वज का उपयोग करना चाहिए ansible-playbook)।
फाइन-ट्यूनिंग आउटपुट
यदि आप सफलता और विफलता के मामलों के लिए अधिक विशिष्ट आउटपुट चाहते हैं, तो कोड को और अधिक जटिल होना चाहिए, दूसरा कार्य जोड़ना:
wait_forकार्य registerएक चर होना चाहिए
- दूसरा कार्य
debugसफलता / असफलता की स्थिति (उदाहरण के लिए जिनजा 2 सशर्त अभिव्यक्ति का उपयोग करके ) के आधार पर उत्पादन का उत्पादन करता है
- फिर आपको इन दोनों कार्यों को एक सम्मिलित फ़ाइल (किसी भी
with_itemsलूप के बिना ) में डालने की आवश्यकता है , और एक मुख्य प्लेबुक कार्य लिखें जो पोर्ट के अनुसार शामिल फ़ाइल को एक बार कॉल करने के लिए include... का उपयोग करता है with_items।
host: mywebserver.com।