36

I try to print the previously registered mosh_version variable using the ansible debug msg command like this:

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

It doesn't work and prints the following 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 }}"

I tried

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

but this will just print "Mosh".

What's the best way to get this running?

Zulakis
  • 4,505

7 Answers7

50

Try this:

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

More info in http://docs.ansible.com/YAMLSyntax.html#gotchas

Edited: Something like this works perfect for me:

- 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
  • 1,127
12

Simplest answer

- debug: var=mosh_version.stdout
xddsg
  • 3,540
3

I have displayed variable and message in the same debug play.

Ansible Task

- name: Report the /boot/initramfs file status for latest installed kernel
  debug:
    msg: "{{ ansible_hostname }} =  {{INITRAMFS_LAST_KERNEL.stdout}}"

Output

TASK [os-upgrade.linux : Report the /boot/initramfs file status for latest installed kernel] *******************************************
ok: [ANSIBLENODE] => {
    "msg": "ANSIBLENODE =  /boot/initramfs-3.10.0-1062.12.1.el7.x86_64.img"
}
2

Just remove the colon

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
  • 21
2

Anytime I have problems with special characters in Ansible strings/cmds I do this:

  1. Wrap with single quotes
  2. Wrap with double curly brackets

So your standard colon becomes {{':'}}

And your task becomes:

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

Again this works for most special characters, even strings. Consider the following:

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

In order to run this in Ansible, just apply the same logic, the following task executes as expected:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
chicks
  • 3,915
  • 10
  • 29
  • 37
1

I use this, notice the location of double quotes(") and single quotes(')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"
checksum
  • 1,085
0
- name: Print somevariable
  debug:
    var: somevariable
UrviG
  • 101