record action log when deleting shelved instance
Closes-Bug: #1993736 Change-Id: I9ce18cbba5083c55d15d9b7c2a89133d227754ea
This commit is contained in:
parent
5ad1555a85
commit
c97507dfcd
@ -2547,6 +2547,8 @@ class API:
|
|||||||
instance=instance)
|
instance=instance)
|
||||||
with nova_context.target_cell(context, cell) as cctxt:
|
with nova_context.target_cell(context, cell) as cctxt:
|
||||||
self._local_delete(cctxt, instance, bdms, delete_type, cb)
|
self._local_delete(cctxt, instance, bdms, delete_type, cb)
|
||||||
|
self._record_action_start(context, instance,
|
||||||
|
instance_actions.DELETE)
|
||||||
|
|
||||||
except exception.InstanceNotFound:
|
except exception.InstanceNotFound:
|
||||||
# NOTE(comstud): Race condition. Instance already gone.
|
# NOTE(comstud): Race condition. Instance already gone.
|
||||||
|
@ -59,6 +59,15 @@ class InstanceActionsTestV221(InstanceActionsTestV21):
|
|||||||
self.assertEqual('delete', actions[0]['action'])
|
self.assertEqual('delete', actions[0]['action'])
|
||||||
self.assertEqual('create', actions[1]['action'])
|
self.assertEqual('create', actions[1]['action'])
|
||||||
|
|
||||||
|
def test_get_instance_actions_shelve_deleted(self):
|
||||||
|
server = self._create_server()
|
||||||
|
self._shelve_server(server)
|
||||||
|
self._delete_server(server)
|
||||||
|
actions = self.api.get_instance_actions(server['id'])
|
||||||
|
self.assertEqual('delete', actions[0]['action'])
|
||||||
|
self.assertEqual('shelve', actions[1]['action'])
|
||||||
|
self.assertEqual('create', actions[2]['action'])
|
||||||
|
|
||||||
|
|
||||||
class HypervisorError(Exception):
|
class HypervisorError(Exception):
|
||||||
"""This is just used to make sure the exception type is in the events."""
|
"""This is just used to make sure the exception type is in the events."""
|
||||||
|
@ -1254,10 +1254,12 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||||||
@mock.patch('nova.objects.Instance.save')
|
@mock.patch('nova.objects.Instance.save')
|
||||||
@mock.patch('nova.compute.utils.notify_about_instance_usage')
|
@mock.patch('nova.compute.utils.notify_about_instance_usage')
|
||||||
@mock.patch('nova.objects.Service.get_by_compute_host')
|
@mock.patch('nova.objects.Service.get_by_compute_host')
|
||||||
|
@mock.patch('nova.compute.api.API._record_action_start')
|
||||||
@mock.patch('nova.compute.api.API._local_delete')
|
@mock.patch('nova.compute.api.API._local_delete')
|
||||||
def test_delete_error_state_with_no_host(
|
def test_delete_error_state_with_no_host(
|
||||||
self, mock_local_delete, mock_service_get, _mock_notify,
|
self, mock_local_delete, mock_record, mock_service_get,
|
||||||
_mock_save, mock_bdm_get, mock_lookup, _mock_del_booting):
|
_mock_notify, _mock_save, mock_bdm_get, mock_lookup,
|
||||||
|
_mock_del_booting):
|
||||||
# Instance in error state with no host should be a local delete
|
# Instance in error state with no host should be a local delete
|
||||||
# for non API cells
|
# for non API cells
|
||||||
inst = self._create_instance_obj(params=dict(vm_state=vm_states.ERROR,
|
inst = self._create_instance_obj(params=dict(vm_state=vm_states.ERROR,
|
||||||
@ -1269,6 +1271,8 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||||||
mock_local_delete.assert_called_once_with(
|
mock_local_delete.assert_called_once_with(
|
||||||
self.context, inst, mock_bdm_get.return_value,
|
self.context, inst, mock_bdm_get.return_value,
|
||||||
'delete', self.compute_api._do_delete)
|
'delete', self.compute_api._do_delete)
|
||||||
|
mock_record.assert_called_once_with(self.context, inst,
|
||||||
|
instance_actions.DELETE)
|
||||||
mock_terminate.assert_not_called()
|
mock_terminate.assert_not_called()
|
||||||
mock_service_get.assert_not_called()
|
mock_service_get.assert_not_called()
|
||||||
|
|
||||||
@ -7905,8 +7909,9 @@ class ComputeAPIUnitTestCase(_ComputeAPIUnitTestMixIn, test.NoDBTestCase):
|
|||||||
@mock.patch.object(compute_utils, 'notify_about_instance_usage')
|
@mock.patch.object(compute_utils, 'notify_about_instance_usage')
|
||||||
@mock.patch.object(objects.BlockDeviceMapping, 'destroy')
|
@mock.patch.object(objects.BlockDeviceMapping, 'destroy')
|
||||||
@mock.patch.object(objects.Instance, 'destroy')
|
@mock.patch.object(objects.Instance, 'destroy')
|
||||||
|
@mock.patch('nova.compute.api.API._record_action_start')
|
||||||
def _test_delete_volume_backed_instance(
|
def _test_delete_volume_backed_instance(
|
||||||
self, vm_state, mock_instance_destroy, bdm_destroy,
|
self, vm_state, mock_record, mock_instance_destroy, bdm_destroy,
|
||||||
notify_about_instance_usage, mock_save, mock_elevated,
|
notify_about_instance_usage, mock_save, mock_elevated,
|
||||||
bdm_get_by_instance_uuid, mock_lookup, _mock_del_booting,
|
bdm_get_by_instance_uuid, mock_lookup, _mock_del_booting,
|
||||||
notify_about_instance_action):
|
notify_about_instance_action):
|
||||||
@ -7935,6 +7940,8 @@ class ComputeAPIUnitTestCase(_ComputeAPIUnitTestMixIn, test.NoDBTestCase):
|
|||||||
'detach') as mock_detach:
|
'detach') as mock_detach:
|
||||||
self.compute_api.delete(self.context, inst)
|
self.compute_api.delete(self.context, inst)
|
||||||
|
|
||||||
|
mock_record.assert_called_once_with(self.context, inst,
|
||||||
|
instance_actions.DELETE)
|
||||||
mock_deallocate.assert_called_once_with(self.context, inst)
|
mock_deallocate.assert_called_once_with(self.context, inst)
|
||||||
mock_detach.assert_called_once_with(self.context, volume_id,
|
mock_detach.assert_called_once_with(self.context, volume_id,
|
||||||
inst.uuid)
|
inst.uuid)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user