Ansible-Playbookの出力をJSON形式で取得するのを手伝ってください。 ansible.cfgでstdout_callback変数を「json」として設定すると、JSON出力が表示されます
しかし、その出力はリアルタイムではありません。プレイブック全体を実行すると、結果が表示されます。タスクが実行されたらすぐに出力を取得するにはどうすればよいですか?
確かに克服すべきいくつかの問題がありますが、不可能ではありません。
ここにあなたが遊ぶためのものがあります:
これを./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
これにより、完了したすべてのタスク(OKまたは失敗)のJSONオブジェクトが出力されます。
しかし、これを他のツールにフィードして解析するのではないでしょうか。したがって、この他のツールは、JSONオブジェクトの継続的なストリームを理解する必要があります。