Ansible JSON 输出

use*_*179 3 automation linux ansible ansible-playbook

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

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

Kon*_*rov 6

肯定有一些问题需要克服,但没有什么是不可能的。

这里有一些东西供你玩:

将其另存为./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
Run Code Online (Sandbox Code Playgroud)

并按照以下方式执行您的剧本:

ANSIBLE_STDOUT_CALLBACK=json_cb ansible-playbook myplaybook.yml
Run Code Online (Sandbox Code Playgroud)

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

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