fence-agents: master - fence_vmware_soap: Support for 100+ VM in VMWare
Marek GrĂ¡c
marx at fedoraproject.org
Mon Jan 9 11:38:31 UTC 2012
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=d35b0da5fcbf186cb316ce81c1168c8e54992a6d
Commit: d35b0da5fcbf186cb316ce81c1168c8e54992a6d
Parent: 60aae6b5f0ffea8c0e4f54aecf081c770ab4d67c
Author: Marek 'marx' Grac <mgrac at redhat.com>
AuthorDate: Thu Jan 5 17:30:43 2012 +0100
Committer: Marek 'marx' Grac <mgrac at redhat.com>
CommitterDate: Thu Jan 5 17:30:43 2012 +0100
fence_vmware_soap: Support for 100+ VM in VMWare
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:
More information about the cluster-commits
mailing list