What configuration is needed to correctly format the standard stream output from tasks in an Ansible ansible-playbook
run?
What I run ansible-playbook foo.yaml
the output from tasks includes the standard stream (stdout
, stderr
) content. But the display of these is in a big JSON single-line blob, and not printed as the formatted lines that were sent to the stream.
TASK [Django: Collect media fixture files] ******************************************************************************
ok: [lorem]
TASK [Django: Create superuser] ******************************************************************************
fatal: [lorem]: FAILED! => {"changed": false, "cmd": "python3 -m django createsuperuser\n --noinput\n --username \"admin\"\n --email \"[email protected]\"", "msg": "\n:stderr: CommandError: You must use --full_name with --noinput.\n", "path": "/var/local/dolor/virtualenv/rectory/venv.py3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/games", "syspath": ["/tmp/ansible_django_manage_payload_uj9f3le8/ansible_django_manage_payload.zip", "/usr/lib/python37.zip", "/usr/lib/python3.7", "/usr/lib/python3.7/lib-dynload", "/usr/local/lib/python3.7/dist-packages", "/usr/lib/python3/dist-packages"]}
What is causing this unwanted formatting of the output? How can I tell Ansible to always format the stream output correctly for display in the ansible-playbook
output?
Ansible defaults to a machine-readable JSON output, not suitable for human reading. But there are other “callback” modules available, some of which can format the stream output.
debug
module is more suitable for human viewing.yaml
module formats the stream output as a easy-to-read YAML document.So, using the
ANSIBLE_STDOUT_CALLBACK
environment variable:will change the formatting of stream output: