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?

Zulakis
la source

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

Tom Aac
la source
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
xddsg
la source
1

Retirez simplement les deux points

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
la source
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 }}'"
somme de contrôle
la source
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
Collin Cudd
la source