Add validation_actions class and group info implementation
Move all validation actions into a ValidationActions class in order to have one object with several validations actions Add group info implementation And add group object like validation object to have a simpler representation of the validation group. Change-Id: Idc7a55e26de20968f0a6a90f2a005d21a30c9e70
This commit is contained in:
parent
95edef7a8c
commit
491a27b53c
@ -14,21 +14,29 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from validations_libs import utils as v_utils
|
import yaml
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__ + ".show")
|
LOG = logging.getLogger(__name__ + ".Group")
|
||||||
|
|
||||||
|
|
||||||
class Show(object):
|
class Group(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, groups):
|
||||||
self.log = logging.getLogger(__name__ + ".Show")
|
self.data = self._get_content(groups)
|
||||||
|
|
||||||
def show_validations(self, validation):
|
def _get_content(self, groups):
|
||||||
"""Display detailed information about a Validation"""
|
with open(groups, 'r') as gp:
|
||||||
# Get validation data:
|
return yaml.safe_load(gp)
|
||||||
data = v_utils.get_validations_data(validation)
|
|
||||||
format = v_utils.get_validations_stats(
|
@property
|
||||||
v_utils.parse_all_validations_logs_on_disk())
|
def get_data(self):
|
||||||
data.update(format)
|
return self.data
|
||||||
return data
|
|
||||||
|
@property
|
||||||
|
def get_formated_group(self):
|
||||||
|
return [(gp_n, gp_d[0].get('description'))
|
||||||
|
for (gp_n, gp_d) in sorted(self.data.items())]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def get_groups_keys_list(self):
|
||||||
|
return [gp for gp in self.data.keys()]
|
0
validations_libs/group_info.py
Normal file
0
validations_libs/group_info.py
Normal file
@ -1,42 +0,0 @@
|
|||||||
# Copyright 2020 Red Hat, Inc.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
import logging
|
|
||||||
from validations_libs import constants
|
|
||||||
from validations_libs import utils as validations_utils
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__ + ".list")
|
|
||||||
|
|
||||||
|
|
||||||
class List(object):
|
|
||||||
|
|
||||||
def __init__(self, group, validations_dir=None):
|
|
||||||
self.log = logging.getLogger(__name__ + ".List")
|
|
||||||
self.validations_dir = (validations_dir if validations_dir
|
|
||||||
else constants.ANSIBLE_VALIDATION_DIR)
|
|
||||||
self.group = group
|
|
||||||
|
|
||||||
def list_validations(self):
|
|
||||||
"""List the available validations"""
|
|
||||||
validations = validations_utils.parse_all_validations_on_disk(
|
|
||||||
self.validations_dir, self.group)
|
|
||||||
|
|
||||||
return_values = []
|
|
||||||
column_name = ('ID', 'Name', 'Groups')
|
|
||||||
|
|
||||||
for val in validations:
|
|
||||||
return_values.append((val.get('id'), val.get('name'),
|
|
||||||
val.get('groups')))
|
|
||||||
return (column_name, return_values)
|
|
@ -17,7 +17,7 @@ from unittest import mock
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from validations_libs.tests import fakes
|
from validations_libs.tests import fakes
|
||||||
from validations_libs.list import List
|
from validations_libs.validation_actions import ValidationActions
|
||||||
|
|
||||||
|
|
||||||
class TestValidatorList(TestCase):
|
class TestValidatorList(TestCase):
|
||||||
@ -29,7 +29,7 @@ class TestValidatorList(TestCase):
|
|||||||
@mock.patch('validations_libs.utils.parse_all_validations_on_disk',
|
@mock.patch('validations_libs.utils.parse_all_validations_on_disk',
|
||||||
return_value=fakes.VALIDATIONS_LIST)
|
return_value=fakes.VALIDATIONS_LIST)
|
||||||
def test_validation_list(self, mock_validation_dir):
|
def test_validation_list(self, mock_validation_dir):
|
||||||
validations_list = List(fakes.GROUPS_LIST, '/tmp/foo')
|
validations_list = ValidationActions(fakes.GROUPS_LIST, '/tmp/foo')
|
||||||
|
|
||||||
self.assertEqual(validations_list.list_validations(),
|
self.assertEqual(validations_list.list_validations(),
|
||||||
(self.column_name, [('my_val1',
|
(self.column_name, [('my_val1',
|
||||||
|
@ -17,7 +17,7 @@ from unittest import mock
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from validations_libs.tests import fakes
|
from validations_libs.tests import fakes
|
||||||
from validations_libs.run import Run
|
from validations_libs.validation_actions import ValidationActions
|
||||||
|
|
||||||
|
|
||||||
class TestValidatorRun(TestCase):
|
class TestValidatorRun(TestCase):
|
||||||
@ -52,7 +52,7 @@ class TestValidatorRun(TestCase):
|
|||||||
playbook = ['fake.yaml']
|
playbook = ['fake.yaml']
|
||||||
inventory = 'tmp/inventory.yaml'
|
inventory = 'tmp/inventory.yaml'
|
||||||
|
|
||||||
run = Run()
|
run = ValidationActions()
|
||||||
run_return = run.run_validations(playbook, inventory,
|
run_return = run.run_validations(playbook, inventory,
|
||||||
group=fakes.GROUPS_LIST,
|
group=fakes.GROUPS_LIST,
|
||||||
validations_dir='/tmp/foo')
|
validations_dir='/tmp/foo')
|
||||||
@ -85,7 +85,7 @@ class TestValidatorRun(TestCase):
|
|||||||
playbook = ['fake.yaml']
|
playbook = ['fake.yaml']
|
||||||
inventory = 'tmp/inventory.yaml'
|
inventory = 'tmp/inventory.yaml'
|
||||||
|
|
||||||
run = Run()
|
run = ValidationActions()
|
||||||
run_return = run.run_validations(playbook, inventory,
|
run_return = run.run_validations(playbook, inventory,
|
||||||
group=fakes.GROUPS_LIST,
|
group=fakes.GROUPS_LIST,
|
||||||
validations_dir='/tmp/foo')
|
validations_dir='/tmp/foo')
|
||||||
@ -95,6 +95,6 @@ class TestValidatorRun(TestCase):
|
|||||||
playbook = ['fake.yaml']
|
playbook = ['fake.yaml']
|
||||||
inventory = 'tmp/inventory.yaml'
|
inventory = 'tmp/inventory.yaml'
|
||||||
|
|
||||||
run = Run()
|
run = ValidationActions()
|
||||||
self.assertRaises(RuntimeError, run.run_validations, playbook,
|
self.assertRaises(RuntimeError, run.run_validations, playbook,
|
||||||
inventory)
|
inventory)
|
||||||
|
@ -17,7 +17,7 @@ from unittest import mock
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from validations_libs.tests import fakes
|
from validations_libs.tests import fakes
|
||||||
from validations_libs.show import Show
|
from validations_libs.validation_actions import ValidationActions
|
||||||
|
|
||||||
|
|
||||||
class TestValidatorShow(TestCase):
|
class TestValidatorShow(TestCase):
|
||||||
@ -39,6 +39,6 @@ class TestValidatorShow(TestCase):
|
|||||||
'ID': '512e'}
|
'ID': '512e'}
|
||||||
data.update({'Last execution date': '2019-11-25 13:40:14',
|
data.update({'Last execution date': '2019-11-25 13:40:14',
|
||||||
'Number of execution': 'Total: 1, Passed: 1, Failed: 0'})
|
'Number of execution': 'Total: 1, Passed: 1, Failed: 0'})
|
||||||
validations_show = Show()
|
validations_show = ValidationActions()
|
||||||
out = validations_show.show_validations('512e')
|
out = validations_show.show_validations('512e')
|
||||||
self.assertEqual(out, data)
|
self.assertEqual(out, data)
|
||||||
|
@ -19,9 +19,9 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import six
|
import six
|
||||||
import time
|
import time
|
||||||
import yaml
|
|
||||||
|
|
||||||
from validations_libs import constants
|
from validations_libs import constants
|
||||||
|
from validations_libs.group import Group
|
||||||
from validations_libs.validation import Validation
|
from validations_libs.validation import Validation
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
@ -67,54 +67,23 @@ def parse_all_validations_on_disk(path, groups=None):
|
|||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
def parse_all_validation_groups_on_disk(groups_file_path=None):
|
|
||||||
results = []
|
|
||||||
|
|
||||||
if not groups_file_path:
|
|
||||||
groups_file_path = constants.VALIDATION_GROUPS_INFO
|
|
||||||
|
|
||||||
if not os.path.exists(groups_file_path):
|
|
||||||
return results
|
|
||||||
|
|
||||||
with open(groups_file_path, 'r') as grps:
|
|
||||||
contents = yaml.safe_load(grps)
|
|
||||||
|
|
||||||
for grp_name, grp_desc in sorted(contents.items()):
|
|
||||||
results.append((grp_name, grp_desc[0].get('description')))
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def get_validation_parameters(validation):
|
def get_validation_parameters(validation):
|
||||||
"""Return dictionary of parameters"""
|
"""Return dictionary of parameters"""
|
||||||
return Validation(validation).get_vars
|
return Validation(validation).get_vars
|
||||||
|
|
||||||
|
|
||||||
def read_validation_groups_file(groups_file_path=None):
|
def read_validation_groups_file(groups_path=None):
|
||||||
"""Load groups.yaml file and return a dictionary with its contents"""
|
"""Load groups.yaml file and return a dictionary with its contents"""
|
||||||
if not groups_file_path:
|
gp = Group((groups_path if groups_path else
|
||||||
groups_file_path = constants.VALIDATION_GROUPS_INFO
|
constants.VALIDATION_GROUPS_INFO))
|
||||||
|
return gp.get_data
|
||||||
if not os.path.exists(groups_file_path):
|
|
||||||
return []
|
|
||||||
|
|
||||||
with open(groups_file_path, 'r') as grps:
|
|
||||||
contents = yaml.safe_load(grps)
|
|
||||||
|
|
||||||
return contents
|
|
||||||
|
|
||||||
|
|
||||||
def get_validation_group_name_list():
|
def get_validation_group_name_list(groups_path=None):
|
||||||
"""Get the validation group name list only"""
|
"""Get the validation group name list only"""
|
||||||
results = []
|
gp = Group((groups_path if groups_path else
|
||||||
|
constants.VALIDATION_GROUPS_INFO))
|
||||||
groups = read_validation_groups_file()
|
return gp.get_groups_keys_list
|
||||||
|
|
||||||
if groups and isinstance(dict, groups):
|
|
||||||
for grp_name in six.viewkeys(groups):
|
|
||||||
results.append(grp_name)
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def get_new_validations_logs_on_disk(validations_logs_dir):
|
def get_new_validations_logs_on_disk(validations_logs_dir):
|
||||||
|
@ -17,16 +17,44 @@ import logging
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from validations_libs.ansible import Ansible as v_ansible
|
from validations_libs.ansible import Ansible as v_ansible
|
||||||
|
from validations_libs.group import Group
|
||||||
from validations_libs import constants
|
from validations_libs import constants
|
||||||
from validations_libs import utils as v_utils
|
from validations_libs import utils as v_utils
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__ + ".run")
|
LOG = logging.getLogger(__name__ + ".validation_actions")
|
||||||
|
|
||||||
|
|
||||||
class Run(object):
|
class ValidationActions(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, validation_path=None, group=None):
|
||||||
self.log = logging.getLogger(__name__ + ".Run")
|
self.log = logging.getLogger(__name__ + ".ValidationActions")
|
||||||
|
self.validation_path = (validation_path if validation_path
|
||||||
|
else constants.ANSIBLE_VALIDATION_DIR)
|
||||||
|
self.group = group
|
||||||
|
|
||||||
|
def list_validations(self):
|
||||||
|
"""List the available validations"""
|
||||||
|
self.log = logging.getLogger(__name__ + ".list_validations")
|
||||||
|
validations = v_utils.parse_all_validations_on_disk(
|
||||||
|
self.validation_path, self.group)
|
||||||
|
|
||||||
|
return_values = []
|
||||||
|
column_name = ('ID', 'Name', 'Groups')
|
||||||
|
|
||||||
|
for val in validations:
|
||||||
|
return_values.append((val.get('id'), val.get('name'),
|
||||||
|
val.get('groups')))
|
||||||
|
return (column_name, return_values)
|
||||||
|
|
||||||
|
def show_validations(self, validation):
|
||||||
|
"""Display detailed information about a Validation"""
|
||||||
|
self.log = logging.getLogger(__name__ + ".show_validations")
|
||||||
|
# Get validation data:
|
||||||
|
data = v_utils.get_validations_data(validation)
|
||||||
|
format = v_utils.get_validations_stats(
|
||||||
|
v_utils.parse_all_validations_logs_on_disk())
|
||||||
|
data.update(format)
|
||||||
|
return data
|
||||||
|
|
||||||
def run_validations(self, playbook=[], inventory='localhost',
|
def run_validations(self, playbook=[], inventory='localhost',
|
||||||
group=None, extra_vars=None, validations_dir=None,
|
group=None, extra_vars=None, validations_dir=None,
|
||||||
@ -94,3 +122,17 @@ class Run(object):
|
|||||||
'validation_id': validation_uuid
|
'validation_id': validation_uuid
|
||||||
}})
|
}})
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def group_information(self, groups):
|
||||||
|
"""Get Information about Validation Groups"""
|
||||||
|
val_gp = Group(groups)
|
||||||
|
group = val_gp.get_formated_group
|
||||||
|
|
||||||
|
group_info = []
|
||||||
|
# Get validations number by groups
|
||||||
|
for gp in group:
|
||||||
|
validations = v_utils.parse_all_validations_on_disk(
|
||||||
|
constants.ANSIBLE_VALIDATION_DIR, gp[0])
|
||||||
|
group_info.append((gp[0], gp[1], len(validations)))
|
||||||
|
column_name = ("Groups", "Description", "Number of Validations")
|
||||||
|
return (column_name, group_info)
|
Loading…
Reference in New Issue
Block a user