From 15ba5c1eb0ccb1ecc1fb4cbcf73b301412295173 Mon Sep 17 00:00:00 2001 From: Tetiana Lashchova Date: Wed, 21 Jan 2015 19:55:13 +0200 Subject: [PATCH] Enhanced error handling in outputs block Change-Id: I20cab805d7a423efc008049c447bde0747530970 Closes-bug: #1411721 --- heat/engine/stack.py | 6 +++++- heat/tests/test_validate.py | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/heat/engine/stack.py b/heat/engine/stack.py index d5e798e047..d3f664bbe8 100644 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -1193,7 +1193,11 @@ class Stack(collections.Mapping): } def resolve_static_data(self, snippet): - return self.t.parse(self, snippet) + try: + return self.t.parse(self, snippet) + except Exception as ex: + raise exception.StackValidationFailed( + message=encodeutils.safe_decode(six.text_type(ex))) def resolve_runtime_data(self, snippet): """DEPRECATED. Use heat.engine.function.resolve() instead.""" diff --git a/heat/tests/test_validate.py b/heat/tests/test_validate.py index 3deb47c760..7ce4d013b6 100644 --- a/heat/tests/test_validate.py +++ b/heat/tests/test_validate.py @@ -838,6 +838,18 @@ resources: name: { get_param: net_name } ''' +test_template_invalid_outputs = ''' +heat_template_version: 2013-05-23 + +resources: + random_str: + type: OS::Heat::RandomString + +outputs: + string: + value: {get_attr: [[random_str, value]]} +''' + class validateTest(common.HeatTestCase): def setUp(self): @@ -1489,3 +1501,12 @@ class validateTest(common.HeatTestCase): stack.validate) self.assertIn('"3" is not an allowed value [1, 4, 8]', six.text_type(err)) + + def test_validate_invalid_outputs(self): + t = template_format.parse(test_template_invalid_outputs) + template = parser.Template(t) + err = self.assertRaises(exception.StackValidationFailed, + parser.Stack, self.ctx, 'test_stack', template) + error_message = ('Arguments to "get_attr" must be of the form ' + '[resource_name, attribute, (path), ...]') + self.assertEqual(error_message, six.text_type(err))