Не могли бы вы помочь мне получить вывод Ansible-Playbook в формате JSON. Я получаю вывод в формате JSON, если устанавливаю переменную stdout_callback как «json» в ansible.cfg.
Но этот вывод не в реальном времени. Результат отображается при выполнении всей playbook. Как я могу получить результат сразу после выполнения задачи?
Определенно есть проблемы, которые нужно преодолеть, но нет ничего невозможного.
Вот чем можно поиграть:
Сохраните это как ./callback_plugins/json_cb.py
:
from __future__ import absolute_import
from ansible.plugins.callback import CallbackBase
import json
class CallbackModule(CallbackBase):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'stdout'
CALLBACK_NAME = 'json_cb'
def __init__(self):
self.tasks = {}
def dump_result(self, result):
print(json.dumps(dict(name=self.tasks[result._task._uuid],result=result._result)))
def v2_playbook_on_task_start(self, task, is_conditional):
self.tasks[task._uuid] = task.name
v2_runner_on_ok = dump_result
v2_runner_on_failed = dump_result
И выполните свою книгу как:
ANSIBLE_STDOUT_CALLBACK=json_cb ansible-playbook myplaybook.yml
Это будет печатать JSON-объект для каждой выполненной задачи (нормально или не удалось).
Но вы собираетесь использовать это в каком-нибудь другом инструменте для анализа, не так ли? Таким образом, этот другой инструмент должен понимать непрерывный поток объектов JSON.