Ansible JSON 输出

Ansible JSON 输出

您能帮我获取 JSON 格式的 Ansible-Playbook 输出吗?如果我在 ansible.cfg 中将 stdout_callback 变量设置为“json”,我就会得到 JSON 输出

但该输出不是实时的。当整个剧本执行完毕后才会显示结果。如何在任务执行后立即获取输出?

答案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

并执行你的剧本:

ANSIBLE_STDOUT_CALLBACK=json_cb ansible-playbook myplaybook.yml

这将为每个完成的任务(成功或失败)打印 JSON 对象。

但你要把它输入到其他工具中去解析,不是吗?所以这个其他工具应该理解连续的 JSON 对象流。

相关内容