If you want to print some values during debugging or show some message to user with debug
module, you may notice that Ansible outputs JSON-encoded strings. There are some tricks to overcome this.
Let's say you want to print some command that should be executed, e.g.: run_me.sh "with this argument"
.
If you run this task:
- debug:
msg: run_me.sh "with this argument"
You'll end up with:
ok: [localhost] => {
"msg": "run_me.sh \"with this argument\""
}
Note that double quotes are escaped, because this is JSON representations of object { "msg": "<string>" }
.
You can use some of this tricks to print raw string without JSON-encoding it:
# Print as loop item
- name: Print command as loop item
set_fact:
dummy: value # Just to make some task without output
with_items:
- 'Execute this: run_me.sh "with this argument"'
# Print as task title
# Not suitable for different commands per host, because task title is common for all hosts
- name: 'Execute this: run_me.sh "with this argument"'
debug:
msg: Execute command from task title
# Print as pause statement
# Not suitable for different commands per host, because pause task skips host loop (forced run_once:yes)
- name: Print command as pause statment
pause:
prompt: 'Execute this and press enter: run_me.sh "with this argument"'
This will produce the following output:
TASK [Print command as loop item] **********************************************
ok: [localhost] => (item=Execute this: run_me.sh "with this argument")
TASK [Execute this: run_me.sh "with this argument"] ****************************
ok: [localhost] => {
"msg": "Execute command from task title"
}
TASK [Print command as pause statment] *****************************************
[Print command as pause statment]
Execute this and press enter: run_me.sh "with this argument":
ok: [localhost]