显示正确格式的 Ansible playbook 输出

big*_*ose 3 logging ansible

需要什么配置才能正确格式化 Ansibleansible-playbook运行中任务的标准流输出?

ansible-playbook foo.yaml从任务中运行的输出包括标准流 ( stdout, stderr) 内容。但是这些显示在一个大的 JSON 单行 blob 中,而不是作为发送到流的格式化行打印。

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 \"admin@example.com\"", "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"]}
Run Code Online (Sandbox Code Playgroud)

是什么导致了这种不需要的输出格式?如何告诉 Ansible 始终正确格式化流输出以在ansible-playbook输出中显示

big*_*ose 5

Ansible 默认为机器可读的 JSON 输出,不适合人类阅读。但是还有其他可用的“回调”模块,其中一些可以格式化流输出。

  • 误导性命名的debug模块更适合人类查看。
  • 最近,该yaml模块将流输出格式化为易于阅读的 YAML 文档。

因此,使用ANSIBLE_STDOUT_CALLBACK环境变量:

$ ANSIBLE_STDOUT_CALLBACK=yaml ansible-playbook ansible/deploy.yaml
Run Code Online (Sandbox Code Playgroud)

将改变流输出的格式:

[…]
TASK [Django: Collect media fixture files] ******************************************************************************
ok: [lorem]

TASK [Django: Create superuser] ******************************************************************************
fatal: [lorem]: FAILED! => changed=false
  cmd: |-
    python3 -m django createsuperuser
      --noinput
      --username "admin"
      --email "admin@example.com
  msg: |-
    stderr: |-
      CommandError: You must use --full_name with --noinput.
    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
Run Code Online (Sandbox Code Playgroud)

  • 您还可以在“ansible.cfg”中设置默认的“stdout_callback”。 (2认同)