mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-24 03:11:24 -07:00
* Using docstrings conflicts with the standard use of docstrings * PYTHON_OPTIMIZE=2 will omit docstrings. Using docstrings makes future changes to the plugin and module code subject to the requirement that we ensure it won't be run with optimization.
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: Ansbile 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
|