summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Kulik <johannes.kulik@sap.com>2021-04-16 12:45:40 +0200
committerJohannes Kulik <johannes.kulik@sap.com>2021-04-19 11:35:54 +0200
commit0997ad15fcaff33443d31d1dc26516b3aed8a802 (patch)
tree648e5257178ee20b587dfbf1f87d1c5f492ea3e0
parentcf4b152b6b9ec137b49d903aa0f4ccc821a087cc (diff)
downloadnova-0997ad15fcaff33443d31d1dc26516b3aed8a802.tar.gz
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
-rw-r--r--lower-constraints.txt2
-rw-r--r--nova/virt/vmwareapi/driver.py3
-rw-r--r--nova/virt/vmwareapi/ds_util.py8
-rw-r--r--nova/virt/vmwareapi/imagecache.py4
-rw-r--r--nova/virt/vmwareapi/vm_util.py9
-rw-r--r--nova/virt/vmwareapi/vmops.py11
-rw-r--r--nova/virt/vmwareapi/volumeops.py2
-rw-r--r--test-requirements.txt2
8 files changed, 24 insertions, 17 deletions
diff --git a/lower-constraints.txt b/lower-constraints.txt
index 4b376a433a..4bcb6015ec 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -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
diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py
index 36671d66de..6f2451150f 100644
--- a/nova/virt/vmwareapi/driver.py
+++ b/nova/virt/vmwareapi/driver.py
@@ -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,
diff --git a/nova/virt/vmwareapi/ds_util.py b/nova/virt/vmwareapi/ds_util.py
index dd52e36272..35b5f8bfb3 100644
--- a/nova/virt/vmwareapi/ds_util.py
+++ b/nova/virt/vmwareapi/ds_util.py
@@ -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
diff --git a/nova/virt/vmwareapi/imagecache.py b/nova/virt/vmwareapi/imagecache.py
index 8345f0ad6e..01a39bfe0c 100644
--- a/nova/virt/vmwareapi/imagecache.py
+++ b/nova/virt/vmwareapi/imagecache.py
@@ -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):
diff --git a/nova/virt/vmwareapi/vm_util.py b/nova/virt/vmwareapi/vm_util.py
index 1baed66197..2deb9a6c0c 100644
--- a/nova/virt/vmwareapi/vm_util.py
+++ b/nova/virt/vmwareapi/vm_util.py
@@ -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
diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py
index c1c9d4421d..02ba1371d8 100644
--- a/nova/virt/vmwareapi/vmops.py
+++ b/nova/virt/vmwareapi/vmops.py
@@ -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):
diff --git a/nova/virt/vmwareapi/volumeops.py b/nova/virt/vmwareapi/volumeops.py
index eddb7b8705..9accc840de 100644
--- a/nova/virt/vmwareapi/volumeops.py
+++ b/nova/virt/vmwareapi/volumeops.py
@@ -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):
diff --git a/test-requirements.txt b/test-requirements.txt
index 9f695c6124..d1a2ecbe2e 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -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