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
.host: x
não é necessário. Acabei de testar novamente com o Ansible 2.3.1 e ohost
atributo dewait_for
tarefas é padronizado para o servidor atual sendo processado a partir do inventário.hosts
atributoAFAIK, não há módulo interno para esse fim, mas você pode usar
shell
+nc
:fonte
-G 1
que não consigo encontrar nas páginas de manual?Você pode usar o módulo wait_for para o mesmo
exemplo citado na documentação:
fonte
Usamos nossa ferramenta dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) para essas tarefas. Você pode definir sua expectativa
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
e teste essas expectativas no localhost ou no remote pelo ssh. Para testes remotos, você deve definir um destino:
{: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"}}
Você pode executar o teste
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
fonte