diff --git a/validations_common/callback_plugins/validation_json.py b/validations_common/callback_plugins/validation_json.py index 88f1cef..3bddd31 100644 --- a/validations_common/callback_plugins/validation_json.py +++ b/validations_common/callback_plugins/validation_json.py @@ -26,12 +26,12 @@ from ansible.plugins.callback import CallbackBase DOCUMENTATION = ''' callback: json - short_description: Ansible screen output as JSON file + short_description: Log Ansible results on filesystem version_added: "1.0" description: - This callback converts all events into a JSON file stored in /var/log/validations - type: stdout + type: agregate requirements: None ''' @@ -56,7 +56,7 @@ def secondsToStr(t): class CallbackModule(CallbackBase): CALLBACK_VERSION = 2.0 - CALLBACK_TYPE = 'stdout' + CALLBACK_TYPE = 'agregate' CALLBACK_NAME = 'validation_json' def __init__(self, display=None): diff --git a/validations_common/callback_plugins/validation_stdout.py b/validations_common/callback_plugins/validation_stdout.py new file mode 100644 index 0000000..769a0c5 --- /dev/null +++ b/validations_common/callback_plugins/validation_stdout.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. +__metaclass__ = type + +import datetime +import json +import time +import os + +from functools import partial + +from ansible.module_utils.six.moves import reduce +from ansible.parsing.ajson import AnsibleJSONEncoder +from ansible.plugins.callback import CallbackBase + +DOCUMENTATION = ''' + callback: stdout + short_description: Ansible screen output as JSON file + version_added: "1.0" + description: This callback prints simplify Ansible information to the + console. + type: stdout + requirements: None +''' + + +def current_time(): + return '%sZ' % datetime.datetime.utcnow().isoformat() + + +def secondsToStr(t): + def rediv(ll, b): + return list(divmod(ll[0], b)) + ll[1:] + + return "%d:%02d:%02d.%03d" % tuple( + reduce(rediv, [[ + t * 1000, + ], 1000, 60, 60])) + + +class CallbackModule(CallbackBase): + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'stdout' + CALLBACK_NAME = 'validation_stdout' + + def __init__(self, display=None): + super(CallbackModule, self).__init__(display) + self.env = {} + self.t0 = None + self.current_time = current_time() + + def _new_play(self, play): + return { + 'play': { + 'host': play.get_name(), + 'validation_id': self.env['playbook_name'], + 'validation_path': self.env['playbook_path'], + 'id': (os.getenv('ANSIBLE_UUID') if os.getenv('ANSIBLE_UUID') + else str(play._uuid)), + 'duration': { + 'start': current_time() + } + }, + 'tasks': [] + } + + def _new_task(self, task): + return { + 'task': { + 'name': task.get_name(), + 'id': str(task._uuid), + 'duration': { + 'start': current_time() + } + }, + 'hosts': {} + } + + def _val_task(self, task_name): + return { + 'task': { + 'name': task_name, + 'hosts': {} + } + } + + def _val_task_host(self, task_name): + return { + 'task': { + 'name': task_name, + 'hosts': {} + } + }