All of lore.kernel.org
 help / color / mirror / Atom feed
From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga ./conga.spec.in.in luci/site/luci/Extens ...
Date: 20 Sep 2007 22:37:34 -0000	[thread overview]
Message-ID: <20070920223734.31543.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-09-20 22:37:32

Modified files:
	.              : conga.spec.in.in 
	luci/site/luci/Extensions: FenceHandler.py LuciClusterInfo.py 
	                           cluster_adapters.py 
	luci/site/luci/Extensions/ClusterModel: Device.py FenceDevice.py 
	                                        ModelBuilder.py 
Added files:
	luci/site/luci/Extensions/ClusterModel: FenceDeviceAttr.py 

Log message:
	Fix bz253223 (When deleting a node from conga, the fence device isn't deleted)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.83&r2=1.84
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.22&r2=1.23
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.270&r2=1.271
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Device.py.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.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.9&r2=1.10

--- conga/conga.spec.in.in	2007/09/20 21:03:16	1.83
+++ conga/conga.spec.in.in	2007/09/20 22:37:32	1.84
@@ -293,6 +293,7 @@
 - Fixed bz277661 (RFE: Better instructions on the luci login page if luci_admin not run.)
 - Fixed bz277711 (RFE: luci_admin should check that luci is running before asking for the password)
 - Fixed bz295771 (RFE: add ability to set self_fence attribute for clusterfs resources)
+- Fixed bz253223 (When deleting a node from conga, the fence device isn't deleted)
 
 * Mon Aug 27 2007 Ryan McCabe <rmccabe@redhat.com> 0.10.0-6
 - Fixed bz253783
--- conga/luci/site/luci/Extensions/FenceHandler.py	2007/08/08 21:26:37	1.22
+++ conga/luci/site/luci/Extensions/FenceHandler.py	2007/09/20 22:37:32	1.23
@@ -43,117 +43,6 @@
 
 ILLEGAL_CHARS_REPLACED = 'Illegal characters were replaced by underscores. Feel free to set a new value.'
 
-# For every new fence added, there will be a fence instance and fence device
-# form needed. There will also be a populate and a validate method for each
-# form. The methods will need to be added to this file, and the four hash
-# tables (self.fi_populate, self.fi_validate, self.fd_populate,
-# self.fd_validate) must be updated. The methods will use fields in the
-# forms to set_text and to check.
-
-FENCE_OPTS = {
-	'fence_apc':			'APC Power Device',
-	'fence_wti':			'WTI Power Device',
-	'fence_brocade':		'Brocade Switch',
-	'fence_vixel':			'Vixel SAN Switch',
-	'fence_gnbd':			'Global Network Block Device',
-	'fence_sanbox2':		'QLogic SANBox2',
-	'fence_bladecenter':	'IBM Blade Center',
-	'fence_mcdata':			'McDATA SAN Switch',
-	'fence_egenera':		'Egenera SAN Controller',
-	'fence_bullpap':		'Bull PAP',
-	'fence_xvm':			'Virtual Machine Fencing',
-	'fence_scsi':			'SCSI Reservation',
-	'fence_ilo':			'HP ILO Device',
-	'fence_ipmilan':		'IPMI Lan',
-	'fence_drac':			'Dell DRAC',
-	'fence_rsa':			'IBM RSA II Device',
-	'fence_rps10':			'RPS10 Serial Switch',
-	'fence_manual':			'Manual Fencing'
-}
-
-FENCE_SHARED = {
-	'fence_apc':			True,
-	'fence_wti':			True,
-	'fence_brocade':		True,
-	'fence_vixel':			True,
-	'fence_gnbd':			True,
-	'fence_sanbox2':		True,
-	'fence_bladecenter':	True,
-	'fence_mcdata':			True,
-	'fence_egenera':		True,
-	'fence_bullpap':		True,
-	'fence_xvm':			True,
-	'fence_scsi':			True,
-	'fence_ilo':			False,
-	'fence_ipmilan':		False,
-	'fence_drac':			False,
-	'fence_rsa':			False,
-	'fence_rps10':			False,
-	'fence_manual':			False
-}
-
-PRETTY_NAME_ATTRS = {
-	'port':					'Port',
-	'blade':				'Blade',
-	'switch':				'Switch',
-	'ipaddr':				'IP Address',
-	'ipaddress':			'IP Address',
-	'nodename':				'Node Name',
-	'lpan':					'LPAN',
-	'lanplus':				'Lanplus',
-	'pserver':				'PServer',
-	'login':				'Login',
-	'passwd':				'Password',
-	'name':					'Name',
-	'server':				'Server',
-	'domain':				'Domain',
-	'hostname':				'Hostname',
-	'path':					'Path',
-	'cserver':				'CServer'
-}
-
-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':			['nodename'],
-	'fence_ilo':			[],
-	'fence_ipmilan':		[],
-	'fence_drac':			[],
-	'fence_rsa':			[],
-	'fence_rps10':			[],
-	'fence_manual':			[]
-}
-
-FENCE_FD_ATTRS = {
-	'fence_apc': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_wti': ['name', 'ipaddr', 'passwd'],
-	'fence_brocade': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_vixel': ['name', 'ipaddr', 'passwd'],
-	'fence_gnbd': ['name', 'servers'],
-	'fence_sanbox2': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_bladecenter': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_mcdata': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_egenera': ['name', 'cserver'],
-	'fence_bullpap': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_xvm': ['name'],
-	'fence_scsi': ['name'],
-	'fence_ilo': ['name', 'hostname', 'login', 'passwd'],
-	'fence_ipmilan': ['name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth'],
-	'fence_drac': ['name', 'ipaddr', 'login', 'passwd'],
-	'fence_rsa': ['name', 'hostname', 'login', 'passwd'],
-	'fence_rps10': ['name', 'device', 'port'],
-	'fence_manual': ['name']
-}
-
 luci_log = get_logger()
 
 def makeNCName(name):
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/09/11 16:04:33	1.13
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/09/20 22:37:32	1.14
@@ -7,9 +7,9 @@
 
 from Products.Archetypes.utils import make_uuid
 from ClusterModel.ModelBuilder import ModelBuilder
+from ClusterModel.FenceDeviceAttr import FENCE_OPTS
 import RicciQueries as rq
 from ricci_communicator import RicciCommunicator
-from FenceHandler import FENCE_OPTS
 from LuciSyslog import get_logger
 from LuciDB import resolve_nodename
 from LuciZope import GetReqVars
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2007/09/11 16:04:33	1.270
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2007/09/20 22:37:32	1.271
@@ -1796,6 +1796,7 @@
 	if fencedev_name is None:
 		return (False, {'errors': ['No device name in form submission']})
 
+	# XXX - FIXME: use new model calls to do this.
 	fdev_to_delete = None
 	fdevs = model.getFenceDevices()
 	for fdev in fdevs:
/cvs/cluster/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py,v  -->  standard output
revision 1.1
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py
+++ -	2007-09-20 22:37:33.804688000 +0000
@@ -0,0 +1,130 @@
+# Copyright (C) 2007 Red Hat, Inc.
+#
+# This program is free software; you can redistribute
+# it and/or modify it under the terms of version 2 of the
+# GNU General Public License as published by the
+# Free Software Foundation.
+
+FENCE_POWER_CONTROLLERS = [ 'fence_wti', 'fence_apc', 'fence_apc_snmp' ]
+
+FENCE_OPTS = {
+	'fence_apc':			'APC Power Device',
+	'fence_wti':			'WTI Power Device',
+	'fence_brocade':		'Brocade Switch',
+	'fence_vixel':			'Vixel SAN Switch',
+	'fence_gnbd':			'Global Network Block Device',
+	'fence_sanbox2':		'QLogic SANBox2',
+	'fence_bladecenter':	'IBM Blade Center',
+	'fence_mcdata':			'McDATA SAN Switch',
+	'fence_egenera':		'Egenera SAN Controller',
+	'fence_bullpap':		'Bull PAP',
+	'fence_xvm':			'Virtual Machine Fencing',
+	'fence_scsi':			'SCSI Reservation',
+	'fence_ilo':			'HP iLO Device',
+	'fence_ipmilan':		'IPMI Lan',
+	'fence_drac':			'Dell DRAC',
+	'fence_rsa':			'IBM RSA II Device',
+	'fence_rps10':			'RPS10 Serial Switch',
+	'fence_manual':			'Manual Fencing'
+}
+
+FENCE_SHARED = {
+	'fence_apc':			True,
+	'fence_wti':			True,
+	'fence_brocade':		True,
+	'fence_vixel':			True,
+	'fence_gnbd':			True,
+	'fence_sanbox2':		True,
+	'fence_bladecenter':	True,
+	'fence_mcdata':			True,
+	'fence_egenera':		True,
+	'fence_bullpap':		True,
+	'fence_xvm':			True,
+	'fence_scsi':			True,
+	'fence_ilo':			False,
+	'fence_ipmilan':		False,
+	'fence_drac':			False,
+	'fence_rsa':			False,
+	'fence_rps10':			False,
+	'fence_manual':			False
+}
+
+PRETTY_NAME_ATTRS = {
+	'port':					'Port',
+	'blade':				'Blade',
+	'switch':				'Switch',
+	'ipaddr':				'IP Address',
+	'ipaddress':			'IP Address',
+	'nodename':				'Node Name',
+	'lpan':					'LPAN',
+	'lanplus':				'Lanplus',
+	'pserver':				'PServer',
+	'login':				'Login',
+	'passwd':				'Password',
+	'name':					'Name',
+	'server':				'Server',
+	'domain':				'Domain',
+	'hostname':				'Hostname',
+	'path':					'Path',
+	'cserver':				'CServer'
+}
+
+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':			[ 'nodename' ],
+	'fence_ilo':			[ ],
+	'fence_ipmilan':		[ ],
+	'fence_drac':			[ ],
+	'fence_rsa':			[ ],
+	'fence_rps10':			[ ],
+	'fence_manual':			[ ]
+}
+
+FENCE_FD_ATTRS = {
+	'fence_apc':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_wti':
+		[ 'name', 'ipaddr', 'passwd' ],
+	'fence_brocade':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_vixel':
+		[ 'name', 'ipaddr', 'passwd' ],
+	'fence_gnbd':
+		[ 'name', 'servers' ],
+	'fence_sanbox2':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_bladecenter':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_mcdata':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_egenera':
+		[ 'name', 'cserver' ],
+	'fence_bullpap':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_xvm':
+		[ 'name' ],
+	'fence_scsi':
+		[ 'name' ],
+	'fence_ilo':
+		[ 'name', 'hostname', 'login', 'passwd' ],
+	'fence_ipmilan':
+		[ 'name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ],
+	'fence_drac':
+		[ 'name', 'ipaddr', 'login', 'passwd' ],
+	'fence_rsa':
+		[ 'name', 'hostname', 'login', 'passwd' ],
+	'fence_rps10':
+		[ 'name', 'device', 'port' ],
+	'fence_manual':
+		[ 'name' ]
+}
--- conga/luci/site/luci/Extensions/ClusterModel/Device.py	2007/08/08 21:00:08	1.4
+++ conga/luci/site/luci/Extensions/ClusterModel/Device.py	2007/09/20 22:37:32	1.5
@@ -5,25 +5,21 @@
 # GNU General Public License as published by the
 # Free Software Foundation.
 
-import FenceHandler
+import FenceDeviceAttr
 from TagObject import TagObject
 
 TAG_NAME = "device"
 OPTION = "option"
 
-#New Power Controller Fence Agent names should be added to
-#the list below
-power_controller_list = [ "fence_wti", "fence_apc", "fence_apc_snmp" ]
-
 class Device(TagObject):
   def __init__(self):
     TagObject.__init__(self)
     self.TAG_NAME = TAG_NAME
     self.agent_type = ""
     self.has_native_option_set = False
-    self.fi_attrs = FenceHandler.FENCE_FI_ATTRS
-    self.pretty_fence_names = FenceHandler.FENCE_OPTS
-    self.pretty_name_attrs = FenceHandler.PRETTY_NAME_ATTRS
+    self.fi_attrs = FenceDeviceAttr.FENCE_FI_ATTRS
+    self.pretty_fence_names = FenceDeviceAttr.FENCE_OPTS
+    self.pretty_name_attrs = FenceDeviceAttr.PRETTY_NAME_ATTRS
 
   def getAgentType(self):
     return self.agent_type
@@ -35,7 +31,7 @@
     return self.has_native_option_set
 
   def isPowerController(self):
-    for item in power_controller_list:
+    for item in FenceDeviceAttr.FENCE_POWER_CONTROLLERS:
       if self.agent_type == item:
         return True
 
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py	2007/06/25 16:03:39	1.2
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py	2007/09/20 22:37:32	1.3
@@ -5,7 +5,7 @@
 # GNU General Public License as published by the
 # Free Software Foundation.
 
-import FenceHandler
+import FenceDeviceAttr
 from TagObject import TagObject
 
 TAG_NAME = "fencedevice"
@@ -15,12 +15,10 @@
   def __init__(self):
     TagObject.__init__(self)
     self.TAG_NAME = TAG_NAME
-    self.fd_attrs = FenceHandler.FENCE_FD_ATTRS
-    self.pretty_fence_names = FenceHandler.FENCE_OPTS
-    self.pretty_name_attrs = FenceHandler.PRETTY_NAME_ATTRS
-    self.shared_fences = FenceHandler.FENCE_SHARED
-
-
+    self.fd_attrs = FenceDeviceAttr.FENCE_FD_ATTRS
+    self.pretty_fence_names = FenceDeviceAttr.FENCE_OPTS
+    self.pretty_name_attrs = FenceDeviceAttr.PRETTY_NAME_ATTRS
+    self.shared_fences = FenceDeviceAttr.FENCE_SHARED
 
   def getAgentType(self):
     agent = self.attr_hash["agent"]
@@ -30,6 +28,9 @@
       pass
     return agent
 
+  def getPrettyName(self):
+    return self.pretty_fence_names[self.attr_hash['name']]
+
   def isShared(self):
     agent = self.getAgentType()
     if agent == "fence_drac": #2 variants of drac...
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/09/11 19:04:32	1.9
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/09/20 22:37:32	1.10
@@ -333,7 +333,14 @@
 
     return obj_tree
 
-
+  def getFenceDeviceByName(self, name):
+    device = filter(lambda x: x.getName() == name, self.getFenceDevices())
+    if len(device) > 1:
+      raise Exception, '%d fence devices named %s exist' % (len(device), name)
+    if len(device) < 1:
+      return None
+    return device[0]
+      
   ##Because fence devices are declared in a separate XML section
   ##in conf file, agent types for fence instances must be done in
   ##a separate pass, after the DOM is completely built. This method
@@ -527,12 +534,19 @@
     self.isModified = True
 
   def deleteNode(self, clusternode):
-    #1) delete node
-    #2) delete failoverdomainnodes with same name
-    #3) delete lockserver nodes if GULM
+    #1) delete any non-shared fence devices used by this node
+    #2) delete node
+    #3) delete failoverdomainnodes with same name
+    #4) delete lockserver nodes if GULM
 
     name = clusternode.getName()
 
+    for level in clusternode.getFenceLevels():
+        for fence in level.getChildren():
+            fdev = self.getFenceDeviceByName(fence.getName())
+            if fdev and not fdev.isShared():
+                self.deleteFenceDevice(fdev)
+                
     self.clusternodes_ptr.removeChild(clusternode)
 
     found_one = True
@@ -607,6 +621,12 @@
       self.cluster_ptr.removeChild(self.fence_xvmd_ptr)
       self.fence_xvmd_ptr = None
 
+  def deleteFenceDevice(self, device):
+    if self.fencedevices_ptr is None or device is None:
+      return False
+    self.fencedevices_ptr.removeChild(device)
+    return True
+
   def getFenceDevices(self):
     if self.fencedevices_ptr is None:
       return list()



             reply	other threads:[~2007-09-20 22:37 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-20 22:37 rmccabe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2008-09-17  6:29 [Cluster-devel] conga ./conga.spec.in.in luci/site/luci/Extens rmccabe
2008-07-15 18:20 rmccabe
2008-07-14 16:29 rmccabe
2008-05-12 17:09 rmccabe
2008-05-12 17:04 rmccabe
2008-04-28  3:54 rmccabe
2008-04-28  3:49 rmccabe
2008-04-18 20:34 rmccabe
2008-04-14 15:58 rmccabe
2008-01-14 20:51 rmccabe
2007-10-09 21:41 rmccabe
2007-10-09 21:33 rmccabe
2007-10-09 21:31 rmccabe
2007-10-03  2:16 rmccabe
2007-08-17 20:26 rmccabe
2007-06-25 19:10 rmccabe
2007-05-02  2:39 rmccabe
2007-05-02  2:36 rmccabe
2006-12-14  0:01 rmccabe
2006-11-29 22:33 kupcevic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070920223734.31543.qmail@sourceware.org \
    --to=rmccabe@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.