Не могли бы вы помочь мне получить выходные данные 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
] И запустите свой playbook как:
ANSIBLE_STDOUT_CALLBACK=json_cb ansible-playbook myplaybook.yml
Это будет печатать JSON-объект для каждой завершенной задачи (нормально или неудачно).
Но вы собираетесь передать это в какой-то другой инструмент для его анализа, не так ли? Таким образом, этот другой инструмент должен понимать непрерывный поток объектов JSON.