Назад | Перейти на главную страницу

Отображение вывода Ansible playbook в правильном формате

Какая конфигурация необходима для правильного форматирования стандартного вывода потока из задач в Ansible ansible-playbook бегать?

Что я бегу ansible-playbook foo.yaml вывод из задач включает стандартный поток (stdout, stderr) содержание. Но они отображаются в виде большого однострочного BLOB-объекта JSON, а не печатаются как отформатированные строки, которые были отправлены в поток.

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

Что вызывает такое нежелательное форматирование вывода? Как я могу сказать Ansible всегда правильно форматировать вывод потока для отображения в ansible-playbook вывод?

По умолчанию Ansible использует машиночитаемый вывод JSON, который не подходит для чтения человеком. Но есть и другие Доступны модули «обратного вызова», некоторые из которых могут форматировать вывод потока.

  • Обманчиво названный debug модуль больше подходит для просмотра людьми.
  • Недавно yaml модуль форматирует выходной поток как удобный для чтения документ YAML.

Итак, используя ANSIBLE_STDOUT_CALLBACK переменная окружения:

$ ANSIBLE_STDOUT_CALLBACK=yaml ansible-playbook ansible/deploy.yaml

изменит форматирование вывода потока:

[…]
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