[Cluster-devel] conga/luci/site/luci/Extensions FenceHandler.p ...

rmccabe at sourceware.org rmccabe at sourceware.org
Wed Oct 3 19:40:38 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-10-03 19:40:37

Modified files:
	luci/site/luci/Extensions: FenceHandler.py 
	luci/site/luci/Extensions/ClusterModel: Device.py FenceDevice.py 
	                                        FenceDeviceAttr.py 
	                                        ModelBuilder.py 

Log message:
	Fix a bug that caused the check for dual power fencing to fail when adding new fence instances for the first time.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.26&r2=1.27
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Device.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.11&r2=1.12

--- conga/luci/site/luci/Extensions/FenceHandler.py	2007/10/03 02:11:58	1.26
+++ conga/luci/site/luci/Extensions/FenceHandler.py	2007/10/03 19:40:37	1.27
@@ -1077,6 +1077,7 @@
 
 	fenceinst = Device()
 	fenceinst.addAttribute('name', parent_name)
+	fenceinst.setAgentType(fence_agent)
 
 	if form.has_key('option'):
 		option = form['option'].strip()
--- conga/luci/site/luci/Extensions/ClusterModel/Device.py	2007/09/20 22:37:32	1.5
+++ conga/luci/site/luci/Extensions/ClusterModel/Device.py	2007/10/03 19:40:37	1.6
@@ -31,11 +31,7 @@
     return self.has_native_option_set
 
   def isPowerController(self):
-    for item in FenceDeviceAttr.FENCE_POWER_CONTROLLERS:
-      if self.agent_type == item:
-        return True
-
-    return False
+    return self.agent_type in FenceDeviceAttr.FENCE_POWER_CONTROLLERS
 
   def addAttribute(self, name, value):
     if name == OPTION:
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py	2007/09/20 22:37:32	1.3
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py	2007/10/03 19:40:37	1.4
@@ -29,7 +29,11 @@
     return agent
 
   def getPrettyName(self):
-    return self.pretty_fence_names[self.attr_hash['name']]
+    agent_type = self.getAgentType()
+    pname = self.pretty_fence_names.get(agent_type)
+    if pname is None:
+      pname = agent_type
+    return pname
 
   def isShared(self):
     agent = self.getAgentType()
@@ -39,8 +43,4 @@
         return False
       else:
         return True
-
-    try:
-      return self.shared_fences[agent]
-    except KeyError, e:
-      return False
+    return self.shared_fences.has_key(agent)
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py	2007/09/21 16:06:52	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py	2007/10/03 19:40:37	1.3
@@ -5,7 +5,11 @@
 # GNU General Public License as published by the
 # Free Software Foundation.
 
-FENCE_POWER_CONTROLLERS = [ 'fence_wti', 'fence_apc', 'fence_apc_snmp' ]
+FENCE_POWER_CONTROLLERS = (
+	'fence_wti',
+	'fence_apc',
+	'fence_apc_snmp'
+)
 
 FENCE_OPTS = {
 	'fence_apc':			'APC Power Device',
@@ -70,61 +74,61 @@
 }
 
 FENCE_FI_ATTRS = {
-	'fence_apc':			[ 'port', 'switch' ],
-	'fence_wti':			[ 'port' ],
-	'fence_brocade':		[ 'port' ],
-	'fence_vixel':			[ 'port' ],
-	'fence_gnbd':			[ 'ipaddress' ],
-	'fence_sanbox2':		[ 'port' ],
-	'fence_bladecenter':	[ 'blade' ],
-	'fence_mcdata':			[ 'port' ],
-	'fence_egenera':		[ 'lpan', 'pserver' ],
-	'fence_bullpap':		[ 'domain' ],
-	'fence_xvm':			[ 'domain' ],
-	'fence_scsi':			[ 'node' ],
-	'fence_ilo':			[ ],
-	'fence_ipmilan':		[ ],
-	'fence_drac':			[ ],
-	'fence_rsa':			[ ],
-	'fence_rps10':			[ ],
-	'fence_manual':			[ ]
+	'fence_apc':			( 'port', 'switch' ),
+	'fence_wti':			( 'port' ),
+	'fence_brocade':		( 'port' ),
+	'fence_vixel':			( 'port' ),
+	'fence_gnbd':			( 'ipaddress' ),
+	'fence_sanbox2':		( 'port' ),
+	'fence_bladecenter':	( 'blade' ),
+	'fence_mcdata':			( 'port' ),
+	'fence_egenera':		( 'lpan', 'pserver' ),
+	'fence_bullpap':		( 'domain' ),
+	'fence_xvm':			( 'domain' ),
+	'fence_scsi':			( 'node' ),
+	'fence_ilo':			( ),
+	'fence_ipmilan':		( ),
+	'fence_drac':			( ),
+	'fence_rsa':			( ),
+	'fence_rps10':			( ),
+	'fence_manual':			( )
 }
 
 FENCE_FD_ATTRS = {
 	'fence_apc':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_wti':
-		[ 'name', 'ipaddr', 'passwd' ],
+		( 'name', 'ipaddr', 'passwd' ),
 	'fence_brocade':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_vixel':
-		[ 'name', 'ipaddr', 'passwd' ],
+		( 'name', 'ipaddr', 'passwd' ),
 	'fence_gnbd':
-		[ 'name', 'servers' ],
+		( 'name', 'servers' ),
 	'fence_sanbox2':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_bladecenter':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_mcdata':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_egenera':
-		[ 'name', 'cserver' ],
+		( 'name', 'cserver' ),
 	'fence_bullpap':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_xvm':
-		[ 'name' ],
+		( 'name' ),
 	'fence_scsi':
-		[ 'name' ],
+		( 'name' ),
 	'fence_ilo':
-		[ 'name', 'hostname', 'login', 'passwd' ],
+		( 'name', 'hostname', 'login', 'passwd' ),
 	'fence_ipmilan':
-		[ 'name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ],
+		( 'name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ),
 	'fence_drac':
-		[ 'name', 'ipaddr', 'login', 'passwd' ],
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_rsa':
-		[ 'name', 'hostname', 'login', 'passwd' ],
+		( 'name', 'hostname', 'login', 'passwd' ),
 	'fence_rps10':
-		[ 'name', 'device', 'port' ],
+		( 'name', 'device', 'port' ),
 	'fence_manual':
-		[ 'name' ]
+		( 'name' )
 }
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/09/21 03:02:47	1.11
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/10/03 19:40:37	1.12
@@ -347,21 +347,17 @@
   ##a separate pass, after the DOM is completely built. This method
   ##sets the agent type for each fence instance.
   def resolve_fence_instance_types(self):
-    fds = self.getFenceDevices()
     agent_hash = {}
-    for fd in fds:
-      agent = fd.getAttribute("agent")
+    for fd in self.getFenceDevices():
+      agent = fd.getAgentType()
       if agent is not None:
         agent_hash[fd.getName()] = agent
 
-    nodes = self.getNodes()
-    for node in nodes:
-      levels = node.getFenceLevels()
-      for level in levels:
-        children = level.getChildren()
-        for child in children:
+    for node in self.getNodes():
+      for level in node.getFenceLevels():
+        for child in level.getChildren():
           child.setAgentType(agent_hash[child.getName()])
-
+    
   ##This method builds RefObject containers for appropriate
   ##entities after the object tree is built.
   def resolve_references(self):
@@ -1137,40 +1133,36 @@
         self.CMAN_ptr.removeAttribute('two_node')
 
   def dual_power_fence_check(self):
-    #if 2 or more power controllers reside in the same fence level,
-    #duplicate entries must be made for every controller with an
-    #attribute for option set first for off, then for on.
-
-    #for every node:
-      #for every fence level:
-        #examine every fence
-        #If fence is of power type, add to 'found' list for that level
-        #If 'found' list is longer than 1, write out extra objs
-    nodes = self.getNodes()
-    for node in nodes:
-      levels = node.getFenceLevels()
-      for level in levels:
-        kids = level.getChildren()
-        l = list()
-        for kid in kids:
-          if kid.hasNativeOptionSet() == True:
+    # if 2 or more power controllers reside in the same fence level,
+    # duplicate entries must be made for every controller with an
+    # attribute for option set first for off, then for on.
+
+    # for every node:
+      # for every fence level:
+        # examine every fence
+        # If fence is of power type, add to 'found' list for that level
+        # If 'found' list is longer than 1, write out extra objs
+    for node in self.getNodes():
+      for level in node.getFenceLevels():
+        pc_list = list()
+        for kid in level.getChildren():
+          if kid.hasNativeOptionSet() is True:
             continue
           if kid.isPowerController() is True:
-            l.append(kid)
-        if len(l) > 1:  #Means we found multiple PCs in the same level
-          for fence in l:
-            fence.addAttribute("option", "off")
-          for fence in l:
-            if fence.getAttribute("option") == "off":
-              d = Device()
-              d.setAgentType(fence.getAgentType())
-              attrs = fence.getAttributes()
-              kees = attrs.keys()
-              for k in kees:
-                d.addAttribute(k, attrs[k])
-              d.addAttribute("option", "on")
-              level.addChild(d)
+            pc_list.append(kid)
 
+        if len(pc_list) > 1:
+          # Means we found multiple PCs in the same level
+          for fence in pc_list:
+            fence.addAttribute("option", "off")
+            d = Device()
+            d.setAgentType(fence.getAgentType())
+            attrs = fence.getAttributes()
+            for (k, v) in attrs.iteritems():
+              d.addAttribute(k, v)
+            d.addAttribute("option", "on")
+            level.addChild(d)
+        
   def purgePCDuplicates(self):
     found_one = True
     while found_one is True:




More information about the Cluster-devel mailing list