Merge "Replace always if resource is in CHECK_FAILED"

This commit is contained in:
Jenkins 2017-01-06 02:18:49 +00:00 committed by Gerrit Code Review
commit 947eaac03f
2 changed files with 17 additions and 2 deletions

View File

@ -1080,8 +1080,10 @@ class Resource(object):
def _needs_update(self, after, before, after_props, before_props,
prev_resource, check_init_complete=True):
if self.status == self.FAILED and self.needs_replace_failed():
raise UpdateReplace(self)
if self.status == self.FAILED:
# always replace when a resource is in CHECK_FAILED
if self.action == self.CHECK or self.needs_replace_failed():
raise UpdateReplace(self)
if (self.stack.convergence and
self.state == (self.DELETE, self.COMPLETE)):

View File

@ -462,10 +462,23 @@ class ResourceTest(common.HeatTestCase):
def test_update_replace(self):
res, utmpl = self._setup_resource_for_update(
res_name='test_update_replace')
self.assertEqual((res.INIT, res.COMPLETE), res.state)
res.prepare_for_replace = mock.Mock()
# resource replaced if in INIT_COMPLETE
self.assertRaises(
resource.UpdateReplace, scheduler.TaskRunner(res.update, utmpl))
self.assertTrue(res.prepare_for_replace.called)
def test_update_replace_in_check_failed(self):
res, utmpl = self._setup_resource_for_update(
res_name='test_update_replace')
res.state_set(res.CHECK, res.FAILED)
res.prepare_for_replace = mock.Mock()
res.needs_replace_failed = mock.MagicMock(return_value=False)
self.assertRaises(
resource.UpdateReplace, scheduler.TaskRunner(res.update, utmpl))
self.assertFalse(res.needs_replace_failed.called)
self.assertTrue(res.prepare_for_replace.called)
def test_update_replace_prepare_replace_error(self):