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

Отображение вывода с помощью Ansible

у меня есть Ansible play для PGBouncer который отображает некоторые выходные данные модуля статистики, встроенного в PGBouncer.

Моя проблема в том, что когда Ansible печатает вывод на терминал, он искажает новые строки. Вместо того, чтобы видеть

----------
| OUTPUT |
----------

я вижу

----------\n| OUTPUT |\n----------

Кто-нибудь знает, как заставить Ansible "красиво печатать" вывод?

Если вы хотите, чтобы результат был более удобным для человека, определите:

ANSIBLE_STDOUT_CALLBACK=debug

Это позволит использовать модуль вывода отладки (ранее названный human_log) whinch несмотря на неудачное название менее подробен и намного легче читается людьми.

Если вы получаете сообщение об ошибке, что этот модуль недоступен, обновите Ansible или добавьте этот модуль локально, если вы не можете обновить ansible, он будет работать с более чем версиями ansible, такими как 2.0 или, возможно, даже 1.9.

Другой вариант настройки - добавить stdout_callback = debug на свой ansible.cfg

В Ansible нет возможности делать то, что вы хотите, изначально. Вы можете сделать это как обходной путь:

ansible-playbook ... | sed 's/\\n/\n/g'

Вы можете использовать плагин обратного вызова. Это повторно проанализирует ваш вывод, и его легко включить и выключить.

Нашел этот путь на форуме группы Ansible Project:

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

Мы в основном превращаем его в список, разделяя его символом новой строки и затем распечатывая этот список.

Если вы не работаете на параллельных хостах, вы можете использовать Пауза модуль:

- pause:
    prompt: "{{ variable_blob.stdout }}"

Двигается дальше без ввода, определяя минут или секунды но тогда ввод пользователя не фиксируется.

Кредит: https://github.com/ansible/ansible/issues/17446#issuecomment-245391682

Примечание: На параллельных хостах будет отображаться только вывод с первого хоста

Если вы хотите увидеть его в формате, который практически имитирует стандартный вывод, вы можете использовать debug плагин обратного вызова с debug модуль в Ansible 2.7+ вот так:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"