CVSROOT:        /cvs/cluster
Module name:    conga
Changes by:     [EMAIL PROTECTED]       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 <[EMAIL PROTECTED]> 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 via email to