Você pode usar o módulo wait_for do Ansible , que verifica se uma porta TCP específica está aberta.
Como neste caso, todas as portas já devem estar abertas, podemos usar um número mínimo. tentativas, apenas o suficiente para cobrir problemas de rede:
- 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
Por padrão, o Ansible verifica uma vez a cada segundo (configurável no Ansible 2.3 usando o sleep
atributo), portanto, isso verifica 3 vezes por porta.
Execute isso em um manual com seu inventário de mais de 400 hosts - o Ansible verificará em paralelo que todos os hosts podem acessar mywebserver.com
nessas portas.
Usamos ignore_errors: yes
aqui para que quaisquer erros sejam marcados em vermelho, mas não parem a execução.
Portas abertas são relatadas como ok
itens na saída e portas fechadas são relatadas como failed
(você deve usar o -vv
sinalizador ansible-playbook
para ver esta saída).
Saída de ajuste fino
Se você deseja uma saída mais específica para os casos de sucesso e falha, o código deve ser mais complexo, adicionando uma segunda tarefa:
wait_for
tarefa deve register
uma variável
- a segunda tarefa produz saída usando com
debug
base na condição de sucesso / falha (por exemplo, usando a expressão condicional Jinja2 )
- é necessário colocar essas duas tarefas em um arquivo de inclusão (sem nenhum
with_items
loop) e escrever uma tarefa principal do manual que use um include
... with_items
para chamar o arquivo de inclusão uma vez por porta.
host: mywebserver.com
.