คุณสามารถใช้โมดูล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 จะตรวจสอบทุก ๆ วินาที (กำหนดค่าใน Ansible 2.3 โดยใช้sleep
แอตทริบิวต์) ดังนั้นจะตรวจสอบ 3 ครั้งต่อพอร์ต
เรียกใช้สิ่งนี้ใน playbook เทียบกับคลังโฆษณาของคุณที่มีมากกว่า 400 โฮสต์ - Ansible จะตรวจสอบพร้อม ๆ กันว่าโฮสต์ทั้งหมดสามารถเข้าถึงmywebserver.com
พอร์ตเหล่านั้นได้
เราใช้ignore_errors: yes
ที่นี่เพื่อให้ข้อผิดพลาดมีการทำเครื่องหมายสีแดง แต่ไม่หยุดการทำงาน
พอร์ตที่เปิดจะถูกรายงานเป็นok
รายการในเอาท์พุทและพอร์ตที่ปิดจะถูกรายงานเป็นfailed
(คุณต้องใช้-vv
แฟล็กansible-playbook
เพื่อดูเอาท์พุทนี้)
เอาต์พุตปรับจูน
หากคุณต้องการผลลัพธ์ที่เฉพาะเจาะจงมากขึ้นสำหรับกรณีความสำเร็จและความล้มเหลวรหัสจะต้องซับซ้อนมากขึ้นโดยเพิ่มงานที่สอง:
wait_for
งานต้องregister
เป็นตัวแปร
- ภารกิจที่สองจะสร้างเอาต์พุตโดยใช้
debug
เงื่อนไขความสำเร็จ / ความล้มเหลว (เช่นการใช้นิพจน์เงื่อนไข Jinja2 )
- จากนั้นคุณต้องใส่ทั้งสองงานนี้ในไฟล์รวม (โดยไม่ต้อง
with_items
วนซ้ำ) และเขียนงานเพลย์บุคหลักที่ใช้include
... with_items
เพื่อเรียกไฟล์รวมหนึ่งครั้งต่อพอร์ต
host: mywebserver.com
ที่สำคัญพวกเขาจะต้องตั้งค่า