[Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte ...

jparsons at sourceware.org jparsons at sourceware.org
Fri Nov 3 21:13:26 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	jparsons at sourceware.org	2006-11-03 21:13:25

Modified files:
	luci/site/luci/Extensions: cluster_adapters.py 

Log message:
	Partial fix for broken fence list page

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.142&r2=1.143

--- conga/luci/site/luci/Extensions/cluster_adapters.py	2006/11/03 19:13:57	1.142
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2006/11/03 21:13:25	1.143
@@ -19,6 +19,7 @@
 from Vm import Vm
 from Script import Script
 from Samba import Samba
+from FenceHandler import FenceHandler
 from clusterOS import resolveOSType
 from GeneralError import GeneralError
 from UnknownClusterError import UnknownClusterError
@@ -2671,38 +2672,83 @@
   for fencedev in fencedevs:
     if fencedev.getName().strip() == fencename:
       map = fencedev.getAttributes()
+      try:
+        map['pretty_name'] = FenceHandler.FENCE_OPTS[fencedev.getAgentType()]
+      except Exception, e:
+        map['pretty_name'] = fencedev.getAgentType()
+
       return map
 
   return map
   
 def getFenceInfo(self, model, request):
+  clustername = request['clustername']
+  baseurl = request['URL']
   map = {}
-  fencedevs = list() 
-  level1 = list()
-  level2 = list()
+  fencedevs = list() #This is for the fencedev list page
+  level1 = list() #First level fence devices
+  level2 = list() #Second level fence devices
+  shared1 = list() #List of available sharable fence devs not used in level1
+  shared2 = list() #List of available sharable fence devs not used in level2
   map['level1'] = level1
   map['level2'] = level2
+  map['shared1'] = shared1
+  map['shared2'] = shared2
   map['fencedevs'] = fencedevs
   nodename = ""
-  if request == None:  #this is being called by the fence device page
+  if request == None:  #this is being called by the fence device list page
     #Get list of fence devices
     fds = model.getFenceDevices()
     for fd in fds:
       #create fencedev hashmap
       if fd.isShared() == True:
-        fencedev = fd.getAttributes()
-        fencedevs.append(fencedev)
+        fencedev = {}
+        attr_hash = fd.getAttributes()
+        kees = attr_hash.keys()
+        for kee in kees:
+          fencedev[kee] = attr_hash[kee] #copy attrs over
+        try:
+          fencedev['pretty_name'] = FenceHandler.FENCE_OPTS[fd.getAgentType()]
+        except Exception, e:
+          fencedev['pretty_name'] = fd.getAgentType()
+
+        nodes_used = list() #This section determines which nodes use the dev
+        nodes = model.getNodes()
+        for node in nodes:
+          flevels = node.getFenceLevels()
+          for flevel in flevels: #These are the method blocks...
+            kids = flevel.getChildren()
+            for kid in kids: #These are actual devices in each level
+              if kid.getName().strip == fd.getName().strip():
+                #See if this fd already has an entry for this node
+                found_duplicate = False
+                for item in nodes_used:
+                  if item['nodename'] == node.getName().strip():
+                    found_duplicate = True
+                if found_duplicate == True:
+                  continue
+                node_hash = {}
+                node_hash['nodename'] = node.getName().strip()
+                node_hash['nodeurl'] = baseurl + "#fence" + "?clustername=" + clustername + "&nodename=" + node.getName() + "&pagetype=" + NODE 
+                nodes_used.append(node_hash)
+
+        fencedev['nodesused'] = nodes_used
+      fencedevs.append(fencedev)
       
     return map
 
   else:
+    pass
     try:
       nodename = request['nodename']
     except KeyError, e:
       raise GeneralError('FATAL', "Could not extract nodename from request")
     
-    #here we need to get fences for a node - just the first two levels
-    #then fill in two data structures with all attr's 
+    #Here we need to get fences for a node - just the first two levels
+    #Each level has its own list of fence devs used in that level
+    #For each fence dev, a list of instance structs is appended
+    #In addition, for each level, a list of available but unused fence devs
+    #is returned. 
     try:
       node = model.retrieveNodeByName(nodename)
     except GeneralError, e:




More information about the Cluster-devel mailing list