From 43583b4a323e15b13e288b3a6f78500e442b7402 Mon Sep 17 00:00:00 2001 From: rabi Date: Fri, 12 Oct 2018 13:35:47 +0530 Subject: [PATCH] Delete db resources not in template When migrating stacks to convergence, if there are resources in the database that are not in the current_template_id of the stack, they are possibly of no isue, so it would better to delete those resources from db to avoid any future update issues. Change-Id: Ica99cec6765d22d7ee2262e2d402b2e98cb5bd5e Story: #2004071 Task: 27092 --- heat/engine/stack.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 65367097e3..e0bfe0becb 100644 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -2242,7 +2242,16 @@ class Stack(collections.Mapping): db_rsrcs = self.db_active_resources_get() if db_rsrcs is not None: for res in db_rsrcs.values(): - res.update_and_save(values=values) + # delete db resources not in current_template_id + try: + self.defn.resource_definition(res.name) + except KeyError: + LOG.warning("Resource %(res)s not found in template " + "for stack %(st)s, deleting from db.", + {'res': res.name, 'st': self.id}) + resource_objects.Resource.delete(self.context, res.id) + else: + res.update_and_save(values=values) self.set_resource_deps() self.current_traversal = uuidutils.generate_uuid() self.convergence = True