ansible print debug variabile msg


17

Provo a stampare la mosh_versionvariabile precedentemente registrata usando il debug msgcomando ansible in questo modo:

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"

Non funziona e stampa il seguente errore:

Note: The error may actually appear before this position: line 55, column 27

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"
                          ^
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"

Provai

- name: Print mosh version
  debug: msg=Mosh Version: "{{ mosh_version.stdout }}"

ma questo stamperà solo "Mosh".

Qual è il modo migliore per farlo funzionare?

Risposte:


25

Prova questo:

- name: Print mosh version
  debug: "msg=Mosh Version: '{{ mosh_version.stdout }}'"

Maggiori informazioni su http://docs.ansible.com/YAMLSyntax.html#gotchas

A cura di: Qualcosa del genere funziona perfettamente per me:

- name: Check Ansible version
  command: ansible --version
  register: ansibleVersion

- name: Print version
  debug:
    msg: "Ansible Version: {{ ansibleVersion.stdout }}"

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta


Non ci sono più errori di sintassi, ma non funziona neanche:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis,

Prova prima basta stampare la variabile e vedere l'output senza un messaggio personalizzato, in questo modo: - nome: stampa il debug della versione di mosh: var = mosh_version.stdout_lines
Tom Aac

ok: [127.0.0.1] => { "var": { "mosh_version.stdout_lines": [ "mosh 1.2.4a [build mosh-1.2.4-57-g9eeb2fb]" ] } } funziona, preferirei comunque il messaggio personalizzato ;-)
Zulakis,

1
Controlla la mia risposta aggiornata
Tom Aac

Nota: debug: "msg = Mosh Versione: '{{mosh_version.stdout}}'" visualizzerà solo "Mosh". Msg = "..." deve essere racchiuso tra virgolette, anziché in tutto il messaggio. Ma la risposta di @xddsg funziona meglio, poiché è var dump più dettagliato.
Dalibor Filus,

6

Risposta più semplice

- debug: var=mosh_version.stdout

1

Basta rimuovere i due punti

debug: msg="Mosh Version {{ mosh_version.stdout }}"

Onestamente, questa non è una soluzione completa, ma ha funzionato e risolto il problema successivo che ho avuto. Non riesco a usare l'altra sintassi perché la uso con la whenrimozione dei due punti in realtà è il modo più semplice per risolverlo. così ho votato;)
TecHunter il

0

Lo uso, noto la posizione delle virgolette doppie (") e delle virgolette singole (')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"

0

Ogni volta che ho problemi con caratteri speciali in Stringhe / cmds Ansible, faccio questo:

  1. Avvolgere con virgolette singole
  2. Avvolgere con doppie parentesi graffe

Quindi i tuoi due punti standard diventano {{':'}}

E il tuo compito diventa:

- debug: msg="Ansible Version{{':'}} {{ ansibleVersion.stdout }}"

Ancora una volta questo funziona per la maggior parte dei caratteri speciali, anche per le stringhe. Considera quanto segue:

docker ps --format '{{.Names}}'

Per eseguirlo in Ansible, basta applicare la stessa logica, la seguente attività viene eseguita come previsto:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
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.