From: Ian Main Date: Tue, 3 Apr 2012 23:31:53 +0000 (-0700) Subject: Hook up RPC methods X-Git-Tag: 2014.1~2088^2~5 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=06d5b8c378e9ffd496b1bb49db16f8fc85516825;p=openstack-build%2Fheat-build.git Hook up RPC methods 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 --- diff --git a/heat/api/v1/stacks.py b/heat/api/v1/stacks.py index 6f46bf6a..d76b2d71 100644 --- a/heat/api/v1/stacks.py +++ b/heat/api/v1/stacks.py @@ -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.""" diff --git a/heat/engine/manager.py b/heat/engine/manager.py index 85e718ea..4cccd793 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -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)