Merge "VMware: Honor vmware_cluster_name during retype"

This commit is contained in:
Jenkins 2016-07-14 03:50:28 +00:00 committed by Gerrit Code Review
commit d172a170a4
2 changed files with 25 additions and 14 deletions

View File

@ -924,9 +924,11 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
@mock.patch.object(VMDK_DRIVER, '_get_storage_profile')
@mock.patch.object(VMDK_DRIVER, '_get_extra_spec_storage_profile')
@mock.patch.object(VMDK_DRIVER, 'ds_sel')
@mock.patch.object(VMDK_DRIVER, '_select_datastore')
def test_retype_with_diff_profile_and_ds_compliance(
self, ds_sel, get_extra_spec_storage_profile, get_storage_profile,
get_extra_spec_disk_type, get_disk_type, vops, in_use):
self, select_datastore, ds_sel, get_extra_spec_storage_profile,
get_storage_profile, get_extra_spec_disk_type, get_disk_type,
vops, in_use):
backing = mock.sentinel.backing
vops.get_backing.return_value = backing
@ -957,7 +959,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
host))
ds_sel.is_datastore_compliant.assert_called_once_with(datastore,
new_profile)
self.assertFalse(ds_sel.select_datastore.called)
select_datastore.assert_not_called()
vops.change_backing_profile.assert_called_once_with(backing,
new_profile_id)
@ -970,9 +972,11 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
@mock.patch.object(VMDK_DRIVER, '_get_storage_profile')
@mock.patch.object(VMDK_DRIVER, '_get_extra_spec_storage_profile')
@mock.patch.object(VMDK_DRIVER, 'ds_sel')
@mock.patch.object(VMDK_DRIVER, '_select_datastore')
def test_retype_with_diff_profile_and_ds_sel_no_candidate(
self, ds_sel, get_extra_spec_storage_profile, get_storage_profile,
get_extra_spec_disk_type, get_disk_type, vops, in_use):
self, select_datastore, ds_sel, get_extra_spec_storage_profile,
get_storage_profile, get_extra_spec_disk_type, get_disk_type,
vops, in_use):
backing = mock.sentinel.backing
vops.get_backing.return_value = backing
@ -992,7 +996,8 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
get_extra_spec_storage_profile.return_value = new_profile
ds_sel.is_datastore_compliant.return_value = False
ds_sel.select_datastore.return_value = ()
select_datastore.side_effect = (
vmdk_exceptions.NoValidDatastoreException)
context = mock.sentinel.context
volume = self._create_volume_dict(status='retyping')
@ -1003,7 +1008,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
host))
ds_sel.is_datastore_compliant.assert_called_once_with(datastore,
new_profile)
ds_sel.select_datastore.assert_called_once_with(
select_datastore.assert_called_once_with(
{hub.DatastoreSelector.SIZE_BYTES: volume['size'] * units.Gi,
hub.DatastoreSelector.PROFILE_NAME: new_profile})
@ -1016,10 +1021,12 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
@mock.patch.object(VMDK_DRIVER, '_get_storage_profile')
@mock.patch.object(VMDK_DRIVER, '_get_extra_spec_storage_profile')
@mock.patch.object(VMDK_DRIVER, 'ds_sel')
@mock.patch.object(VMDK_DRIVER, '_select_datastore')
@mock.patch.object(VMDK_DRIVER, '_get_volume_group_folder')
def test_retype_with_diff_extra_spec_and_vol_snapshot(
self,
get_volume_group_folder,
select_datastore,
ds_sel, get_extra_spec_storage_profile,
get_storage_profile,
get_extra_spec_disk_type,
@ -1049,7 +1056,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
rp = mock.sentinel.rp
new_datastore = mock.Mock(value='ds2')
summary = mock.Mock(datastore=new_datastore)
ds_sel.select_datastore.return_value = (host, rp, summary)
select_datastore.return_value = (host, rp, summary)
folder = mock.sentinel.folder
get_volume_group_folder.return_value = folder
@ -1066,7 +1073,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
host))
ds_sel.is_datastore_compliant.assert_called_once_with(datastore,
new_profile)
ds_sel.select_datastore.assert_called_once_with(
select_datastore.assert_called_once_with(
{hub.DatastoreSelector.SIZE_BYTES: volume['size'] * units.Gi,
hub.DatastoreSelector.HARD_ANTI_AFFINITY_DS: ['ds1'],
hub.DatastoreSelector.PROFILE_NAME: new_profile})
@ -1085,6 +1092,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
@mock.patch.object(VMDK_DRIVER, '_get_storage_profile')
@mock.patch.object(VMDK_DRIVER, '_get_extra_spec_storage_profile')
@mock.patch.object(VMDK_DRIVER, 'ds_sel')
@mock.patch.object(VMDK_DRIVER, '_select_datastore')
@mock.patch.object(VMDK_DRIVER, '_get_volume_group_folder')
@mock.patch('oslo_utils.uuidutils.generate_uuid')
@mock.patch.object(VMDK_DRIVER, '_delete_temp_backing')
@ -1093,7 +1101,9 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
delete_temp_backing,
generate_uuid,
get_volume_group_folder,
ds_sel, get_extra_spec_storage_profile,
select_datastore,
ds_sel,
get_extra_spec_storage_profile,
get_storage_profile,
get_extra_spec_disk_type,
get_disk_type,
@ -1122,7 +1132,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
host = mock.sentinel.host
rp = mock.sentinel.rp
summary = mock.Mock(datastore=datastore)
ds_sel.select_datastore.return_value = (host, rp, summary)
select_datastore.return_value = (host, rp, summary)
folder = mock.sentinel.folder
get_volume_group_folder.return_value = folder
@ -1152,7 +1162,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
diff, host))
ds_sel.is_datastore_compliant.assert_called_once_with(datastore,
new_profile)
ds_sel.select_datastore.assert_called_once_with(
select_datastore.assert_called_once_with(
{hub.DatastoreSelector.SIZE_BYTES: volume['size'] * units.Gi,
hub.DatastoreSelector.PROFILE_NAME: new_profile})
vops.clone_backing.assert_called_once_with(

View File

@ -1297,8 +1297,9 @@ class VMwareVcVmdkDriver(driver.VolumeDriver):
req[hub.DatastoreSelector.PROFILE_NAME] = new_profile
# Select datastore satisfying the requirements.
best_candidate = self.ds_sel.select_datastore(req)
if not best_candidate:
try:
best_candidate = self._select_datastore(req)
except vmdk_exceptions.NoValidDatastoreException:
# No candidate datastores; can't retype.
LOG.warning(_LW("There are no datastores matching new "
"requirements; can't retype volume: %s."),