ansible print debug msg variable

17

Intento imprimir la mosh_versionvariable previamente registrada usando el debug msgcomando ansible como este:

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

No funciona e imprime el siguiente error:

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

Lo intenté

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

pero esto solo imprimirá "Mosh".

¿Cuál es la mejor manera de hacer que esto funcione?

Zulakis
fuente

Respuestas:

25

Prueba esto:

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

Más información en http://docs.ansible.com/YAMLSyntax.html#gotchas

Editado: Algo como esto funciona perfecto para mí:

- 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
fuente
No hay más errores de sintaxis, pero tampoco funciona:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis
Primero intente imprimir la variable y vea la salida sin un mensaje personalizado, como este: - nombre: Imprima la versión de depuración de 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]" ] } } esto funciona, aunque realmente preferiría el mensaje personalizado ;-)
Zulakis
1
Comprueba mi respuesta actualizada
Tom Aac
Tenga en cuenta: depurar: "msg = Mosh Versión: '{{mosh_version.stdout}}'" mostrará solo "Mosh". Msg = "..." debe estar entre comillas, en lugar de todo el mensaje. Pero la respuesta de @xddsg funciona mejor, ya que es un volcado de var más detallado.
Dalibor Filus
6

Respuesta más simple

- debug: var=mosh_version.stdout
xddsg
fuente
1

Solo quita el colon

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
fuente
Honestamente, esta no es una solución completa, pero aún así funcionó y resolvió el siguiente problema que tuve. No puedo usar la otra sintaxis porque la uso con la wheneliminación de dos puntos en realidad es la forma más sencilla de resolver esto. así que voté;)
TecHunter
0

Utilizo esto, observe la ubicación de las comillas dobles (") y las comillas simples (')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"
suma de comprobación
fuente
0

Cada vez que tengo problemas con caracteres especiales en cadenas / cmds Ansible hago esto:

  1. Envolver con comillas simples
  2. Envolver con llaves dobles

Entonces su colon estándar se convierte {{':'}}

Y tu tarea se convierte en:

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

De nuevo, esto funciona para la mayoría de los caracteres especiales, incluso las cadenas. Considera lo siguiente:

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

Para ejecutar esto en Ansible, simplemente aplique la misma lógica, la siguiente tarea se ejecuta como se esperaba:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
Collin Cudd
fuente