Exibir saída com Ansible


39

Eu tenho um jogo Ansible para o PGBouncer que exibe alguma saída de um módulo de estatísticas embutido no PGBouncer.

Meu problema é que, quando o Ansible imprime a saída no terminal, ele gerencia as novas linhas. Em vez de ver

----------
| OUTPUT |
----------

eu vejo

----------\n| OUTPUT |\n----------

Alguém sabe como fazer com que o Ansible "imprima" a saída?

Respostas:


14

Não há como fazer o que você quer nativamente no Ansible. Você pode fazer isso como uma solução alternativa:

ansible-playbook ... | sed 's/\\n/\n/g'

1
No OSX eu tive que usar sed -e 's/\\n/'$'\\\n/g'. Também relevante: comicjk.com/20
Navin

4
veja sorins responder serverfault.com/a/846232/240508, que é o correto em 2017 e ansible> 2.3
Vadimo

Principalmente \naparecem no resultado, assim que você poderia usar esta expressão regular em sua mensagem de depuração:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

infelizmente, isso remove a cor agradável e útil que você obtém na saída ansible
Mehdi LAMRANI

62

Se você deseja uma saída mais amigável para o ser humano, defina:

ANSIBLE_STDOUT_CALLBACK=debug

Isso tornará possível o uso do módulo de saída de depuração (nomeado anteriormente human_log) whinch, apesar de seu nome infeliz ser menos detalhado e muito mais fácil de ser lido pelos humanos.

Se você receber um erro dizendo que este módulo não está disponível, atualize o Ansible ou adicione-o localmente se não puder atualizar o ansible, ele funcionará com versões superiores do ansible como 2.0 ou provavelmente até 1.9.

Outra opção para configurar isso é adicionar stdout_callback = debugao seu ansible.cfg


13
essa deve ser a resposta ACEITADA em 2017, a saída de log amigável para o homem é enviada imediatamente.
Vadimo 27/09

1
Aqui mais algumas dicas para tornar isso mais permanente: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
Or ANSIBLE_STDOUT_CALLBACK=yaml. Eu prefiro porque formata bem fail msgquando forneço um objeto.
Marinos An


12

Encontrado desta maneira no fórum do grupo Ansible Project:

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

Basicamente, transformamos isso em lista, dividindo-o por nova linha e depois imprimindo essa lista.


Isso torna a saída do shell muito mais legível! Agradável!
Asfand Qazi

Essa solução parece ter uma grande desvantagem - se a execução do módulo "Teste de exemplo" falhar, geralmente toda a compilação do manual falhará e você nunca verá a saída formatada, especialmente a do stderr, que provavelmente é mais interessante.
René

@ René você está certo. Para isso, você pode adicionar ignore_errors: yesao comando original e, posteriormente, algo como `- assert: that:" test.rc == 0 ".
jhutar


0

Se você quiser vê-lo em um formato que praticamente imite a saída padrão, poderá usar o debugplug-in de retorno de chamada com o debugmódulo no Ansible 2.7+ como este:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.