]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Hook up RPC methods
authorIan Main <imain@redhat.com>
Tue, 3 Apr 2012 23:31:53 +0000 (16:31 -0700)
committerIan Main <imain@redhat.com>
Tue, 3 Apr 2012 23:31:53 +0000 (16:31 -0700)
This commit hooks up all the calls via RPC to the new implementations
in manager.py.  I haven't tested them all yet.. I'm getting HD failure
warnings and want to get this commited before something goes terribly
wrong :).

Signed-off-by: Ian Main <imain@redhat.com>
heat/api/v1/stacks.py
heat/engine/manager.py

index 6f46bf6a5157bd5710ec195501954a6e51b9314a..d76b2d7123e25a4b7598a9e1d66f36527b486b55 100644 (file)
@@ -61,16 +61,13 @@ class StackController(object):
         """
         Returns the following information for all stacks:
         """
-        c = engine.get_engine_client(req.context)
+        con = context.get_admin_context()
 
-        stack_list = c.show_stack(req.params['StackName'])
-        res = {'DescribeStacksResult': {'Stacks': [] } }
-        stacks = res['DescribeStacksResult']['Stacks']
-        for s in stack_list:
-            mem = {'member': s}
-            stacks.append(mem)
+        stack_list = rpc.call(con, 'engine',
+                              {'method': 'show_stack',
+                               'args': {'stack_name': req.params['StackName']}})
 
-        return res
+        return stack_list
 
     def _get_template(self, req):
         if req.params.has_key('TemplateBody'):
@@ -102,8 +99,6 @@ class StackController(object):
         """
         con = context.get_admin_context()
 
-        return rpc.call(con, 'engine', {'method': 'create_stack',
-                  'args': {'stack_name': req.params['StackName']}})
         try:
             templ = self._get_template(req)
         except socket.gaierror:
@@ -120,34 +115,31 @@ class StackController(object):
             return webob.exc.HTTPBadRequest(explanation=msg)
         stack['StackName'] = req.params['StackName']
 
-        return c.create_stack(stack)
+        return rpc.call(con, 'engine',
+                        {'method': 'create_stack',
+                         'args': {'stack_name': req.params['StackName'],
+                                  'template': stack}})
 
     def delete(self, req):
         """
         Returns the following information for all stacks:
         """
         logger.info('in api delete ')
-        c = engine.get_engine_client(req.context)
-        res = c.delete_stack(req.params['StackName'])
-        if res.status == 200:
-            return {'DeleteStackResult': ''}
-        else:
-            return webob.exc.HTTPNotFound()
+        con = context.get_admin_context()
 
+        return rpc.call(con, 'engine',
+                        {'method': 'delete_stack',
+                         'args': {'stack_name': req.params['StackName']}})
 
     def events_list(self, req):
         """
         Returns the following information for all stacks:
         """
-        c = engine.get_engine_client(req.context)
-        stack_list = c.get_stack_events(**req.params)
-
-        res = {'DescribeStackEventsResult': {'StackEvents': [] } }
-        summaries = res['DescribeStackEventsResult']['StackEvents']
-        for s in stack_list:
-            summaries.append(s)
+        con = context.get_admin_context()
 
-        return res
+        return rpc.call(con, 'engine',
+                        {'method': 'list_events',
+                         'args': {'stack_name': req.params['StackName']}})
 
 def create_resource(options):
     """Stacks resource factory method."""
index 85e718eaeec0c4f654f046c7b6c1183fca0b362d..4cccd793fff2e2a14e4be17caa61f87e48b93b83 100644 (file)
@@ -50,8 +50,11 @@ from heat.common import exception
 from heat import manager
 from heat.openstack.common import cfg
 from heat import rpc
+from heat.engine import parser
+from heat.engine import simpledb
 
-LOG = logging.getLogger(__name__)
+logger = logging.getLogger('heat.engine.api.manager')
+stack_db = {}
 
 
 class EngineManager(manager.Manager):
@@ -61,8 +64,67 @@ class EngineManager(manager.Manager):
         """Load configuration options and connect to the hypervisor."""
 
     def list_stacks(self, context):
-        return {'stack_list': 'yay'}
-
-    def create_stack(self, context, stack_name):
-        return {'state': 'woot -> %s' % stack_name}
+        logger.info('context is %s' % context)
+        res = {'stacks': [] }
+        for s in stack_db:
+            mem = {}
+            mem['StackId'] = stack_db[s]['StackId']
+            mem['StackName'] = s
+            mem['CreationTime'] = 'now'
+            try:
+                mem['TemplateDescription'] = stack_db[s]['Description']
+                mem['StackStatus'] = stack_db[s]['StackStatus']
+            except:
+                mem['TemplateDescription'] = 'No description'
+                mem['StackStatus'] = 'unknown'
+            res['stacks'].append(mem)
+
+        return res
+
+    def show_stack(self, context, stack_name):
+
+        res = {'stacks': [] }
+        if stack_db.has_key(stack_name):
+            mem = {}
+            mem['StackId'] = stack_db[stack_name]['StackId']
+            mem['StackName'] = stack_name
+            mem['CreationTime'] = 'TODO'
+            mem['LastUpdatedTime'] = 'TODO'
+            mem['NotificationARNs'] = 'TODO'
+            mem['Outputs'] = [{'Description': 'TODO', 'OutputKey': 'TODO', 'OutputValue': 'TODO' }]
+            mem['Parameters'] = stack_db[stack_name]['Parameters']
+            mem['StackStatusReason'] = 'TODO'
+            mem['TimeoutInMinutes'] = 'TODO'
+            try:
+                mem['TemplateDescription'] = stack_db[stack_name]['Description']
+                mem['StackStatus'] = stack_db[stack_name]['StackStatus']
+            except:
+                mem['TemplateDescription'] = 'No description'
+                mem['StackStatus'] = 'unknown'
+            res['stacks'].append(mem)
+        else:
+            # XXX: Not sure how to handle this case here.. original returned NOT FOUND error.
+            return {'Error': 'No stack by that name'}
+
+        return res
+
+    def create_stack(self, context, stack_name, template):
+        if stack_db.has_key(stack_name):
+            return {'Error': 'Stack already exists with that name.'}
+
+        stack_db[stack_name] = template
+        stack_db[stack_name].start()
+
+        return {'stack': {'id': stack_name}}
+
+    def delete_stack(self, req, stack_name):
+        if not stack_db.has_key(stack_name):
+            return {'Error': 'No stack by that name'}
+
+        logger.info('deleting stack %s' % stack_name)
+        del stack_db[stack_name]
+        return None
+
+    def list_events(self, context, stack_name):
+        return simpledb.events_get(stack_name)