Format output in json or yaml for validations show param

Change-Id: I93b35cd1619e2c2b4a3b1294171dddf56033e94f
This commit is contained in:
Mathieu Bultel 2020-04-09 14:17:01 +02:00 committed by mathieu bultel
parent f85ec24e9c
commit c0de9faa41
4 changed files with 65 additions and 12 deletions

View File

@ -153,6 +153,15 @@ FAKE_PLAYBOOK = [{'hosts': 'undercloud',
'name': 'name':
'Advanced Format 512e Support'}}}] 'Advanced Format 512e Support'}}}]
FAKE_PLAYBOOK2 = [{'hosts': 'undercloud',
'roles': ['advanced_format_512e_support'],
'vars': {'metadata': {'description': 'foo',
'groups': ['prep', 'pre-deployment'],
'name':
'Advanced Format 512e Support'},
'foo': 'bar'}}]
FAKE_METADATA = {'id': 'foo', FAKE_METADATA = {'id': 'foo',
'description': 'foo', 'description': 'foo',
'groups': ['prep', 'pre-deployment'], 'groups': ['prep', 'pre-deployment'],

View File

@ -13,6 +13,8 @@
# under the License. # under the License.
# #
import json
import yaml
try: try:
from unittest import mock from unittest import mock
except ImportError: except ImportError:
@ -129,21 +131,46 @@ class TestUtils(TestCase):
result = utils.get_validations_details('foo') result = utils.get_validations_details('foo')
self.assertEqual(result, fakes.FAKE_METADATA) self.assertEqual(result, fakes.FAKE_METADATA)
@mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2)
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
def test_get_validations_parameters_no_group(self, mock_open, mock_load): def test_get_validations_parameters_no_group(self, mock_open, mock_load):
result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'],
'foo') 'foo')
self.assertEqual(result, {'foo': {'parameters': fakes.FAKE_METADATA}}) output = {'foo': {'parameters': {'foo': 'bar'}}}
self.assertEqual(result, json.dumps(output, indent=4, sort_keys=True))
@mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2)
@mock.patch('six.moves.builtins.open')
def test_get_validations_parameters_yaml(self, mock_open, mock_load):
result = utils.get_validations_parameters(
validations_data=['/foo/playbook/foo.yaml'],
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))
@mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2)
@mock.patch('six.moves.builtins.open')
def test_get_validations_parameters_wrong_format(self, mock_open,
mock_load):
self.assertRaises(RuntimeError, utils.get_validations_parameters,
validations_data=['/foo/playbook/foo.yaml'],
validation_name='foo',
format='wrong')
@mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK2)
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
def test_get_validations_parameters_no_val(self, mock_open, mock_load): def test_get_validations_parameters_no_val(self, mock_open, mock_load):
result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'],
[], ['prep']) [], ['prep'])
self.assertEqual(result, {'foo': {'parameters': fakes.FAKE_METADATA}}) output = {'foo': {'parameters': {'foo': 'bar'}}}
self.assertEqual(result, json.dumps(output, indent=4, sort_keys=True))
@mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK) @mock.patch('yaml.safe_load', return_value=fakes.FAKE_PLAYBOOK)
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
@ -151,4 +178,4 @@ class TestUtils(TestCase):
result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'], result = utils.get_validations_parameters(['/foo/playbook/foo.yaml'],
[], []) [], [])
self.assertEqual(result, {}) self.assertEqual(result, json.dumps({}))

View File

@ -14,10 +14,12 @@
# #
import datetime import datetime
import glob import glob
import json
import logging import logging
import os import os
import six import six
import uuid import uuid
import yaml
from os.path import join from os.path import join
from validations_libs import constants from validations_libs import constants
@ -121,13 +123,23 @@ def get_validations_data(validation, path=constants.ANSIBLE_VALIDATION_DIR):
def get_validations_parameters(validations_data, validation_name=[], def get_validations_parameters(validations_data, validation_name=[],
groups=[]): groups=[], format='json'):
"""
Return parameters for a list of validations
The return format can be in json or yaml
"""
params = {} params = {}
for val in validations_data: for val in validations_data:
v = Validation(val) v = Validation(val)
if v.id in validation_name or set(groups).intersection(v.groups): if v.id in validation_name or set(groups).intersection(v.groups):
params[v.id] = { params[v.id] = {
'parameters': (v.get_metadata if v.get_metadata else 'parameters': v.get_vars
v.get_vars)
} }
return params 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)

View File

@ -135,12 +135,17 @@ class ValidationActions(object):
column_name = ("Groups", "Description", "Number of Validations") column_name = ("Groups", "Description", "Number of Validations")
return (column_name, group_info) return (column_name, group_info)
def show_validations_parameters(self, validation, group=None): def show_validations_parameters(self, validation, group=None,
format='json', download_file=None):
"""Return Validations Parameters""" """Return Validations Parameters"""
validations = v_utils.get_validations_playbook( validations = v_utils.get_validations_playbook(
self.validation_path, validation, group) self.validation_path, validation, group)
return v_utils.get_validations_parameters(validations, validation, params = v_utils.get_validations_parameters(validations, validation,
group) group, format)
if download_file:
with open(download_file, 'w') as f:
f.write(params)
return params
def show_history(self, validation_id=None): def show_history(self, validation_id=None):
"""Return validations history""" """Return validations history"""