"""
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'):
"""
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:
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."""
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):
"""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)