diff --git a/validations_libs/tests/test_utils.py b/validations_libs/tests/test_utils.py index 60bcbe00..abfee942 100644 --- a/validations_libs/tests/test_utils.py +++ b/validations_libs/tests/test_utils.py @@ -13,8 +13,6 @@ # under the License. # -import json -import yaml try: from unittest import mock except ImportError: @@ -84,7 +82,8 @@ class TestUtils(TestCase): mock_listdir.return_value = ['foo.yaml'] mock_isfile.return_value = True result = utils.get_validations_playbook('/foo/playbook', 'foo', 'prep') - self.assertEqual(result, ['/foo/playbook/foo.yaml']) + self.assertEqual(result, ['/foo/playbook/foo.yaml', + '/foo/playbook/foo.yaml']) @mock.patch('os.path.isfile') @mock.patch('os.listdir') @@ -96,7 +95,7 @@ class TestUtils(TestCase): mock_isfile): mock_listdir.return_value = ['foo.yaml'] mock_isfile.return_value = True - result = utils.get_validations_playbook('/foo/playbook', 'foo', + result = utils.get_validations_playbook('/foo/playbook', 'no_group') self.assertEqual(result, []) @@ -139,7 +138,7 @@ class TestUtils(TestCase): result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], 'foo') output = {'foo': {'parameters': {'foo': 'bar'}}} - self.assertEqual(result, json.dumps(output, indent=4, sort_keys=True)) + self.assertEqual(result, output) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2) @mock.patch('six.moves.builtins.open') @@ -150,10 +149,7 @@ class TestUtils(TestCase): validation_name='foo', format='yaml') output = {'foo': {'parameters': {'foo': 'bar'}}} - self.assertEqual(result, yaml.safe_dump(output, - allow_unicode=True, - default_flow_style=False, - indent=2)) + self.assertEqual(result, output) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2) @mock.patch('six.moves.builtins.open') @@ -171,7 +167,7 @@ class TestUtils(TestCase): result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], [], ['prep']) output = {'foo': {'parameters': {'foo': 'bar'}}} - self.assertEqual(result, json.dumps(output, indent=4, sort_keys=True)) + self.assertEqual(result, output) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK) @mock.patch('six.moves.builtins.open') @@ -179,4 +175,4 @@ class TestUtils(TestCase): result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], [], []) - self.assertEqual(result, json.dumps({})) + self.assertEqual(result, {}) diff --git a/validations_libs/tests/test_validation_actions.py b/validations_libs/tests/test_validation_actions.py index ee592fe2..c21ef2bc 100644 --- a/validations_libs/tests/test_validation_actions.py +++ b/validations_libs/tests/test_validation_actions.py @@ -17,6 +17,9 @@ try: from unittest import mock except ImportError: import mock + +import json + from unittest import TestCase from validations_libs.tests import fakes @@ -193,7 +196,8 @@ class TestValidationActions(TestCase): {'parameters': fakes.FAKE_METADATA}} v_actions = ValidationActions() result = v_actions.show_validations_parameters('foo') - self.assertEqual(result, {'foo': {'parameters': fakes.FAKE_METADATA}}) + self.assertEqual(result, json.dumps(mock_get_param.return_value, + indent=4, sort_keys=True)) @mock.patch('validations_libs.validation_logs.ValidationLogs.' 'get_logfile_by_validation', diff --git a/validations_libs/utils.py b/validations_libs/utils.py index e9a4fdd4..9b588baf 100644 --- a/validations_libs/utils.py +++ b/validations_libs/utils.py @@ -14,12 +14,10 @@ # import datetime import glob -import json import logging import os import six import uuid -import yaml from os.path import join from validations_libs import constants @@ -66,10 +64,30 @@ def parse_all_validations_on_disk(path, groups=None): return results -def get_validations_playbook(path, validation_id, groups=None): +def get_validations_playbook(path, validation_id=None, groups=None): """ - Return a list of validations playbook - Can be sorted by Groups + Get a list of validations playbooks paths either by their names + or their groups + + :param path: Path of the validations playbooks + :type path: `string` + + :param validation_id: List of validation name + :type validation_id: `list` + + :param groups: List of validation group + :type groups: `list` + + :return: A list of absolute validations playbooks path + + :exemple: + + >>> path = '/usr/share/validation-playbooks' + >>> validation_id = ['512e','check-cpu'] + >>> groups = None + >>> get_validations_playbook(path, validation_id, groups) + ['/usr/share/ansible/validation-playbooks/512e.yaml', + '/usr/share/ansible/validation-playbooks/check-cpu.yaml',] """ if isinstance(groups, six.string_types): groups = [groups] @@ -77,9 +95,12 @@ def get_validations_playbook(path, validation_id, groups=None): for f in os.listdir(path): pl_path = join(path, f) if os.path.isfile(pl_path): - if os.path.splitext(f)[0] in validation_id: + if validation_id: + if os.path.splitext(f)[0] in validation_id: + pl.append(pl_path) + if groups: val = Validation(pl_path) - if not groups or set(groups).intersection(val.groups): + if set(groups).intersection(val.groups): pl.append(pl_path) return pl @@ -142,8 +163,5 @@ def get_validations_parameters(validations_data, validation_name=[], if format not in ['json', 'yaml']: msg = 'Invalid output format, {} is not supported'.format(format) raise RuntimeError(msg) - elif format == 'json': - return json.dumps(params, indent=4, sort_keys=True) - else: - return yaml.safe_dump(params, allow_unicode=True, - default_flow_style=False, indent=2) + + return params diff --git a/validations_libs/validation_actions.py b/validations_libs/validation_actions.py index 956df5ec..be06c754 100644 --- a/validations_libs/validation_actions.py +++ b/validations_libs/validation_actions.py @@ -14,6 +14,8 @@ # import logging import os +import json +import yaml from validations_libs.ansible import Ansible as v_ansible from validations_libs.group import Group @@ -152,9 +154,31 @@ class ValidationActions(object): params = v_utils.get_validations_parameters(validations, validation, group, format) if download_file: + params_only = {} + ext = os.splitext(download_file)[1][1:] with open(download_file, 'w') as f: - f.write(params) - return params + for val_name in params.keys(): + for k, v in params[val_name].get('parameters').items(): + params_only[k] = v + + if ext == 'json': + f.write(json.dumps(params_only, + indent=4, + sort_keys=True)) + else: + f.write(yaml.safe_dump(params_only, + allow_unicode=True, + default_flow_style=False, + indent=2)) + if format == 'json': + return json.dumps(params, + indent=4, + sort_keys=True) + else: + return yaml.safe_dump(params, + allow_unicode=True, + default_flow_style=False, + indent=2) def show_history(self, validation_id=None, extension='json', log_path=constants.VALIDATIONS_LOG_BASEDIR):