Browse Source

Add dedicated stdout callback for VF library

Add a specfic stdout callback for the console and keep the validation_json
for logging only

Change-Id: I2f6ebb95b43921d6ee808b7be210ae0d958a1738
changes/21/761721/6
Mathieu Bultel 2 months ago
parent
commit
c5faf55d29
2 changed files with 107 additions and 3 deletions
  1. +3
    -3
      validations_common/callback_plugins/validation_json.py
  2. +104
    -0
      validations_common/callback_plugins/validation_stdout.py

+ 3
- 3
validations_common/callback_plugins/validation_json.py View File

@@ -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):


+ 104
- 0
validations_common/callback_plugins/validation_stdout.py View File

@@ -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': {}
}
}

Loading…
Cancel
Save