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?

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


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

1

Solo quita el colon

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.