diff --git a/heat/engine/manager.py b/heat/engine/manager.py index e8e7a1f10c..59276afe75 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -509,8 +509,7 @@ class EngineManager(manager.Manager): # There's probably an idiomatic way I'm missing right now. t = deepcopy(pt.template) t['Resources'][resource_id]['Metadata'] = metadata - pt.template = t - pt.save() + pt.update_and_save({'template': t}) return [None, metadata] @manager.periodic_task diff --git a/heat/engine/parser.py b/heat/engine/parser.py index ef44731f4e..2ae68a5548 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -147,19 +147,27 @@ class Stack(object): response['ValidateTemplateResult']['Parameters'].append(res) return response + def parsed_template_get(self): + stack = None + if self.parsed_template_id == 0: + if self.id == 0: + stack = db_api.stack_get(self.context, self.id) + else: + stack = db_api.stack_get_by_name(self.context, self.name) + + if stack is None: + return None + + self.parsed_template_id = stack.raw_template.parsed_template.id + return db_api.parsed_template_get(self.context, + self.parsed_template_id) + 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(self.context, self.id) - if stack: - self.parsed_template_id = stack.raw_template.parsed_template.id - else: - return - - pt = db_api.parsed_template_get(self.context, self.parsed_template_id) + pt = self.parsed_template_get() if pt: template = self.t.copy() template['Resources'] = dict((k, r.parsed_template()) diff --git a/heat/engine/wait_condition.py b/heat/engine/wait_condition.py index 67d9ad1f9c..8d2fa05d6c 100644 --- a/heat/engine/wait_condition.py +++ b/heat/engine/wait_condition.py @@ -78,16 +78,14 @@ class WaitCondition(Resource): try: while status == 'WAITING': pt = None - if self.stack.parsed_template_id: - try: - pt = db_api.parsed_template_get(self.stack.context, - self.stack.parsed_template_id) - except Exception as ex: - if 'not found' in ex: - # it has been deleted - status = 'DELETED' - else: - pass + try: + pt = self.stack.parsed_template_get() + except Exception as ex: + if 'not found' in ex: + # it has been deleted + status = 'DELETED' + else: + pass if pt: res = pt.template['Resources'][self.resource_id]