您能帮我获取 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 对象流。