In previous version, we did not try to get all results for VM. This updated version fixes this issue by using proper SOAP API
Resolves: rhbz#735797 --- fence/agents/vmware_soap/fence_vmware_soap.py | 34 +++++++++++++++++-------- 1 files changed, 23 insertions(+), 11 deletions(-) diff --git a/fence/agents/vmware_soap/fence_vmware_soap.py b/fence/agents/vmware_soap/fence_vmware_soap.py index f9344ff..9bebd08 100644 --- a/fence/agents/vmware_soap/fence_vmware_soap.py +++ b/fence/agents/vmware_soap/fence_vmware_soap.py @@ -39,6 +39,17 @@ def soap_login(options): options["mo_SessionManager"] = mo_SessionManager return conn +def process_results(results, machines, uuid, mappingToUUID): + for m in results.objects: + info = {} + for i in m.propSet: + info[i.name] = i.val + machines[info["name"]] = (info["config.uuid"], info["summary.runtime.powerState"]) + uuid[info["config.uuid"]] = info["summary.runtime.powerState"] + mappingToUUID[m.obj.value] = info["config.uuid"] + + return (machines, uuid, mappingToUUID) + def get_power_status(conn, options): mo_ViewManager = Property(options["ServiceContent"].viewManager.value) mo_ViewManager._type = "ViewManager" @@ -78,18 +89,19 @@ def get_power_status(conn, options): except Exception, ex: fail(EC_STATUS) - machines = { } - uuid = { } - mappingToUUID = { } + (machines, uuid, mappingToUUID) = process_results(raw_machines, {}, {}, {}) + + # Probably need to loop over the ContinueRetreive if there are more results after 1 iteration. + while (hasattr(raw_machines, 'token') == True): + try: + raw_machines = conn.service.ContinueRetrievePropertiesEx(mo_PropertyCollector, raw_machines.token) + except Exception, ex: + fail(EC_STATUS) + (more_machines, more_uuid, more_mappingToUUID) = process_results(raw_machines, {}, {}, {}) + machines.update(more_machines) + uuid.update(more_uuid) + mappingToUUID.update(more_mappingToUUID) - for m in raw_machines.objects: - info = {} - for i in m.propSet: - info[i.name] = i.val - machines[info["name"]] = (info["config.uuid"], info["summary.runtime.powerState"]) - uuid[info["config.uuid"]] = info["summary.runtime.powerState"] - mappingToUUID[m.obj.value] = info["config.uuid"] - if ["list", "monitor"].count(options["-o"]) == 1: return machines else: -- 1.7.4.4