mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
# (c) 2016, Matt Martz <matt@sivel.net>
|
|
# (c) 2017 Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
# Make coding more python3-ish
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
DOCUMENTATION = '''
|
|
callback: json
|
|
short_description: Ansible screen output as JSON
|
|
version_added: "2.2"
|
|
description:
|
|
- This callback converts all events into JSON output to stdout
|
|
type: stdout
|
|
requirements:
|
|
- Set as stdout in config
|
|
'''
|
|
|
|
import json
|
|
|
|
from ansible.plugins.callback import CallbackBase
|
|
|
|
|
|
class CallbackModule(CallbackBase):
|
|
CALLBACK_VERSION = 2.0
|
|
CALLBACK_TYPE = 'stdout'
|
|
CALLBACK_NAME = 'json'
|
|
|
|
def __init__(self, display=None):
|
|
super(CallbackModule, self).__init__(display)
|
|
self.results = []
|
|
|
|
def _new_play(self, play):
|
|
return {
|
|
'play': {
|
|
'name': play.name,
|
|
'id': str(play._uuid)
|
|
},
|
|
'tasks': []
|
|
}
|
|
|
|
def _new_task(self, task):
|
|
return {
|
|
'task': {
|
|
'name': task.name,
|
|
'id': str(task._uuid)
|
|
},
|
|
'hosts': {}
|
|
}
|
|
|
|
def v2_playbook_on_play_start(self, play):
|
|
self.results.append(self._new_play(play))
|
|
|
|
def v2_playbook_on_task_start(self, task, is_conditional):
|
|
self.results[-1]['tasks'].append(self._new_task(task))
|
|
|
|
def v2_runner_on_ok(self, result, **kwargs):
|
|
host = result._host
|
|
self.results[-1]['tasks'][-1]['hosts'][host.name] = result._result
|
|
|
|
def v2_playbook_on_stats(self, stats):
|
|
"""Display info about playbook statistics"""
|
|
|
|
hosts = sorted(stats.processed.keys())
|
|
|
|
summary = {}
|
|
for h in hosts:
|
|
s = stats.summarize(h)
|
|
summary[h] = s
|
|
|
|
output = {
|
|
'plays': self.results,
|
|
'stats': summary
|
|
}
|
|
|
|
self._display.display(json.dumps(output, indent=4, sort_keys=True))
|
|
|
|
v2_runner_on_failed = v2_runner_on_ok
|
|
v2_runner_on_unreachable = v2_runner_on_ok
|
|
v2_runner_on_skipped = v2_runner_on_ok
|