Merge "VMware: Apply policy at vmdk level during retype"

This commit is contained in:
Jenkins 2017-06-16 22:55:29 +00:00 committed by Gerrit Code Review
commit 8425b714cf
2 changed files with 48 additions and 28 deletions

View File

@ -1201,49 +1201,61 @@ class VolumeOpsTestCase(test.TestCase):
self.assertEqual(mock.sentinel.uuid, reconfig_spec.instanceUuid)
reconfigure_backing.assert_called_once_with(backing, reconfig_spec)
def test_change_backing_profile(self):
# Test change to empty profile.
@mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps.'
'_get_disk_device')
@mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps.'
'_reconfigure_backing')
def test_change_backing_profile_to_empty_profile(
self, reconfigure_backing, get_disk_device):
reconfig_spec = mock.Mock()
empty_profile_spec = mock.sentinel.empty_profile_spec
disk_spec = mock.Mock()
self.session.vim.client.factory.create.side_effect = [
reconfig_spec, empty_profile_spec]
empty_profile_spec, reconfig_spec, disk_spec]
task = mock.sentinel.task
self.session.invoke_api.return_value = task
disk_device = mock.sentinel.disk_device
get_disk_device.return_value = disk_device
backing = mock.sentinel.backing
unique_profile_id = mock.sentinel.unique_profile_id
profile_id = mock.Mock(uniqueId=unique_profile_id)
self.vops.change_backing_profile(backing, profile_id)
self.vops.change_backing_profile(backing, None)
self.assertEqual('profile', empty_profile_spec.dynamicType)
self.assertEqual([empty_profile_spec], reconfig_spec.vmProfile)
self.session.invoke_api.assert_called_once_with(self.session.vim,
"ReconfigVM_Task",
backing,
spec=reconfig_spec)
self.session.wait_for_task.assert_called_once_with(task)
get_disk_device.assert_called_once_with(backing)
self.assertEqual(disk_device, disk_spec.device)
self.assertEqual('edit', disk_spec.operation)
self.assertEqual([empty_profile_spec], disk_spec.profile)
self.assertEqual([disk_spec], reconfig_spec.deviceChange)
reconfigure_backing.assert_called_once_with(backing, reconfig_spec)
# Test change to non-empty profile.
@mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps.'
'_get_disk_device')
@mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps.'
'_reconfigure_backing')
def test_change_backing_profile(
self, reconfigure_backing, get_disk_device):
reconfig_spec = mock.Mock()
profile_spec = mock.Mock()
disk_spec = mock.Mock()
self.session.vim.client.factory.create.side_effect = [
reconfig_spec, profile_spec]
profile_spec, reconfig_spec, disk_spec]
self.session.invoke_api.reset_mock()
self.session.wait_for_task.reset_mock()
disk_device = mock.sentinel.disk_device
get_disk_device.return_value = disk_device
backing = mock.sentinel.backing
unique_id = mock.sentinel.unique_id
profile_id = mock.Mock(uniqueId=unique_id)
self.vops.change_backing_profile(backing, profile_id)
self.assertEqual(unique_id, profile_spec.profileId)
self.assertEqual([profile_spec], reconfig_spec.vmProfile)
self.assertEqual(unique_profile_id,
reconfig_spec.vmProfile[0].profileId)
self.session.invoke_api.assert_called_once_with(self.session.vim,
"ReconfigVM_Task",
backing,
spec=reconfig_spec)
self.session.wait_for_task.assert_called_once_with(task)
# Clear side effects.
self.session.vim.client.factory.create.side_effect = None
get_disk_device.assert_called_once_with(backing)
self.assertEqual(disk_device, disk_spec.device)
self.assertEqual('edit', disk_spec.operation)
self.assertEqual([profile_spec], disk_spec.profile)
self.assertEqual([disk_spec], reconfig_spec.deviceChange)
reconfigure_backing.assert_called_once_with(backing, reconfig_spec)
def test_delete_file(self):
file_mgr = mock.sentinel.file_manager

View File

@ -1217,7 +1217,6 @@ class VMwareVolumeOps(object):
{'backing': backing,
'profile': profile_id})
cf = self._session.vim.client.factory
reconfig_spec = cf.create('ns0:VirtualMachineConfigSpec')
if profile_id is None:
vm_profile = cf.create('ns0:VirtualMachineEmptyProfileSpec')
@ -1226,7 +1225,16 @@ class VMwareVolumeOps(object):
vm_profile = cf.create('ns0:VirtualMachineDefinedProfileSpec')
vm_profile.profileId = profile_id.uniqueId
reconfig_spec = cf.create('ns0:VirtualMachineConfigSpec')
reconfig_spec.vmProfile = [vm_profile]
disk_device = self._get_disk_device(backing)
disk_spec = cf.create('ns0:VirtualDeviceConfigSpec')
disk_spec.device = disk_device
disk_spec.operation = 'edit'
disk_spec.profile = [vm_profile]
reconfig_spec.deviceChange = [disk_spec]
self._reconfigure_backing(backing, reconfig_spec)
LOG.debug("Backing VM: %(backing)s reconfigured with new profile: "
"%(profile)s.",