Improve StackValidationFailed response in outputs

Use StackValidationFailed exception's parameters error
and path in outputs section validation.

Change-Id: Ie99a9f032457d46b9be302ba6fe917086c4474cd
This commit is contained in:
Peter Razumovsky 2015-03-03 17:10:50 +03:00
parent 3ad4614276
commit 1bc0f9cdfe
3 changed files with 26 additions and 11 deletions

View File

@ -61,7 +61,9 @@ class HOTemplate20130523(template.Template):
'metadata': 'Metadata',
'depends_on': 'DependsOn',
'deletion_policy': 'DeletionPolicy',
'update_policy': 'UpdatePolicy'}
'update_policy': 'UpdatePolicy',
'description': 'Description',
'value': 'Value'}
functions = {
'Fn::GetAZs': cfn_funcs.GetAZs,
'get_param': hot_funcs.GetParam,

View File

@ -627,22 +627,31 @@ class Stack(collections.Mapping):
if result:
raise exception.StackValidationFailed(message=result)
for val in self.outputs.values():
for key, val in self.outputs.items():
try:
if not val or not val.get('Value'):
message = _('Each Output must contain '
'a Value key.')
raise exception.StackValidationFailed(message=message)
raise exception.StackValidationFailed(
error='Output validation error',
path=[self.t.OUTPUTS, key],
message=message)
function.validate(val.get('Value'))
except AttributeError:
message = _('Output validation error: '
'Outputs must contain Output. '
message = _('Outputs must contain Output. '
'Found a [%s] instead') % type(val)
raise exception.StackValidationFailed(message=message)
raise exception.StackValidationFailed(
error='Output validation error',
path=[self.t.OUTPUTS],
message=message)
except exception.StackValidationFailed as ex:
raise ex
except Exception as ex:
reason = _('Output validation error: '
'%s') % six.text_type(ex)
raise exception.StackValidationFailed(message=reason)
raise exception.StackValidationFailed(
error='Output validation error',
path=[self.t.OUTPUTS, key,
self.t.get_section_name('Value')],
message=six.text_type(ex))
def requires_deferred_auth(self):
'''

View File

@ -1579,7 +1579,9 @@ class StackTest(common.HeatTestCase):
ex = self.assertRaises(exception.StackValidationFailed,
self.stack.validate)
self.assertEqual('Output validation error: The Referenced Attribute '
self.assertEqual('Output validation error : '
'Outputs.Resource_attr.Value: '
'The Referenced Attribute '
'(AResource Bar) is incorrect.',
six.text_type(ex))
@ -1739,7 +1741,9 @@ class StackTest(common.HeatTestCase):
ex = self.assertRaises(exception.StackValidationFailed,
self.stack.validate)
self.assertEqual('Output validation error: The Referenced Attribute '
self.assertEqual('Output validation error : '
'outputs.resource_attr.value: '
'The Referenced Attribute '
'(AResource Bar) is incorrect.',
six.text_type(ex))