Visualizza l'output con Ansible


39

Ho un gioco Ansible per PGBouncer che mostra alcuni output da un modulo stats integrato in PGBouncer.

Il mio problema è che quando Ansible stampa l'output sul terminale altera le nuove righe. Invece di vedere

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

Vedo

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

Qualcuno sa come ottenere Ansible per "stampare piuttosto" l'output?

Risposte:


14

Non è possibile fare ciò che desideri in modo nativo in Ansible. Puoi farlo come soluzione alternativa:

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

1
Su OSX ho dovuto usare sed -e 's/\\n/'$'\\\n/g'. Rilevante anche: comicjk.com/20
Navin

4
vedi sorins rispondere serverfault.com/a/846232/240508, che è quello corretto nel 2017 e rispondere> 2.3
Vadimo,

Principalmente \nappaiono nel risultato, quindi puoi usare questo regexp nel tuo messaggio di debug:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

purtroppo, a fare questo rimuove il bello e utile colorazione che si ottiene in uscita ansible
Mehdi Lamrani

63

Se si desidera un output più umano, definire:

ANSIBLE_STDOUT_CALLBACK=debug

Ciò consentirà di utilizzare il modulo di output di debug (precedentemente denominato human_log) whinch nonostante il suo sfortunato nome sia meno dettagliato e molto più facile da leggere dagli umani.

Se ricevi un errore che indica che questo modulo non è disponibile, aggiorna Ansible o aggiungi questo modulo localmente se non riesci ad aggiornare ansible, funzionerà con versioni di ansible come 2.0 o probaly persino 1.9.

Un'altra opzione per configurarlo è aggiungere stdout_callback = debugal tuo ansible.cfg


13
questa dovrebbe essere la risposta ACCETTATA nel 2017 l'output del registro a misura d'uomo viene spedito fuori dalla scatola.
Vadimo,

1
Ecco alcuni consigli per renderlo più permanente: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
Or ANSIBLE_STDOUT_CALLBACK=yaml. Lo preferisco perché si adatta bene fail msgquando fornisco un oggetto.
Marinos il

13

È possibile utilizzare un plug-in di callback . Ciò analizzerà nuovamente l'output ed è facilmente attivabile e disattivabile.


2
Nota: con ansible 2.0.x è necessario ereditare da CallbackBaseimportato from ansible.plugins.callback import CallbackBaseaffinché la classe di callback funzioni.
allo

12

Trovato in questo modo nel forum del gruppo 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') }}"

Fondamentalmente trasformiamo questo in elenco dividendolo per newline e quindi stampando tale elenco.


Ciò rende l'output della shell molto più leggibile! Bello!
Asfand Qazi,

Questa soluzione sembra avere un grosso svantaggio: se l'esecuzione del modulo "Esempio di test" fallisce, di solito l'intera build del playbook fallisce e non vedrai mai l'output formattato, specialmente quello per stderr che è probabilmente il più interessante.
René,

@ René hai ragione. Per questo puoi aggiungere ignore_errors: yesal comando originale e successivamente qualcosa come `- assert: that:" test.rc == 0 ".
jhutar,


0

Se vuoi vederlo in un formato che imita praticamente l'output standard, puoi usare il debugplug-in di callback con il debugmodulo in Ansible 2.7+ in questo modo:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.