Existe um módulo ansible que verifique se uma porta não está no estado LISTEN?

8

O índice do módulo Ansible foi consultado, mas não foi encontrado nenhum módulo que verifique se uma porta está disponível? Existe um módulo que suporte isso?

O que availablesignifica isso ?

Disponível significa que uma porta, por exemplo, 80não está no estado LISTEN. O seguinte indica que a porta 111 está indisponível.

user@localhost ~ $ ss -nat
State      Recv-Q Send-Q Local Address:Port    Peer Address:Port              
LISTEN     0      128       *:111                   *:*

Qual é o objetivo desta pergunta?

O objetivo desta pergunta é encontrar uma maneira de interromper uma execução Ansible quando a porta 80 já estiver alocada por outro processo que não o certbot. O Certbot exige que a porta 80 esteja disponível, caso contrário, o certificado não poderá ser renovado. O problema pode ser encontrado aqui .

030
fonte

Respostas:

11

Eu acho que você está procurando o wait_formódulo . Isso permitirá que você verifique e execute uma ação quando uma determinada porta estiver disponível e mais.

13dimitar
fonte
o estado stoppeddeve ser usado?
030
11
se eu entendi corretamente o seu caso de uso específico - sim.
precisa saber é o seguinte
2

Com base na resposta do @ 13nilux ', o seguinte código foi criado:

- name: Check whether port 80 is available
  wait_for:
    port: 80
    state: stopped
    timeout: 10

Quando a porta 80 está escutando, a execução falhará se, por exemplo, nginx estiver escutando:

TASK [role_under_test : Check whether port 80 is available] ********************

fatal: [localhost]: FAILED! => {"changed": false, "elapsed": 10, "failed": true, "msg": "Timeout when waiting for 127.0.0.1:80 to stop."}

 [WARNING]: Could not create retry file

'/etc/ansible/roles/role_under_test/tests/test.retry'.         [Errno 30] Read-

only file system: u'/etc/ansible/roles/role_under_test/tests/test.retry'
030
fonte
-1

Letsencrypt é renomeado por muito tempo para certbot. Você pode automatizar o processo de renovação de certificado, configurando um host que atenda a um (s) domínio (s), instalando certbot e configurando um servidor da web para manipular um diretório com tokens de autenticação, como /.well-known/acme-challenge/para domínios em Let's Encrypt criptografados, e usando Ansible playbook para processo de renovação manual ou execute o mesmo comando pelo cron.

chupasaurus
fonte
Sim, mas o que acontece se a porta 80 estiver indisponível? Em seguida, o processo de renovação do certificado falha
030
O modo manual @ 030 não requer nenhuma porta, porque é manual. httpO método usa o servidor da web existente.
Chupasaurus
Onde residem /path/to/http/authenticator.she /path/to/http/cleanup.sh? Talvez você possa adicionar isso à pergunta para evitar que essas informações sejam perdidas se o link for descontinuado.
030
@ 030 Estes são scripts definidos pelo usuário que podem estar em qualquer lugar (com conteúdo de exemplo fornecido), mas a implementação real pode variar dependendo da configuração do método e do servidor da web.
chupasaurus 5/06