resp['StackId'] = "/".join([hostportprefix, resp['StackId']])
return resp
+ def _format_response(self, action, response):
+ '''
+ Format response from engine into API format
+ '''
+ # TODO : logic to handle error response format will go here..
+ return {'%sResponse' % action: {'%sResult' % action: response}}
+
def list(self, req):
"""
Returns the following information for all stacks:
{'method': 'list_stacks',
'args': {'params': parms}})
- res = {'ListStacksResponse': {
- 'ListStacksResult': {'StackSummaries': []}}}
- results = res['ListStacksResponse']['ListStacksResult']
- summaries = results['StackSummaries']
+ res = {'StackSummaries': []}
if stack_list is not None:
for s in stack_list['stacks']:
- summaries.append(self._stackid_addprefix(s))
+ res['StackSummaries'].append(self._stackid_addprefix(s))
- return res
+ return self._format_response('ListStacks', res)
def describe(self, req):
"""
except rpc_common.RemoteError as ex:
return webob.exc.HTTPBadRequest(str(ex))
- res = {'DescribeStacksResult': {'Stacks': []}}
- stacks = res['DescribeStacksResult']['Stacks']
+ res = {'Stacks': []}
for s in stack_list['stacks']:
# Reformat Parameters dict-of-dict into AWS API format
# This is a list-of-dict with nasty "ParameterKey" : key
s['Parameters'] = [{'ParameterKey':k,
'ParameterValue':v.get('Default')}
for (k, v) in s['Parameters'].items()]
- stacks.append(self._stackid_addprefix(s))
+ res['Stacks'].append(self._stackid_addprefix(s))
- return res
+ return self._format_response('DescribeStacks', res)
def _get_template(self, req):
if 'TemplateBody' in req.params:
except rpc_common.RemoteError as ex:
return webob.exc.HTTPBadRequest(str(ex))
- # Note boto expects CreateStackResult wrapped in CreateStackResponse
- # CreateStackResponse is not mentioned in the aws API docs, so we
- # need to check against a real AWS response to ensure this is correct
- return {'CreateStackResponse':
- {'CreateStackResult': self._stackid_addprefix(res)}}
+ return self._format_response('CreateStack',
+ self._stackid_addprefix(res))
def get_template(self, req):
if templ is None:
return webob.exc.HTTPNotFound('stack not found')
- return {'GetTemplateResult': {'TemplateBody': templ}}
+ return self._format_response('GetTemplate', {'TemplateBody': templ})
def estimate_template_cost(self, req):
- return {'EstimateTemplateCostResult': {
- 'Url': 'http://en.wikipedia.org/wiki/Gratis'}}
+ return self._format_response('EstimateTemplateCost',
+ {'Url': 'http://en.wikipedia.org/wiki/Gratis'})
def validate_template(self, req):
return webob.exc.HTTPBadRequest(str(ex))
if res is None:
- return {'DeleteStackResult': ''}
+ return self._format_response('DeleteStack', '')
else:
- return {'DeleteStackResult': res['Error']}
+ return self._format_response('DeleteStack', res['Error'])
def events_list(self, req):
"""
events = 'Error' not in event_res and event_res['events'] or []
- return {'DescribeStackEventsResult': {'StackEvents': events}}
+ return self._format_response('DescribeStackEvents',
+ {'StackEvents': events})
def describe_stack_resource(self, req):
"""
except rpc_common.RemoteError as ex:
return webob.exc.HTTPBadRequest(str(ex))
- return {
- 'DescribeStackResourceResponse': {
- 'DescribeStackResourceResult': {
- 'StackResourceDetail': resource_details,
- },
- },
- }
+ return self._format_response('DescribeStackResource',
+ {'StackResourceDetail': resource_details})
def describe_stack_resources(self, req):
"""
except rpc_common.RemoteError as ex:
return webob.exc.HTTPBadRequest(str(ex))
- response = {
- 'DescribeStackResourcesResult': {
- 'StackResources': resources,
- }
- }
- return response
+ return self._format_response('DescribeStackResources',
+ {'StackResources': resources})
def list_stack_resources(self, req):
"""
except rpc_common.RemoteError as ex:
return webob.exc.HTTPBadRequest(str(ex))
- return {
- 'ListStackResourcesResponse': {
- 'ListStackResourcesResult': {
- 'StackResourceSummaries': resources,
- },
- },
- }
+ return self._format_response('ListStackResources',
+ {'StackResourceSummaries': resources})
def create_resource(options):