variable msg de débogage d'impression ansible


17

J'essaie d'imprimer la mosh_versionvariable précédemment enregistrée en utilisant la debug msgcommande ansible comme ceci:

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

Cela ne fonctionne pas et imprime l'erreur suivante:

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 }}"

j'ai essayé

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

mais cela affichera simplement "Mosh".

Quelle est la meilleure façon de faire fonctionner cela?

Réponses:


25

Essaye ça:

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

Plus d'informations sur http://docs.ansible.com/YAMLSyntax.html#gotchas

Modifié: Quelque chose comme ça fonctionne parfaitement pour moi:

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

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

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta


Il n'y a plus d'erreurs de syntaxe, mais cela ne fonctionne pas non plus:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis

Essayez d'abord d'imprimer la variable et de voir la sortie sans message personnalisé, comme ceci: - nom: Imprimer le débogage de la version 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]" ] } } cela fonctionne, je préfère vraiment le message personnalisé ;-)
Zulakis

1
Vérifier ma réponse mise à jour
Tom Aac

Veuillez noter: debug: "msg = Mosh Version: '{{mosh_version.stdout}}'" "affichera uniquement" Mosh ". Le msg = "..." doit être entre guillemets, au lieu du message entier. Mais la réponse de @xddsg fonctionne mieux, car il s'agit d'un vidage var plus détaillé.
Dalibor Filus

6

Réponse la plus simple

- debug: var=mosh_version.stdout

1

Retirez simplement les deux points

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

Honnêtement, ce n'est pas une solution complète mais cela a quand même fonctionné et résolu le problème suivant. Je ne peux pas utiliser l'autre syntaxe car je l'utilise avec whendonc la suppression des deux points est en fait le moyen le plus simple de résoudre ce problème. donc je vote positivement;)
TecHunter

0

J'utilise ceci, notez l'emplacement des guillemets doubles (") et des guillemets simples (')

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

0

Chaque fois que j'ai des problèmes avec les caractères spéciaux dans les chaînes / cmds Ansible, je fais ceci:

  1. Envelopper avec des guillemets simples
  2. Wrap avec des crochets bouclés doubles

Ainsi, votre colon standard devient {{':'}}

Et votre tâche devient:

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

Encore une fois, cela fonctionne pour la plupart des caractères spéciaux, même les chaînes. Considérer ce qui suit:

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

Pour exécuter ceci dans Ansible, appliquez simplement la même logique, la tâche suivante s'exécute comme prévu:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.