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/luci/site/luci/Extensions LuciClusterAct ...
Date: 14 May 2007 18:00:17 -0000	[thread overview]
Message-ID: <20070514180017.21661.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	EXPERIMENTAL
Changes by:	rmccabe at sourceware.org	2007-05-14 18:00:14

Modified files:
	luci/site/luci/Extensions: LuciClusterActions.py 
	                           LuciClusterInfo.py LuciDB.py 
	                           LuciSyslog.py LuciZope.py 
	                           PropsObject.py ResourceHandler.py 
	                           RicciQueries.py cluster_adapters.py 
	                           homebase_adapters.py 
	                           ricci_communicator.py 
	                           system_adapters.py 

Log message:
	Next pass of cleanup and refactor

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.4&r2=1.1.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.11&r2=1.11.4.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.2.8.1&r2=1.2.8.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.255.2.3&r2=1.255.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.50.2.2&r2=1.50.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.25.2.2&r2=1.25.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/system_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.2.2.1&r2=1.2.2.2

--- conga/luci/site/luci/Extensions/Attic/LuciClusterActions.py	2007/05/08 22:19:35	1.1.2.1
+++ conga/luci/site/luci/Extensions/Attic/LuciClusterActions.py	2007/05/14 18:00:14	1.1.2.2
@@ -1,7 +1,11 @@
 import RicciQueries as rq
-from conga_constants import CLUSTER_CONFIG
+from LuciDB import set_node_flag, getRicciAgent
+from LuciSyslog import get_logger
+from conga_constants import CLUSTER_CONFIG, LUCI_DEBUG_MODE
 
-def propagateClusterConfAsync(model, rc=None):
+luci_log = get_logger()
+
+def propagateClusterConfAsync(self, model, rc=None):
 	errors = list()
 	messages = list()
 
@@ -10,7 +14,8 @@
 		if not clustername:
 			raise Exception, 'cluster name from model.getClusterName() is blank'
 	except Exception, e:
-		luci_log.debug_verbose('PCC0: getClusterName: %r' % e)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('PCC0: getClusterName: %r' % e)
 		errors.append('Unable to determine cluster name')
 		return (False, { 'errors': errors, 'messages': messages })
 
@@ -18,19 +23,36 @@
 		rc = getRicciAgent(self, clustername)
 
 	if not rc:
-		luci_log.debug_verbose('PCC1: unable to find a ricci agent for the %s cluster' % clustername)
-		errors.append('Unable to contact a ricci agent for cluster "%s"' % clustername)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('PCC1: no ricci agent for the %s cluster' \
+				% clustername)
+		errors.append('Unable to contact a ricci agent for cluster "%s"' \
+			% clustername)
+		return (False, { 'errors': errors, 'messages': messages })
+
+	try:
+		conf_str = str(model.exportModelAsString()).strip()
+		if not conf_str:
+			raise Exception, 'The new cluster configuration is blank'
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('PCC2: %r' % e)
+		errors.append(repr(e))
 		return (False, { 'errors': errors, 'messages': messages })
 
-	batch_id, result = rq.setClusterConf(rc, str(conf_str))
+	batch_id, result = rq.setClusterConf(rc, conf_str)
 	if batch_id is None or result is None:
-		luci_log.debug_verbose('PCC2: setCluserConf: batchid or result is None')
-		errors.append('Unable to propagate the new cluster configuration for %s' % clustername)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('PCC3: batchid or result is None')
+		errors.append('Unable to propagate a new cluster configuration for %s' \
+			% clustername)
 		return (False, { 'errors': errors, 'messages': messages })
 
 	try:
 		set_node_flag(self, clustername, rc.hostname(), batch_id,
-			CLUSTER_CONFIG, 'Adding new fence device "%s"' % retobj)
+			CLUSTER_CONFIG, 'Updating the cluster configuration for "%s"' %
+				clustername)
 	except Exception, e:
-		luci_log.debug_verbose('PCC3: set_node_flag: %r' % e)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('PCC4: set_node_flag: %r' % e)
 	return (True, { 'errors': errors, 'messages': messages, 'batchid': batch_id })
--- conga/luci/site/luci/Extensions/Attic/LuciClusterInfo.py	2007/05/08 22:19:35	1.1.2.1
+++ conga/luci/site/luci/Extensions/Attic/LuciClusterInfo.py	2007/05/14 18:00:14	1.1.2.2
@@ -2,6 +2,7 @@
 import RicciQueries as rq
 from ricci_communicator import RicciCommunicator
 from FenceHandler import FENCE_OPTS
+from LuciSyslog import get_logger
 
 from conga_constants import CLUNAME, CLUSTER_CONFIG, CLUSTER_DELETE, \
 	CLUSTER_PROCESS, CLUSTER_RESTART, CLUSTER_START, CLUSTER_STOP, \
@@ -14,6 +15,15 @@
 	SERVICE, SERVICE_DELETE, SERVICE_MIGRATE, SERVICE_RESTART, \
 	SERVICE_START, SERVICE_STOP, VM_CONFIG
 
+luci_log = get_logger()
+
+def getnodes(self, model):
+	try:
+		return map(lambda x: str(x.getName()), model.getNodes())
+	except Exception, e:
+		luci_log.debug_verbose('getnodes0: %s' % str(e))
+	return []
+
 def getResourceInfo(model, name, res=None):
 	if res is None:
 		try:
@@ -1469,3 +1479,14 @@
 
 	#CALL
 	return {}
+
+def getClusterName(self, model):
+	return model.getClusterName()
+
+def getClusterAlias(self, model):
+	if not model:
+		return ''
+	alias = model.getClusterAlias()
+	if not alias:
+		return model.getClusterName()
+	return alias
--- conga/luci/site/luci/Extensions/Attic/LuciDB.py	2007/05/14 16:02:11	1.1.2.4
+++ conga/luci/site/luci/Extensions/Attic/LuciDB.py	2007/05/14 18:00:14	1.1.2.5
@@ -2,13 +2,14 @@
 import RicciQuery as rq
 from ricci_communicator import RicciCommunicator
 from LuciZope import isAdmin
+from LuciSyslog import get_logger
 
 from conga_constants import CLUSTER_FOLDER_PATH, BATCH_ID, TASKTYPE, \
 	FLAG_DESC, CLUSTER_ADD, CLUSTER_NODE_ADDED, CLUSTER_NODE_NEED_AUTH, \
 	LAST_STATUS, PLONE_ROOT, STORAGE_FOLDER_PATH, CLUSTER_NODE_NOT_MEMBER, \
 	LUCI_DEBUG_MODE
 
-from homebase_adapters import luci_log
+luci_log = get_logger()
 
 def getClusterNode(self, nodename, clustername):
 	try:
--- conga/luci/site/luci/Extensions/LuciSyslog.py	2006/11/29 18:15:20	1.11
+++ conga/luci/site/luci/Extensions/LuciSyslog.py	2007/05/14 18:00:14	1.11.4.1
@@ -18,14 +18,20 @@
 		except:
 			raise LuciSyslogError, 'unable to setup syslog functionality.'
 
+	def __del__(self):
+		self.close()
+
+	def initialized(self):
+		return self.__init > 0
+
 	def info(self, msg):
 		if not self.__init:
 			return
 		try:
 			syslog(LOG_INFO, msg)
 		except:
-			pass
 			#raise LuciSyslogError, 'syslog info call failed'
+			pass
 
 	def warn(self, msg):
 		if not self.__init:
@@ -33,8 +39,8 @@
 		try:
 			syslog(LOG_WARNING, msg)
 		except:
-			pass
 			#raise LuciSyslogError, 'syslog warn call failed'
+			pass
 
 	def private(self, msg):
 		if not self.__init:
@@ -42,8 +48,8 @@
 		try:
 			syslog(LOG_AUTH, msg)
 		except:
-			pass
 			#raise LuciSyslogError, 'syslog private call failed'
+			pass
 
 	def debug_verbose(self, msg):
 		if not LUCI_DEBUG_MODE or LUCI_DEBUG_VERBOSITY < 2 or not self.__init:
@@ -73,8 +79,8 @@
 		try:
 			syslog(LOG_DEBUG, msg)
 		except:
-			pass
 			#raise LuciSyslogError, 'syslog debug call failed'
+			pass
 
 	def close(self):
 		try:
@@ -82,3 +88,9 @@
 			closelog()
 		except:
 			pass
+
+luci_logc = None
+def get_logger():
+	if luci_logc is None or luci_logc.initialized() is False:
+		luci_logc = LuciSyslog()
+	return luci_logc
--- conga/luci/site/luci/Extensions/Attic/LuciZope.py	2007/05/08 22:19:35	1.1.2.2
+++ conga/luci/site/luci/Extensions/Attic/LuciZope.py	2007/05/14 18:00:14	1.1.2.3
@@ -87,3 +87,41 @@
 	if get_units_multiplier(units) > get_units_multiplier(p_units):
 		units = p_units
 	return (convert_bytes(bytes, units), units)
+
+def getTabs(self, req):
+	if not userAuthenticated(self):
+		return []
+
+	htab = {
+		'Title': 'homebase',
+		'Description': 'Home base for this luci server',
+		'Taburl': '/luci/homebase',
+		'isSelected': False
+	}
+	ctab = {
+		'Title': 'cluster',
+		'Description': 'Cluster configuration area',
+		'Taburl': '/luci/cluster/index_html?pagetype=3',
+		'isSelected': False
+	}
+	stab = {
+		'Title': 'storage',
+		'Description': 'Storage configuration page',
+		'Taburl': '/luci/storage',
+		'isSelected': False
+	}
+
+	try:
+		baseurl = req['URL']
+		if baseurl.find('cluster') > (-1):
+			ctab['isSelected'] = True
+		elif baseurl.find('storage') > (-1):
+			stab['isSelected'] = True
+		else:
+			htab['isSelected'] = True
+	except KeyError, e:
+		pass
+	except Exception, e:
+		htab['isSelected'] = True
+
+	return [ htab, ctab, stab ]
--- conga/luci/site/luci/Extensions/PropsObject.py	2007/05/04 19:10:24	1.2.8.1
+++ conga/luci/site/luci/Extensions/PropsObject.py	2007/05/14 18:00:14	1.2.8.2
@@ -1,7 +1,5 @@
-
-from ricci_defines import *
-
-from Variable import Variable, parse_variable
+from Variable import parse_variable
+from ricci_defines import PROPS_TAG
 import xml
 import xml.dom
 
--- conga/luci/site/luci/Extensions/Attic/ResourceHandler.py	2007/05/03 20:16:38	1.1.2.1
+++ conga/luci/site/luci/Extensions/Attic/ResourceHandler.py	2007/05/14 18:00:14	1.1.2.2
@@ -12,8 +12,10 @@
 from ClusterModel.OpenLDAP import OpenLDAP
 from ClusterModel.LVM import LVM
 from ClusterModel.MySQL import MySQL
+from LuciSyslog import get_logger
+from conga_constants import LUCI_DEBUG_MODE
 
-from homebase_adapters import luci_log
+luci_log = get_logger()
 
 def get_fsid_list(model):
 	obj_list = model.searchObjectTree('fs')
@@ -45,7 +47,8 @@
 			resPtr.removeChild(res)
 			return res
 
-	luci_log.debug_verbose('GRFE0: unable to find resource "%s"' % name)
+	if LUCI_DEBUG_MODE is True:
+		luci_log.debug_verbose('GRFE0: unable to find resource "%s"' % name)
 	raise KeyError, name
 
 def addIp(res, rname, form, model):
@@ -57,9 +60,10 @@
 			raise KeyError, 'No IP address was given'
 		res.addAttribute('address', addr)
 	except KeyError, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addIp4: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addIp4: %s' % err)
 
 	if 'monitorLink' in form:
 		res.addAttribute('monitor_link', '1')
@@ -77,9 +81,10 @@
 			raise Exception, 'No mount point was given for "%s"' % rname
 		res.addAttribute('mountpoint', mountpoint)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addFs6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addFs6: %s' % err)
 
 	try:
 		device = form['device'].strip()
@@ -87,9 +92,10 @@
 			raise Exception, 'No device was given for "%s"' % rname
 		res.addAttribute('device', device)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addFs7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addFs7: %s' % err)
 
 	try:
 		options = form['options'].strip()
@@ -102,9 +108,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addFs8: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addFs8: %s' % err)
 
 	try:
 		fstype = form['fstype'].strip()
@@ -112,9 +119,10 @@
 			raise Exception, 'No filesystem type was given for "%s"' % rname
 		res.addAttribute('fstype', fstype)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addFs9: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addFs9: %s' % err)
 
 	try:
 		fsid = form['fsid'].strip()
@@ -153,9 +161,10 @@
 			raise Exception, 'No mount point was given for "%s"' % rname
 		res.addAttribute('mountpoint', mountpoint)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addGfs5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addGfs5: %s' % err)
 
 	try:
 		device = form['device'].strip()
@@ -163,9 +172,10 @@
 			raise Exception, 'No device was given for "%s"' % rname
 		res.addAttribute('device', device)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addGfs6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addGfs6: %s' % err)
 
 	try:
 		options = form['options'].strip()
@@ -178,9 +188,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addGfs7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addGfs7: %s' % err)
 
 	try:
 		fsid = form['fsid'].strip()
@@ -209,9 +220,10 @@
 			raise Exception, 'No mount point was given for "%s"' % rname
 		res.addAttribute('mountpoint', mountpoint)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsm5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsm5: %s' % err)
 
 	try:
 		host = form['host'].strip()
@@ -219,9 +231,10 @@
 			raise Exception, 'No host server was given for "%s"' % rname
 		res.addAttribute('host', host)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsm6 error: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsm6 error: %s' % err)
 
 	try:
 		options = form['options'].strip()
@@ -234,9 +247,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsm7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsm7: %s' % err)
 
 	try:
 		exportpath = form['exportpath'].strip()
@@ -244,9 +258,10 @@
 			raise Exception, 'No export path was given for "%s"' % rname
 		res.addAttribute('exportpath', exportpath)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsm8: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsm8: %s' % err)
 
 	try:
 		nfstype = form['nfstype'].strip().lower()
@@ -255,9 +270,10 @@
 								% (nfstype, rname)
 		res.addAttribute('nfstype', nfstype)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsm9: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsm9: %s' % err)
 
 	if form.has_key('forceunmount'):
 		res.addAttribute('force_unmount', '1')
@@ -275,9 +291,10 @@
 			raise Exception, 'No target was given for "%s"' % rname
 		res.addAttribute('target', target)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsc5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsc5: %s' % err)
 
 	try:
 		options = form['options'].strip()
@@ -290,9 +307,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addNfsc6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addNfsc6: %s' % err)
 
 	if form.has_key('allow_recover'):
 		res.addAttribute('allow_recover', '1')
@@ -314,9 +332,10 @@
 			raise Exception, 'No path to a script file was given for this "%s"' % rname
 		res.addAttribute('file', path)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addScr5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addScr5: %s' % err)
 
 	return errors
 
@@ -329,9 +348,10 @@
 			raise Exception, 'No workgroup was given for "%s"' % rname
 		res.addAttribute('workgroup', workgroup)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addSmb5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addSmb5: %s' % err)
 
 	return errors
 
@@ -344,9 +364,10 @@
 			raise KeyError, 'No server root was given for "%s"' % rname
 		res.addAttribute('server_root', server_root)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addApache5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addApache5: %s' % err)
 
 	try:
 		config_file = form['config_file'].strip()
@@ -354,9 +375,10 @@
 			raise KeyError, 'No path to the Apache configuration file was given for "%s"' % rname
 		res.addAttribute('config_file', config_file)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addApache6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addApache6: %s' % err)
 
 	try:
 		options = form['httpd_options'].strip()
@@ -369,9 +391,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addApache7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addApache7: %s' % err)
 
 	try:
 		shutdown_wait = int(form['shutdown_wait'].strip())
@@ -379,9 +402,10 @@
 	except KeyError, e:
 		res.addAttribute('shutdown_wait', '0')
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addApache7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addApache7: %s' % err)
 
 	return errors
 
@@ -394,9 +418,10 @@
 			raise KeyError, 'No path to the MySQL configuration file was given for "%s"' % rname
 		res.addAttribute('config_file', config_file)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addMySQL5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addMySQL5: %s' % err)
 
 	try:
 		listen_addr = form['listen_address'].strip()
@@ -404,9 +429,10 @@
 			raise KeyError, 'No address was given for "%s"' % rname
 		res.addAttribute('listen_address', listen_addr)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addMySQL6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addMySQL6: %s' % err)
 
 	try:
 		options = form['mysql_options'].strip()
@@ -419,9 +445,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addMySQL7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addMySQL7: %s' % err)
 
 	try:
 		shutdown_wait = int(form['shutdown_wait'].strip())
@@ -429,9 +456,10 @@
 	except KeyError, e:
 		res.addAttribute('shutdown_wait', '0')
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addMySQL7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addMySQL7: %s' % err)
 
 	return errors
 
@@ -444,9 +472,10 @@
 			raise KeyError, 'No URL list was given for "%s"' % rname
 		res.addAttribute('url_list', url_list)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addOpenLDAP5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addOpenLDAP5: %s' % err)
 
 	try:
 		config_file = form['config_file'].strip()
@@ -454,9 +483,10 @@
 			raise KeyError, 'No path to the OpenLDAP configuration file was given for "%s"' % rname
 		res.addAttribute('config_file', config_file)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addOpenLDAP6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addOpenLDAP6: %s' % err)
 
 	try:
 		options = form['slapd_options'].strip()
@@ -469,9 +499,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addOpenLDAP7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addOpenLDAP7: %s' % err)
 
 	try:
 		shutdown_wait = int(form['shutdown_wait'].strip())
@@ -479,9 +510,10 @@
 	except KeyError, e:
 		res.addAttribute('shutdown_wait', '0')
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addOpenLDAP7: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addOpenLDAP7: %s' % err)
 
 	return errors
 
@@ -493,9 +525,10 @@
 			raise KeyError, 'No postmaster user was given for "%s"' % rname
 		res.addAttribute('postmaster_user', user)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addPostgreSQL85: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addPostgreSQL85: %s' % err)
 
 	try:
 		config_file = form['config_file'].strip()
@@ -503,9 +536,10 @@
 			raise KeyError, 'No path to the PostgreSQL 8 configuration file was given for "%s"' % rname
 		res.addAttribute('config_file', config_file)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addPostgreSQL86: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addPostgreSQL86: %s' % err)
 
 	try:
 		options = form['postmaster_options'].strip()
@@ -518,9 +552,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addPostgreSQL87: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addPostgreSQL87: %s' % err)
 
 	try:
 		shutdown_wait = int(form['shutdown_wait'].strip())
@@ -528,9 +563,10 @@
 	except KeyError, e:
 		res.addAttribute('shutdown_wait', '0')
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addPostgreSQL87: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addPostgreSQL87: %s' % err)
 
 	return errors
 
@@ -543,9 +579,10 @@
 			raise KeyError, 'No Tomcat user was given for "%s"' % rname
 		res.addAttribute('tomcat_user', user)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addTomcat55: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addTomcat55: %s' % err)
 
 	try:
 		config_file = form['config_file'].strip()
@@ -553,9 +590,10 @@
 			raise KeyError, 'No path to the Tomcat 5 configuration file was given for "%s"' % rname
 		res.addAttribute('config_file', config_file)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addTomcat56: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addTomcat56: %s' % err)
 
 	try:
 		options = form['catalina_options'].strip()
@@ -568,9 +606,10 @@
 		except:
 			pass
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addTomcat57: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addTomcat57: %s' % err)
 
 	try:
 		catalina_base = form['catalina_base'].strip()
@@ -578,9 +617,10 @@
 			raise KeyError, 'No cataliny base directory was given for "%s"' % rname
 		res.addAttribute('catalina_base', catalina_base)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addTomcat58: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addTomcat58: %s' % err)
 
 	try:
 		shutdown_wait = int(form['shutdown_wait'].strip())
@@ -588,9 +628,10 @@
 	except KeyError, e:
 		res.addAttribute('shutdown_wait', '0')
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addTomcat59: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addTomcat59: %s' % err)
 
 	return errors
 
@@ -603,9 +644,10 @@
 			raise KeyError, 'No volume group name was given for "%s"' % rname
 		res.addAttribute('vg_name', vg_name)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addLVM5: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addLVM5: %s' % err)
 
 	try:
 		lv_name = form['lv_name'].strip()
@@ -613,9 +655,10 @@
 			raise KeyError, 'No logical volume name was given for "%s"' % rname
 		res.addAttribute('lv_name', lv_name)
 	except Exception, e:
-		err = str(e)
+		err = repr(e)
 		errors.append(err)
-		luci_log.debug_verbose('addLVM6: %s' % err)
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('addLVM6: %s' % err)
 
 	return errors
 
--- conga/luci/site/luci/Extensions/Attic/RicciQueries.py	2007/05/03 20:16:38	1.1.2.1
+++ conga/luci/site/luci/Extensions/Attic/RicciQueries.py	2007/05/14 18:00:14	1.1.2.2
@@ -1,12 +1,10 @@
 from xml.dom import minidom
 from xml.dom.Node import ELEMENT_NODE
 from ricci_communicator import RicciCommunicator, extract_module_status
-from LuciSyslog import LuciSyslog
+from LuciSyslog import get_logger
+from conga_constants import LUCI_DEBUG_MODE
 
-try:
-	luci_log = LuciSyslog()
-except:
-	pass
+luci_log = get_logger()
 
 def checkBatch(rc, batch_id):
 	err_msg = 'An unknown Ricci error occurred on %s' % rc.hostname()
@@ -14,10 +12,14 @@
 	try:
 		batch = rc.batch_report(batch_id)
 		if batch is None:
-			luci_log.debug_verbose('checkBatch0: batch id %s was not found' % batch_id)
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('checkBatch0: batch id %s not found' \
+					% batch_id)
 			return (True, 'batch id %s was not found' % batch_id)
 	except Exception, e:
-		luci_log.debug_verbose('checkBatch0a: %s: %s' % (rc.hostname(), str(e)))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('checkBatch1: %s: %r' \
+				% (rc.hostname(), e))
 		return (-1, err_msg)
 
 	try:
@@ -26,7 +28,9 @@
 			err_msg = 'A Ricci error occurred on %s: %s' \
 				% (rc.hostname(), str(new_err_msg))
 	except Exception, e:
-		luci_log.debug_verbose('checkBatch1: %s: %s' % (rc.hostname(), str(e)))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('checkBatch2: %s: %r' \
+				% (rc.hostname(), e))
 		return (-1, err_msg)
 
 	# In progress.
@@ -38,7 +42,8 @@
 		return (True, 'completed sucessfully')
 
 	# Error
-	luci_log.debug_verbose('checkBatch2: %d: %s' % (code, rc.hostname()))
+	if LUCI_DEBUG_MODE is True:
+		luci_log.debug_verbose('checkBatch3: %d: %s' % (code, rc.hostname()))
 	return (-1, err_msg)
 
 def addClusterNodeBatch(cluster_name,
@@ -290,7 +295,8 @@
 		if not batch or len(batch) < 1:
 			raise Exception, 'no batch tag was found'
 	except Exception, e:
-		luci_log.debug_verbose('batchAttemptResult: %s' % str(e))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('BAR0: %r' % e)
 		return (None, None)
 
 	for i in batch:
@@ -299,13 +305,15 @@
 			result = i.getAttribute('status')
 			return (str(batch_number), str(result))
 		except Exception, e:
-			luci_log.debug_verbose('batchAttemptResult: %s' % str(e))
-
-	try:
-		luci_log.debug_verbose('no batch with batchid and status found in \"%s\"' % doc.toxml())
-	except:
-		pass
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('BAR1: %s' % e)
 
+	if LUCI_DEBUG_MODE is True:
+		try:
+			luci_log.debug_verbose('BAR2: batchid, status not in \"%s\"' \
+				% doc.toxml())
+		except:
+			pass
 	return (None, None)
 
 def getClusterStatusBatch(rc):
@@ -315,21 +323,25 @@
 	try:
 		cluster_tags = ricci_xml.getElementsByTagName('cluster')
 	except Exception, e:
-		luci_log.debug_verbose('getClusterStatusBatch0: %s' % str(e))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCSB0: %r' % e)
 		return None
 
 	if len(cluster_tags) < 1:
-		luci_log.debug_verbose('getClusterStatusBatch1: %d entries - expecting 1' \
-			% len(cluster_tags))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCSB1: %d entries - expecting 1' \
+				% len(cluster_tags))
 	elif len(cluster_tags) > 1:
-		luci_log.debug_verbose('getClusterStatusBatch2: %d entries - expecting 1, using the first' % len(cluster_tags))
-
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCSB2: %d entries, expecting 1 use first' \
+				% len(cluster_tags))
 	try:
 		cluster_node = cluster_tags[0]
 		if not cluster_node:
 			raise Exception, 'element 0 is None'
 	except Exception, e:
-		luci_log.debug_verbose('getClusterStatusBatch3: %s' % str(e))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCSB3: %r' % e)
 		return None
 
 	try:
@@ -337,12 +349,13 @@
 		doc.appendChild(cluster_node)
 		return doc
 	except Exception, e:
-		luci_log.debug_verbose('getClusterStatusBatch4: %s' % str(e))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCSB4: %r' % e)
 
 	return None
 
 def setClusterConf(rc, clusterconf, propagate=True):
-	if propagate == True:
+	if propagate is True:
 		propg = 'true'
 	else:
 		propg = 'false'
@@ -372,8 +385,9 @@
 		if not log_entries or len(log_entries) < 1:
 			raise Exception, 'no log data is available.'
 	except Exception, e:
-		luci_log.debug_verbose('Error retrieving log data from %s: %s' \
-			% (rc.hostname(), str(e)))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GNL0: retrieving log data from %s: %r' \
+				% (rc.hostname(), e))
 		return None
 
 	time_now = time()
@@ -524,7 +538,7 @@
 		else:
 			raise Exception, op
 	except Exception, e:
-		elem.setAttribute('message', 'Unknown operation: %s' % str(e))
+		elem.setAttribute('message', 'Unknown operation: %r' % e)
 		doc.appendChild(elem)
 		return doc
 
@@ -564,13 +578,15 @@
 	batch_str = '<module name="service"><request API_version="1.0"><function_call name="list"><var mutable="false" name="description" type="boolean" value="true"/></function_call></request></module>'
 	ricci_xml = rc.batch_run(batch_str, async=False)
 	if not ricci_xml or not ricci_xml.firstChild:
-		luci_log.debug_verbose('LS0: None returned')
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('LS0: None returned')
 		return None
 	try:
 		service_tags = ricci_xml.getElementsByTagName('service')
 		return service_tags
 	except Exception, e:
-		luci_log.debug_verbose('LS1: %s' % str(e))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('LS1: %r' % e)
 	return None
 
 def nodeIsVirtual(rc):
@@ -578,13 +594,15 @@
 
 	ricci_xml = rc.batch_run(batch_str, async=False)
 	if not ricci_xml or not ricci_xml.firstChild:
-		luci_log.debug_verbose('nodeIsVirtual0: None returned')
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('nodeIsVirtual0: None returned')
 		return None
 
 	var_tags = ricci_xml.getElementsByTagName('var')
 	if not var_tags or len(var_tags) < 2:
-		luci_log.debug_verbose('nodeIsVirtual1: unexpected response %s' \
-			% ricci_xml.toxml())
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('nodeIsVirtual1: unexpected response %s' \
+				% ricci_xml.toxml())
 		return None
 
 	success = False
@@ -605,7 +623,8 @@
 			else:
 				raise Exception, 'unexpected attribute name: %s' % name
 		except Exception, e:
-			luci_log.debug_verbose('nodeIsVirtual2: error: %s' % str(e))
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('nodeIsVirtual2: error: %r' % e)
 
 	if not success:
 		return None
@@ -621,7 +640,8 @@
 
 	ricci_xml = rc.batch_run(''.join(batch_list), async=False)
 	if not ricci_xml or not ricci_xml.firstChild:
-		luci_log.debug_verbose('no ricci_xml in getDaemonStates')
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GDS0: no ricci_xml')
 		return None
 	result = extractDaemonInfo(ricci_xml.firstChild)
 	return result
@@ -710,16 +730,18 @@
 		if rc is None:
 			raise Exception, 'unknown error'
 	except Exception, e:
-		luci_log.debug_verbose('Ricci error while connecting to %s: %s' \
-			% (system_info, str(e)))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCC0: connecting to %s: %r' \
+				% (system_info, e))
 		return None
 	# end workaround
 
 	try:
 		ret = rc.process_batch(batch)
 	except Exception, e:
-		luci_log.debug_verbose('process_batch error for %s: %s' \
-			% (system_info, str(e)))
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('GCC1: process_batch error for %s: %r' \
+				% (system_info, e))
 		return None
 
 	if not ret:
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2007/05/08 22:19:35	1.255.2.3
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2007/05/14 18:00:14	1.255.2.4
@@ -1,8 +1,5 @@
 from xml.dom import minidom
 import AccessControl
-from conga_constants import *
-import RicciQueries as rq
-from ricci_communicator import RicciCommunicator, RicciError, batch_status, extract_module_status
 
 from ClusterModel.ModelBuilder import ModelBuilder
 from ClusterModel.FailoverDomain import FailoverDomain
@@ -19,22 +16,31 @@
 from ClusterModel.Method import Method
 from ClusterModel.GeneralError import GeneralError
 
+import RicciQueries as rq
 from HelperFunctions import resolveOSType
-from LuciSyslog import LuciSyslog
+from LuciSyslog import get_logger
 from ResourceHandler import create_resource
-from FenceHandler import validateNewFenceDevice, FENCE_OPTS, validateFenceDevice, validate_fenceinstance, FD_VAL_FAIL, FD_VAL_SUCCESS
-
 from system_adapters import validate_svc_update
-
 from homebase_adapters import parseHostForm
 from LuciZope import userAuthenticated
+from LuciClusterInfo import getClusterInfo
+
+from conga_constants import *
 
-from LuciDB import manageCluster, createClusterSystems, havePermCreateCluster, setNodeFlag, delNodeFlag, getStorageNode, getClusterNode, delCluster, buildClusterCreateFlags, noNodeFlagsPresent, resolve_nodename, set_node_flag
+from FenceHandler import validateNewFenceDevice, FENCE_OPTS, \
+	validateFenceDevice, validate_fenceinstance, \
+	FD_VAL_FAIL, FD_VAL_SUCCESS
+
+from ricci_communicator import RicciCommunicator, RicciError, \
+	batch_status, extract_module_status
+
+from LuciDB import manageCluster, createClusterSystems, \
+	havePermCreateCluster, setNodeStatus, getStorageNode, \
+	getClusterNode, delCluster, buildClusterCreateFlags, \
+	noNodeStatussPresent, resolve_nodename, set_node_flag, \
+	getRicciAgent
 
-try:
-	luci_log = LuciSyslog()
-except:
-	pass
+luci_log = get_logger()
 
 def parseClusterNodes(self, request, cluster_os):
 	check_certs = False
@@ -58,7 +64,7 @@
 
 	if clusterName is None:
 		luci_log.debug_verbose('PCN0: no cluster name was given')
-		return (False, { 'errors': [ 'No cluster name was given.' ]})
+		return (False, { 'errors': [ 'No cluster name was given' ]})
 
 	shared_storage = False
 	try:
@@ -111,7 +117,7 @@
 
 			try:
 				if prev_auth:
-					messages.append('Host %s is already authenticated.' \
+					messages.append('Host %s is already authenticated' \
 						% cur_host)
 				else:
 					rc.auth(cur_passwd)
@@ -190,7 +196,7 @@
 	clusterName = add_cluster['name']
 
 	if len(clusterName) > 15:
-		errors.append('A cluster\'s name must be less than 16 characters long.')
+		errors.append('A cluster\'s name must be less than 16 characters long')
 
 	try:
 		cluster_os = add_cluster['cluster_os']
@@ -219,9 +225,9 @@
 				raise Exception, 'blank'
 			num_lockservers = len(lockservers)
 			if not num_lockservers in (1, 3, 5):
-				errors.append('You must have exactly 1, 3, or 5 GULM lock servers. You submitted %d lock servers.' % num_lockservers)
+				errors.append('You must have exactly 1, 3, or 5 GULM lock servers. You submitted %d lock servers' % num_lockservers)
 		except:
-			errors.append('No lock servers were given.')
+			errors.append('No lock servers were given')
 
 		if len(errors) > 0:
 			try:
@@ -326,7 +332,7 @@
 
 	if clusterName is None:
 		luci_log.debug_verbose('VACN0: no cluster name was given')
-		return (False, { 'errors': [ 'No cluster name was given.' ]})
+		return (False, { 'errors': [ 'No cluster name was given' ]})
 
 	if cluster_os is None:
 		cluster_folder = None
@@ -336,7 +342,7 @@
 				raise Exception, 'cluster DB object is missing'
 		except Exception, e:
 			luci_log.debug_verbose('VACN1: %s: %s' % (clusterName, str(e)))
-			return (False, { 'errors': [ 'The database object for %s is missing.' % clusterName ] })
+			return (False, { 'errors': [ 'The database object for %s is missing' % clusterName ] })
 
 		try:
 			cluster_os = cluster_folder.manage_getProperty('cluster_os')
@@ -356,7 +362,7 @@
 
 	if cluster_os is None:
 		luci_log.debug_verbose('Unable to determine cluster OS for %s' % clusterName)
-		return (False, { 'errors': [ 'Unable to determine the version of the cluster suite this cluster is running.' ] })
+		return (False, { 'errors': [ 'Unable to determine the version of the cluster suite this cluster is running' ] })
 
 	shared_storage = False
 	try:
@@ -409,7 +415,7 @@
 
 			try:
 				if prev_auth:
-					messages.append('Host %s is already authenticated.' \
+					messages.append('Host %s is already authenticated' \
 						% cur_host)
 				else:
 					rc.auth(cur_passwd)
@@ -473,7 +479,7 @@
 			raise Exception, 'Unable to find a ricci agent for %s' % clusterName
 	except Exception, e:
 		incomplete = True
-		errors.append('Unable to contact a ricci agent for %s.' % clusterName)
+		errors.append('Unable to contact a ricci agent for %s' % clusterName)
 		luci_log.debug_verbose('VACN10: %s: %s' % (clusterName, str(e)))
 
 	if incomplete or len(errors) > 0:
@@ -554,14 +560,14 @@
 		model.setModified(True)
 		conf_str = str(model.exportModelAsString())
 		if not conf_str:
-			raise Exception, 'Unable to save the new cluster model.'
+			raise Exception, 'Unable to save the new cluster model'
 
 		batch_number, result = rq.setClusterConf(cluster_ricci, conf_str)
 		if not batch_number or not result:
 			raise Exception, 'batch or result is None'
 	except Exception, e:
 		incomplete = True
-		errors.append('Unable to save the new cluster model.')
+		errors.append('Unable to save the new cluster model')
 		luci_log.debug_verbose('VACN14: %s' % str(e))
 
 	# Propagate the new cluster.conf to the existing nodes
@@ -648,7 +654,7 @@
 			raise KeyError, 'form_xml must not be blank'
 	except Exception, e:
 		luci_log.debug_verbose('vSA0: no form_xml: %s' % str(e))
-		return (False, {'errors': ['No resource data was supplied for this service.']})
+		return (False, {'errors': ['No resource data was supplied for this service']})
 
 	try:
 		model = request.SESSION.get('model')
@@ -656,7 +662,7 @@
 			raise Exception, 'model is None'
 	except Exception, e:
 		luci_log.debug_verbose('vSA0a: %s' % str(e))
-		return (False, {'errors': [ 'The cluster model is missing from the session object.' ]})
+		return (False, {'errors': [ 'The cluster model is missing from the session object' ]})
 
 	try:
 		doc = minidom.parseString(form_xml)
@@ -665,7 +671,7 @@
 			raise
 	except Exception, e:
 		luci_log.debug_verbose('vSA1: error: %s' % str(e))
-		return (False, {'errors': ['The resource data submitted for this service is not properly formed.']})
+		return (False, {'errors': ['The resource data submitted for this service is not properly formed']})
 
 	form_hash = {}
 	form_hash['toplevel'] = {'form': None, 'kids': [] }
@@ -711,11 +717,11 @@
 				dummy_form['resourceName'] = dummy_form['ip_address']
 		except Exception, e:
 			luci_log.debug_verbose('vSA3a: type is ip but no addr: %s' % str(e))
-			return (False, {'errors': [ 'No IP address was given.' ]})
+			return (False, {'errors': [ 'No IP address was given' ]})
 
 		try:
 			if dummy_form.has_key('immutable'):
-				newRes = getResource(model, dummy_form['resourceName'])
+				newRes = model.getResourceByName(dummy_form['resourceName'])
 				resObj = RefObject(newRes)
 				resObj.setRef(newRes.getName())
 			else:
@@ -754,7 +760,7 @@
 		service_name = request.form['svc_name'].strip()
 	except Exception, e:
 		luci_log.debug_verbose('vSA5: no service name: %s' % str(e))
-		return (False, {'errors': [ 'No service name was given.' ]})
+		return (False, {'errors': [ 'No service name was given' ]})
 
 	autostart = "1"
 	try:
@@ -785,14 +791,14 @@
 	try:
 		if request.form['action'] == 'edit':
 			if cur_service is None:
-				return (False, {'errors': [ 'The service %s could not be found for editing.' % service_name ]})
+				return (False, {'errors': [ 'The service %s could not be found for editing' % service_name ]})
 			model.deleteService(service_name)
 		elif request.form['action'] == 'add':
 			if cur_service is not None:
-				return (False, {'errors': [ 'A service with the name %s already exists.' % service_name ]})
+				return (False, {'errors': [ 'A service with the name %s already exists' % service_name ]})
 		else:
 			luci_log.debug_verbose('vSA4a: unknown action %s' % request.form['action'])
-			return (False, {'errors': [ 'An unknown action was specified.' ]})
+			return (False, {'errors': [ 'An unknown action was specified' ]})
 	except Exception, e:
 		luci_log.debug_verbose('vSA5: no action type: %s' % str(e))
 
@@ -835,7 +841,7 @@
 	except Exception, e:
 		luci_log.debug_verbose('vAS6a: exportModelAsString : %s' \
 			% str(e))
-		return (False, {'errors': [ 'An error occurred while adding this service.' ]})
+		return (False, {'errors': [ 'An error occurred while adding this service' ]})
 
 	rc = getRicciAgent(self, clustername)
 	if not rc:
@@ -851,7 +857,7 @@
 		batch_number, result = rq.setClusterConf(rc, str(conf))
 		if batch_number is None or result is None:
 			luci_log.debug_verbose('vAS8: missing batch_number or result')
-			raise Exception, 'unable to save the new cluster configuration.'
+			raise Exception, 'unable to save the new cluster configuration'
 	except Exception, e:
 		luci_log.debug_verbose('vAS9: %s' % str(e))
 		return 'An error occurred while propagating the new cluster.conf: %s' % str(e)
@@ -875,7 +881,7 @@
 			raise KeyError, 'type is blank'
 	except Exception, e:
 		luci_log.debug_verbose('VRA0: type is blank')
-		return (False, {'errors': ['No resource type was given.']})
+		return (False, {'errors': ['No resource type was given']})
 
 	try:
 		model = request.SESSION.get('model')
@@ -912,7 +918,7 @@
 	try:
 		gulm_ptr = model.getGULMPtr()
 		if gulm_ptr:
-			return (False, {'errors': ['Multicast cannot be used with GULM locking.']})
+			return (False, {'errors': ['Multicast cannot be used with GULM locking']})
 	except:
 		pass
 
@@ -946,7 +952,7 @@
 		addr_str = None
 
 	if (addr_str is None and mcast_manual != True) or (mcast_manual == True and addr_str == model.getMcastAddr()):
-		errors.append('No multicast configuration changes were made.')
+		errors.append('No multicast configuration changes were made')
 		return (False, {'errors': errors})
 
 	try:
@@ -1044,7 +1050,7 @@
 		if num_heuristics < 1:
 			raise ValueError, form['num_heuristics']
 	except KeyError, e:
-		errors.append('No number of heuristics was given.')
+		errors.append('No number of heuristics was given')
 	except ValueError, e:
 		errors.append('An invalid number of heuristics was given: %s' % str(e))
 
@@ -1135,20 +1141,20 @@
 		if not cluster_name:
 			raise KeyError('cluname')
 	except KeyError, e:
-		errors.append('No cluster name was given.')
+		errors.append('No cluster name was given')
 
 	if len(cluster_name) > 15:
-		errors.append('A cluster\'s name must be less than 16 characters long.')
+		errors.append('A cluster\'s name must be less than 16 characters long')
 
 	try:
 		version_num = int(form['cfgver'])
 		if version_num < old_ver:
-			raise ValueError, 'configuration version number must be %d or greater.' % old_ver
+			raise ValueError, 'configuration version number must be %d or greater' % old_ver
 		if version_num != old_ver:
 			# we'll increment the cluster version before propagating it.
 			version_num -= 1
 	except KeyError, e:
-		errors.append('No cluster configuration version was given.')
+		errors.append('No cluster configuration version was given')
 	except ValueError, e:
 		errors.append('An invalid configuration version was given: %s' % str(e))
 
@@ -1159,7 +1165,7 @@
 			cp.setConfigVersion(str(version_num))
 		except Exception, e:
 			luci_log.debug_verbose('unable to update general properties: %s' % str(e))
-			errors.append('Unable to update the cluster configuration.')
+			errors.append('Unable to update the cluster configuration')
 
 	try:
 		cluster_version = form['cluster_version'].strip()
@@ -1246,23 +1252,23 @@
 	errors = list()
 
 	if model.getGULMPtr() is not None:
-		return (False, {'errors': [ 'GULM clusters do not support fenced.' ]})
+		return (False, {'errors': [ 'GULM clusters do not support fenced' ]})
 
 	try:
 		post_fail_delay = int(form['post_fail_delay'])
 		if post_fail_delay < 0:
-			raise ValueError('post fail delay values must be 0 or greater.')
+			raise ValueError('post fail delay values must be 0 or greater')
 	except KeyError, e:
-		errors.append('No post fail delay was given.')
+		errors.append('No post fail delay was given')
 	except ValueError, e:
 		errors.append('Invalid post fail delay: %s' % str(e))
 
 	try:
 		post_join_delay = int(form['post_join_delay'])
 		if post_join_delay < 0:
-			raise ValueError('post join delay values must be 0 or greater.')
+			raise ValueError('post join delay values must be 0 or greater')
 	except KeyError, e:
-		errors.append('No post join delay was given.')
+		errors.append('No post join delay was given')
 	except ValueError, e:
 		errors.append('Invalid post join delay: %s' % str(e))
 
@@ -1284,13 +1290,13 @@
 		old_pf_delay = fd.getPostFailDelay()
 
 		if post_join_delay == old_pj_delay and post_fail_delay == old_pf_delay:
-			errors.append('No fence daemon properties were changed.')
+			errors.append('No fence daemon properties were changed')
 		else:
 			fd.setPostJoinDelay(str(post_join_delay))
 			fd.setPostFailDelay(str(post_fail_delay))
 	except Exception, e:
 		luci_log.debug_verbose('Unable to update fence daemon properties: %s' % str(e))
-		errors.append('An error occurred while attempting to update fence daemon properties.')
+		errors.append('An error occurred while attempting to update fence daemon properties')
 
 	if len(errors) > 0:
 		return (False, {'errors': errors })
@@ -1300,7 +1306,7 @@
 def validateGULMConfig(model, form):
 	gulm_ptr = model.getGULMPtr()
 	if not gulm_ptr:
-		return (False, {'errors': [ 'This cluster appears not to be using GULM locking.' ]})
+		return (False, {'errors': [ 'This cluster appears not to be using GULM locking' ]})
 
 	node_list = map(lambda x: x.getName(), gulm_ptr.getChildren())
 	for i in map(lambda x: x.getName(), model.getNodes()):
@@ -1327,7 +1333,7 @@
 
 	num_ls = len(gulm_lockservers)
 	if not num_ls in (1, 3, 5):
-		return (False, {'errors': [ 'You must have exactly 1, 3, or 5 GULM lock servers. You submitted %d lock servers.' % num_ls ]})
+		return (False, {'errors': [ 'You must have exactly 1, 3, or 5 GULM lock servers. You submitted %d lock servers' % num_ls ]})
 
 	model.GULM_ptr.children = gulm_lockservers
 	return (True, {})
@@ -1341,123 +1347,110 @@
 }
 
 def validateConfigCluster(self, request):
-  errors = list()
-  messages = list()
-  rc = None
+	errors = list()
+	messages = list()
+	rc = None
 
-  try:
-    model = request.SESSION.get('model')
-    if not model:
-      raise Exception, 'model is none'
-  except Exception, e:
-    model = None
-    try:
-      cluname = request.form['clustername']
-    except:
-      try:
-        cluname = request['clustername']
-      except:
-        luci_log.debug_verbose('VCC0a: no model, no cluster name')
-        return (False, {'errors': ['No cluster model was found.']})
+	try:
+		model = LuciExtractCluModel(self, request)
+	except Exception, e:
+		luci_log.debug_verbose('VCC0a: no model, no cluster name')
+		return (False, {'errors': ['No cluster model was found']})
 
-    try:
-      model = getModelForCluster(self, cluname)
-    except:
-      model = None
+	try:
+		if not request.form.has_key('configtype'):
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('VCC2: no configtype')
+			raise Exception, 'no config type'
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('VCC2a: %r' % e)
+		return (False, {'errors': [ 'No configuration type was submitted' ]})
 
-    if model is None:
-      luci_log.debug_verbose('VCC0: unable to get model from session')
-      return (False, {'errors': ['No cluster model was found.']})
-  try:
-    if not 'configtype' in request.form:
-      luci_log.debug_verbose('VCC2: no configtype')
-      raise Exception, 'no config type'
-  except Exception, e:
-    luci_log.debug_verbose('VCC2a: %s' % str(e))
-    return (False, {'errors': ['No configuration type was submitted.']})
+	if not configFormValidators.has_key(request.form['configtype']):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('VCC3: invalid config type: %s' \
+				% request.form['configtype'])
+		return (False, { 'errors': [ 'An invalid configuration type was submitted' ]})
 
-  if not request.form['configtype'] in configFormValidators:
-    luci_log.debug_verbose('VCC3: invalid config type: %s' % request.form['configtype'])
-    return (False, {'errors': ['An invalid configuration type was submitted.']})
+	try:
+		cp = model.getClusterPtr()
+	except:
+		luci_log.debug_verbose('VCC3a: getClusterPtr failed')
+		return (False, {'errors': ['No cluster model was found']})
 
-  try:
-    cp = model.getClusterPtr()
-  except:
-    luci_log.debug_verbose('VCC3a: getClusterPtr failed')
-    return (False, {'errors': ['No cluster model was found.']})
+	config_validator = configFormValidators[request.form['configtype']]
+	ret = config_validator(model, request.form)
 
-  config_validator = configFormValidators[request.form['configtype']]
-  ret = config_validator(model, request.form)
+	retcode = ret[0]
+	if 'errors' in ret[1]:
+		errors.extend(ret[1]['errors'])
 
-  retcode = ret[0]
-  if 'errors' in ret[1]:
-    errors.extend(ret[1]['errors'])
+	if 'messages' in ret[1]:
+		messages.extend(ret[1]['messages'])
 
-  if 'messages' in ret[1]:
-    messages.extend(ret[1]['messages'])
+	if retcode is True:
+		try:
+			config_ver = int(cp.getConfigVersion()) + 1
+			# always increment the configuration version
+			cp.setConfigVersion(str(config_ver))
+			model.setModified(True)
+			conf_str = model.exportModelAsString()
+			if not conf_str:
+				raise Exception, 'conf_str is none'
+		except Exception, e:
+			luci_log.debug_verbose('VCC4: export model as string failed: %s' \
+				% str(e))
+			errors.append('Unable to store the new cluster configuration')
 
-  if retcode == True:
-    try:
-      config_ver = int(cp.getConfigVersion()) + 1
-      # always increment the configuration version
-      cp.setConfigVersion(str(config_ver))
-      model.setModified(True)
-      conf_str = model.exportModelAsString()
-      if not conf_str:
-        raise Exception, 'conf_str is none'
-    except Exception, e:
-      luci_log.debug_verbose('VCC4: export model as string failed: %s' \
- 			% str(e))
-      errors.append('Unable to store the new cluster configuration')
+	try:
+		clustername = model.getClusterName()
+		if not clustername:
+			raise Exception, 'cluster name from model.getClusterName() is blank'
+	except Exception, e:
+		luci_log.debug_verbose('VCC5: error: getClusterName: %r' % e)
+		errors.append('Unable to determine cluster name from model')
 
-  try:
-    clustername = model.getClusterName()
-    if not clustername:
-      raise Exception, 'cluster name from model.getClusterName() is blank'
-  except Exception, e:
-    luci_log.debug_verbose('VCC5: error: getClusterName: %s' % str(e))
-    errors.append('Unable to determine cluster name from model')
+	if len(errors) > 0:
+		return (retcode, {'errors': errors, 'messages': messages})
 
-  if len(errors) > 0:
-    return (retcode, {'errors': errors, 'messages': messages})
+	if not rc:
+		rc = getRicciAgent(self, clustername)
+	if not rc:
+		luci_log.debug_verbose('VCC6: unable to find a ricci agent for the %s cluster' % clustername)
+		errors.append('Unable to contact a ricci agent for cluster %s' \
+			% clustername)
 
-  if not rc:
-    rc = getRicciAgent(self, clustername)
-    if not rc:
-      luci_log.debug_verbose('VCC6: unable to find a ricci agent for the %s cluster' % clustername)
-      errors.append('Unable to contact a ricci agent for cluster %s' \
-      % clustername)
-
-  if rc:
-    batch_id, result = rq.setClusterConf(rc, str(conf_str))
-    if batch_id is None or result is None:
-      luci_log.debug_verbose('VCC7: setCluserConf: batchid or result is None')
-      errors.append('Unable to propagate the new cluster configuration for %s' \
-      % clustername)
-    else:
-      try:
-        set_node_flag(self, clustername, rc.hostname(), batch_id, CLUSTER_CONFIG, 'Updating cluster configuration')
-      except:
-        pass
+	if rc:
+		batch_id, result = rq.setClusterConf(rc, str(conf_str))
+		if batch_id is None or result is None:
+			luci_log.debug_verbose('VCC7: setCluserConf: batchid or result is None')
+			errors.append('Unable to propagate the new cluster configuration for %s' % clustername)
+		else:
+			try:
+				set_node_flag(self, clustername, rc.hostname(), batch_id, CLUSTER_CONFIG, 'Updating cluster configuration')
+			except:
+				pass
 
-  if len(errors) < 1:
-    messages.append('The cluster properties have been updated.')
-  else:
-    return (retcode, {'errors': errors, 'messages': messages})
+	if len(errors) < 1:
+		messages.append('The cluster properties have been updated')
+	else:
+		return (retcode, {'errors': errors, 'messages': messages})
 
-  response = request.RESPONSE
-  response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
-	% (request['URL'], CLUSTER_CONFIG, clustername))
+	response = request.RESPONSE
+	response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
+		% (request['URL'], CLUSTER_CONFIG, clustername))
 
 def LuciExtractCluName(self, request):
 	cluname = None
+
 	try:
-		cluname = request.form['clustername']
-    except Exception, e:
-		try:
-			cluname = request['clustername']
-		except Exception, e:
-			cluname = None
+		if request.form.has_key('clustername'):
+			cluname = request.form['clustername'].strip()
+		if not cluname and request.has_key('clustername'):
+			cluname = request['clustername'].strip()
+	except Exception, e:
+		pass
 
 	if not cluname:
 		luci_log.debug_verbose('LECN0: no cluster name')
@@ -1482,49 +1475,38 @@
 		if not model:
 			luci_log.debug_verbose('LECM1: empty model')
 			model = None
-    except Exception, e:
+	except Exception, e:
 		luci_log.debug_verbose('LECM2: no model: %s' % str(e))
 		model = None
 	return model
 
-def LuciFenceAddReq(self, request):
+def validateFenceAdd(self, request):
+	errors = list()
+
 	model = LuciExtractCluModel(self, request)
+
 	if not model:
 		luci_log.debug_verbose('VFE0: no model')
-		return (False, [ 'No cluster model was found.' ])
-
-	ret = validateFenceAdd(request, model)
-	if ret[0] is not True:
-		return (False, { 'errors': ret[1] })
-
-def validateFenceAdd(request, model):
-	errors = list()
-	messages = list()
+		return (False, [ 'No cluster model was found' ])
 
 	if not request.form:
 		luci_log.debug_verbose('VFE: no form was submitted')
-		return (False, [ 'No form was submitted '])
+		return (False, [ 'No form was submitted' ])
 
-	ret_code, ret_msgs = validateNewFenceDevice(form, model)
-	if error_code != FD_VAL_SUCCESS:
-		if ret_msgs:
-			errors.extend(ret_msgs)
+	ret_code, ret_obj = validateNewFenceDevice(request.form, model)
+	if ret_code != FD_VAL_SUCCESS:
+		errors.extend(ret_obj)
 		return (False, errors)
-	if ret_msgs:
-		messages.extend(ret_msgs)
-	return (True, ret_msgs)
-
-    try:
-      conf_str = model.exportModelAsString()
-      if not conf_str:
-        raise Exception, 'conf_str is none'
-    except Exception, e:
-      luci_log.debug_verbose('VFE: export model as string failed: %s' \
-        % str(e))
-      errors.append('Unable to store the new cluster configuration')
 
-    response.redirect('%s?pagetype=%s&clustername=%s&fencename=%s&busyfirst=true' % (request['URL'], FENCEDEV, clustername, retobj))
+	try:
+		conf_str = str(model.exportModelAsString())
+		if not conf_str:
+			raise Exception, 'conf_str is none'
+	except Exception, e:
+		luci_log.debug_verbose('VFE: export model as string failed: %r' % e)
+		errors.append('Unable to store the new cluster configuration')
 
+	request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&fencename=%s&busyfirst=true' % (request['URL'], FENCEDEV, model.getClusterName(), ret_obj.getAttribute('name')))
 
 def validateFenceEdit(self, request):
   errors = list()
@@ -1544,7 +1526,7 @@
         cluname = request['clustername']
       except:
         luci_log.debug_verbose('VFE: no model, no cluster name')
-        return (False, {'errors': ['No cluster model was found.']})
+        return (False, {'errors': ['No cluster model was found']})
 
     try:
       model = getModelForCluster(self, cluname)
@@ -1553,7 +1535,7 @@
 
     if model is None:
       luci_log.debug_verbose('VFE: unable to get model from session')
-      return (False, {'errors': ['No cluster model was found.']})
+      return (False, {'errors': ['No cluster model was found']})
 
   form = None
   try:
@@ -1626,13 +1608,13 @@
 			raise KeyError, 'form_xml must not be blank'
 	except Exception, e:
 		luci_log.debug_verbose('vNFC0: no form_xml: %s' % str(e))
-		return (False, {'errors': ['No fence data was supplied.']})
+		return (False, {'errors': ['No fence data was supplied']})
 
 	try:
 		fence_level = int(request.form['fence_level'].strip())
 	except Exception, e:
 		luci_log.debug_verbose('vNFC1: no fence level: %s' % str(e))
-		return (False, {'errors': ['No fence level was supplied.']})
+		return (False, {'errors': ['No fence level was supplied']})
 
 	try:
 		nodename = request['nodename']
@@ -1640,7 +1622,7 @@
 			raise Exception, 'nodename is blank'
 	except Exception, e:
 		luci_log.debug_verbose('vNFC2: no nodename: %s' % str(e))
-		return (False, {'errors': ['No node name was given.']})
+		return (False, {'errors': ['No node name was given']})
 
 	try:
 		clustername = request['clustername']
@@ -1648,7 +1630,7 @@
 			raise Exception, 'clustername is blank'
 	except Exception, e:
 		luci_log.debug_verbose('vNFC3: no clustername: %s' % str(e))
-		return (False, {'errors': ['No cluster name was given.']})
+		return (False, {'errors': ['No cluster name was given']})
 
 	try:
 		model = request.SESSION.get('model')
@@ -1663,19 +1645,19 @@
 
 	if model is None:
 		luci_log.debug_verbose('vNFC4: unable to get model for cluster %s' % clustername)
-		return (False, {'errors': ['No cluster model was found.']})
+		return (False, {'errors': ['No cluster model was found']})
 
 	try:
 		doc = minidom.parseString(form_xml)
 	except Exception, e:
 		luci_log.debug_verbose('vNFC5: error: %s' % str(e))
-		return (False, {'errors': ['The fence data submitted is not properly formed.']})
+		return (False, {'errors': ['The fence data submitted is not properly formed']})
 
 	try:
 		node = model.retrieveNodeByName(nodename)
 	except GeneralError, e:
 		luci_log.debug_verbose('vNFC6: unable to find node name %s in current node list' % (str(nodename), str(e)))
-		return (False, {'errors': ['Unable to find the cluster node %s in the node list.' % str(nodename) ]})
+		return (False, {'errors': ['Unable to find the cluster node %s in the node list' % str(nodename) ]})
 
 	fence_level_num = int(fence_level)
 	levels = node.getFenceLevels()
@@ -1706,7 +1688,7 @@
 				luci_log.debug_verbose('vNFC6a: %s: %s' % (method_id, str(e)))
 				return (False, {'errors': ['An error occurred while deleting fence method %s' % method_id ]})
 		else:
-			return (True, {'messages': ['No changes were made.'] })
+			return (True, {'messages': ['No changes were made'] })
 
 	form_hash = {}
 	for i in forms:
@@ -1742,14 +1724,14 @@
 				parent = dummy_form['parent_fencedev']
 			except:
 				luci_log.debug_verbose('vNFC9: no parent for instance')
-				return (False, {'errors': [ 'Unable to determine what device the current instance uses.' ]})
+				return (False, {'errors': [ 'Unable to determine what device the current instance uses' ]})
 
 			try:
 				form_hash[parent][1].append(dummy_form)
 				del dummy_form['fence_instance']
 			except Exception, e:
 				luci_log.debug_verbose('vNFC10: no parent for instance')
-				return (False, {'errors': [ 'Unable to determine what device the current instance uses.' ]})
+				return (False, {'errors': [ 'Unable to determine what device the current instance uses' ]})
 		else:
 			form_hash[form_id] = (dummy_form, list())
 
@@ -1779,7 +1761,7 @@
 				if not fencedev_name.strip():
 					raise Exception, 'no fence name'
 			except Exception, e:
-				errors.append('You must provide a unique name for all fence devices.')
+				errors.append('You must provide a unique name for all fence devices')
 				continue
 
 			if fence_type is None:
@@ -1870,7 +1852,7 @@
 	except Exception, e:
 		luci_log.debug_verbose('vNFC17: exportModelAsString failed: %s' \
 			% str(e))
-		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration.' ]})
+		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
 
 	rc = getRicciAgent(self, clustername)
 	if not rc:
@@ -1881,7 +1863,7 @@
 	batch_number, result = rq.setClusterConf(rc, conf)
 	if batch_number is None or result is None:
 		luci_log.debug_verbose('vNFC19: missing batch and/or result')
-		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration.' ]})
+		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
 
 	try:
 		set_node_flag(self, clustername, ragent, str(batch_number), FENCEDEV_NODE_CONFIG, "Updating fence configuration for node \'%s\'" % nodename)
@@ -1909,7 +1891,7 @@
         cluname = request['clustername']
       except:
         luci_log.debug_verbose('VFE: no model, no cluster name')
-        return (False, {'errors': ['No cluster model was found.']})
+        return (False, {'errors': ['No cluster model was found']})
 
     try:
       model = getModelForCluster(self, cluname)
@@ -1918,11 +1900,11 @@
 
     if model is None:
       luci_log.debug_verbose('VFE: unable to get model from session')
-      return (False, {'errors': ['No cluster model was found.']})
+      return (False, {'errors': ['No cluster model was found']})
 
   form = None
   try:
-    response = request.response
+    response = request.RESPONSE
     form = request.form
     if not form:
       form = None
@@ -2110,7 +2092,7 @@
 			raise Exception, 'no model'
 	except Exception, e:
 		luci_log.debug_verbose('validateFdom0: no model: %s' % str(e))
-		return (False, {'errors': [ 'Unable to retrieve cluster information.' ]})
+		return (False, {'errors': [ 'Unable to retrieve cluster information' ]})
 
 	prioritized = False
 	try:
@@ -2138,14 +2120,14 @@
 			clustername = None
 
 	if not clustername:
-		errors.append('Unable to determine this cluster\'s name.')
+		errors.append('Unable to determine this cluster\'s name')
 
 	try:
 		name = request.form['name'].strip()
 		if not name:
 			raise Exception, 'blank'
 	except Exception, e:
-		errors.append('No name was given for this failover domain.')
+		errors.append('No name was given for this failover domain')
 		luci_log.debug_verbose('validateFdom0: %s' % str(e))
 
 	oldname = None
@@ -2158,14 +2140,14 @@
 
 	if oldname is None or oldname != name:
 		if model.getFailoverDomainByName(name) is not None:
-			errors.append('A failover domain named "%s" already exists.' % name)
+			errors.append('A failover domain named "%s" already exists' % name)
 
 	fdom = None
 	if oldname is not None:
 		fdom = model.getFailoverDomainByName(oldname)
 		if fdom is None:
 			luci_log.debug_verbose('validateFdom1: No fdom named %s exists' % oldname)
-			errors.append('No failover domain named "%s" exists.' % oldname)
+			errors.append('No failover domain named "%s" exists' % oldname)
 		else:
 			fdom.addAttribute('name', name)
 			fdom.children = list()
@@ -2211,7 +2193,7 @@
 		conf = str(model.exportModelAsString())
 	except Exception, e:
 		luci_log.debug_verbose('validateFdom2: %s' % str(e))
-		errors.append('Unable to update the cluster configuration.')
+		errors.append('Unable to update the cluster configuration')
 
 	if len(errors) > 0:
 		return (False, {'errors': errors })
@@ -2225,7 +2207,7 @@
 	batch_number, result = rq.setClusterConf(rc, conf)
 	if batch_number is None or result is None:
 		luci_log.debug_verbose('validateFdom4: missing batch and/or result')
-		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration.' ]})
+		return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
 
 	try:
 		if oldname:
@@ -2250,7 +2232,7 @@
 			raise Exception, 'blank'
 	except Exception, e:
 		luci_log.debug_verbose('validateVM0: no vm name: %s' % str(e))
-		errors.append('No virtual machine name was given.')
+		errors.append('No virtual machine name was given')
 
 	try:
 		vm_path = request.form['vmpath'].strip()
@@ -2258,7 +2240,7 @@
 			raise Exception, 'blank'
 	except Exception, e:
 		luci_log.debug_verbose('validateVM1: no vm path: %s' % str(e))
-		errors.append('No path to the virtual machine configuration file was given.')
+		errors.append('No path to the virtual machine configuration file was given')
 
 	autostart = 1
 	try:
@@ -2318,7 +2300,7 @@
 			rmptr.removeChild(xvm)
 			delete_vm = True
 		except:
-			return (False, {'errors': ['No virtual machine service named "%s" exists.' % old_name ]})
+			return (False, {'errors': ['No virtual machine service named "%s" exists' % old_name ]})
 	else:
 		if isNew is True:
 			xvm = Vm()
@@ -2332,7 +2314,7 @@
 				if not xvm:
 					raise Exception, 'not found'
 			except:
-				return (False, {'errors': ['No virtual machine service named "%s" exists.' % old_name ]})
+				return (False, {'errors': ['No virtual machine service named "%s" exists' % old_name ]})
 			xvm.addAttribute('name', vm_name)
 			xvm.addAttribute('path', vm_path)
 
@@ -2369,7 +2351,7 @@
 			raise Exception, 'cluster name from model.getClusterName() is blank'
 	except Exception, e:
 		luci_log.debug_verbose('validateVM3: %s' % str(e))
-		errors.append('Unable to determine the cluster name.')
+		errors.append('Unable to determine the cluster name')
 
 	if len(errors) > 0:
 		return (False, {'errors': errors })
@@ -2377,12 +2359,12 @@
 	rc = getRicciAgent(self, clustername)
 	if not rc:
 		luci_log.debug_verbose('validateVM4: no ricci for %s' % clustername)
-		return (False, {'errors': ['Unable to contact a ricci agent for this cluster.']})
+		return (False, {'errors': ['Unable to contact a ricci agent for this cluster']})
 
 	batch_number, result = rq.setClusterConf(rc, stringbuf)
 	if batch_number is None or result is None:
 		luci_log.debug_verbose('validateVM5: missing batch and/or result')
-		return (False, {'errors': [ 'Error creating virtual machine %s.' % vm_name ]})
+		return (False, {'errors': [ 'Error creating virtual machine %s' % vm_name ]})
 
 	try:
 		if delete_vm is True:
@@ -2542,13 +2524,6 @@
 
   return dummynode
 
-def getnodes(self, model):
-	try:
-		return map(lambda x: str(x.getName()), model.getNodes())
-	except Exception, e:
-		luci_log.debug_verbose('getnodes0: %s' % str(e))
-	return []
-
 def createCluConfigTree(self, request, model):
   dummynode = {}
 
@@ -2973,17 +2948,6 @@
 
   return dummynode
 
-def getClusterName(self, model):
-	return model.getClusterName()
-
-def getClusterAlias(self, model):
-	if not model:
-		return ''
-	alias = model.getClusterAlias()
-	if alias is None:
-		return model.getClusterName()
-	return alias
-
 def getClusterURL(self, request, model):
 	try:
 		clustername = request.clustername
@@ -2996,59 +2960,10 @@
 				raise Exception, 'cluster name from model is blank'
 		except:
 			luci_log.debug_verbose('GCURL0: unable to get cluster name')
-			return '.'
+			return ''
 
 	return '/luci/cluster/index_html?pagetype=7&clustername=%s' % clustername
 
-def getTabs(self, req):
-  ###XXX Make this method return only tabs current user can use
-  portaltabs = list()
-  if not userAuthenticated(self):
-    return portaltabs
-
-  selectedtab = "homebase"
-  try:
-    baseurl = req['URL']
-    if baseurl.find("cluster") > (-1):
-      selectedtab = "cluster"
-    elif baseurl.find("storage") > (-1):
-      selectedtab = "storage"
-    else:
-      selectedtab = "homebase"
-  except KeyError, e:
-    selectedtab = None
-
-  htab = { 'Title':"homebase",
-           'Description':"Home base for this luci server",
-           'Taburl':"/luci/homebase"}
-  if selectedtab == "homebase":
-    htab['isSelected'] = True
-  else:
-    htab['isSelected'] = False
-
-
-  ctab = { 'Title':"cluster",
-           'Description':"Cluster configuration page",
-           'Taburl':"/luci/cluster/index_html?pagetype=3"}
-  if selectedtab == "cluster":
-    ctab['isSelected'] = True
-  else:
-    ctab['isSelected'] = False
-
-  stab = { 'Title':"storage",
-           'Description':"Storage configuration page",
-           'Taburl':"/luci/storage"}
-  if selectedtab == "storage":
-    stab['isSelected'] = True
-  else:
-    stab['isSelected'] = False
-
-  portaltabs.append(htab)
-  portaltabs.append(ctab)
-  portaltabs.append(stab)
-
-  return portaltabs
-
 def getRicciAgentForCluster(self, req):
 	clustername = None
 	try:
@@ -3380,7 +3295,7 @@
 					raise Exception, 'cluname is blank'
 			except:
 				luci_log.debug_verbose('CTP0: no model/no cluster name')
-				return 'Unable to determine the cluster name.'
+				return 'Unable to determine the cluster name'
 		try:
 			model = getModelForCluster(self, cluname)
 		except Exception, e:
@@ -3402,7 +3317,7 @@
 		if ret is not None:
 			redirect_page = ret
 	else:
-		return 'An unknown cluster task was requested.'
+		return 'An unknown cluster task was requested'
 
 	response = request.RESPONSE
 	response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
@@ -3420,7 +3335,7 @@
 		return None
 
 	objname = '%s____flag' % nodename_resolved
-	fnpresent = noNodeFlagsPresent(self, nodefolder, objname, nodename_resolved)
+	fnpresent = noNodeStatussPresent(self, nodefolder, objname, nodename_resolved)
 
 	if fnpresent is None:
 		luci_log.debug('NL1: An error occurred while checking flags for %s' \
@@ -3609,12 +3524,12 @@
 			rc = None
 			try:
 				snode = getStorageNode(self, node[1].getId())
-				setNodeFlag(snode, CLUSTER_NODE_NEED_AUTH)
+				setNodeStatus(snode, CLUSTER_NODE_NEED_AUTH)
 			except:
 				pass
 
 			try:
-				setNodeFlag(node[1], CLUSTER_NODE_NEED_AUTH)
+				setNodeStatus(node[1], CLUSTER_NODE_NEED_AUTH)
 			except:
 				pass
 
@@ -3682,13 +3597,13 @@
 
 			if not rc2.authed():
 				try:
-					setNodeFlag(node[1], CLUSTER_NODE_NEED_AUTH)
+					setNodeStatus(node[1], CLUSTER_NODE_NEED_AUTH)
 				except:
 					pass
 
 				try:
 					snode = getStorageNode(self, node[0])
-					setNodeFlag(snode, CLUSTER_NODE_NEED_AUTH)
+					setNodeStatus(snode, CLUSTER_NODE_NEED_AUTH)
 				except:
 					pass
 
@@ -3784,7 +3699,7 @@
 			clustername = request.form['clustername']
 		except:
 			luci_log.debug('NTP0: missing cluster name')
-			return (False, {'errors': [ 'No cluster name was given.' ]})
+			return (False, {'errors': [ 'No cluster name was given' ]})
 
 	try:
 		nodename = request['nodename']
@@ -3793,7 +3708,7 @@
 			nodename = request.form['nodename']
 		except:
 			luci_log.debug('NTP1: missing node name')
-			return (False, {'errors': [ 'No node name was given.' ]})
+			return (False, {'errors': [ 'No node name was given' ]})
 
 	try:
 		task = request['task']
@@ -3802,7 +3717,7 @@
 			task = request.form['task']
 		except:
 			luci_log.debug('NTP2: missing task')
-			return (False, {'errors': [ 'No node task was given.' ]})
+			return (False, {'errors': [ 'No node task was given' ]})
 
 	nodename_resolved = resolve_nodename(self, clustername, nodename)
 
@@ -3817,17 +3732,17 @@
 		except RicciError, e:
 			luci_log.debug('NTP3: ricci error from %s: %s' \
 				% (nodename_resolved, str(e)))
-			return (False, {'errors': [ 'Unable to connect to the ricci agent on %s.' % nodename_resolved ]})
+			return (False, {'errors': [ 'Unable to connect to the ricci agent on %s' % nodename_resolved ]})
 		except:
 			luci_log.debug('NTP4: ricci error from %s: %s' \
 				% (nodename_resolved, str(e)))
-			return (False, {'errors': [ 'Unable to connect to the ricci agent on %s.' % nodename_resolved ]})
+			return (False, {'errors': [ 'Unable to connect to the ricci agent on %s' % nodename_resolved ]})
 
 		cluinfo = rc.cluster_info()
 		if not cluinfo[0] and not cluinfo[1]:
 			luci_log.debug('NTP5: node %s not in a cluster (expected %s)' \
 				% (nodename_resolved, clustername))
-			return (False, {'errors': [ 'Node "%s" reports it is not in a cluster.' % nodename_resolved ]})
+			return (False, {'errors': [ 'Node "%s" reports it is not in a cluster' % nodename_resolved ]})
 
 		cname = clustername.lower()
 		if cname != cluinfo[0].lower() and cname != cluinfo[1].lower():
@@ -3838,14 +3753,14 @@
 			rc = None
 			try:
 				snode = getStorageNode(self, nodename)
-				setNodeFlag(snode, CLUSTER_NODE_NEED_AUTH)
+				setNodeStatus(snode, CLUSTER_NODE_NEED_AUTH)
 			except:
 				# we'll hit it again, and try again then
 				pass
 
 			try:
 				cnode = getClusterNode(self, nodename, clustername)
-				setNodeFlag(cnode, CLUSTER_NODE_NEED_AUTH)
+				setNodeStatus(cnode, CLUSTER_NODE_NEED_AUTH)
 			except:
 				# we'll hit it again, and try again then
 				pass
@@ -3853,7 +3768,7 @@
 		if rc is None:
 			luci_log.debug('NTP7: node %s is not authenticated' \
 				% nodename_resolved)
-			return (False, {'errors': [ 'Node "%s" is not authenticated.' % nodename_resolved ]})
+			return (False, {'errors': [ 'Node "%s" is not authenticated' % nodename_resolved ]})
 
 	if task == NODE_LEAVE_CLUSTER:
 		if nodeLeave(self, rc, clustername, nodename_resolved) is None:
@@ -3874,7 +3789,7 @@
 	elif task == NODE_REBOOT:
 		if forceNodeReboot(self, rc, clustername, nodename_resolved) is None:
 			luci_log.debug_verbose('NTP10: nodeReboot failed')
-			return (False, {'errors': [ 'Node "%s" failed to reboot.' \
+			return (False, {'errors': [ 'Node "%s" failed to reboot' \
 				% nodename_resolved ]})
 
 		response = request.RESPONSE
@@ -3883,7 +3798,7 @@
 	elif task == NODE_FENCE:
 		if forceNodeFence(self, clustername, nodename, nodename_resolved) is None:
 			luci_log.debug_verbose('NTP11: nodeFencefailed')
-			return (False, {'errors': [ 'Fencing of node "%s" failed.' \
+			return (False, {'errors': [ 'Fencing of node "%s" failed' \
 				% nodename_resolved]})
 
 		response = request.RESPONSE
@@ -3892,7 +3807,7 @@
 	elif task == NODE_DELETE:
 		if nodeDelete(self, rc, model, clustername, nodename, nodename_resolved) is None:
 			luci_log.debug_verbose('NTP12: nodeDelete failed')
-			return (False, {'errors': [ 'Deletion of node "%s" from cluster "%s" failed.' % (nodename_resolved, clustername) ]})
+			return (False, {'errors': [ 'Deletion of node "%s" from cluster "%s" failed' % (nodename_resolved, clustername) ]})
 
 		response = request.RESPONSE
 		response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
@@ -3941,18 +3856,18 @@
 	if not rc.authed():
 		try:
 			snode = getStorageNode(self, nodename)
-			setNodeFlag(snode, CLUSTER_NODE_NEED_AUTH)
+			setNodeStatus(snode, CLUSTER_NODE_NEED_AUTH)
 		except:
 			pass
 
 		if clustername:
 			try:
 				cnode = getClusterNode(self, nodename, clustername)
-				setNodeFlag(cnode, CLUSTER_NODE_NEED_AUTH)
+				setNodeStatus(cnode, CLUSTER_NODE_NEED_AUTH)
 			except:
 				pass
 
-		return 'Luci is not authenticated to node %s. Please reauthenticate first.' % nodename
+		return 'Luci is not authenticated to node %s. Please reauthenticate first' % nodename
 
 	return rq.getNodeLogs(rc)
 
@@ -4130,7 +4045,7 @@
 						node_report['statusmessage'] = '%s%s' % (RICCI_CONNECT_FAILURE_MSG, PRE_JOIN)
 					else:
 						node_report['statusindex'] = 0
-						node_report['statusmessage'] = '%s Install is in an unknown state.' % RICCI_CONNECT_FAILURE_MSG
+						node_report['statusmessage'] = '%s Install is in an unknown state' % RICCI_CONNECT_FAILURE_MSG
 					nodereports.append(node_report)
 					continue
 				elif creation_status == -(INSTALL_TASK):
@@ -4307,7 +4222,7 @@
 
 	if name is None:
 		luci_log.debug_verbose('delService1: no service name')
-		return (False, {'errors': [ '%s: no service name was provided.' % errstr ]})
+		return (False, {'errors': [ '%s: no service name was provided' % errstr ]})
 
 	clustername = None
 	try:
@@ -4320,12 +4235,12 @@
 
 	if clustername is None:
 		luci_log.debug_verbose('delService2: no cluster name for %s' % name)
-		return (False, {'errors': [ '%s: no cluster name was provided.' % errstr ]})
+		return (False, {'errors': [ '%s: no cluster name was provided' % errstr ]})
 
 	rc = getRicciAgent(self, clustername)
 	if not rc:
 		luci_log.debug_verbose('delService3: unable to get ricci agent for cluster %s' % clustername)
-		return (False, {'errors': [ '%s: unable to find a Ricci agent for this cluster.' % errstr ]})
+		return (False, {'errors': [ '%s: unable to find a Ricci agent for this cluster' % errstr ]})
 
 	try:
 		ragent = rc.hostname()
@@ -4333,7 +4248,7 @@
 			raise Exception, 'unable to determine the hostname of the ricci agent'
 	except Exception, e:
 		luci_log.debug_verbose('delService4: %s: %s' % (errstr, str(e)))
-		return (False, {'errors': [ '%s: unable to find a Ricci agent for this cluster.' % errstr ]})
+		return (False, {'errors': [ '%s: unable to find a Ricci agent for this cluster' % errstr ]})
 
 	try:
 		model.deleteService(name)
@@ -4385,7 +4300,7 @@
 
 	if name is None:
 		luci_log.debug_verbose('delResource1: no resource name')
-		return '%s: no resource name was provided.' % errstr
+		return '%s: no resource name was provided' % errstr
 
 	clustername = None
 	try:
@@ -4398,7 +4313,7 @@
 
 	if clustername is None:
 		luci_log.debug_verbose('delResource2: no cluster name for %s' % name)
-		return '%s: could not determine the cluster name.' % errstr
+		return '%s: could not determine the cluster name' % errstr
 
 	try:
 		ragent = rc.hostname()
@@ -4406,7 +4321,7 @@
 			raise Exception, 'unable to determine the hostname of the ricci agent'
 	except Exception, e:
 		luci_log.debug_verbose('delResource3: %s: %s' % (errstr, str(e)))
-		return '%s: could not determine the ricci agent hostname.' % errstr
+		return '%s: could not determine the ricci agent hostname' % errstr
 
 	resPtr = model.getResourcesPtr()
 	resources = resPtr.getChildren()
@@ -4420,7 +4335,7 @@
 
 	if not found:
 		luci_log.debug_verbose('delResource4: cant find res %s' % name)
-		return '%s: the specified resource was not found.' % errstr
+		return '%s: the specified resource was not found' % errstr
 
 	try:
 		model.setModified(True)
@@ -4482,7 +4397,7 @@
 		batch_number, result = rq.setClusterConf(rc, str(conf))
 		if batch_number is None or result is None:
 			luci_log.debug_verbose('addResource5: missing batch_number or result')
-			raise Exception, 'unable to save the new cluster configuration.'
+			raise Exception, 'unable to save the new cluster configuration'
 	except Exception, e:
 		luci_log.debug_verbose('addResource6: %s' % str(e))
 		return 'An error occurred while propagating the new cluster.conf: %s' % str(e)
@@ -4512,7 +4427,7 @@
 		request.SESSION.set('model', model)
 	except Exception, e:
 		luci_log.debug_verbose('Appending model to request failed: %r' % e)
-		return 'An error occurred while storing the cluster model.'
+		return 'An error occurred while storing the cluster model'
 
 def getModelBuilder(self, rc, isVirtualized):
 	try:
--- conga/luci/site/luci/Extensions/homebase_adapters.py	2007/05/04 19:10:24	1.50.2.2
+++ conga/luci/site/luci/Extensions/homebase_adapters.py	2007/05/14 18:00:14	1.50.2.3
@@ -2,10 +2,10 @@
 	STORAGE_FOLDER_PATH, CLUSTER_FOLDER_PATH
 
 from RicciQueries import getClusterConf
-from LuciSyslog import LuciSyslog
+from LuciSyslog import get_logger
 from HelperFunctions import resolveOSType
 
-from LuciDB import	delCluster, delNodeFlag, delSystem, getClusterNode, \
+from LuciDB import	delCluster, clearNodeStatus, delSystem, getClusterNode, \
 					getClusters, getStorage, getStorageNode, \
 					havePermAddCluster, havePermAddUser, havePermDelUser, \
 					havePermEditPerms, havePermRemCluster, havePermRemStorage, \
@@ -13,7 +13,6 @@
 
 from ricci_communicator import RicciCommunicator
 
-
 # Homebase area page types
 HOMEBASE_ADD_USER				= '1'
 HOMEBASE_ADD_SYSTEM				= '2'
@@ -24,50 +23,42 @@
 HOMEBASE_ADD_CLUSTER_INITIAL	= '7'
 HOMEBASE_AUTH					= '8'
 
-try:
-	luci_log = LuciSyslog()
-except:
-	pass
+luci_log = get_logger()
 
 def validateDelSystem(self, request):
 	errors = list()
 	messages = list()
 
 	if '__SYSTEM' in request.form:
-		sysNames = request.form['__SYSTEM']
-		for i in sysNames:
-			if i == '':
+		system_names = request.form['__SYSTEM']
+		for i in system_names:
+			if not i:
 				continue
-			dsResult = delSystem(self, i)
-			if dsResult:
-				errors.append(dsResult)
+			err_msg = delSystem(self, i)
+			if err_msg:
+				errors.append(err_msg)
 			else:
 				messages.append('Removed storage system "%s" successfully' % i)
 
 	if '__CLUSTER' in request.form:
-		cluNames = request.form['__CLUSTER']
-		for i in cluNames:
-			if i == '':
+		cluster_names = request.form['__CLUSTER']
+		for i in cluster_names:
+			if not i:
 				continue
-			dcResult = delCluster(self, i)
-			if dcResult:
-				errors.append(dcResult)
+			err_msg = delCluster(self, i)
+			if err_msg:
+				errors.append(err_msg)
 			else:
 				messages.append('Removed cluster "%s" successfully' % i)
 
-	if len(errors) > 0:
-		retCode = False
-	else:
-		retCode = True
-
-	return (retCode, {'messages': messages, 'errors': errors })
+	return (len(errors) < 1, { 'messages': messages, 'errors': errors })
 
 def validateDelUser(self, request):
 	errors = list()
 	messages = list()
 
-	if not 'deluserId' in request.form:
-		return (False, {'errors': [ 'No User Id given' ] })
+	if not request.form.has_key('deluserId'):
+		return (False, { 'errors': [ 'No User ID given' ] })
 	
 	userId = request.form['deluserId']
 
@@ -75,61 +66,66 @@
 		user = self.portal_membership.getMemberById(userId)
 		if not user:
 			raise Exception, 'user %s does not exist' % userId
-	except:
+	except Exception, e:
+		luci_log.debug_verbose('VDU0: %s: %r' % (userId, e))
 		return (False, {'errors': [ 'No such user: "%s"' % userId ] })
 
 	for i in getClusters(self):
 		try:
-			i[1].manage_delLocalRoles([userId])
-		except:
+			i[1].manage_delLocalRoles([ userId ])
+		except Exception, e:
+			luci_log.debug_verbose('VDU1: %s %s: %r' % (userId, i[0], e))
 			errors.append('Error deleting roles from cluster "%s" for user "%s"' % (i[0], userId))
 
 	for i in getStorage(self):
 		try:
-			i[1].manage_delLocalRoles([userId])
-		except:
+			i[1].manage_delLocalRoles([ userId ])
+		except Exception, e:
+			luci_log.debug_verbose('VDU2: %s: %r' % (userId, i[0], e))
 			errors.append('Error deleting roles from storage system "%s" for user "%s"' % (i[0], userId))
 
 	try:
-		self.acl_users.userFolderDelUsers([userId])
-	except:
+		self.acl_users.userFolderDelUsers([ userId ])
+	except Exception, e:
+		luci_log.debug_verbose('VDU3: %s %r' % (userId, e))
 		errors.append('Unable to delete user "%s"' % userId)
 		return (False, {'errors': errors })
 
 	messages.append('User "%s" has been deleted' % userId)
-	return (True, {'errors': errors, 'messages': messages })
+	return (True, { 'errors': errors, 'messages': messages })
 
 def validateAddUser(self, request):
 	messages = list()
 
-	if not 'newUserName' in request.form:
-		return (False, { 'errors': ['No user name given'] })
-	if not 'newPassword' in request.form:
-		return (False, { 'errors': ['No password given'] })
-	if not 'newPasswordConfirm' in request.form:
-		return (False, {'errors': ['You didn\'t confirm the password'] })
+	if not request.form.has_key('newUserName'):
+		return (False, { 'errors': [ 'No user name given' ] })
+	if not request.form.has_key('newPassword'):
+		return (False, { 'errors': [ 'No password given' ] })
+	if not request.form.has_key('newPasswordConfirm'):
+		return (False, { 'errors': [ 'You didn\'t confirm the password' ] })
 
-	user = request.form['newUserName']
+	user = request.form['newUserName'].strip()
 
 	if self.portal_membership.getMemberById(user):
-		return (False, {'errors': ['The user "%s" already exists' % user ]})
+		return (False, { 'errors': [ 'The user "%s" already exists' % user ]})
 
 	passwd = request.form['newPassword']
 	pwconfirm = request.form['newPasswordConfirm']
 
 	if passwd != pwconfirm:
-		return (False, {'errors': ['The passwords do not match']})
+		return (False, { 'errors': [ 'The passwords given do not match' ]})
 
 	try:
-		self.portal_registration.addMember(user, passwd, properties = { 'username': user, 'password': passwd, 'confirm': passwd, 'roles': ['Member'], 'domains':[], 'email': '%s at example.com' % user })
-	except:
-		return (False, {'errors': [ 'Unable to add new user "%s"' % user ] })
+		self.portal_registration.addMember(user, passwd, properties = { 'username': user, 'password': passwd, 'confirm': passwd, 'roles': [ 'Member' ], 'domains': [], 'email': '%s@conga.example.com' % user })
+	except Exception, e:
+		luci_log.debug_verbose('VAU0: %s: %r' % (user, e))
+		return (False, { 'errors': [ 'Unable to add new user "%s"' % user ] })
 
 	if not self.portal_membership.getMemberById(user):
-		return (False, {'errors': [ 'Unable to add new user "%s"' % user ] })
+		return (False, { 'errors': [ 'Unable to add new user "%s"' % user ] })
 
 	messages.append('Added new user "%s" successfully' % user)
-	return (True, {'messages': messages, 'params': { 'user': user }})
+	return (True, { 'messages': messages, 'params': { 'user': user }})
 
 def validateAddClusterInitial(self, request):
 	errors = list()
@@ -489,23 +485,14 @@
 		luci_log.debug_verbose('VAC1: no cluster os')
 		errors.append('Unable to determine the version of cluster %s.' % cluster_name)
 
-	check_certs = False
-	try:
-		check_certs = 'check_certs' in request.form
-	except:
-		check_certs = False
+	check_certs = request.form.has_key('check_certs')
+	same_node_passwds = request.form.has_key('allSameCheckBox')
 
 	try:
 		pass_num = int(request.form['pass'].strip()) + 1
 	except:
 		pass_num = 1
 
-	same_node_passwds = False
-	try:
-		same_node_passwds = 'allSameCheckBox' in request.form
-	except:
-		same_node_passwds = False
-
 	add_cluster = { 'name': cluster_name,
 					'pass': pass_num,
 					'cluster_os': cluster_os,
@@ -630,11 +617,7 @@
 	except:
 		pass
 
-	check_certs = False
-	try:
-		check_certs = 'check_certs' in request.form
-	except:
-		check_certs = False
+	check_certs = request.form.has_key('check_certs')
 
 	add_systems, incomplete, errors, messages = parseHostForm(request, check_certs)
 	delete_keys = list()
@@ -691,22 +674,21 @@
 	errors = list()
 
 	username = None
-	if not request.form.has_key('userList'):
-		luci_log.debug_verbose('VP0: no user given')
-		errors.append('No user name was given.')
-	else:
+	if request.form.has_key('userList'):
 		username = request.form['userList'].strip()
 
+	if not username:
+		return (False, { 'errors': [ 'No user name was given' ]})
+
 	user_id = None
-	if username is not None:
-		try:
-			user = self.portal_membership.getMemberById(username)
-			if not user:
-				raise Exception, 'no user'
-			user_id = user.getUserId()
-		except Exception, e:
-			luci_log.debug_verbose('VP1: no user "%s": %s' % (username, str(e)))
-			errors.append('An invalid user "%s" was given.' % username)
+	try:
+		user = self.portal_membership.getMemberById(username)
+		if not user:
+			raise Exception, 'no user'
+		user_id = user.getUserId()
+	except Exception, e:
+		luci_log.debug_verbose('VP1: no user "%s": %r' % (username, e))
+		errors.append('An invalid user "%s" was given' % username)
 
 	if len(errors) > 0:
 		return (False, { 'errors': errors })
@@ -724,7 +706,8 @@
 					else:
 						i[1].manage_delLocalRoles([ user_id ])
 					messages.append('Removed permission for user "%s" for cluster "%s"' % (user_id, i[0]))
-			except:
+			except Exception, e:
+				luci_log.debug_verbose('VP2: %s %s: %r' % (user_id, i[0], e))
 				errors.append('Failed to remove permission for user "%s" for cluster "%s"' % (user_id, i[0]))
 	else:
 		for i in clusters:
@@ -735,7 +718,8 @@
 						roles.append('View')
 						i[1].manage_setLocalRoles(user_id, roles)
 						messages.append('Added permission for user "%s" for cluster "%s"' % (user_id, i[0]))
-				except:
+				except Exception, e:
+					luci_log.debug_verbose('VP3: %s %s %r' % (user_id, i[0], e))
 					errors.append('Failed to add permission for user "%s" for cluster "%s"' % (user_id, i[0]))
 			else:
 				try:
@@ -749,9 +733,11 @@
 							i[1].manage_delLocalRoles([ user_id ])
 
 						messages.append('Removed permission for user "%s" for cluster "%s"' % (user_id, i[0]))
-				except:
+				except Exception, e:
+					luci_log.debug_verbose('VP4: %s %s %r' % (user_id, i[0], e))
 					errors.append('Failed to remove permission for user "%s" for cluster "%s"' % (user_id, i[0]))
 
+
 	storage = self.restrictedTraverse('%s/systems/storage/objectItems' % PLONE_ROOT)('Folder')
 	if not request.form.has_key('__SYSTEM'):
 		for i in storage:
@@ -807,11 +793,7 @@
 	except:
 		pass
 
-	check_certs = False
-	try:
-		check_certs = 'check_certs' in request.form
-	except:
-		check_certs = False
+	check_certs = request.form.has_key('check_certs')
 
 	system_list, incomplete, errors, messages = parseHostForm(request, check_certs)
 	delete_keys = list()
@@ -850,12 +832,12 @@
 						% cur_host)
 				delete_keys.append(i)
 				try:
-					delNodeFlag(self, getStorageNode(self, cur_host), CLUSTER_NODE_NEED_AUTH)
+					clearNodeStatus(self, getStorageNode(self, cur_host), CLUSTER_NODE_NEED_AUTH)
 				except:
 					pass
 
 				try:
-					delNodeFlag(self, getClusterNode(self, cur_host, rc.cluster_info()[0]), CLUSTER_NODE_NEED_AUTH)
+					clearNodeStatus(self, getClusterNode(self, cur_host, rc.cluster_info()[0]), CLUSTER_NODE_NEED_AUTH)
 				except:
 					pass
 			except Exception, e:
--- conga/luci/site/luci/Extensions/ricci_communicator.py	2007/05/04 19:10:24	1.25.2.2
+++ conga/luci/site/luci/Extensions/ricci_communicator.py	2007/05/14 18:00:14	1.25.2.3
@@ -1,482 +1,505 @@
 import xml
 import xml.dom
 from xml.dom import minidom
-from LuciSyslog import LuciSyslog
+from LuciSyslog import get_logger
 from conga_ssl import SSLSocket
+from conga_constants import LUCI_DEBUG_MODE
 
 CERTS_DIR_PATH = '/var/lib/luci/var/certs/'
-
-try:
-    luci_log = LuciSyslog()
-except:
-    pass
+luci_log = get_logger()
 
 class RicciError(Exception):
-    pass
+	pass
 
 class RicciCommunicator:
-    def __init__(self, hostname, enforce_trust=True, port=11111):
-        self.__hostname = hostname
-        self.__port = port
-        
-        self.__timeout_init  = 4
-        self.__timeout_auth  = 4
-        self.__timeout_short = 6
-        self.__timeout_long  = 600
-        
-        self.__privkey_file = '%sprivkey.pem' % CERTS_DIR_PATH
-        self.__cert_file = '%scacert.pem' % CERTS_DIR_PATH
-        
-        try:
-            self.ss = SSLSocket(self.__hostname,
-                                self.__port,
-                                self.__timeout_init)
-            if enforce_trust:
-                if not self.ss.trusted():
-                    raise RicciError, 'ricci\'s certificate is not trusted'
-        except Exception, e:
-            raise RicciError, 'Error setting up SSL for connection to %s: %s' \
-                % (self.__hostname, str(e))
-        except:
-            raise RicciError, 'Error setting up SSL for connection to %s' \
-                % self.__hostname
-        
-        # receive ricci header
-        hello = self.__receive(self.__timeout_init)
-        try:
-            luci_log.debug_verbose('RC:init0: Received header from %s: \"%s\"' \
-                % (self.__hostname, hello.toxml()))
-        except:
-            pass
-        
-        self.__authed = hello.firstChild.getAttribute('authenticated') == 'true'
-        self.__cluname = hello.firstChild.getAttribute('clustername')
-        self.__clualias = hello.firstChild.getAttribute('clusteralias')
-        self.__reported_hostname = hello.firstChild.getAttribute('hostname')
-        self.__os = hello.firstChild.getAttribute('os')
-        self.__dom0 = hello.firstChild.getAttribute('xen_host') == 'true'
-        
-    def hostname(self):
-        luci_log.debug_verbose('RC:hostname: [auth %d] reported hostname = %s' \
-            % (self.__authed, self.__hostname))
-        return self.__hostname
-    def authed(self):
-        luci_log.debug_verbose('RC:authed: reported authed = %d for %s' \
-            % (self.__authed, self.__hostname))
-        return self.__authed
-    def system_name(self):
-        luci_log.debug_verbose('RC:system_name: [auth %d] reported system_name = %s for %s' \
-            % (self.__authed, self.__reported_hostname, self.__hostname))
-        return self.__reported_hostname
-    def cluster_info(self):
-        luci_log.debug_verbose('RC:cluster_info: [auth %d] reported cluster_info = (%s,%s) for %s' \
-            % (self.__authed, self.__cluname, self.__clualias, self.__hostname))
-        return (self.__cluname, self.__clualias)
-    def os(self):
-        luci_log.debug_verbose('RC:os: [auth %d] reported os = %s for %s' \
-            % (self.__authed, self.__os, self.__hostname))
-        return self.__os
-    def dom0(self):
-        luci_log.debug_verbose('RC:dom0: [auth %d] reported dom0 = %s for %s' \
-            % (self.__authed, self.__dom0, self.__hostname))
-        return self.__dom0
-
-    def fingerprint(self):
-        return self.ss.peer_fingerprint()
-
-    def trust(self):
-        return self.ss.trust()
-
-    def untrust(self):
-        return self.ss.untrust()
-
-    def trusted(self):
-        return self.ss.trusted()
-
-    def auth(self, password):
-        if self.authed():
-            luci_log.debug_verbose('RC:auth0: already authenticated to %s' \
-                % self.__hostname)
-            return True
-        
-        # send request
-        doc = minidom.Document()
-        ricci = doc.createElement("ricci")
-        ricci.setAttribute("version", "1.0")
-        ricci.setAttribute("function", "authenticate")
-        ricci.setAttribute("password", password)
-        doc.appendChild(ricci)
-        self.__send(doc, self.__timeout_auth)
-        
-        # receive response
-        resp = self.__receive(self.__timeout_auth)
-        self.__authed = resp.firstChild.getAttribute('authenticated') == 'true'
-
-        if self.__authed:
-            try:
-                self.__cluname = resp.firstChild.getAttribute('clustername')
-                self.__clualias = resp.firstChild.getAttribute('clusteralias')
-                self.__reported_hostname = resp.firstChild.getAttribute('hostname')
-                self.__os = resp.firstChild.getAttribute('os')
-                self.__dom0 = resp.firstChild.getAttribute('xen_host') == 'true'
-            except:
-                pass
-        luci_log.debug_verbose('RC:auth1: auth call returning %d' \
-            % self.__authed)
-        return self.__authed
-
-    def unauth(self):
-        doc = minidom.Document()
-        ricci = doc.createElement('ricci')
-        ricci.setAttribute('version', '1.0')
-        ricci.setAttribute('function', 'unauthenticate')
-        doc.appendChild(ricci)
-        self.__send(doc, self.__timeout_auth)
-        resp = self.__receive(self.__timeout_auth)
-
-        luci_log.debug_verbose('RC:unauth0: trying to unauthenticate to %s' \
-            % self.__hostname)
-
-        try:
-            ret = resp.firstChild.getAttribute('success')
-            luci_log.debug_verbose('RC:unauth1: unauthenticate returned %s for %s' \
-                % (ret, self.__hostname))
-            if ret != '0':
-                raise Exception, 'Invalid response'
-            try:
-                self.ss.untrust()
-            except:
-                pass
-        except:
-            errstr = 'Error authenticating to host %s: %s' \
-                        % (self.__hostname, str(ret))
-            luci_log.debug_verbose('RC:unauth2: %s' % errstr)
-            raise RicciError, errstr
-        return True
-
-
-    def process_batch(self, batch_xml, async=False):
-        try:
-            luci_log.debug_verbose('RC:PB0: [auth=%d] to %s for batch %s [async=%d]' \
-                % (self.__authed, self.__hostname, batch_xml.toxml(), async))
-        except:
-            pass
-
-        if not self.authed():
-            raise RicciError, 'not authenticated to host %s' % self.__hostname
-        
-        # construct request
-        doc = minidom.Document()
-        ricci = doc.createElement("ricci")
-        ricci.setAttribute("version", "1.0")
-        ricci.setAttribute("function", "process_batch")
-        async_str = None
-        if async:
-            async_str = 'true'
-        else:
-            async_str = 'false'
-        ricci.setAttribute("async", async_str)
-        doc.appendChild(ricci)
-        ricci.appendChild(batch_xml.cloneNode(True))
-        
-        # send request
-        try:
-            self.__send(doc, self.__timeout_short)
-        except Exception, e:
-            luci_log.debug_verbose('RC:PB1: Error sending XML \"%s\" to host %s' \
-                % (doc.toxml(), self.__hostname))
-            raise RicciError, 'Error sending XML to host %s: %s' \
-                    % (self.__hostname, str(e))
-        except:
-            raise RicciError, 'Error sending XML to host %s' % self.__hostname
-        
-        # receive response
-        doc = self.__receive(self.__timeout_long)
-        try:
-            luci_log.debug_verbose('RC:PB2: received from %s XML \"%s\"' \
-                % (self.__hostname, doc.toxml()))
-        except:
-            pass
+	def __init__(self, hostname, enforce_trust=True, port=11111):
+		self.__hostname = hostname
+		self.__port = port
+		
+		self.__timeout_init  = 4
+		self.__timeout_auth  = 4
+		self.__timeout_short = 6
+		self.__timeout_long  = 600
+		
+		self.__privkey_file = '%sprivkey.pem' % CERTS_DIR_PATH
+		self.__cert_file = '%scacert.pem' % CERTS_DIR_PATH
+		
+		try:
+			self.ss = SSLSocket(self.__hostname,
+								self.__port,
+								self.__timeout_init)
+			if enforce_trust:
+				if not self.ss.trusted():
+					raise RicciError, 'ricci\'s certificate is not trusted'
+		except Exception, e:
+			raise RicciError, 'Error setting up SSL for connection to %s: %s' \
+				% (self.__hostname, str(e))
+		except:
+			raise RicciError, 'Error setting up SSL for connection to %s' \
+				% self.__hostname
+		
+		# receive ricci header
+		hello = self.__receive(self.__timeout_init)
+		try:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:init0: recv header from %s: \"%s\"' \
+					% (self.__hostname, hello.toxml()))
+		except:
+			pass
+		
+		self.__authed = hello.firstChild.getAttribute('authenticated') == 'true'
+		self.__cluname = hello.firstChild.getAttribute('clustername')
+		self.__clualias = hello.firstChild.getAttribute('clusteralias')
+		self.__reported_hostname = hello.firstChild.getAttribute('hostname')
+		self.__os = hello.firstChild.getAttribute('os')
+		self.__dom0 = hello.firstChild.getAttribute('xen_host') == 'true'
+		
+	def hostname(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:hostname: [auth %d] hostname = %s' \
+				% (self.__authed, self.__hostname))
+		return self.__hostname
+
+	def authed(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:authed: reported authed = %d for %s' \
+				% (self.__authed, self.__hostname))
+		return self.__authed
+
+	def system_name(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:system_name: [auth %d] system_name = %s for %s' % (self.__authed, self.__reported_hostname, self.__hostname))
+		return self.__reported_hostname
+
+	def cluster_info(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:cluster_info: [auth %d] reported cluster_info = (%s,%s) for %s' % (self.__authed, self.__cluname, self.__clualias, self.__hostname))
+		return (self.__cluname, self.__clualias)
+
+	def os(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:os: [auth %d] reported os = %s for %s' \
+				% (self.__authed, self.__os, self.__hostname))
+		return self.__os
+
+	def dom0(self):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:dom0: [auth %d] dom0 = %s for %s' \
+				% (self.__authed, self.__dom0, self.__hostname))
+		return self.__dom0
+
+	def fingerprint(self):
+		fp = self.ss.peer_fingerprint()
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:fp: [auth %d] fp for %s = %s' \
+				% (self.__authed, self.__hostname, fp))
+		return fp
+
+	def trust(self):
+		return self.ss.trust()
+
+	def untrust(self):
+		return self.ss.untrust()
+
+	def trusted(self):
+		return self.ss.trusted()
+
+	def auth(self, password):
+		if self.authed():
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:auth0: already authenticated to %s' \
+					% self.__hostname)
+			return True
+		
+		# send request
+		doc = minidom.Document()
+		ricci = doc.createElement("ricci")
+		ricci.setAttribute("version", "1.0")
+		ricci.setAttribute("function", "authenticate")
+		ricci.setAttribute("password", password)
+		doc.appendChild(ricci)
+		self.__send(doc, self.__timeout_auth)
+		
+		# receive response
+		resp = self.__receive(self.__timeout_auth)
+		self.__authed = resp.firstChild.getAttribute('authenticated') == 'true'
+
+		if self.__authed:
+			try:
+				self.__cluname = resp.firstChild.getAttribute('clustername')
+				self.__clualias = resp.firstChild.getAttribute('clusteralias')
+				self.__reported_hostname = resp.firstChild.getAttribute('hostname')
+				self.__os = resp.firstChild.getAttribute('os')
+				self.__dom0 = resp.firstChild.getAttribute('xen_host') == 'true'
+			except:
+				pass
+			
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:auth1: auth call returning %d' \
+				% self.__authed)
+		return self.__authed
+
+	def unauth(self):
+		doc = minidom.Document()
+		ricci = doc.createElement('ricci')
+		ricci.setAttribute('version', '1.0')
+		ricci.setAttribute('function', 'unauthenticate')
+		doc.appendChild(ricci)
+		self.__send(doc, self.__timeout_auth)
+		resp = self.__receive(self.__timeout_auth)
+
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:unauth0: unauthenticate %s' \
+				% self.__hostname)
+
+		try:
+			ret = resp.firstChild.getAttribute('success')
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:unauth1: unauthenticate %s for %s' \
+					% (ret, self.__hostname))
+			if ret != '0':
+				raise Exception, 'Invalid response'
+
+			try:
+				self.ss.untrust()
+			except:
+				pass
+		except:
+			errstr = 'Error authenticating to host %s: %s' \
+						% (self.__hostname, str(ret))
+
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:unauth2: %s' % errstr)
+			raise RicciError, errstr
+		return True
+
+
+	def process_batch(self, batch_xml, async=False):
+		if LUCI_DEBUG_MODE is True:
+			try:
+				luci_log.debug_verbose('RC:PB0: [auth=%d] to %s for batch %s [async=%d]' % (self.__authed, self.__hostname, batch_xml.toxml(), async))
+			except:
+				pass
+
+		if not self.authed():
+			raise RicciError, 'not authenticated to host %s' % self.__hostname
+		
+		# construct request
+		doc = minidom.Document()
+		ricci = doc.createElement("ricci")
+		ricci.setAttribute("version", "1.0")
+		ricci.setAttribute("function", "process_batch")
+		async_str = None
+		if async:
+			async_str = 'true'
+		else:
+			async_str = 'false'
+		ricci.setAttribute("async", async_str)
+		doc.appendChild(ricci)
+		ricci.appendChild(batch_xml.cloneNode(True))
+		
+		# send request
+		try:
+			self.__send(doc, self.__timeout_short)
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:PB1: Error sending XML \"%s\" to host %s' % (doc.toxml(), self.__hostname))
+			raise RicciError, 'Error sending XML to host %s: %s' \
+					% (self.__hostname, str(e))
+		except:
+			raise RicciError, 'Error sending XML to host %s' % self.__hostname
+		
+		# receive response
+		doc = self.__receive(self.__timeout_long)
+		if LUCI_DEBUG_MODE is True:
+			try:
+				luci_log.debug_verbose('RC:PB2: received from %s XML \"%s\"' \
+					% (self.__hostname, doc.toxml()))
+			except:
+				pass
  
-        if doc.firstChild.getAttribute('success') != '0':
-            luci_log.debug_verbose('RC:PB3: batch command failed')
-            raise RicciError, 'The last ricci command to host %s failed' \
-                    % self.__hostname
-        
-        batch_node = None
-        for node in doc.firstChild.childNodes:
-            if node.nodeType == xml.dom.Node.ELEMENT_NODE:
-                if node.nodeName == 'batch':
-                    batch_node = node.cloneNode(True)
-        if batch_node == None:
-            luci_log.debug_verbose('RC:PB4: batch node missing <batch/>')
-            raise RicciError, 'missing <batch/> in ricci\'s response from "%s"' \
-                    % self.__hostname
-
-        return batch_node
-    
-    def batch_run(self, batch_str, async=True):
-        try:
-            batch_xml_str = '<?xml version="1.0" ?><batch>%s</batch>' % batch_str
-            luci_log.debug_verbose('RC:BRun0: attempting batch "%s" for host "%s"' % (batch_xml_str, self.__hostname))
-            batch_xml = minidom.parseString(batch_xml_str).firstChild
-        except Exception, e:
-            luci_log.debug_verbose('RC:BRun1: received invalid batch XML for %s: "%s": "%s"' % (self.__hostname, batch_xml_str, str(e)))
-            raise RicciError, 'batch XML is malformed'
-
-        try:
-            ricci_xml = self.process_batch(batch_xml, async)
-            try:
-                luci_log.debug_verbose('RC:BRun2: received XML "%s" from host %s in response to batch command.' % (ricci_xml.toxml(), self.__hostname))
-            except:
-                pass
-        except:
-            luci_log.debug_verbose('RC:BRun3: An error occurred while trying to process the batch job: "%s"' % batch_xml_str)
-            return None
-
-        doc = minidom.Document()
-        doc.appendChild(ricci_xml)
-        return doc
-
-    def batch_report(self, batch_id):
-        luci_log.debug_verbose('RC:BRep0: [auth=%d] asking for batchid# %s for host %s' % (self.__authed, batch_id, self.__hostname))
-
-        if not self.authed():
-            raise RicciError, 'Not authenticated to host %s' % self.__hostname
-        
-        # construct request
-        doc = minidom.Document()
-        ricci = doc.createElement("ricci")
-        ricci.setAttribute("version", "1.0")
-        ricci.setAttribute("function", "batch_report")
-        ricci.setAttribute("batch_id", str(batch_id))
-        doc.appendChild(ricci)
-        
-        # send request
-        self.__send(doc, self.__timeout_short)
+		if doc.firstChild.getAttribute('success') != '0':
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:PB3: batch command failed')
+			raise RicciError, 'The last ricci command to host %s failed' \
+					% self.__hostname
+		
+		batch_node = None
+		for node in doc.firstChild.childNodes:
+			if node.nodeType == xml.dom.Node.ELEMENT_NODE:
+				if node.nodeName == 'batch':
+					batch_node = node.cloneNode(True)
+		if batch_node == None:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:PB4: batch node missing <batch/>')
+			raise RicciError, 'missing <batch/> in ricci response from "%s"' \
+					% self.__hostname
+
+		return batch_node
+	
+	def batch_run(self, batch_str, async=True):
+		try:
+			batch_xml_str = '<?xml version="1.0" ?><batch>%s</batch>' \
+				% batch_str
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:BRun0: attempting batch "%s" for host "%s"' % (batch_xml_str, self.__hostname))
+			batch_xml = minidom.parseString(batch_xml_str).firstChild
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:BRun1: received invalid batch XML for %s: "%s": "%s"' % (self.__hostname, batch_xml_str, str(e)))
+			raise RicciError, 'batch XML is malformed'
+
+		try:
+			ricci_xml = self.process_batch(batch_xml, async)
+			if LUCI_DEBUG_MODE is True:
+				try:
+					luci_log.debug_verbose('RC:BRun2: received XML "%s" from host %s in response to batch command.' % (ricci_xml.toxml(), self.__hostname))
+				except:
+					pass
+		except:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:BRun3: An error occurred while trying to process the batch job: "%s"' % batch_xml_str)
+			return None
+
+		doc = minidom.Document()
+		doc.appendChild(ricci_xml)
+		return doc
+
+	def batch_report(self, batch_id):
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:BRep0: [auth=%d] asking for batchid# %s for host %s' % (self.__authed, batch_id, self.__hostname))
+
+		if not self.authed():
+			raise RicciError, 'Not authenticated to host %s' % self.__hostname
+		
+		# construct request
+		doc = minidom.Document()
+		ricci = doc.createElement("ricci")
+		ricci.setAttribute("version", "1.0")
+		ricci.setAttribute("function", "batch_report")
+		ricci.setAttribute("batch_id", str(batch_id))
+		doc.appendChild(ricci)
+		
+		# send request
+		self.__send(doc, self.__timeout_short)
  
-       
-        # receive response
-        doc = self.__receive(self.__timeout_short)
-        if doc.firstChild.getAttribute('success') == '12':
-            return None
-        if doc.firstChild.getAttribute('success') != '0':
-            raise RicciError, 'Error while retrieving batch report for batch #%d from host %s' % (batch_id, self.__hostname)
-        batch_node = None
-        for node in doc.firstChild.childNodes:
-            if node.nodeType == xml.dom.Node.ELEMENT_NODE:
-                if node.nodeName == 'batch':
-                    batch_node = node.cloneNode(True)
-        if batch_node == None:
-            raise RicciError, 'Missing <batch/> in ricci\'s response from host %s' % self.__hostname
-        return batch_node
-    
-    
-    
-    
-    
-    def __send(self, xml_doc, timeout):
-        buff = '%s\n' % xml_doc.toxml()
-        try:
-            self.ss.send(buff, timeout)
-        except Exception, e:
-            luci_log.debug_verbose('RC:send0: Error sending XML "%s" to %s: %s' % (buff, self.__hostname, str(e)))
-            raise RicciError, 'write error while sending XML to host %s' \
-                  % self.__hostname
-        except:
-            raise RicciError, 'write error while sending XML to host %s' \
-                  % self.__hostname
-        try:
-            luci_log.debug_verbose('RC:send1: Sent XML "%s" to host %s' \
-                % (xml_doc.toxml(), self.__hostname))
-        except:
-            pass
-        return
-    
-    def __receive(self, timeout):
-        doc = None
-        xml_in = ''
-        try:
-            xml_in = self.ss.recv(timeout)
-        except Exception, e:
-            luci_log.debug_verbose('RC:recv0: Error reading data from %s: %s' \
-                % (self.__hostname, str(e)))
-            raise RicciError, 'Error reading data from host %s' % self.__hostname
-        except:
-            raise RicciError, 'Error reading data from host %s' % self.__hostname
-        luci_log.debug_verbose('RC:recv1: Received XML "%s" from host %s' \
-            % (xml_in, self.__hostname))
-
-        try:
-            if doc == None:
-                doc = minidom.parseString(xml_in)
-        except Exception, e:
-            luci_log.debug_verbose('RC:recv2: Error parsing XML "%s" from %s' \
-                % (xml_in, str(e)))
-            raise RicciError, 'Error parsing XML from host %s: %s' \
-                    % (self.__hostname, str(e))
-
-        if not doc or not doc.firstChild:
-            raise RicciError, \
-                    'Error an empty response was received from host %s' \
-                    % self.__hostname
-        
-        try:        
-            if doc.firstChild.nodeName != 'ricci':
-                luci_log.debug_verbose('RC:recv3: Expecting "ricci" got XML "%s" from %s' % (xml_in, self.__hostname))
-                raise Exception, 'Expecting first XML child node to be "ricci"'
-        except Exception, e:
-            raise RicciError, 'Invalid XML ricci response from host %s' \
-                    % self.__hostname
-        
-        return doc
-    
-
-
+	   
+		# receive response
+		doc = self.__receive(self.__timeout_short)
+		if doc.firstChild.getAttribute('success') == '12':
+			return None
+		if doc.firstChild.getAttribute('success') != '0':
+			raise RicciError, 'Error while retrieving batch report for batch #%d from host %s' % (batch_id, self.__hostname)
+		batch_node = None
+		for node in doc.firstChild.childNodes:
+			if node.nodeType == xml.dom.Node.ELEMENT_NODE:
+				if node.nodeName == 'batch':
+					batch_node = node.cloneNode(True)
+		if batch_node == None:
+			raise RicciError, 'Missing <batch/> in ricci\'s response from host %s' % self.__hostname
+		return batch_node
+
+
+	def __send(self, xml_doc, timeout):
+		buff = '%s\n' % xml_doc.toxml()
+		try:
+			self.ss.send(buff, timeout)
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:send0: Error sending XML "%s" to %s: %s' % (buff, self.__hostname, str(e)))
+			raise RicciError, 'write error while sending XML to host %s' \
+				  % self.__hostname
+		except:
+			raise RicciError, 'write error while sending XML to host %s' \
+				  % self.__hostname
+		if LUCI_DEBUG_MODE is True:
+			try:
+				luci_log.debug_verbose('RC:send1: Sent XML "%s" to host %s' \
+					% (xml_doc.toxml(), self.__hostname))
+			except:
+				pass
+		return
+	
+	def __receive(self, timeout):
+		doc = None
+		xml_in = ''
+		try:
+			xml_in = self.ss.recv(timeout)
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:recv0: Error reading from %s: %s' \
+					% (self.__hostname, str(e)))
+			raise RicciError, 'Error reading data from host %s' \
+				% self.__hostname
+		except:
+			raise RicciError, 'Error reading data from host %s' \
+				% self.__hostname
+
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:recv1: Received XML "%s" from host %s' \
+				% (xml_in, self.__hostname))
+
+		try:
+			if doc == None:
+				doc = minidom.parseString(xml_in)
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('RC:recv2: parsing XML "%s" from %s' \
+					% (xml_in, str(e)))
+			raise RicciError, 'Error parsing XML from host %s: %s' \
+					% (self.__hostname, str(e))
+
+		if not doc or not doc.firstChild:
+			raise RicciError, 'Error an empty response was received from host %s' % self.__hostname
+		
+		try:		
+			if doc.firstChild.nodeName != 'ricci':
+				if LUCI_DEBUG_MODE is True:
+					luci_log.debug_verbose('RC:recv3: Expecting "ricci" got XML "%s" from %s' % (xml_in, self.__hostname))
+				raise Exception, 'Expecting first XML child node to be "ricci"'
+		except Exception, e:
+			raise RicciError, 'Invalid XML ricci response from host %s' \
+					% self.__hostname
+		return doc
+	
 def get_ricci_communicator(self, hostname, allowed_systems):
-    if not self.access_to_host_allowed(hostname, allowed_systems):
-        return None
-    
-    try:
-        return RicciCommunicator(hostname)
-    except Exception, e:
-        luci_log.debug_verbose('RC:GRC0: Error creating a ricci connection to %s: %s' % (hostname, str(e)))
-        return None
+	if not self.access_to_host_allowed(hostname, allowed_systems):
+		return None
+	
+	try:
+		return RicciCommunicator(hostname)
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:GRC0: Error creating a ricci connection to %s: %s' % (hostname, str(e)))
+		return None
 
 def ricci_get_called_hostname(self, ricci):
-    return ricci.hostname()
+	return ricci.hostname()
 def ricci_get_reported_hostname(self, ricci):
-    return ricci.system_name()
+	return ricci.system_name()
 def ricci_get_os(self, ricci):
-    return ricci.os()
+	return ricci.os()
 def ricci_get_dom0(self, ricci):
-    return ricci.dom0()
+	return ricci.dom0()
 def ricci_get_cluster_info(self, ricci):
-    return ricci.cluster_info()
+	return ricci.cluster_info()
 def ricci_get_authenticated(self, ricci):
-    return ricci.authed()
+	return ricci.authed()
 def ricci_authenticate(self, ricci, password):
-    return ricci.auth(password)
+	return ricci.auth(password)
 def ricci_unauthenticate(self, ricci):
-    return ricci.unauth()
-
-
-
-
-
-
-
+	return ricci.unauth()
 
 ########## helpers to process batch as returned by ricci #############
 
-
-
-
-
 # check the status of batch
 # returns (int num, int total)
 # * total:
-#          total number of modules in batch
+#		  total number of modules in batch
 # * num:
-#          if num == total: 
-#             all modules in the batch completed successfuly
-#          if num > 0: 
-#             last seq. number of module that successfuly finished
-#          if num < 0: 
-#             module (-num) failed (next module won't be processed)
-def batch_status(batch_xml):
-    if batch_xml.nodeName != 'batch':
-        try:
-            luci_log.debug_verbose('RC:BS0: Expecting an XML batch node. Got \"%s\"' \
-                % batch_xml.toxml())
-        except:
-            pass
-        raise RicciError, 'Not an XML batch node'
-    total = 0
-    last  = 0
-    for node in batch_xml.childNodes:
-        if node.nodeType == xml.dom.Node.ELEMENT_NODE:
-            if node.nodeName == 'module':
-                total = total + 1
-                status = node.getAttribute('status')
-                if status == '0':
-                    # success
-                    last = last + 1
-                elif status == '3' or status == '4':
-                    # failure
-                    last = last + 1
-                    last = last - 2 * last
-    try:
-        luci_log.debug_verbose('RC:BS1: Returning (%d, %d) for batch_status("%s")' % (last, total, batch_xml.toxml()))
-    except:
-        luci_log.debug_verbose('RC:BS2: Returning last, total')
-
-    return (last, total)
-
+#		  if num == total: 
+#			 all modules in the batch completed successfuly
+#		  if num > 0: 
+#			 last seq. number of module that successfuly finished
+#		  if num < 0: 
+#			 module (-num) failed (next module won't be processed)
 
+def batch_status(batch_xml):
+	if batch_xml.nodeName != 'batch':
+		if LUCI_DEBUG_MODE is True:
+			try:
+				luci_log.debug_verbose('RC:BS0: Expecting an XML batch node. Got \"%s\"' % batch_xml.toxml())
+			except:
+				pass
+		raise RicciError, 'Not an XML batch node'
+
+	total = 0
+	last  = 0
+	for node in batch_xml.childNodes:
+		if node.nodeType == xml.dom.Node.ELEMENT_NODE:
+			if node.nodeName == 'module':
+				total = total + 1
+				status = node.getAttribute('status')
+				if status == '0':
+					# success
+					last = last + 1
+				elif status == '3' or status == '4':
+					# failure
+					last = last + 1
+					last = last - 2 * last
+	try:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:BS1: Returning (%d, %d) for batch_status("%s")' % (last, total, batch_xml.toxml()))
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:BS2: error %r: (last, total)' % \
+				(e, last, total))
+	return (last, total)
 
 # extract error_code from module's response
 # * module_num:
-#              1-based seq. number of module to process
+#			  1-based seq. number of module to process
 #
 # returns (int error_code, string error_msg)
 # * error_code: each module defines own error codes, which are >0
-#          -101 - in progress
-#          -102 - scheduled
-#          -103 - removed from schedule
-#          -104 - failed to execute module
+#		  -101 - in progress
+#		  -102 - scheduled
+#		  -103 - removed from schedule
+#		  -104 - failed to execute module
 # 
-#          >-3  - module executed. Following codes are defined:
-#             -2   - API error
-#             -1   - undefined error occured (msg not necesarily very informative)
-#             0    - no error (msg is empty string)
-#             >0   - predefined error has occured
-#                        (check respective API, msg will be fully descriptive)
+#		  >-3  - module executed. Following codes are defined:
+#			 -2   - API error
+#			 -1   - undefined error occured (msg not necesarily very informative)
+#			 0	- no error (msg is empty string)
+#			 >0   - predefined error has occured
+#						(check respective API, msg will be fully descriptive)
 # * error_msg:  error message
-def extract_module_status(batch_xml, module_num=1):
-    if batch_xml.nodeName != 'batch':
-        luci_log.debug_verbose('RC:EMS0: Expecting "batch" got "%s"' % batch_xml.toxml())
-        raise RicciError, 'Invalid XML node; expecting a batch node'
-
-    c = 0
-    for node in batch_xml.childNodes:
-        if node.nodeType == xml.dom.Node.ELEMENT_NODE:
-            if node.nodeName == 'module':
-                module_xml = node
-                c = c + 1
-                if c == module_num:
-                    status = module_xml.getAttribute('status')
-                    if status == '0' or status == '4':
-                        # module executed, dig deeper into request
-                        for node_i in module_xml.childNodes:
-                            if node_i.nodeType == xml.dom.Node.ELEMENT_NODE:
-                                if node_i.nodeName == 'API_error':
-                                    return -2, 'API error'
-                                elif node_i.nodeName == 'response':
-                                    for node_j in node_i.childNodes:
-                                        if node_j.nodeType == xml.dom.Node.ELEMENT_NODE:
-                                            if node_j.nodeName == 'function_response':
-                                                code = -11111111
-                                                msg  = 'BUG'
-                                                for var in node_j.childNodes:
-                                                    if var.nodeType == xml.dom.Node.ELEMENT_NODE:
-                                                        if var.nodeName == 'var':
-                                                            if var.getAttribute('name') == 'success' and var.getAttribute('value') == 'true':
-                                                                return 0, ''
-                                                            elif var.getAttribute('name') == 'error_code':
-                                                                code = int(var.getAttribute('value'))
-                                                            elif var.getAttribute('name') == 'error_description':
-                                                                msg = var.getAttribute('value')
-                                                return code, msg
-                                            
-                    elif status == '1':
-                        return -102, 'module scheduled for execution'
-                    elif status == '2':
-                        return -101, 'module is being executed'
-                    elif status == '3':
-                        return -104, 'failed to locate/execute module'
-                    elif status == '5':
-                        return -103, 'module removed from schedule'
-    
-    raise RicciError, 'no %dth module in the batch, or malformed response' % module_num
 
+def extract_module_status(batch_xml, module_num=1):
+	if batch_xml.nodeName != 'batch':
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('RC:EMS0: Expecting "batch" got "%s"' \
+				% batch_xml.toxml())
+		raise RicciError, 'Invalid XML node; expecting a batch node'
+
+	c = 0
+	for node in batch_xml.childNodes:
+		if node.nodeType == xml.dom.Node.ELEMENT_NODE:
+			if node.nodeName == 'module':
+				module_xml = node
+				c = c + 1
+				if c == module_num:
+					status = module_xml.getAttribute('status')
+					if status == '0' or status == '4':
+						# module executed, dig deeper into request
+						for node_i in module_xml.childNodes:
+							if node_i.nodeType == xml.dom.Node.ELEMENT_NODE:
+								if node_i.nodeName == 'API_error':
+									return -2, 'API error'
+								elif node_i.nodeName == 'response':
+									for node_j in node_i.childNodes:
+										if node_j.nodeType == xml.dom.Node.ELEMENT_NODE:
+											if node_j.nodeName == 'function_response':
+												code = -11111111
+												msg  = 'BUG'
+												for var in node_j.childNodes:
+													if var.nodeType == xml.dom.Node.ELEMENT_NODE:
+														if var.nodeName == 'var':
+															if var.getAttribute('name') == 'success' and var.getAttribute('value') == 'true':
+																return 0, ''
+															elif var.getAttribute('name') == 'error_code':
+																code = int(var.getAttribute('value'))
+															elif var.getAttribute('name') == 'error_description':
+																msg = var.getAttribute('value')
+												return code, msg
+											
+					elif status == '1':
+						return -102, 'module scheduled for execution'
+					elif status == '2':
+						return -101, 'module is being executed'
+					elif status == '3':
+						return -104, 'failed to locate/execute module'
+					elif status == '5':
+						return -103, 'module removed from schedule'
+	
+	raise RicciError, 'no %dth module in the batch, or malformed response' % module_num
--- conga/luci/site/luci/Extensions/system_adapters.py	2007/05/03 20:16:38	1.2.2.1
+++ conga/luci/site/luci/Extensions/system_adapters.py	2007/05/14 18:00:14	1.2.2.2
@@ -1,12 +1,9 @@
 from ricci_communicator import RicciCommunicator
 from RicciQueries import list_services, updateServices, svc_manage
-from LuciSyslog import LuciSyslog
+from LuciSyslog import get_logger
 from xml.dom import minidom
 
-try: 
-	luci_log = LuciSyslog()
-except:
-	pass
+luci_log = get_logger()
 
 def get_sys_svc_list(self, request, hostname):
 	try:



             reply	other threads:[~2007-05-14 18:00 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-14 18:00 rmccabe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-05-18  5:23 [Cluster-devel] conga/luci/site/luci/Extensions LuciClusterAct rmccabe
2007-05-22 21:52 rmccabe
2007-05-23 21:21 rmccabe
2007-07-26  4:21 rmccabe
2007-08-09 21:35 rmccabe
2007-09-28  5:36 rmccabe
2007-10-22 19:24 rmccabe
2010-08-05 18:16 rmccabe

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=20070514180017.21661.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.