Vous pouvez utiliser le module Ansible wait_for qui vérifie qu'un port TCP spécifique est ouvert.
Étant donné que dans ce cas, tous les ports doivent déjà être ouverts, nous pouvons utiliser un non minimal. de tentatives, juste assez pour couvrir les problèmes de réseau:
- 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
Par défaut, Ansible vérifiera une fois par seconde (configurable dans Ansible 2.3 en utilisant l' sleep
attribut), donc cela vérifiera 3 fois par port.
Exécutez cela dans un playbook par rapport à votre inventaire de plus de 400 hôtes - Ansible vérifiera en parallèle que tous les hôtes peuvent atteindre mywebserver.com
ces ports.
Nous utilisons ignore_errors: yes
ici afin que toutes les erreurs soient marquées en rouge mais n'arrêtent pas l'exécution.
Les ports ouverts sont signalés comme des ok
éléments dans la sortie et les ports fermés sont signalés comme failed
(vous devez utiliser le -vv
drapeau sur ansible-playbook
pour voir cette sortie).
Sortie de réglage fin
Si vous souhaitez une sortie plus spécifique pour les cas de réussite et d'échec, le code doit être plus complexe, en ajoutant une deuxième tâche:
wait_for
tâche doit register
une variable
- la deuxième tâche produit une sortie
debug
basée sur la condition de réussite / d'échec (par exemple en utilisant l' expression conditionnelle Jinja2 )
- vous devez ensuite placer ces deux tâches dans un fichier include (sans aucune
with_items
boucle) et écrire une tâche principale du playbook qui utilise un include
... with_items
pour appeler le fichier include une fois par port.
host: mywebserver.com
.host: x
n'est pas requis. Je viens de retester avec Ansible 2.3.1 et l'host
attribut deswait_for
tâches par défaut au serveur actuel est traité à partir de l'inventaire.hosts
attribut.AFAIK il n'y a pas de module intégré à cet effet, mais vous pouvez utiliser
shell
+nc
:la source
-G 1
je ne trouve pas dans les pages de manuel?Vous pouvez utiliser le module wait_for pour le même
exemple cité dans la documentation:
la source
Nous utilisons notre outil dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) pour de telles tâches. Vous pouvez définir votre attente
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
et tester ces attentes contre localhost ou remote par ssh. Pour les tests à distance, vous devez définir une cible:
{: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"}}
Vous pouvez exécuter le test en
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
la source