]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Don't require user params on template validation
authorTomas Sedovic <tomas@sedovic.cz>
Thu, 12 Jul 2012 16:04:54 +0000 (18:04 +0200)
committerTomas Sedovic <tomas@sedovic.cz>
Wed, 18 Jul 2012 10:33:09 +0000 (12:33 +0200)
Fixes #161

Change-Id: Ia7e1a83043f8d175e320bfd52aa64cb6f62ead90
Signed-off-by: Tomas Sedovic <tomas@sedovic.cz>
heat/engine/manager.py
heat/tests/test_validate.py

index b6872c32734ea6c4bb5f98f3827fc75d1acef228..a39d4223e9f5104baecaf0247c63dbb7fa5493aa 100644 (file)
@@ -131,7 +131,6 @@ class EngineManager(manager.Manager):
         arg3 -> Template of stack you want to create.
         arg4 -> Params passed from API.
         """
-
         auth.authenticate(context)
 
         logger.info('validate_template')
@@ -139,20 +138,29 @@ class EngineManager(manager.Manager):
             msg = _("No Template provided.")
             return webob.exc.HTTPBadRequest(explanation=msg)
 
-        stack_name = 'validate'
-        try:
-            tmpl = parser.Template(template)
-            user_params = parser.Parameters(stack_name, tmpl, params)
-            s = parser.Stack(context, stack_name, tmpl, user_params)
-        except KeyError as ex:
-            res = ('A Fn::FindInMap operation referenced '
-                   'a non-existent map [%s]' % str(ex))
-
-            result = {'Description': 'Malformed Query Response [%s]' % (res),
-                      'Parameters': []}
-        else:
-            result = s.validate()
-
+        tmpl = parser.Template(template)
+        resources = template.get('Resources', [])
+
+        if not resources:
+            return {'Error': 'At least one Resources member must be defined.'}
+
+        for res in resources.values():
+            if not res.get('Type'):
+                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', '')
+            })
+
+        result = {
+            'Description': template.get('Description', ''),
+            'Parameters': parameters,
+        }
         return {'ValidateTemplateResult': result}
 
     def get_template(self, context, stack_name, params):
index 7dea58218f51a521c992370b1b6856071cd916e8..975e508244b6c7c73c25fa8ed97614020500b42f 100644 (file)
@@ -269,7 +269,7 @@ class validateTest(unittest.TestCase):
         res = dict(manager.
             validate_template(None, t, params)['ValidateTemplateResult'])
         print 'res %s' % res
-        self.assertEqual(res['Description'], 'Successfully validated')
+        self.assertEqual(res['Description'], 'test.')
 
     def test_validate_ref_invalid(self):
         t = json.loads(test_template_ref % 'WikiDatabasez')
@@ -301,7 +301,7 @@ class validateTest(unittest.TestCase):
         manager = managers.EngineManager()
         res = dict(manager.
             validate_template(None, t, params)['ValidateTemplateResult'])
-        self.assertEqual(res['Description'], 'Successfully validated')
+        self.assertEqual(res['Description'], 'test.')
 
     def test_validate_findinmap_invalid(self):
         t = json.loads(test_template_findinmap_invalid)