Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 24e278e14a25367b8cb2fce8af484abd > files > 23

cman-2.0.115-96.el5_8.3.src.rpm

From 0929325f4c245d94df5e1fed06d5a2c44f0668fd Mon Sep 17 00:00:00 2001
From: Marek 'marx' Grac <mgrac@redhat.com>
Date: Thu, 5 Jan 2012 17:30:43 +0100
Subject: [PATCH] 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:
-- 
1.7.4.4