if stacks == None:
return res
for s in stacks:
- ps = parser.Stack(s.name, s.raw_template.template, params)
+ ps = parser.Stack(s.name, s.raw_template.parsed_template.template, s.id, params)
mem = {}
mem['stack_id'] = s.id
mem['stack_name'] = s.name
res = {'stacks': []}
s = db_api.stack_get(None, stack_name)
if s:
- ps = parser.Stack(s.name, s.raw_template.template, params)
+ ps = parser.Stack(s.name, s.raw_template.parsed_template.template, s.id, params)
mem = {}
mem['stack_id'] = s.id
mem['stack_name'] = s.name
if db_api.stack_get(None, stack_name):
return {'Error': 'Stack already exists with that name.'}
- stack = parser.Stack(stack_name, template, params)
+ stack = parser.Stack(stack_name, template, 0, params)
rt = {}
rt['template'] = template
rt['stack_name'] = stack_name
new_rt = db_api.raw_template_create(None, rt)
+
s = {}
s['name'] = stack_name
s['raw_template_id'] = new_rt.id
new_s = db_api.stack_create(None, s)
stack.id = new_s.id
+
+ pt = {}
+ pt['template'] = stack.t
+ pt['raw_template_id'] = new_rt.id
+ new_pt = db_api.parsed_template_create(None, pt)
+
+ new_s.parsed_template_id = new_pt.id
+
+ stack.parsed_template_id = new_pt.id
stack.create()
+
return {'stack': {'id': new_s.id, 'name': new_s.name,\
'created_at': str(new_s.created_at)}}
msg = _("No Template provided.")
return webob.exc.HTTPBadRequest(explanation=msg)
- s = parser.Stack('validate', body, req.params)
+ s = parser.Stack('validate', body, 0, req.params)
res = s.validate()
return res
logger.info('deleting stack %s' % stack_name)
- rt = db_api.raw_template_get(None, st.raw_template_id)
- ps = parser.Stack(st.name, rt.template, params)
+ ps = parser.Stack(st.name, st.raw_template.parsed_template.template, st.id, params)
ps.delete()
return None
class Stack(object):
- def __init__(self, stack_name, template, parms=None):
- self.id = 0
+ def __init__(self, stack_name, template, stack_id=0, parms=None):
+ self.id = stack_id
self.t = template
self.parms = self.t.get('Parameters', {})
self.maps = self.t.get('Mappings', {})
else:
self.creds = parms['KeyStoneCreds']
- stack = db_api.stack_get(None, stack_name)
- if stack:
- self.id = stack.id
-
self.resources = {}
for r in self.t['Resources']:
type = self.t['Resources'][r]['Type']
return order
+ def update_parsed_template(self):
+ '''
+ Update the parsed template after each resource has been
+ created, so commands like describe will work.
+ '''
+ if self.parsed_template_id == 0:
+ stack = db_api.stack_get(None, self.name)
+ if stack:
+ self.parsed_template_id = stack.parsed_template_id
+ else:
+ return
+
+ pt = db_api.parsed_template_get(None, self.parsed_template_id)
+ if pt:
+ pt.template = self.t
+ else:
+ print 'cant find parsed template to update %d' % self.parsed_template_id
+
+
def create_blocking(self):
'''
create all the resources in the order specified by get_create_order
logger.exception('create')
failed = True
self.resources[r].state_set(failed_str, str(ex))
+
+ try:
+ self.update_parsed_template()
+ except Exception as ex:
+ logger.exception('update_parsed_template')
+
else:
self.resources[r].state_set(self.resources[r].CREATE_FAILED)