web-dev-qa-db-ja.com

Ansible JSON出力

Ansible-Playbookの出力をJSON形式で取得するのを手伝ってください。 ansible.cfgでstdout_callback変数を「json」として設定すると、JSON出力が表示されます

しかし、その出力はリアルタイムではありません。プレイブック全体を実行すると、結果が表示されます。タスクが実行されたらすぐに出力を取得するにはどうすればよいですか?

3
user3114179

確かに克服すべきいくつかの問題がありますが、不可能ではありません。

ここにあなたが遊ぶためのものがあります:

これを./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オブジェクトの継続的なストリームを理解する必要があります。

6