vmware: Handle empty list attributes on vSphere objects

We want to switch the SOAP library backing oslo.vmware [1] and the new
library differs in how empty lists are returned. The old library SUDS
didn't set attributes if they were empty lists. The new library sets
those attributes to empty lists.

Therefore, every check with `hasattr()` that later on accesses a single
element instead of iterating over the whole list needs to be changed to
also check that the list contains elements. This ensures compatiblity
between the backend library versions.

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

Change-Id: I9322037cd47ace83fbcb19bbbe051e2feb9af2c7
This commit is contained in:
Johannes Kulik
2021-04-14 15:52:09 +02:00
parent 6ce1272a62
commit cf4b152b6b
2 changed files with 3 additions and 3 deletions
+1 -1
View File
@@ -395,7 +395,7 @@ def file_size(session, ds_browser, ds_path, file_name):
datastorePath=str(ds_path),
searchSpec=search_spec)
task_info = session._wait_for_task(search_task)
if hasattr(task_info.result, 'file'):
if hasattr(task_info.result, 'file') and task_info.result.file:
return task_info.result.file[0].fileSize
+2 -2
View File
@@ -1069,7 +1069,7 @@ def _get_allocated_vnc_ports(session):
"VirtualMachine", [VNC_CONFIG_KEY])
while result:
for obj in result.objects:
if not hasattr(obj, 'propSet'):
if not hasattr(obj, 'propSet') or not obj.propSet:
continue
dynamic_prop = obj.propSet[0]
option_value = dynamic_prop.val
@@ -1328,7 +1328,7 @@ def get_cluster_ref_by_name(session, cluster_name):
"""Get reference to the vCenter cluster with the specified name."""
all_clusters = get_all_cluster_mors(session)
for cluster in all_clusters:
if (hasattr(cluster, 'propSet') and
if (hasattr(cluster, 'propSet') and cluster.propSet and
cluster.propSet[0].val == cluster_name):
return cluster.obj