From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 12 Mar 2008 15:13:15 -0000 Subject: [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ... Message-ID: <20080312151315.15537.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe at sourceware.org 2008-03-12 15:13:13 Modified files: . : conga.spec.in.in luci/cluster : cluster_svc-macros resource-form-macros resource_form_handlers.js luci/site/luci/Extensions: LuciClusterActions.py LuciDB.py LuciValidation.py LuciZope.py ResourceHandler.py RicciQueries.py cluster_adapters.py conga_constants.py luci/site/luci/Extensions/ClusterModel: ModelBuilder.py Added files: luci/site/luci/Extensions/ClusterModel: OracleDB.py SybaseASE.py Log message: backport fixes from HEAD for bz304931 (Rich Sybase resource agent configuration support) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.70&r2=1.45.2.71 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.9&r2=1.21.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.14&r2=1.20.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.2&r2=1.6.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.9&r2=1.1.4.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.42&r2=1.120.2.43 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.16&r2=1.19.2.17 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8 --- conga/conga.spec.in.in 2008/02/27 20:22:18 1.45.2.70 +++ conga/conga.spec.in.in 2008/03/12 15:13:12 1.45.2.71 @@ -294,6 +294,7 @@ %changelog * Wed Feb 27 2008 Ryan McCabe 0.12.0-6 - Fix bz434586 (Resource tree does not display multiple children of a parent correctly) +- Fix bz304931 (Rich Sybase resource agent configuration support) * Tue Feb 12 2008 Ryan McCabe 0.12.0-5 - Fix bz432533 (Do not attempt to install the cmirror package when shared storage is requested) --- conga/luci/cluster/cluster_svc-macros 2008/02/27 20:22:19 1.3.2.3 +++ conga/luci/cluster/cluster_svc-macros 2008/03/12 15:13:12 1.3.2.4 @@ -617,6 +617,12 @@
+ +
+ + +
+
--- conga/luci/cluster/resource-form-macros 2008/01/23 04:44:30 1.21.2.9 +++ conga/luci/cluster/resource-form-macros 2008/03/12 15:13:12 1.21.2.10 @@ -146,6 +146,8 @@ + + @@ -167,6 +169,8 @@
+
+
@@ -195,6 +199,8 @@ + + @@ -240,6 +246,8 @@
+
+
@@ -312,7 +320,7 @@ src="/luci/cluster/resource_form_handlers.js"> - + Name - @@ -587,7 +595,7 @@ Name - @@ -709,7 +717,7 @@ Name - @@ -834,7 +842,7 @@ Name - @@ -918,7 +926,7 @@ Name - @@ -1011,7 +1019,7 @@ Name - @@ -1104,7 +1112,7 @@ Name - @@ -1198,7 +1206,7 @@ Name - @@ -1270,7 +1278,7 @@ SAP Instance Name - @@ -1314,6 +1322,222 @@
+
+

Oracle 10g Failover Instance

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Instance name (SID) of Oracle instance + +
Oracle user name + +
Oracle application home directory + +
Virtual hostname (optional) + +
+ +
+ +
+ +
+

Sybase ASE Failover Instance Configuration

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Instance Name + +
+ ASE server name + + +
+ SYBASE home directory + + +
+ Login file + + +
Interfaces file + +
SYBASE_ASE directory name + +
SYBASE_OCS directory name + +
Sybase user + +
Deep probe timeout + +
+ +
+ +
+
@@ -1357,7 +1581,7 @@ SAP Database Name - @@ -1490,7 +1714,7 @@ Name - @@ -1583,7 +1807,7 @@ Name - @@ -1687,7 +1911,7 @@ Name - @@ -1742,7 +1966,7 @@ Name - @@ -1807,7 +2031,7 @@ Name - --- conga/luci/cluster/resource_form_handlers.js 2008/02/07 06:52:55 1.20.2.14 +++ conga/luci/cluster/resource_form_handlers.js 2008/03/12 15:13:12 1.20.2.15 @@ -250,6 +250,16 @@ return (errors); } +function validate_sybase(form) { + var errors = new Array(); + return (errors); +} + +function validate_oracle(form) { + var errors = new Array(); + return (errors); +} + function validate_sapdatabase(form) { var errors = new Array(); @@ -295,6 +305,8 @@ form_validators['lvm'] = validate_lvm; form_validators['SAPInstance'] = validate_sapinstance; form_validators['SAPDatabase'] = validate_sapdatabase; +form_validators['ASEHAagent'] = validate_sybase; +form_validators['oracledb'] = validate_oracle; function check_form(form) { var valfn = form_validators[form.type.value]; @@ -302,11 +314,11 @@ return (-1); var errors = valfn(form); if (form.type.value != 'ip') { - if (!form.resourceName || str_is_blank(form.resourceName.value)) { + if (!form.resourcename || str_is_blank(form.resourcename.value)) { errors.push('No resource name was given.'); - set_form_err(form.resourceName); + set_form_err(form.resourcename); } else - clr_form_err(form.resourceName); + clr_form_err(form.resourcename); } return (errors); --- conga/luci/site/luci/Extensions/LuciClusterActions.py 2008/01/23 04:44:32 1.1.4.6 +++ conga/luci/site/luci/Extensions/LuciClusterActions.py 2008/03/12 15:13:12 1.1.4.7 @@ -12,7 +12,7 @@ from LuciDB import set_node_flag, getRicciAgent, \ getClusterNode, getStorageNode, NodeBusy, \ - setNodeStatus, resolve_nodename, \ + setNodeStatus, resolve_nodename, getCluster, \ delCluster, delClusterSystem, \ CLUSTER_NODE_NEED_AUTH @@ -280,6 +280,8 @@ % (nodename_resolved, clustername)) return None + cluster_obj = getCluster(self, clustername) + try: model.deleteNodeByName(nodename.lower()) except Exception, e: @@ -306,7 +308,7 @@ return None try: - ret = delClusterSystem(self, clustername, nodename_resolved) + ret = delClusterSystem(self, cluster_obj, nodename_resolved) if ret is not None: raise Exception, ret except Exception, e: @@ -332,9 +334,11 @@ nodename_resolved, delete_cluster=False): + cluster_obj = getCluster(self, clustername) + # We need to get a node name other than the node # to be deleted, then delete the node from the cluster.conf - # and propogate it. We will need two ricci agents for this task, + # and propagate it. We will need two ricci agents for this task, # unless we are deleting the cluster itself. if delete_cluster is False: @@ -364,7 +368,7 @@ # Unless we're deleting the whole cluster, it is not worth # flagging this node in DB, as we are going to delete it - # anyway. Now, we need to delete node from model and send out + # anyway. Now, we need to the delete node from model and send out # new cluster.conf if delete_cluster is True: @@ -405,7 +409,7 @@ return None try: - ret = delClusterSystem(self, clustername, nodename_resolved) + ret = delClusterSystem(self, cluster_obj, nodename_resolved) if ret is not None: raise Exception, ret except Exception, e: @@ -445,7 +449,7 @@ nodename_resolved = resolve_nodename(self, clustername, nodename) try: - # XXX - do this in parallel + # XXX - do this in parallel on all nodes rc = RicciCommunicator(nodename_resolved) except Exception, e: if LUCI_DEBUG_MODE is True: @@ -477,7 +481,7 @@ nodename_resolved = resolve_nodename(self, clustername, nodename) try: - # XXX - do this in parallel + # XXX - do this in parallel on all nodes rc = RicciCommunicator(nodename_resolved) except Exception, e: if LUCI_DEBUG_MODE is True: @@ -529,15 +533,6 @@ luci_log.debug_verbose('ClusterDelete0: %r %s' % (e, str(e))) return None - # Try to stop all the cluster nodes before deleting any. - num_errors = ClusterStop(self, model, delete=False) - if num_errors > 0: - if LUCI_DEBUG_MODE is True: - luci_log.debug_verbose('ClusterDelete1: %s: %d errors' \ - % (clustername, num_errors)) - return None - - # If the cluster is stopped, delete all of the nodes. num_errors = ClusterStop(self, model, delete=True) if num_errors > 0: if LUCI_DEBUG_MODE is True: --- conga/luci/site/luci/Extensions/LuciDB.py 2008/02/07 06:52:56 1.1.4.8 +++ conga/luci/site/luci/Extensions/LuciDB.py 2008/03/12 15:13:12 1.1.4.9 @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2006-2008 Red Hat, Inc. # # This program is free software; you can redistribute # it and/or modify it under the terms of version 2 of the @@ -667,10 +667,11 @@ error_list = list() for i in csystems: - err = delClusterSystem(self, cluster, i[0]) + cur_sysname = str(i[0]) + err = delClusterSystem(self, cluster, cur_sysname) if err: error_list.append('Unable to delete the cluster system %s: %s\n' \ - % (i[0], err)) + % (cur_sysname, err)) if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('delCluSystems2: %s' % err) return ''.join(error_list) --- conga/luci/site/luci/Extensions/LuciValidation.py 2008/02/07 06:52:56 1.6.2.2 +++ conga/luci/site/luci/Extensions/LuciValidation.py 2008/03/12 15:13:12 1.6.2.3 @@ -8,7 +8,6 @@ from ClusterModel.RefObject import RefObject from ClusterModel.Service import Service from ClusterModel.Method import Method -from ClusterModel.Fence import Fence from ClusterModel.FailoverDomain import FailoverDomain from ClusterModel.FailoverDomainNode import FailoverDomainNode from ClusterModel.QuorumD import QuorumD @@ -333,7 +332,7 @@ try: if res_type == 'ip': - dummy_form['resourceName'] = dummy_form['ip_address'] + dummy_form['resourcename'] = dummy_form['ip_address'] except Exception, e: if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('vSA3a: type is ip but no addr: %r %s' \ @@ -342,7 +341,7 @@ try: if dummy_form.has_key('immutable'): - newRes = model.getResourceByName(dummy_form['resourceName']) + newRes = model.getResourceByName(dummy_form['resourcename']) resObj = RefObject(newRes) resObj.setRef(newRes.getName()) else: @@ -471,6 +470,8 @@ try: res = create_resource(res_type, request.form, model) except Exception, e: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VRA1: create res: %r %s' % (e, str(e))) return (False, { 'errors': e[0] } ) resname = '' --- conga/luci/site/luci/Extensions/LuciZope.py 2008/02/08 21:56:33 1.1.4.6 +++ conga/luci/site/luci/Extensions/LuciZope.py 2008/03/12 15:13:12 1.1.4.7 @@ -148,6 +148,21 @@ ret[i] = pval return ret +def GetFormVars(req, varlist): + ret = {} + from types import ListType + + for i in varlist: + pval = None + if req and req.has_key(i): + pval = req[i] + if type(req[i]) is not ListType: + pval = req[i].strip() + if not pval: + pval = None + ret[i] = pval + return ret + def getClusterURL(self, request, model): try: clustername = request['clustername'].strip() --- conga/luci/site/luci/Extensions/ResourceHandler.py 2008/01/23 04:44:32 1.1.4.2 +++ conga/luci/site/luci/Extensions/ResourceHandler.py 2008/03/12 15:13:12 1.1.4.3 @@ -21,6 +21,10 @@ from ClusterModel.MySQL import MySQL from ClusterModel.SAPDatabase import SAPDatabase from ClusterModel.SAPInstance import SAPInstance +from ClusterModel.OracleDB import OracleDB +from ClusterModel.SybaseASE import SybaseASE + +from LuciZope import GetFormVars from LuciSyslog import get_logger from conga_constants import LUCI_DEBUG_MODE @@ -736,23 +740,80 @@ luci_log.debug_verbose('addSAPI1: %s %s' % (param, err)) return errors +def config_resource(params, res, rname, form): + errors = list() + + fvar = GetFormVars(form, map(lambda x: x[0], params)) + for i in params: + name = i[0] + val = fvar[name] + required = i[2] + default_val = i[3] + + if val is None: + if required is True: + if default_val is None: + errors.append('No value for %s was given for resource "%s"' % (i[1], rname)) + else: + res.addAttribute(name, default_val) + else: + try: + res.removeAttribute(name) + except: + pass + else: + res.addAttribute(name, val) + return errors + +def addSybaseASE(res, rname, form, model): + # parameter (str), short desc (str), required (bool), default (str or None) + params = ( + ('sybase_home', 'SYBASE home directory', True, None), + ('server_name', 'ASE server name', True, None), + ('login_file', 'Login file', True, None), + ('interfaces_file', 'Interfaces file', True, None), + ('sybase_ase', 'SYBASE_ASE directory name', True, 'ASE-15_0'), + ('sybase_ocs', 'SYBASE_OCS directory name', True, 'OCS-15_0'), + ('sybase_user', 'Sybase user', True, 'sybase'), + ('shutdown_timeout', 'Shutdown timeout value', True, '0'), + ('start_timeout', 'Start timeout value', True, '0'), + ('deep_probe_timeout', 'Deep probe timeout value', True, '0') + ) + errors = config_resource(params, res, rname, form) + return errors + +def addOracleDB(res, rname, form, model): + params = ( + ('user', 'Oracle User Name', True, None), + ('home', 'Oracle Home Directory', True, None), + #('type', 'Oracle Installation Type', True, None), + ('vhost', 'Virtual Hostname', False, None) + ) + errors = config_resource(params, res, rname, form) + dbtype = res.getAttribute('type') + if not dbtype: + res.addAttribute('type', '10g') + return errors + resource_table = { - 'ip': [ addIp, Ip ], - 'fs': [ addFs, Fs ], - 'gfs': [ addClusterfs, Clusterfs ], - 'nfsm': [ addNetfs, Netfs ], - 'nfsx': [ addNFSExport, NFSExport ], - 'nfsc': [ addNFSClient, NFSClient ], - 'scr': [ addScript, Script ], - 'smb': [ addSamba, Samba ], - 'tomcat-5': [ addTomcat5, Tomcat5 ], - 'postgres-8': [ addPostgres8, Postgres8 ], - 'apache': [ addApache, Apache ], - 'openldap': [ addOpenLDAP, OpenLDAP ], - 'lvm': [ addLVM, LVM ], - 'mysql': [ addMySQL, MySQL ], - 'SAPDatabase': [ addSAPDatabase, SAPDatabase ], - 'SAPInstance': [ addSAPInstance, SAPInstance ] + 'ip': ( addIp, Ip ), + 'fs': ( addFs, Fs ), + 'gfs': ( addClusterfs, Clusterfs ), + 'nfsm': ( addNetfs, Netfs ), + 'nfsx': ( addNFSExport, NFSExport ), + 'nfsc': ( addNFSClient, NFSClient ), + 'scr': ( addScript, Script ), + 'smb': ( addSamba, Samba ), + 'tomcat-5': ( addTomcat5, Tomcat5 ), + 'postgres-8': ( addPostgres8, Postgres8 ), + 'apache': ( addApache, Apache ), + 'openldap': ( addOpenLDAP, OpenLDAP ), + 'lvm': ( addLVM, LVM ), + 'mysql': ( addMySQL, MySQL ), + 'SAPDatabase': ( addSAPDatabase, SAPDatabase ), + 'SAPInstance': ( addSAPInstance, SAPInstance ), + 'oracledb': ( addOracleDB, OracleDB ), + 'ASEHAagent': ( addSybaseASE, SybaseASE ) } def create_resource(res_type, form, model): @@ -779,9 +840,9 @@ res = resource_table[res_type][1]() if res_type != 'ip': - if not form.has_key('resourceName') or not form['resourceName'].strip(): + if not form.has_key('resourcename') or not form['resourcename'].strip(): raise Exception, [ 'All resources must have a unique name.' ] - rname = form['resourceName'].strip() + rname = form['resourcename'].strip() res.addAttribute('name', rname) else: rname = form['ip_address'].strip() --- conga/luci/site/luci/Extensions/RicciQueries.py 2008/01/25 17:18:38 1.1.4.9 +++ conga/luci/site/luci/Extensions/RicciQueries.py 2008/03/12 15:13:12 1.1.4.10 @@ -121,7 +121,6 @@ batch.append('') return ''.join(batch) -## return minidom.parseString(''.join(batch)).firstChild def createClusterBatch( os_str, cluster_name, --- conga/luci/site/luci/Extensions/cluster_adapters.py 2008/01/25 17:18:38 1.120.2.42 +++ conga/luci/site/luci/Extensions/cluster_adapters.py 2008/03/12 15:13:12 1.120.2.43 @@ -24,7 +24,7 @@ from conga_constants import BATCH_ID, CLUNODE_CREATE_ERRORS, \ CLUSTER_ADD, CLUSTER_CONFIG, CLUSTER_DAEMON, CLUSTER_DELETE, \ CLUSTER_FOLDER_PATH, CLUSTER_RESTART, CLUSTER_START, CLUSTER_STOP, \ - DISABLE_SVC_TASK, ENABLE_SVC_TASK, FDOM, FENCEDEV, \ + CLUSTER_DELETE2, DISABLE_SVC_TASK, ENABLE_SVC_TASK, FDOM, FENCEDEV, \ FENCEDEV_NODE_CONFIG, FENCEDEVS, FLAG_DESC, INSTALL_TASK, CLUSTER_PROCESS, \ LAST_STATUS, LUCI_DEBUG_MODE, NODE, NODE_ADD, NODE_DELETE, \ NODE_FENCE, NODE_FORCE_DELETE, NODE_JOIN_CLUSTER, NODE_LEAVE_CLUSTER, \ @@ -1271,6 +1271,12 @@ % (baseurl, CLUSTER_PROCESS, cluname, CLUSTER_START)) return elif task == CLUSTER_DELETE: + from LuciClusterActions import ClusterStop + ClusterStop(self, model) + request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&task=%s&busyfirst=true' \ + % (baseurl, CLUSTER_PROCESS, cluname, CLUSTER_DELETE2)) + return + elif task == CLUSTER_DELETE2: from LuciClusterActions import ClusterDelete ret = ClusterDelete(self, model) if LUCI_DEBUG_MODE is True: --- conga/luci/site/luci/Extensions/conga_constants.py 2008/02/08 21:56:33 1.19.2.16 +++ conga/luci/site/luci/Extensions/conga_constants.py 2008/03/12 15:13:13 1.19.2.17 @@ -64,6 +64,7 @@ CLUSTER_START = '1001' CLUSTER_RESTART = '1002' CLUSTER_DELETE = '1003' +CLUSTER_DELETE2 = '1004' # Node tasks NODE_LEAVE_CLUSTER = '100' /cvs/cluster/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py,v --> standard output revision 1.1.2.1 --- conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py +++ - 2008-03-12 15:13:14.966263000 +0000 @@ -0,0 +1,18 @@ +# Copyright (C) 2008 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. + +from BaseResource import BaseResource +from gettext import gettext as _ + +TAG_NAME = 'oracledb' +RESOURCE_TYPE = _('Oracle 10g Failover Instance') + +class OracleDB(BaseResource): + def __init__(self): + BaseResource.__init__(self) + self.TAG_NAME = TAG_NAME + self.resource_type = RESOURCE_TYPE /cvs/cluster/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py,v --> standard output revision 1.1.2.1 --- conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py +++ - 2008-03-12 15:13:15.053372000 +0000 @@ -0,0 +1,18 @@ +# Copyright (C) 2008 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. + +from BaseResource import BaseResource +from gettext import gettext as _ + +TAG_NAME = 'ASEHAagent' +RESOURCE_TYPE = _('Sybase ASE Failover Instance') + +class SybaseASE(BaseResource): + def __init__(self): + BaseResource.__init__(self) + self.TAG_NAME = TAG_NAME + self.resource_type = RESOURCE_TYPE --- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2008/02/07 06:52:56 1.1.4.7 +++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2008/03/12 15:13:13 1.1.4.8 @@ -33,6 +33,8 @@ from Tomcat5 import Tomcat5 from SAPDatabase import SAPDatabase from SAPInstance import SAPInstance +from SybaseASE import SybaseASE +from OracleDB import OracleDB from Multicast import Multicast from FenceDaemon import FenceDaemon from FenceXVMd import FenceXVMd @@ -93,6 +95,8 @@ 'nfsclient': NFSClient, 'SAPDatabase': SAPDatabase, 'SAPInstance': SAPInstance, + 'ASEHAagent': SybaseASE, + 'oracledb': OracleDB, 'device': Device }