Ansible JSON Output

Не могли бы вы помочь мне получить выходные данные Ansible-Playbook в формате JSON. Я получаю вывод в формате JSON, если устанавливаю для переменной stdout_callback значение «json» в ansible.cfg

. Но этот вывод не в реальном времени. Результат отображается при выполнении всей playbook. Как я могу получить результат сразу после выполнения задачи?

2
задан 2 March 2017 в 17:09
1 ответ

Определенно есть некоторые проблемы, которые нужно преодолеть, но нет ничего невозможного.

Вот с чем вы можете поиграть:

Сохраните это как ./ 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.

5
ответ дан 3 December 2019 в 09:32

Теги

Похожие вопросы