Ansible - Como marcar uma tarefa como sucesso quando falhou

3

Estamos usando alguns pipelines para construir servidores usando ansible e uma das tarefas é verificar se o servidor está on-line (significa um servidor de produção na lista de inventário por acidente). Verificamos a porta 443 e quebramos o pipeline de construção; isso é para garantir que nenhuma produção ou servidor ativo seja tocado acidentalmente. Nós tentamos abaixo do código - a intenção é tornar o sucesso do playbook quando a porta 443 está inoperante; para que a próxima tarefa no pipeline de construção possa continuar.

- name: check server online or not
  hosts: localhost
  connection: local

  tasks:
  - name: check ESXI host connection to port 443
    wait_for: host=ams-server-101 port=443 timeout=1
    register: command_result
    failed_when: "'Timeout' not in command_result"

  - debug: var=command_result 

Mas isso não está funcionando como esperado. Por isso, usamos uma solução alternativa (não ansiável) como abaixo.

   shell: echo "QUIT" | nc -w 3 ams-server-101 443 > /dev/null 2>&1 && echo Pass || echo Fail
   register: shell_result
   failed_when: shell_result.stdout  == "Pass" 

Alguma ideia? (talvez algum módulo diferente para usar)

    
por Gineesh 22.05.2018 / 04:21

1 resposta

3

Você pode usar o módulo fail :

tasks:
  - wait_for:
      host: ams-server-101
      port: 443
      timeout: 1
    register: https_port_check
    ignore_errors: true
  - fail:
      msg: 'HTTPS port is open'
    when: not https_port_check.failed

Ou muito bom e curto como Patrick sugeriu, mas sem mensagem de falha personalizada:

  tasks:
    - wait_for:
        host: ams-server-101
        port: 443
        timeout: 1
      register: https_port_check
      failed_when: not https_port_check.failed

Para uma verificação tão importante, pode ser apropriado culpar o usuário com uma mensagem de falha viciosa.

    
por 22.05.2018 / 19:53