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
.host: x
ist nicht erforderlich. Ich habe es gerade mit Ansible 2.3.1 erneut getestet und dashost
Attribut derwait_for
Aufgaben bezieht sich standardmäßig auf den aktuellen Server, der aus dem Inventar verarbeitet wird.hosts
Attribut aktualisiert .AFAIK gibt es kein eingebautes Modul für diesen Zweck, aber Sie können
shell
+ verwendennc
:quelle
-G 1
kann ich nicht in den Manpages finden?Sie können wait_for für dasselbe Modul verwenden
Beispiel aus der Dokumentation zitiert:
quelle
Für solche Aufgaben verwenden wir unser Tool dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ). Sie können Ihre Erwartungen definieren
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
und teste diese erwartungen entweder gegen localhost oder remote durch ssh. Für Ferntests müssen Sie Ziele definieren:
{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}
Sie können den Test von ausführen
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
quelle