Відображення виводу з Ansible


39

У мене є відповідна гра для PGBouncer, яка відображає деякий вихід із модуля статистики, вбудованого в PGBouncer.

Моє питання полягає в тому, що коли Ansible друкує висновок до терміналу, він обробляє нові рядки. Замість того, щоб бачити

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

розумію

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

Хтось знає, як отримати Ansible, щоб "гарненько надрукувати" вихід?

Відповіді:


14

В Ansible не існує способу зробити те, що ви хочете. Це можна зробити як вирішення:

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

1
На OSX мені довелося користуватися sed -e 's/\\n/'$'\\\n/g'. Також актуально: comicjk.com/20
Navin

4
дивіться сорти відповіді serverfault.com/a/846232/240508, який є правильним у 2017 році та відповідальним> 2.3
Vadimo

Здебільшого \nвідображаються в результаті, тому ви можете використовувати цей регулярний параметр у своєму повідомленні про налагодження:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

на жаль, це видаляє приємні та корисні забарвлення, які ви отримуєте на виході з виразного тексту
Мехді ЛАМРАНІ

62

Якщо ви хочете більш дружнього для людини, визначте:

ANSIBLE_STDOUT_CALLBACK=debug

Це зробить безвідмовним використання вихідного модуля налагодження (раніше названого human_log) whinch, незважаючи на його нещасливу назву, є менш багатослівним і набагато легшим для читання людьми.

Якщо ви отримаєте помилку про те, що цей модуль недоступний, оновіть Ansible або додайте цей модуль локально, якщо ви не можете оновити ansible, він працюватиме з такими версіями ansible, як 2.0 або probaly навіть 1.9.

Ще один варіант налаштування цього - додати stdout_callback = debugдо свого ansible.cfg


13
це має бути ПРИЙМАНОЮ відповідь у 2017 році, дружній для людини вихід журналу надсилається з коробки.
Вадимо

1
Ось ще кілька порад, щоб зробити це більш постійним: github.com/ansible/ansible/isissue/27078#issuecomment-364560173
kramer65

1
Або ANSIBLE_STDOUT_CALLBACK=yaml. Я вважаю за краще, тому що він приємно форматує, fail msgколи я надаю об'єкт.
Марінос

13

Ви можете використовувати плагін зворотного дзвінка . Це повторно проаналізує ваш вихід і легко вмикається та вимикається.


2
Примітка. З ansible 2.0.x вам потрібно успадкувати CallbackBaseімпортований з from ansible.plugins.callback import CallbackBaseкласом зворотний виклик для роботи.
алло

12

Знайдено таким чином на форумі групи відповідальних проектів:

- 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') }}"

Ми в основному перетворюємо це на список, розділяючи його на новий рядок і друкуючи цей список.


Це робить вихід оболонки набагато більш розбірливим! Приємно!
Асфанд Казі

Здається, у цього рішення є один головний недолік - якщо виконання модуля "Приклад тесту" не вдалося, зазвичай, вся збірка ігрової книжки виходить з ладу, і ви ніколи не побачите відформатованого виводу, особливо того для stderr, який, мабуть, є найбільш цікавим.
Рене

@ René ви праві. Для цього ви можете додати ignore_errors: yesдо оригінальної команди та пізніше щось на кшталт `- assert: that:" test.rc == 0 ".
jhutar


0

Якщо ви хочете бачити його у форматі, який практично імітує стандартний вихід, ви можете використовувати debugплагін зворотного виклику з debugмодулем в Ansible 2.7+, як це:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.