diff --git a/nova/tests/unit/virt/xenapi/test_vmops.py b/nova/tests/unit/virt/xenapi/test_vmops.py index 624a6fcf9cec..a4777cc8a4f8 100644 --- a/nova/tests/unit/virt/xenapi/test_vmops.py +++ b/nova/tests/unit/virt/xenapi/test_vmops.py @@ -2100,8 +2100,10 @@ class AttachInterfaceTestCase(VMOpsTestBase): self.vmops.vif_driver.unplug.assert_called_once_with( self.fake_instance, self.fake_vif, 'fake_vm_ref') + @mock.patch('nova.virt.xenapi.vmops.LOG.exception') @mock.patch.object(vmops.VMOps, '_get_vm_opaque_ref') - def test_detach_interface_exception(self, mock_get_vm_opaque_ref): + def test_detach_interface_exception(self, mock_get_vm_opaque_ref, + mock_log_exception): mock_get_vm_opaque_ref.return_value = 'fake_vm_ref' self.vmops.vif_driver.unplug.side_effect =\ exception.VirtualInterfaceUnplugException('Failed to unplug VIF') @@ -2109,3 +2111,15 @@ class AttachInterfaceTestCase(VMOpsTestBase): self.assertRaises(exception.VirtualInterfaceUnplugException, self.vmops.detach_interface, self.fake_instance, self.fake_vif) + mock_log_exception.assert_called() + + @mock.patch('nova.virt.xenapi.vmops.LOG.exception', + new_callable=mock.NonCallableMock) + @mock.patch.object(vmops.VMOps, '_get_vm_opaque_ref', + side_effect=exception.InstanceNotFound( + instance_id='fake_vm_ref')) + def test_detach_interface_instance_not_found( + self, mock_get_vm_opaque_ref, mock_log_exception): + self.assertRaises(exception.InstanceNotFound, + self.vmops.detach_interface, + self.fake_instance, self.fake_vif) diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index 3d0a4e9af6bd..41fc6584cb42 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -2695,6 +2695,10 @@ class VMOps(object): try: vm_ref = self._get_vm_opaque_ref(instance) self.vif_driver.unplug(instance, vif, vm_ref) + except exception.InstanceNotFound: + # Let this go up to the compute manager which will log a message + # for it. + raise except exception.NovaException: with excutils.save_and_reraise_exception(): LOG.exception(_('detach network interface %s failed.'),