Contexto

Contexto

Contexto

Eu tenho um manual do Ansible que inclui uma tarefa muito longa, de até uma hora.

Muito simplificado, fica assim:

- hosts: localhost
  tasks:
  - name: Short task
    debug:
      msg: "I'm quick!"

  - name: Long task
    shell: "sleep 15s"

Quando o usuário executa o playbook, a saída é inicialmente:

PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

(hang there until Long task is done)

TASK [Long task] ********************
changed: [127.0.0.1]

Problema

Os usuários finais do manual acreditam que há um problema, Short taskjá que ele fica parado, enquanto é Long taskisso que está causando o atraso.

Pergunta

Como eu poderia configurar o ansible ou o playbook para imprimir os cabeçalhos definidos emname: antesexecutando a tarefa?

O que eu consigo é uma saída como:

PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

TASK [Long task] ********************

(and hang there during the execution)

changed: [127.0.0.1]

Responder1

Migrando meu comentário para uma resposta a pedido do OP


Estou usando o Ansible 2.9.2.

Tentei sem arquivo de configuração e com um arquivo de configuração sem valor declarado para stdout_callback(padrão). Não consigo reproduzir seu problema em nenhum dos casos.

Este é meu manual de teste:

---
- hosts: localhost
  gather_facts: false

  tasks:

    - name: Short running
      debug:
        msg: I'm a short task

    - name: LOOOOOOOOOng task
      shell: sleep 2000

E o resultado (em ambos os casos. Nota: interrupção pelo usuário após exibição do cabeçalho da tarefa)

$ ansible-playbook /tmp/play.yml  

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Short running] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "I'm a short task"
}

TASK [LOOOOOOOOOng task] ******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution

Verifique qual arquivo de configuração você está carregando ansible-playbook --versionno diretório onde irá iniciar o playbook. Também sugiro que você tente sem nenhum arquivo de configuração para ver se isso resolve o seu problema (e então veja qual configuração está realmente causando o problema).


Adicionado a partir do comentário do OP: verifica-se que a configuração problemática em ansible.cfg neste caso específico eradisplay_skipped_hosts=False

Responder2

O display_skipped_hosts=falsein /etc/ansible/ansible.cfg corrigiu isso para mim.

É um bug? Não gosto de ver os hosts ignorados, mas gosto de ver o progresso do meu manual.

Usando Ansible 2.10.3

Responder3

Para quem ainda deseja ocultar tarefas ignoradas, agora existem duas opções:

  1. Usando oplugin de retorno de chamada padrãoe configurando display_skipped_hosts = Falseand show_per_host_start = True, isso adicionará outra linha de log quando cada tarefa for iniciada, no entanto, não recupera o comportamento de apenas exibir o título a tempo (e de alguma forma às vezes também aparece depois que uma tarefa já foi concluída, tornando as coisas mais difíceis ler)
  2. Continue usando o (agora obsoleto)plugin skippyque era o plug-in obrigatório antes do plug-in padrão ter o recurso de pular. Ele ainda funciona conforme esperado com o 2.11 e também é minha solução preferida para isso. Defina stdout_callback = skippyem seu ansible.cfg. Só para ter certeza de que também coloquei o plugin na lista de permissões comcallback_enabled = ansible.posix.skippy

Meu ansible.cfg está assim agora e tudo funciona como antes de migrar para o ansible.cfg mais recente com padrões:

[default]
# ...
stdout_callback = skippy
# if you had other plugins here just add to list, comma seperated
callback_enabled = ansible.posix.skippy
# deprecated flag, sometimes still needed, hence I always set both
callback_whitelist = ansible.posix.skippy
# ...

Leitura adicional:

Responder4

No meu caso, eu estava usando a estratégia "grátis" que não mostrava o cabeçalho antes de finalizar a tarefa.

informação relacionada