Merge "Create replacement resources with correct requires"
This commit is contained in:
commit
7206d88869
|
@ -134,11 +134,11 @@ class CheckResource(object):
|
||||||
self._handle_failure(cnxt, stack, failure_reason)
|
self._handle_failure(cnxt, stack, failure_reason)
|
||||||
|
|
||||||
def _handle_resource_replacement(self, cnxt,
|
def _handle_resource_replacement(self, cnxt,
|
||||||
current_traversal, new_tmpl_id,
|
current_traversal, new_tmpl_id, requires,
|
||||||
rsrc, stack, adopt_stack_data):
|
rsrc, stack, adopt_stack_data):
|
||||||
"""Create a replacement resource and trigger a check on it."""
|
"""Create a replacement resource and trigger a check on it."""
|
||||||
try:
|
try:
|
||||||
new_res_id = rsrc.make_replacement(new_tmpl_id)
|
new_res_id = rsrc.make_replacement(new_tmpl_id, requires)
|
||||||
except exception.UpdateInProgress:
|
except exception.UpdateInProgress:
|
||||||
LOG.info("No replacement created - "
|
LOG.info("No replacement created - "
|
||||||
"resource already locked by new traversal")
|
"resource already locked by new traversal")
|
||||||
|
@ -170,7 +170,7 @@ class CheckResource(object):
|
||||||
stack, self.msg_queue)
|
stack, self.msg_queue)
|
||||||
except resource.UpdateReplace:
|
except resource.UpdateReplace:
|
||||||
self._handle_resource_replacement(cnxt, current_traversal,
|
self._handle_resource_replacement(cnxt, current_traversal,
|
||||||
tmpl.id,
|
tmpl.id, requires,
|
||||||
rsrc, stack,
|
rsrc, stack,
|
||||||
adopt_stack_data)
|
adopt_stack_data)
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -378,7 +378,7 @@ class Resource(status.ResourceStatus):
|
||||||
curr_stack.defn = latest_stk_defn
|
curr_stack.defn = latest_stk_defn
|
||||||
return resource, initial_stk_defn, curr_stack
|
return resource, initial_stk_defn, curr_stack
|
||||||
|
|
||||||
def make_replacement(self, new_tmpl_id):
|
def make_replacement(self, new_tmpl_id, requires):
|
||||||
"""Create a replacement resource in the database.
|
"""Create a replacement resource in the database.
|
||||||
|
|
||||||
Returns the DB ID of the new resource, or None if the new resource
|
Returns the DB ID of the new resource, or None if the new resource
|
||||||
|
@ -392,7 +392,7 @@ class Resource(status.ResourceStatus):
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'rsrc_prop_data_id': None,
|
'rsrc_prop_data_id': None,
|
||||||
'needed_by': self.needed_by,
|
'needed_by': self.needed_by,
|
||||||
'requires': self.requires,
|
'requires': list(requires),
|
||||||
'replaces': self.id,
|
'replaces': self.id,
|
||||||
'action': self.INIT,
|
'action': self.INIT,
|
||||||
'status': self.COMPLETE,
|
'status': self.COMPLETE,
|
||||||
|
|
|
@ -368,7 +368,8 @@ class CheckWorkflowUpdateTest(common.HeatTestCase):
|
||||||
# lets say C is update-replaced
|
# lets say C is update-replaced
|
||||||
is_update = True
|
is_update = True
|
||||||
trav_id = self.stack.current_traversal
|
trav_id = self.stack.current_traversal
|
||||||
replacementC_id = resC.make_replacement(self.stack.t.id)
|
replacementC_id = resC.make_replacement(self.stack.t.id,
|
||||||
|
set(resC.requires))
|
||||||
replacementC, stack, _ = resource.Resource.load(self.ctx,
|
replacementC, stack, _ = resource.Resource.load(self.ctx,
|
||||||
replacementC_id,
|
replacementC_id,
|
||||||
trav_id,
|
trav_id,
|
||||||
|
|
|
@ -712,13 +712,15 @@ class ResourceTest(common.HeatTestCase):
|
||||||
res.store()
|
res.store()
|
||||||
new_tmpl_id = 2
|
new_tmpl_id = 2
|
||||||
self.assertIsNotNone(res.id)
|
self.assertIsNotNone(res.id)
|
||||||
new_id = res.make_replacement(new_tmpl_id)
|
new_requires = {1, 2, 4}
|
||||||
|
new_id = res.make_replacement(new_tmpl_id, new_requires)
|
||||||
new_res = resource_objects.Resource.get_obj(res.context, new_id)
|
new_res = resource_objects.Resource.get_obj(res.context, new_id)
|
||||||
|
|
||||||
self.assertEqual(new_id, res.replaced_by)
|
self.assertEqual(new_id, res.replaced_by)
|
||||||
self.assertEqual(res.id, new_res.replaces)
|
self.assertEqual(res.id, new_res.replaces)
|
||||||
self.assertIsNone(new_res.physical_resource_id)
|
self.assertIsNone(new_res.physical_resource_id)
|
||||||
self.assertEqual(new_tmpl_id, new_res.current_template_id)
|
self.assertEqual(new_tmpl_id, new_res.current_template_id)
|
||||||
|
self.assertItemsEqual(list(new_requires), new_res.requires)
|
||||||
|
|
||||||
def test_metadata_default(self):
|
def test_metadata_default(self):
|
||||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||||
|
|
Loading…
Reference in New Issue