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 sleep
atributo), 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.com
a esos puertos.
Usamos ignore_errors: yes
aquí para que los errores estén marcados en rojo pero no detengan la ejecución.
Los puertos abiertos se informan como ok
elementos en la salida y los puertos cerrados se informan como failed
(debe usar el -vv
indicador activado ansible-playbook
para 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_for
tarea debe register
una variable
- la segunda tarea produce resultados utilizando la
debug
condició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_items
bucle) y escribir una tarea principal de libro de jugadas que use un include
... with_items
para llamar al archivo de inclusión una vez por puerto.
host: mywebserver.com
.host: x
no es obligatorio. Acabo de volver a probar con Ansible 2.3.1 y elhost
atributo dewait_for
tareas predeterminado es el servidor actual que se procesa desde el inventario.hosts
atributo.AFAIK no hay un módulo incorporado para este propósito, pero puede usar
shell
+nc
:fuente
-G 1
lo que no puedo encontrar en las páginas de manual?Puedes usar el módulo wait_for para el mismo
ejemplo citado de la documentación:
fuente
Utilizamos nuestra herramienta dda-serverpec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) para tales tareas. Puedes definir tus expectativas
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
y pruebe estas expectativas ya sea contra localhost o remoto mediante ssh. Para las pruebas remotas, debe definir un objetivo:
{: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"}}
Puede ejecutar la prueba por
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
fuente