diff --git a/validations_libs/tests/test_utils.py b/validations_libs/tests/test_utils.py index 0fab0ade..19b39367 100644 --- a/validations_libs/tests/test_utils.py +++ b/validations_libs/tests/test_utils.py @@ -41,9 +41,3 @@ class TestUtils(TestCase): res = self.vlog.get_validations_stats( fakes.VALIDATIONS_LOGS_CONTENTS_LIST) self.assertEqual(res, fakes.VALIDATIONS_STATS) - - @mock.patch('validations_libs.utils.parse_all_validations_on_disk', - return_value=fakes.VALIDATIONS_LIST) - def test_get_validations_details(self, mock_parse): - res = utils.get_validations_details('my_val1') - self.assertEqual(res, fakes.VALIDATIONS_LIST[0]) diff --git a/validations_libs/utils.py b/validations_libs/utils.py index 0495657f..78ba2f5c 100644 --- a/validations_libs/utils.py +++ b/validations_libs/utils.py @@ -18,6 +18,8 @@ import logging import os import six +from os import listdir +from os.path import isfile, join from validations_libs import constants from validations_libs.group import Group from validations_libs.validation import Validation @@ -63,6 +65,24 @@ def parse_all_validations_on_disk(path, groups=None): return results +def get_validations_playbook(path, validation_id, groups=None): + """ + Return a list of validations playbook + Can be sorted by Groups + """ + if isinstance(groups, six.string_types): + groups = [groups] + pl = [] + for f in listdir(path): + pl_path = join(path, f) + if isfile(pl_path): + if os.path.splitext(f)[0] in validation_id: + val = Validation(pl_path) + if not groups or set(groups).intersection(val.groups): + pl.append(pl_path) + return pl + + def get_validation_parameters(validation): """Return dictionary of parameters""" return Validation(validation).get_vars diff --git a/validations_libs/validation_actions.py b/validations_libs/validation_actions.py index 4a2d820c..2106425d 100644 --- a/validations_libs/validation_actions.py +++ b/validations_libs/validation_actions.py @@ -65,13 +65,13 @@ class ValidationActions(object): self.log = logging.getLogger(__name__ + ".run_validations") - if isinstance(playbook, list): - playbooks = playbook - elif isinstance(playbook, str): - playbooks = [] - playbooks.append(playbook) - else: - raise TypeError("Playbooks should be a List or a Str") + if playbook: + if isinstance(playbook, list): + playbooks = playbook + elif isinstance(playbook, str): + playbooks = [playbook] + else: + raise TypeError("Playbooks should be a List or a Str") if group: self.log.debug('Getting the validations list by group') @@ -83,16 +83,11 @@ class ValidationActions(object): playbooks.append(val.get('id') + '.yaml') except Exception as e: raise(e) - elif validation_name: - for pb in validation_name: - if pb not in v_utils.get_validation_group_name_list(): - playbooks.append(pb + '.yaml') - else: - raise("Please, use '--group' argument instead of " - "'--validation' to run validation(s) by their " - "name(s)." - ) + playbooks = v_utils.get_validations_playbook( + (validations_dir if validations_dir + else constants.ANSIBLE_VALIDATION_DIR), + validation_name, group) else: raise RuntimeError("No validations found")