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.')