Merge "ironic: Log an error when API version is not available"

This commit is contained in:
Zuul 2018-07-15 07:49:44 +00:00 committed by Gerrit Code Review
commit cb0bf8a5e1
2 changed files with 49 additions and 0 deletions

View File

@ -2875,6 +2875,25 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
self.driver.rescue,
self.ctx, instance, None, None, 'xyz')
@mock.patch.object(ironic_driver.IronicDriver, '_can_send_version')
@mock.patch.object(ironic_driver, 'LOG', autospec=True)
def test_rescue_api_unavailable(self, mock_log, mock_csv):
node = ironic_utils.get_test_node()
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
mock_csv.side_effect = exception.IronicAPIVersionNotAvailable(
version='1.38')
def _fake_log_error(msg, *args, **kwargs):
regex = r'Required Ironic API version.*for rescuing.'
self.assertThat(msg, matchers.MatchesRegex(regex))
mock_log.error.side_effect = _fake_log_error
self.assertRaises(exception.InstanceRescueFailure,
self.driver.rescue,
self.ctx, instance, None, None, 'xyz')
self.assertTrue(mock_log.error.called)
@mock.patch.object(loopingcall, 'FixedIntervalLoopingCall')
@mock.patch.object(FAKE_CLIENT.node, 'set_provision_state')
def test_unrescue(self, mock_sps, mock_looping):
@ -2933,6 +2952,26 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
self.driver.unrescue,
instance, None)
@mock.patch.object(ironic_driver.IronicDriver, '_can_send_version')
@mock.patch.object(ironic_driver, 'LOG', autospec=True)
def test_unrescue_api_unavailable(self, mock_log, mock_csv):
node = ironic_utils.get_test_node()
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
mock_csv.side_effect = exception.IronicAPIVersionNotAvailable(
version='1.38')
def _fake_log_error(msg, *args, **kwargs):
regex = r'Required Ironic API version.*for unrescuing.'
self.assertThat(msg, matchers.MatchesRegex(regex))
mock_log.error.side_effect = _fake_log_error
self.assertRaises(exception.InstanceUnRescueFailure,
self.driver.unrescue,
instance, None)
self.assertTrue(mock_log.error.called)
def test__can_send_version(self):
self.assertIsNone(
self.driver._can_send_version(

View File

@ -2018,6 +2018,11 @@ class IronicDriver(virt_driver.ComputeDriver):
self.ironicclient.call("node.set_provision_state",
node_uuid, ironic_states.RESCUE,
rescue_password=rescue_password)
except exception.IronicAPIVersionNotAvailable as e:
LOG.error('Required Ironic API version %(version)s is not '
'available for rescuing.',
version='1.38', instance=instance)
raise exception.InstanceRescueFailure(reason=six.text_type(e))
except Exception as e:
raise exception.InstanceRescueFailure(reason=six.text_type(e))
@ -2056,6 +2061,11 @@ class IronicDriver(virt_driver.ComputeDriver):
self._can_send_version(min_version='1.38')
self.ironicclient.call("node.set_provision_state",
node_uuid, ironic_states.UNRESCUE)
except exception.IronicAPIVersionNotAvailable as e:
LOG.error('Required Ironic API version %(version)s is not '
'available for unrescuing.',
version='1.38', instance=instance)
raise exception.InstanceUnRescueFailure(reason=six.text_type(e))
except Exception as e:
raise exception.InstanceUnRescueFailure(reason=six.text_type(e))