vmware: Use oslo.vmware's get_moref_value()

With switching the SOAP library backing oslo.vmware [1], the internal
representation of ManagedObjectReference's attributes changes. To be able
to make the switch without interruption, we introduced helper functions
in oslo.vmware. This commit uses one of those - get_moref_value()
- to make the access to the "value" attribute compatible with both
backing libraries.

Bump oslo.vmware lower-constraint to a version containing the helper
function. We bump one version higher, because we already merged a patch
(I3c769d3499f906b33725171a57313c8ae35b6a1d) that uses the cookiejar
access contained in that version.

[1] https://specs.openstack.org/openstack/oslo-specs/specs/victoria/oslo-vmware-soap-library-switch.html

Change-Id: I48841a777aaa2e515c141857099c16483ab619e0
This commit is contained in:
Johannes Kulik 2021-04-16 12:45:40 +02:00
parent cf4b152b6b
commit 0997ad15fc
8 changed files with 24 additions and 17 deletions

View File

@ -85,7 +85,7 @@ oslo.service==2.5.0
oslo.upgradecheck==1.3.0
oslo.utils==4.8.0
oslo.versionedobjects==1.35.0
oslo.vmware==2.17.0
oslo.vmware==3.6.0
oslotest==3.8.0
osprofiler==1.4.0
ovs==2.10.0

View File

@ -136,7 +136,8 @@ class VMwareVCDriver(driver.ComputeDriver):
"found in vCenter")
% self._cluster_name)
self._vcenter_uuid = self._get_vcenter_uuid()
self._nodename = self._create_nodename(self._cluster_ref.value)
self._nodename = \
self._create_nodename(vim_util.get_moref_value(self._cluster_ref))
self._volumeops = volumeops.VMwareVolumeOps(self._session,
self._cluster_ref)
self._vmops = vmops.VMwareVMOps(self._session,

View File

@ -470,7 +470,7 @@ def _update_datacenter_cache_from_objects(session, dcs):
if datastore_refs:
datastore_refs = datastore_refs.ManagedObjectReference
for ds in datastore_refs:
ds_refs.append(ds.value)
ds_refs.append(vutil.get_moref_value(ds))
else:
LOG.debug("Datacenter %s doesn't have any datastore "
"associated with it, ignoring it", name)
@ -481,12 +481,12 @@ def _update_datacenter_cache_from_objects(session, dcs):
def get_dc_info(session, ds_ref):
"""Get the datacenter name and the reference."""
dc_info = _DS_DC_MAPPING.get(ds_ref.value)
dc_info = _DS_DC_MAPPING.get(vutil.get_moref_value(ds_ref))
if not dc_info:
dcs = session._call_method(vim_util, "get_objects",
"Datacenter", ["name", "datastore", "vmFolder"])
_update_datacenter_cache_from_objects(session, dcs)
dc_info = _DS_DC_MAPPING.get(ds_ref.value)
dc_info = _DS_DC_MAPPING.get(vutil.get_moref_value(ds_ref))
return dc_info
@ -509,6 +509,6 @@ def get_connected_hosts(session, datastore):
connected_hosts = []
for host_mount in host_mounts.DatastoreHostMount:
connected_hosts.append(host_mount.key.value)
connected_hosts.append(vutil.get_moref_value(host_mount.key))
return connected_hosts

View File

@ -116,12 +116,12 @@ class ImageCacheManager(imagecache.ImageCacheManager):
return timeutils.parse_strtime(ts, fmt=TIMESTAMP_FORMAT)
def _get_ds_browser(self, ds_ref):
ds_browser = self._ds_browser.get(ds_ref.value)
ds_browser = self._ds_browser.get(vutil.get_moref_value(ds_ref))
if not ds_browser:
ds_browser = vutil.get_object_property(self._session.vim,
ds_ref,
"browser")
self._ds_browser[ds_ref.value] = ds_browser
self._ds_browser[vutil.get_moref_value(ds_ref)] = ds_browser
return ds_browser
def _list_datastore_images(self, ds_path, datastore):

View File

@ -1623,15 +1623,18 @@ def create_folder(session, parent_folder_ref, name):
"""
LOG.debug("Creating folder: %(name)s. Parent ref: %(parent)s.",
{'name': name, 'parent': parent_folder_ref.value})
{'name': name,
'parent': vutil.get_moref_value(parent_folder_ref)})
try:
folder = session._call_method(session.vim, "CreateFolder",
parent_folder_ref, name=name)
LOG.info("Created folder: %(name)s in parent %(parent)s.",
{'name': name, 'parent': parent_folder_ref.value})
{'name': name,
'parent': vutil.get_moref_value(parent_folder_ref)})
except vexc.DuplicateName as e:
LOG.debug("Folder already exists: %(name)s. Parent ref: %(parent)s.",
{'name': name, 'parent': parent_folder_ref.value})
{'name': name,
'parent': vutil.get_moref_value(parent_folder_ref)})
val = e.details['object']
folder = vutil.get_moref(val, 'Folder')
return folder

View File

@ -1583,8 +1583,9 @@ class VMwareVMOps(object):
ds_hosts = self._session._call_method(vutil, 'get_object_property',
ds_ref, 'host')
for ds_host in ds_hosts.DatastoreHostMount:
ds_host_ref_value = vutil.get_moref_value(ds_host.key)
for cluster_host in cluster_hosts.ManagedObjectReference:
if ds_host.key.value == cluster_host.value:
if ds_host_ref_value == vutil.get_moref_value(cluster_host):
return cluster_host
def _find_datastore_for_migration(self, instance, vm_ref, cluster_ref,
@ -1604,8 +1605,9 @@ class VMwareVMOps(object):
return None
# check if the current datastore is connected to the destination
# cluster
ds_ref_value = vutil.get_moref_value(ds_ref)
for datastore in cluster_datastores.ManagedObjectReference:
if datastore.value == ds_ref.value:
if vutil.get_moref_value(datastore) == ds_ref_value:
ds = ds_obj.get_datastore_by_ref(self._session, ds_ref)
if (datastore_regex is None or
datastore_regex.match(ds.name)):
@ -1819,13 +1821,14 @@ class VMwareVMOps(object):
instance=instance)
def _get_ds_browser(self, ds_ref):
ds_browser = self._datastore_browser_mapping.get(ds_ref.value)
ds_ref_value = vutil.get_moref_value(ds_ref)
ds_browser = self._datastore_browser_mapping.get(ds_ref_value)
if not ds_browser:
ds_browser = self._session._call_method(vutil,
"get_object_property",
ds_ref,
"browser")
self._datastore_browser_mapping[ds_ref.value] = ds_browser
self._datastore_browser_mapping[ds_ref_value] = ds_browser
return ds_browser
def _create_folder_if_missing(self, ds_name, ds_ref, folder):

View File

@ -300,7 +300,7 @@ class VMwareVolumeOps(object):
'initiator': iqn,
'host': CONF.vmware.host_ip}
if vm_ref:
connector['instance'] = vm_ref.value
connector['instance'] = vutil.get_moref_value(vm_ref)
return connector
def _get_volume_ref(self, volume_ref_name):

View File

@ -24,4 +24,4 @@ gabbi>=1.35.0 # Apache-2.0
wsgi-intercept>=1.7.0 # MIT License
# vmwareapi driver specific dependencies
oslo.vmware>=2.17.0 # Apache-2.0
oslo.vmware>=3.6.0 # Apache-2.0