Puede usar el módulo Ansible wait_for que verifica que un puerto TCP específico esté abierto.
Como en este caso, todos los puertos ya deberían estar abiertos, podemos usar un no mínimo. de reintentos, lo suficiente para cubrir problemas de red:
- 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
De manera predeterminada, Ansible verificará una vez por segundo (configurable en Ansible 2.3 usando el sleepatributo), por lo que esto se verificará 3 veces por puerto.
Ejecute esto en un libro de jugadas contra su inventario de más de 400 hosts: Ansible verificará en paralelo que todos los hosts puedan llegar mywebserver.coma esos puertos.
Usamos ignore_errors: yesaquí para que los errores estén marcados en rojo pero no detengan la ejecución.
Los puertos abiertos se informan como okelementos en la salida y los puertos cerrados se informan como failed(debe usar el -vvindicador activado ansible-playbookpara ver esta salida).
Salida de ajuste fino
Si desea una salida más específica para los casos de éxito y fracaso, el código debe ser más complejo, agregando una segunda tarea:
wait_fortarea debe registeruna variable
- la segunda tarea produce resultados utilizando la
debugcondición de éxito / fracaso (por ejemplo, utilizando la expresión condicional Jinja2 )
- entonces debe colocar ambas tareas en un archivo de inclusión (sin ningún
with_itemsbucle) y escribir una tarea principal de libro de jugadas que use un include... with_itemspara llamar al archivo de inclusión una vez por puerto.
host: mywebserver.com.