From: Zane Bitter Date: Wed, 31 Oct 2012 19:18:43 +0000 (+0100) Subject: Use new Parameters class for validation X-Git-Tag: 2014.1~1257 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=d918f3919f46ab1663d065e81c12819a8624c7a8;p=openstack-build%2Fheat-build.git Use new Parameters class for validation The Stack.validate() method is no longer used for the validate_template feature (since it requires the parameter values in order to parse the whole template), so move the code for outputting parameter metadata to where it is actually used. Change-Id: Ibf2ad7cb485bff75953c952f34ea4a597ea5e2f8 Signed-off-by: Zane Bitter --- diff --git a/heat/engine/manager.py b/heat/engine/manager.py index a34f692d..3189a4d0 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -160,8 +160,8 @@ class EngineManager(manager.Manager): **common_params) response = stack.validate() - if response['Description'] != 'Successfully validated': - return response + if response: + return {'Description': response} stack_id = stack.store() @@ -203,8 +203,8 @@ class EngineManager(manager.Manager): template_params, **common_params) response = updated_stack.validate() - if response['Description'] != 'Successfully validated': - return response + if response: + return {'Description': response} # Spawn a greenthread to do the update, and register a # callback to remove the thread from stack_threads when done @@ -239,17 +239,20 @@ class EngineManager(manager.Manager): return {'Error': 'Every Resources object must contain a Type member.'} - parameters = [] - for param_key, param in template.get('Parameters', {}).items(): - parameters.append({ - 'NoEcho': param.get('NoEcho', 'false'), - 'ParameterKey': param_key, - 'Description': param.get('Description', '') - }) + def describe_param(p): + description = {'NoEcho': 'false', + 'ParameterKey': p.name, + 'Description': p.description()} + if p.has_default(): + description['DefaultValue'] = p.default() + + return description + + params = parser.Parameters(None, tmpl).map(describe_param) result = { 'Description': template.get('Description', ''), - 'Parameters': parameters, + 'Parameters': params.values(), } return result diff --git a/heat/engine/parser.py b/heat/engine/parser.py index dbefdc83..ecde0ea5 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -191,23 +191,7 @@ class Stack(object): result = str(ex) if result: - err_str = 'Malformed Query Response %s' % result - response = {'Description': err_str, - 'Parameters': []} - return response - - def describe_param(p): - return {'NoEcho': 'false', - 'ParameterKey': p.name, - 'Description': p.description(), - 'DefaultValue': p.default()} - - params = self.parameters.map(describe_param) - - response = {'Description': 'Successfully validated', - 'Parameters': params.values()} - - return response + return 'Malformed Query Response %s' % result def state_set(self, new_status, reason): '''Update the stack state in the database''' diff --git a/heat/tests/test_engine_manager.py b/heat/tests/test_engine_manager.py index cdb33afd..a095192c 100644 --- a/heat/tests/test_engine_manager.py +++ b/heat/tests/test_engine_manager.py @@ -162,7 +162,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): stack.t, stack.parameters).AndReturn(stack) self.m.StubOutWithMock(stack, 'validate') - stack.validate().AndReturn({'Description': 'Successfully validated'}) + stack.validate().AndReturn(None) self.m.StubOutWithMock(manager.greenpool, 'spawn') manager.greenpool.spawn(stack.create).AndReturn(DummyGreenThread()) @@ -195,7 +195,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): stack.t, stack.parameters).AndReturn(stack) self.m.StubOutWithMock(stack, 'validate') - error = {'Description': 'fubar'} + error = 'fubar' stack.validate().AndReturn(error) self.m.StubOutWithMock(manager.greenpool, 'spawn') @@ -204,7 +204,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): result = self.man.create_stack(self.ctx, stack_name, template, params, {}) - self.assertEqual(result, error) + self.assertEqual(result, {'Description': error}) self.m.VerifyAll() def test_stack_delete(self): @@ -260,7 +260,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): stack.t, stack.parameters).AndReturn(stack) self.m.StubOutWithMock(stack, 'validate') - stack.validate().AndReturn({'Description': 'Successfully validated'}) + stack.validate().AndReturn(None) self.m.StubOutWithMock(manager.greenpool, 'spawn') manager.greenpool.spawn(old_stack.update, stack).AndReturn( @@ -300,7 +300,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): stack.t, stack.parameters).AndReturn(stack) self.m.StubOutWithMock(stack, 'validate') - error = {'Description': 'fubar'} + error = 'fubar' stack.validate().AndReturn(error) self.m.StubOutWithMock(manager.greenpool, 'spawn') @@ -309,7 +309,7 @@ class stackManagerCreateUpdateDeleteTest(unittest.TestCase): result = self.man.update_stack(self.ctx, old_stack.identifier(), template, params, {}) - self.assertEqual(result, error) + self.assertEqual(result, {'Description': error}) self.m.VerifyAll() def test_stack_update_nonexist(self):