From 5791d52c95d0110640a61b250a1b191c51f5b175 Mon Sep 17 00:00:00 2001 From: Peter Razumovsky Date: Fri, 29 May 2015 15:08:49 +0300 Subject: [PATCH] Improve StackValidationFailed resp param_groups Use StackValidationFailed exception's parameters error and path in parameter groups validation for fuller error message: which error has been raised, where this error has been raised and why. This patch relies on topic [1]. [1]: https://review.openstack.org/#/q/status:merged+project:openstack/heat+branch:master+topic:improve-validation-error,n,z Change-Id: I2b1b096b314b52b2a51d09c47c46b902e6647c59 --- heat/engine/parameter_groups.py | 40 +++++++++++++++++++++------------ heat/tests/test_validate.py | 23 +++++++++++++------ 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/heat/engine/parameter_groups.py b/heat/engine/parameter_groups.py index d35c7edb35..c755225fb9 100644 --- a/heat/engine/parameter_groups.py +++ b/heat/engine/parameter_groups.py @@ -45,34 +45,46 @@ class ParameterGroups(object): LOG.debug(self.parameter_names) if self.parameter_groups: if not isinstance(self.parameter_groups, list): - raise exception.StackValidationFailed(message=_( - 'The %s should be a list.') % PARAMETER_GROUPS) + raise exception.StackValidationFailed( + error=_('Parameter Groups error'), + path=[PARAMETER_GROUPS], + message=_('The %s should be a list.') % PARAMETER_GROUPS) # Loop through groups and validate parameters grouped_parameters = [] for group in self.parameter_groups: parameters = group.get(PARAMETERS) if parameters is None: - raise exception.StackValidationFailed(message=_( - 'The %s must be provided for ' - 'each parameter group.') % PARAMETERS) + raise exception.StackValidationFailed( + error=_('Parameter Groups error'), + path=[PARAMETER_GROUPS, group.get('label')], + message=_('The %s must be provided for ' + 'each parameter group.') % PARAMETERS) if not isinstance(parameters, list): - raise exception.StackValidationFailed(message=_( - 'The %s of parameter group ' - 'should be a list.') % PARAMETERS) + raise exception.StackValidationFailed( + error=_('Parameter Groups error'), + path=[PARAMETER_GROUPS, group.get('label')], + message=_('The %s of parameter group ' + 'should be a list.') % PARAMETERS) for param in parameters: # Check if param has been added to a previous group if param in grouped_parameters: - raise exception.StackValidationFailed(message=_( - 'The %s parameter must be assigned to one ' - 'parameter group only.') % param) + raise exception.StackValidationFailed( + error=_('Parameter Groups error'), + path=[PARAMETER_GROUPS, group.get('label')], + message=_( + 'The %s parameter must be assigned to one ' + 'parameter group only.') % param) else: grouped_parameters.append(param) # Check that grouped parameter references a valid Parameter if param not in self.parameter_names: - raise exception.StackValidationFailed(message=_( - 'The grouped parameter %s does not reference ' - 'a valid parameter.') % param) + raise exception.StackValidationFailed( + error=_('Parameter Groups error'), + path=[PARAMETER_GROUPS, group.get('label')], + message=_( + 'The grouped parameter %s does not reference ' + 'a valid parameter.') % param) diff --git a/heat/tests/test_validate.py b/heat/tests/test_validate.py index e684367116..5f60ded467 100644 --- a/heat/tests/test_validate.py +++ b/heat/tests/test_validate.py @@ -1407,8 +1407,11 @@ class validateTest(common.HeatTestCase): exc = self.assertRaises(exception.StackValidationFailed, stack.validate) - self.assertEqual(_('The InstanceType parameter must be assigned to ' - 'one parameter group only.'), six.text_type(exc)) + self.assertEqual(_('Parameter Groups error : ' + 'parameter_groups.Database ' + 'Group: The InstanceType parameter must be ' + 'assigned to one parameter group only.'), + six.text_type(exc)) def test_validate_invalid_parameter_in_group(self): t = template_format.parse(test_template_invalid_parameter_name) @@ -1422,8 +1425,10 @@ class validateTest(common.HeatTestCase): exc = self.assertRaises(exception.StackValidationFailed, stack.validate) - self.assertEqual(_('The grouped parameter SomethingNotHere does not ' - 'reference a valid parameter.'), + self.assertEqual(_('Parameter Groups error : ' + 'parameter_groups.Database Group: The grouped ' + 'parameter SomethingNotHere does not ' + 'reference a valid parameter.'), six.text_type(exc)) def test_validate_no_parameters_in_group(self): @@ -1433,7 +1438,8 @@ class validateTest(common.HeatTestCase): exc = self.assertRaises(exception.StackValidationFailed, stack.validate) - self.assertEqual(_('The parameters must be provided for each ' + self.assertEqual(_('Parameter Groups error : parameter_groups.Server ' + 'Group: The parameters must be provided for each ' 'parameter group.'), six.text_type(exc)) def test_validate_parameter_groups_not_list(self): @@ -1443,7 +1449,8 @@ class validateTest(common.HeatTestCase): exc = self.assertRaises(exception.StackValidationFailed, stack.validate) - self.assertEqual(_('The parameter_groups should be ' + self.assertEqual(_('Parameter Groups error : parameter_groups: ' + 'The parameter_groups should be ' 'a list.'), six.text_type(exc)) def test_validate_parameters_not_list(self): @@ -1453,7 +1460,9 @@ class validateTest(common.HeatTestCase): exc = self.assertRaises(exception.StackValidationFailed, stack.validate) - self.assertEqual(_('The parameters of parameter group should be ' + self.assertEqual(_('Parameter Groups error : ' + 'parameter_groups.Server Group: ' + 'The parameters of parameter group should be ' 'a list.'), six.text_type(exc)) def test_validate_allowed_values_integer(self):