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

Вывод Ansible JSON

Не могли бы вы помочь мне получить вывод 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.