From 235877bebc2a55f072d96395e79c6a45df9144c3 Mon Sep 17 00:00:00 2001 From: mathspanda Date: Thu, 27 Aug 2015 21:57:31 +0800 Subject: [PATCH] Sync bay status reason in periodic task In periodic task, when bay status is found to be different with corresponding stack, or the corresponding stack cannot be found in heat, status reason should be synced as well as status. Otherwise, status reason will be meaningless in some situation. Change-Id: I27d6a7ecb0c74bd4d4a2bb2bfcd81d7632cd2147 Closes-Bug: #1488709 --- magnum/service/periodic.py | 6 ++++++ magnum/tests/unit/service/test_periodic.py | 12 ++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/magnum/service/periodic.py b/magnum/service/periodic.py index 0206c39546..82fb57e8ef 100644 --- a/magnum/service/periodic.py +++ b/magnum/service/periodic.py @@ -23,6 +23,7 @@ from oslo_service import threadgroup from magnum.common import clients from magnum.common import context from magnum.common import exception +from magnum.i18n import _ from magnum.i18n import _LI from magnum.i18n import _LW from magnum import objects @@ -74,6 +75,7 @@ class MagnumPeriodicTasks(periodic_task.PeriodicTasks): if bay.status != stack.stack_status: old_status = bay.status bay.status = stack.stack_status + bay.status_reason = stack.stack_status_reason bay.save() LOG.info(_LI("Sync up bay with id %(id)s from " "%(old_status)s to %(status)s."), @@ -95,6 +97,8 @@ class MagnumPeriodicTasks(periodic_task.PeriodicTasks): {'id': bay.id, 'sid': sid}) elif bay.status == bay_status.CREATE_IN_PROGRESS: bay.status = bay_status.CREATE_FAILED + bay.status_reason = _("Stack with id %s not found in " + "Heat.") % sid bay.save() LOG.info(_LI("Bay with id %(id)s has been set to " "%(status)s due to stack with id %(sid)s " @@ -103,6 +107,8 @@ class MagnumPeriodicTasks(periodic_task.PeriodicTasks): 'sid': sid}) elif bay.status == bay_status.UPDATE_IN_PROGRESS: bay.status = bay_status.UPDATE_FAILED + bay.status_reason = _("Stack with id %s not found in " + "Heat.") % sid bay.save() LOG.info(_LI("Bay with id %(id)s has been set to " "%(status)s due to stack with id %(sid)s " diff --git a/magnum/tests/unit/service/test_periodic.py b/magnum/tests/unit/service/test_periodic.py index e319165a45..f2c773e764 100644 --- a/magnum/tests/unit/service/test_periodic.py +++ b/magnum/tests/unit/service/test_periodic.py @@ -67,8 +67,10 @@ class PeriodicTestCase(base.TestCase): def test_sync_bay_status_changes(self, mock_db_update, mock_db_destroy, mock_oscc, mock_bay_list): mock_heat_client = mock.MagicMock() - stack1 = fake_stack(id='11', stack_status=bay_status.CREATE_COMPLETE) - stack3 = fake_stack(id='33', stack_status=bay_status.UPDATE_COMPLETE) + stack1 = fake_stack(id='11', stack_status=bay_status.CREATE_COMPLETE, + stack_status_reason='fake_reason_11') + stack3 = fake_stack(id='33', stack_status=bay_status.UPDATE_COMPLETE, + stack_status_reason='fake_reason_33') mock_heat_client.stacks.list.return_value = [stack1, stack3] mock_osc = mock_oscc.return_value mock_osc.heat.return_value = mock_heat_client @@ -81,8 +83,10 @@ class PeriodicTestCase(base.TestCase): periodic.MagnumPeriodicTasks(CONF).sync_bay_status(None) self.assertEqual(self.bay1.status, bay_status.CREATE_COMPLETE) + self.assertEqual(self.bay1.status_reason, 'fake_reason_11') mock_db_destroy.assert_called_once_with(self.bay2.uuid) self.assertEqual(self.bay3.status, bay_status.UPDATE_COMPLETE) + self.assertEqual(self.bay3.status_reason, 'fake_reason_33') @mock.patch.object(objects.Bay, 'list_all') @mock.patch('magnum.common.clients.OpenStackClients') @@ -124,5 +128,9 @@ class PeriodicTestCase(base.TestCase): periodic.MagnumPeriodicTasks(CONF).sync_bay_status(None) self.assertEqual(self.bay1.status, bay_status.CREATE_FAILED) + self.assertEqual(self.bay1.status_reason, 'Stack with id 11 not ' + 'found in Heat.') mock_db_destroy.assert_called_once_with(self.bay2.uuid) self.assertEqual(self.bay3.status, bay_status.UPDATE_FAILED) + self.assertEqual(self.bay3.status_reason, 'Stack with id 33 not ' + 'found in Heat.')