From ad4a26e1843bc4cefa2c5b4bb093d692cddfaa49 Mon Sep 17 00:00:00 2001 From: Claudiu Belu Date: Wed, 28 Mar 2018 01:36:24 -0700 Subject: [PATCH] vmware: Fixes _detach_instance_volumes method The _detach_instance_volumes method calls self.detach_volume with an invalid number of arguments (context missing), causing it to fail. This patch solves the issue. Change-Id: Ibb6afa883c4ed55ea544a1e9d247dab4fc657cd2 Closes-Bug: #1759609 --- nova/tests/unit/virt/vmwareapi/test_driver_api.py | 15 ++++++++------- nova/virt/vmwareapi/driver.py | 6 +++++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/nova/tests/unit/virt/vmwareapi/test_driver_api.py b/nova/tests/unit/virt/vmwareapi/test_driver_api.py index aa5eb7ad94a1..cf4749575ccc 100644 --- a/nova/tests/unit/virt/vmwareapi/test_driver_api.py +++ b/nova/tests/unit/virt/vmwareapi/test_driver_api.py @@ -674,7 +674,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase, block_device_info=bdi) mock_power_off.assert_called_once_with(self.instance) mock_detach_volume.assert_called_once_with( - connection_info, self.instance, 'fake-name') + None, connection_info, self.instance, 'fake-name') mock_destroy.assert_called_once_with(self.instance, True) @mock.patch.object(vmops.VMwareVMOps, 'power_off', @@ -712,7 +712,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase, self.conn.destroy, self.context, self.instance, self.network_info, block_device_info=bdi) mock_detach_volume.assert_called_once_with( - connection_info, self.instance, 'fake-name') + None, connection_info, self.instance, 'fake-name') self.assertFalse(mock_destroy.called) @mock.patch.object(driver.VMwareVCDriver, 'detach_volume', @@ -730,7 +730,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase, self.conn.destroy(self.context, self.instance, self.network_info, block_device_info=bdi) mock_detach_volume.assert_called_once_with( - connection_info, self.instance, 'fake-name') + None, connection_info, self.instance, 'fake-name') self.assertTrue(mock_destroy.called) mock_destroy.assert_called_once_with(self.instance, True) @@ -1496,10 +1496,11 @@ class VMwareAPIVMTestCase(test.NoDBTestCase, block_device_info_get_mapping.assert_called_once_with( block_device_info) vmops.power_off.assert_called_once_with(self.instance) - exp_detach_calls = [mock.call(mock.sentinel.connection_info_1, - self.instance, 'dev1'), - mock.call(mock.sentinel.connection_info_2, - self.instance, 'dev2')] + exp_detach_calls = [ + mock.call(None, mock.sentinel.connection_info_1, + self.instance, 'dev1'), + mock.call(None, mock.sentinel.connection_info_2, + self.instance, 'dev2')] self.assertEqual(exp_detach_calls, detach_volume.call_args_list) def test_destroy(self): diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py index f6c4d5336baa..d8f3854c86cd 100644 --- a/nova/virt/vmwareapi/driver.py +++ b/nova/virt/vmwareapi/driver.py @@ -404,6 +404,8 @@ class VMwareVCDriver(driver.ComputeDriver): def detach_volume(self, context, connection_info, instance, mountpoint, encryption=None): """Detach volume storage to VM instance.""" + # NOTE(claudiub): if context parameter is to be used in the future, + # the _detach_instance_volumes method will have to be updated as well. return self._volumeops.detach_volume(connection_info, instance) def get_volume_connector(self, instance): @@ -435,7 +437,9 @@ class VMwareVCDriver(driver.ComputeDriver): for disk in block_device_mapping: connection_info = disk['connection_info'] try: - self.detach_volume(connection_info, instance, + # NOTE(claudiub): Passing None as the context, as it is + # not currently used. + self.detach_volume(None, connection_info, instance, disk.get('device_name')) except exception.DiskNotFound: LOG.warning('The volume %s does not exist!',