Sie können das Ansible wait_for- Modul verwenden, das überprüft, ob ein bestimmter TCP-Port geöffnet ist.
Da in diesem Fall alle Ports bereits geöffnet sein sollten, können wir eine minimale Nr. Verwenden. von Wiederholungsversuchen, gerade genug, um Netzwerkprobleme abzudecken:
- 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
Standardmäßig überprüft Ansible einmal pro Sekunde (konfigurierbar in Ansible 2.3 mithilfe des sleep
Attributs), sodass dies dreimal pro Port überprüft wird.
Führen Sie dies in einem Playbook für Ihr Inventar von über 400 Hosts aus. Ansible überprüft parallel, ob alle Hosts mywebserver.com
auf diesen Ports erreichbar sind.
Wir verwenden ignore_errors: yes
dies, damit alle Fehler rot markiert sind, aber die Ausführung nicht anhalten.
Offene Ports werden als ok
Elemente in der Ausgabe und geschlossene Ports als gemeldet failed
(Sie müssen das -vv
Flag on verwenden ansible-playbook
, um diese Ausgabe anzuzeigen).
Feineinstellung der Ausgabe
Wenn Sie eine spezifischere Ausgabe für die Erfolgs- und Fehlerfälle wünschen, muss der Code komplexer sein und eine zweite Aufgabe hinzufügen:
wait_for
Aufgabe muss register
eine Variable sein
- Die zweite Task erzeugt eine Ausgabe
debug
basierend auf der Erfolgs- / Fehlerbedingung (z. B. unter Verwendung des bedingten Ausdrucks Jinja2 ).
- Dann müssen Sie beide Tasks in eine Include-Datei (ohne
with_items
Schleife) einfügen und eine Haupt-Playbook-Task schreiben , die die Include-Datei einmal pro Port mit einem include
... with_items
aufruft.
host: mywebserver.com
.