Gibt es ein ansibles Modul, das prüft, ob sich ein Port nicht im Status LISTEN befindet?

8

Der Ansible-Modulindex wurde konsultiert, es wurde jedoch kein Modul gefunden, das prüft, ob ein Port verfügbar ist. Gibt es ein Modul, das dies unterstützt?

Was heißt availabledas

Verfügbar bedeutet, dass sich ein Port, z. B. 80nicht im Status LISTEN befindet. Das Folgende zeigt an, dass Port 111 nicht verfügbar ist.

user@localhost ~ $ ss -nat
State      Recv-Q Send-Q Local Address:Port    Peer Address:Port              
LISTEN     0      128       *:111                   *:*

Was ist das Ziel dieser Frage?

Ziel dieser Frage ist es, einen Weg zu finden, um einen Ansible-Lauf zu stoppen, wenn Port 80 bereits von einem anderen Prozess als certbot zugewiesen wurde. Für Certbot muss Port 80 verfügbar sein, andernfalls kann das Zertifikat nicht erneuert werden. Das Problem finden Sie hier .

030
quelle

Antworten:

11

Ich denke, Sie suchen das wait_forModul . Damit können Sie überprüfen und eine Aktion ausführen, wenn ein bestimmter Port verfügbar ist und mehr.

13dimitar
quelle
sollte der Staat stoppedbenutzt werden?
030
1
Wenn ich Ihren speziellen Anwendungsfall richtig verstehe - ja.
13dimitar
2

Basierend auf der Antwort von @ 13nilux wurde der folgende Code erstellt:

- name: Check whether port 80 is available
  wait_for:
    port: 80
    state: stopped
    timeout: 10

Wenn Port 80 lauscht, schlägt der Lauf fehl, wenn beispielsweise nginx lauscht:

TASK [role_under_test : Check whether port 80 is available] ********************

fatal: [localhost]: FAILED! => {"changed": false, "elapsed": 10, "failed": true, "msg": "Timeout when waiting for 127.0.0.1:80 to stop."}

 [WARNING]: Could not create retry file

'/etc/ansible/roles/role_under_test/tests/test.retry'.         [Errno 30] Read-

only file system: u'/etc/ansible/roles/role_under_test/tests/test.retry'
030
quelle
-1

Letsencrypt wird seit langem in certbot umbenannt. Sie können den Prozess der Zertifikatserneuerung automatisieren, indem Sie einen Host konfigurieren, der eine Domäne (n) bedient, indem Sie certbot installieren und den Webserver für die Verarbeitung eines Verzeichnisses mit Authentifizierungstoken wie /.well-known/acme-challenge/für Domänen unter Let's Encrypt-signierte Zertifikate konfigurieren und dann Ansible Playbook für den manuellen Erneuerungsprozess verwenden oder Führen Sie den gleichen Befehl von cron aus.

Chupasaurus
quelle
Ja, aber was passiert, wenn Port 80 nicht verfügbar ist? Dann schlägt der Prozess der Zertifikatserneuerung fehl
030
Der manuelle Modus @ 030 erfordert keine Ports, da er manuell ist. httpMethode verwendet vorhandenen Webserver.
Chupasaurus
Wo wohnen die /path/to/http/authenticator.shund /path/to/http/cleanup.shwohnen? Vielleicht können Sie dies der Frage hinzufügen, um zu verhindern, dass diese Informationen verloren gehen, wenn der Link veraltet ist.
030
@ 030 Hierbei handelt es sich um benutzerdefinierte Skripts, die sich an einer beliebigen Stelle befinden können (mit Beispielinhalten). Die tatsächliche Implementierung kann jedoch je nach Methode und Webserverkonfiguration variieren.
Chupasaurus