[Cluster-devel] conga/luci cluster/form-macros homebase/homeba ...

rmccabe at sourceware.org rmccabe at sourceware.org
Thu Jul 12 22:35:41 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-07-12 22:35:40

Modified files:
	luci/cluster   : form-macros 
	luci/homebase  : homebase_common.js 
	luci/plone-custom: conga.js 
	luci/site/luci/Extensions: LuciClusterInfo.py LuciDB.py 
	                           PropsObject.py RicciQueries.py 
	                           cluster_adapters.py 
	                           ricci_communicator.py 

Log message:
	Most of the fix for 247521: Luci returns mis-leading errors if cluster.conf has a syntax error

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.203&r2=1.204
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&r1=1.19&r2=1.20
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.260&r2=1.261
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.28&r2=1.29

--- conga/luci/cluster/form-macros	2007/07/12 15:44:43	1.203
+++ conga/luci/cluster/form-macros	2007/07/12 22:35:39	1.204
@@ -122,14 +122,20 @@
 		</td>
 	</tr>
 
-	<tr class="cluster">
-		<td tal:condition="exists: cstatus/error" class="cluster">
+	<tr class="cluster" tal:condition="exists:cstatus/error">
+		<td class="cluster">
 			<span class="errmsgs">
 				An error occurred while attempting to get status information for this cluster. The information shown may be stale or inaccurate.
 			</span>
 		</td>
 	</tr>
 
+	<tr class="cluster" tal:condition="exists:cstatus/errmsg">
+		<td class="cluster">
+			<span class="errmsgs" tal:content="cstatus/errmsg" />
+		</td>
+	</tr>
+
 	<tr class="cluster info_middle">
 		<td colspan="2" class="cluster cluster_quorum">
 			<ul class="cluster_quorum"
--- conga/luci/homebase/homebase_common.js	2007/07/12 15:44:43	1.19
+++ conga/luci/homebase/homebase_common.js	2007/07/12 22:35:39	1.20
@@ -108,14 +108,6 @@
 	}
 }
 
-function hide_element(id) {
-	var elem = document.getElementById(id);
-	if (elem) {
-		elem.style.visibility = 'hidden';
-		elem.style.display = 'none';
-	}
-}
-
 function isValidHost(str) {
 	var i = str.split('.');
 
--- conga/luci/plone-custom/conga.js	2007/06/25 16:11:30	1.5
+++ conga/luci/plone-custom/conga.js	2007/07/12 22:35:39	1.6
@@ -11,6 +11,14 @@
 	return str.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace('\'', ''');
 }
 
+function hide_element(id) {
+	var elem = document.getElementById(id);
+	if (elem) {
+		elem.style.visibility = 'hidden';
+		elem.style.display = 'none';
+	}
+}
+
 function popup_window(url, width_percent, height_percent) {
 	var width = window.innerWidth * (width_percent / 100);
 	var height = window.innerHeight * (height_percent / 100);
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/07/12 15:44:43	1.6
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2007/07/12 22:35:40	1.7
@@ -123,36 +123,38 @@
 	return results
 
 def getClusterStatus(self, request, rc, cluname=None):
-
 	try:
-		doc = rq.getClusterStatusBatch(rc)
-		if not doc:
-			raise Exception, 'doc is None'
+		doc = rq.getClusterStatusBatch(rc) or None
 	except Exception, e:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('GCS0: error: %r %s' % (e, str(e)))
+			luci_log.debug_verbose('GCS0: error: %r: %r %s' \
+				% (cluname, e, str(e)))
 		doc = None
 
-	if doc is None and not cluname:
-		try:
-			model = request.SESSION.get('model')
-			cinfo = getClusterStatusModel(model)
-			if not cinfo or len(cinfo) < 1:
-				raise Exception, 'cinfo is None'
-			return cinfo
-		except Exception, e:
-			if LUCI_DEBUG_MODE is True:
-				luci_log.debug_verbose('GCS1: %r %s' % (e, str(e)))
-			doc = None
+	if doc is None:
+		model = LuciExtractCluModel(self, request, cluname)
+		if model is not None:
+			try:
+				cinfo = getClusterStatusModel(model)
+				if not cinfo or len(cinfo) < 1:
+					raise Exception, 'cinfo is None'
+				return cinfo
+			except Exception, e:
+				if LUCI_DEBUG_MODE is True:
+					luci_log.debug_verbose('GCS1: %r: %r %s' \
+						% (cluname, e, str(e)))
 
-	if not doc:
+	if doc is None:
 		try:
 			from LuciDB import getClusterStatusDB
-			fvars = GetReqVars(request, [ 'clustername' ])
+			if cluname:
+				clustername = cluname
+			else:
+				fvars = GetReqVars(request, [ 'clustername' ])
 
-			clustername = fvars['clustername']
-			if clustername is None:
-				raise Exception, 'unable to determine cluster name'
+				clustername = fvars['clustername']
+				if clustername is None:
+					raise Exception, 'unable to determine cluster name'
 
 			cinfo = getClusterStatusDB(self, clustername)
 			if not cinfo or len(cinfo) < 1:
@@ -160,7 +162,8 @@
 			return cinfo
 		except Exception, e:
 			if LUCI_DEBUG_MODE is True:
-				luci_log.debug_verbose('GCS1a: unable to get cluster info from DB: %r %s' % (e, str(e)))
+				luci_log.debug_verbose('GCS2: cluster %r info from DB: %r %s' \
+					% (cluname, e, str(e)))
 		return []
 
 	results = list()
@@ -699,11 +702,13 @@
 
 def getClustersInfo(self, status, req):
 	clu_map = {}
+
+	fvars = GetReqVars(req, [ 'URL' ])
+	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+
 	nodelist = list()
 	svclist = list()
 	clulist = list()
-	baseurl = req['URL']
-
 	for item in status:
 		if item['type'] == 'node':
 			nodelist.append(item)
@@ -713,11 +718,14 @@
 			clulist.append(item)
 		else:
 			continue
+
 	if len(clulist) < 1:
 		return {}
 	clu = clulist[0]
-	if 'error' in clu:
-		clu_map['error'] = True
+	if clu.has_key('error'):
+		clu_map['error'] = clu['error']
+	if clu.has_key('errmsg'):
+		clu_map['errmsg'] = clu['errmsg']
 	clustername = clu['name']
 	if not clu['alias']:
 		clu_map['clusteralias'] = clu['alias']
@@ -788,7 +796,8 @@
 def getNodeInfo(self, model, status, request):
 	infohash = {}
 	item = None
-	baseurl = request['URL']
+	fvars = GetReqVars(request, [ 'URL', 'clustername', 'nodename' ])
+	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
 
 	nodestate = NODE_ACTIVE
 	svclist = list()
@@ -796,13 +805,12 @@
 		if thing['type'] == 'service':
 			svclist.append(thing)
 
-	# Get cluster name and node name from request
-	try:
-		clustername = request['clustername']
-		nodename = request['nodename']
-	except Exception, e:
+	clustername = fvars['clustername']
+	nodename = fvars['nodename']
+	if clustername is None or nodename is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('getNodeInfo0: %r %s' % (e, str(e)))
+			luci_log.debug_verbose('getNodeInfo0: %r %r' \
+				% (clustername, nodename))
 		return {}
 
 	# extract correct node line from cluster status
@@ -900,7 +908,7 @@
 		try:
 			rc = RicciCommunicator(nodename_resolved)
 			if not rc:
-				raise Exception, 'rc is none'
+				raise Exception, 'connection failed'
 		except Exception, e:
 			rc = None
 			infohash['ricci_error'] = True
@@ -930,6 +938,10 @@
 	nodelist = list()
 	svclist = list()
 
+	fvars = GetReqVars(req, [ 'URL', 'clustername' ])
+	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+	clustername = fvars['clustername']
+
 	#Sort into lists...
 	for item in status:
 		if item['type'] == 'node':
@@ -939,24 +951,14 @@
 		else:
 			continue
 
-	try:
-		clustername = req['clustername']
-		if not clustername:
-			raise KeyError, 'clustername is blank'
-	except:
+	if clustername is None:
 		try:
-			clustername = req.form['clustername']
-			raise KeyError, 'clustername is blank'
-		except:
-			try:
-				clustername = req.form['clustername']
-			except:
-				try:
-					clustername = model.getClusterName()
-				except:
-					if LUCI_DEBUG_MODE is True:
-						luci_log.debug_verbose('GNI0: unable to determine cluster name')
-					return {}
+			clustername = model.getClusterName().strip()
+		except Exception, e:
+			if LUCI_DEBUG_MODE is True:
+				luci_log.debug_verbose('GNI0: no cluster name: %r %s' \
+					% (e, str(e)))
+			return {}
 
 	for item in nodelist:
 		nl_map = {}
@@ -968,11 +970,6 @@
 		except:
 			nl_map['gulm_lockserver'] = False
 
-		try:
-			baseurl = req['URL']
-		except:
-			baseurl = '/luci/cluster/index_html'
-
 		cfgurl = '%s?pagetype=%s&clustername=%s&nodename=%s' \
 			% (baseurl, NODE, clustername, name)
 		nl_map['configurl'] = cfgurl
@@ -1058,9 +1055,11 @@
 			luci_log.debug_verbose('getFence0: model is None')
 		return {}
 
-	fence_map = {}
-	fencename = request['fencename']
+	fvars = GetReqVars(request, [ 'URL', 'fencename' ])
+	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+	fencename = fvars['fencename']
 
+	fence_map = {}
 	nodes = model.getNodes()
 	fencedevs = model.getFenceDevices()
 	clustername = model.getClusterName()
@@ -1090,7 +1089,6 @@
 									found_duplicate = True
 							if found_duplicate is True:
 								continue
-							baseurl = request['URL']
 							node_hash = {}
 							cur_nodename = node.getName().strip()
 							node_hash['nodename'] = cur_nodename
@@ -1398,8 +1396,10 @@
 		fences_map['fencedevs'] = list()
 		return fences_map
 
-	clustername = request['clustername']
-	baseurl = request['URL']
+	fvars = GetReqVars(request, [ 'clustername', 'URL' ])
+	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+	clustername = fvars['clustername'] or model.getClusterName()
+
 	fencedevs = list() #This is for the fencedev list page
 
 	#Get list of fence devices
@@ -1556,6 +1556,37 @@
 			luci_log.debug_verbose('GMFC1: unable to get model builder for %s: %r %s' % (clustername, e, str(e)))
 	return None
 
+def LuciExtractCluModel(self, request, cluster_name=None):
+	model = None
+	try:
+		model = request.SESSION.get('model')
+		model.getClusterName()
+		return model
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('LECM0: %r: %r %s' \
+				% (cluster_name, e, str(e)))
+		model = None
+
+	if not cluster_name:
+		fvar = GetReqVars(request, [ 'clustername' ])
+		cluster_name = fvar['clustername']
+
+	if cluster_name is None:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('LECM1: no cluster name')
+		return None
+
+	try:
+		model = getModelForCluster(self, cluster_name)
+		model.getClusterName()
+		return model
+	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('LECM2: no model for %s: %r %s' \
+				% (cluster_name, e, str(e)))
+	return None
+
 def getClusterOS(self, rc):
 	from HelperFunctions import resolveOSType
 
--- conga/luci/site/luci/Extensions/LuciDB.py	2007/06/28 16:02:50	1.4
+++ conga/luci/site/luci/Extensions/LuciDB.py	2007/07/12 22:35:40	1.5
@@ -931,7 +931,7 @@
 			luci_log.debug_verbose('GCF0: cluster %s [%s] folder missing: %r %s -- returning empty map' % (cluname, path, e, str(e)))
 	return None
 
-def getClusterStatusDB(self, clustername):
+def getClusterStatusDB(self, clustername, errmsg=None):
 	results = list()
 	vals = {}
 
@@ -942,12 +942,14 @@
 	vals['quorate'] = '[unknown]'
 	vals['votes'] = '[unknown]'
 	vals['minQuorum'] = '[unknown]'
+	if errmsg:
+		vals['errmsg'] = errmsg
 	results.append(vals)
 
 	nodelist = getClusterDBNodes(self, clustername)
 	if len(nodelist) < 1:
-		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('GCSDB0a: removing cluster %s because it has no nodes' % clustername)
+		luci_log.info('Removing cluster %s because it has no nodes' \
+			% clustername)
 		try:
 			clusters_dir = self.restrictedTraverse(CLUSTER_FOLDER_PATH)
 			clusters_dir.manage_delObjects([clustername])
@@ -960,7 +962,7 @@
 	for node in nodelist:
 		node_val = {}
 		node_val['type'] = 'node'
-		node_val['name'] = node
+		node_val['name'] = node[0]
 		node_val['clustered'] = '[unknown]'
 		node_val['online'] = '[unknown]'
 		node_val['error'] = True
--- conga/luci/site/luci/Extensions/PropsObject.py	2007/07/12 15:44:43	1.5
+++ conga/luci/site/luci/Extensions/PropsObject.py	2007/07/12 22:35:40	1.6
@@ -7,7 +7,7 @@
 
 from Variable import parse_variable
 from ricci_defines import PROPS_TAG
-from xml.dom.Node import ELEMENT_NODE
+import xml.dom
 
 class PropsObject:
 
@@ -35,7 +35,7 @@
     def import_xml(self, parent_node):
         props = None
         for node in parent_node.childNodes:
-            if node.nodeType == ELEMENT_NODE:
+            if node.nodeType == xml.dom.Node.ELEMENT_NODE:
                 if node.nodeName == PROPS_TAG:
                     props = node
         if props is None:
--- conga/luci/site/luci/Extensions/RicciQueries.py	2007/06/27 08:14:13	1.3
+++ conga/luci/site/luci/Extensions/RicciQueries.py	2007/07/12 22:35:40	1.4
@@ -289,6 +289,9 @@
 	batch_str = '<module name="cluster"><request API_version="1.0"><function_call name="status"/></request></module>'
 	ricci_xml = rc.batch_run(batch_str, async=False)
 
+	if not ricci_xml:
+		return None
+
 	try:
 		cluster_tags = ricci_xml.getElementsByTagName('cluster')
 	except Exception, e:
@@ -300,10 +303,12 @@
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug_verbose('GCSB1: %d entries - expecting 1' \
 				% len(cluster_tags))
+			return None
 	elif len(cluster_tags) > 1:
 		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:
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2007/07/03 17:05:59	1.260
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2007/07/12 22:35:40	1.261
@@ -25,9 +25,11 @@
 from LuciSyslog import get_logger
 from ResourceHandler import create_resource
 from homebase_adapters import parseHostForm
-from LuciClusterInfo import getClusterInfo, getModelBuilder, getModelForCluster
 from LuciClusterActions import propagateClusterConfAsync
 
+from LuciClusterInfo import getClusterInfo, \
+	getModelBuilder, LuciExtractCluModel
+
 from conga_constants import BATCH_ID, CLUNODE_CREATE_ERRORS, \
 	CLUSTER_ADD, CLUSTER_CONFIG, CLUSTER_DAEMON, CLUSTER_DELETE, \
 	CLUSTER_FOLDER_PATH, CLUSTER_RESTART, CLUSTER_START, CLUSTER_STOP, \
@@ -545,8 +547,7 @@
 	try:
 		model = getModelBuilder(None, cluster_ricci, cluster_ricci.dom0())
 		if not model:
-			errors.append('Unable to build the cluster model for %s' \
-				% clustername)
+			errors.append('Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername)
 			raise Exception, 'unable to get model for %s' % clustername
 
 		nodesptr = model.getClusterNodesPtr()
@@ -560,8 +561,7 @@
 					% (node_name, clustername))
 	except Exception, e:
 		incomplete = True
-		errors.append('Unable to build the cluster model for %s' \
-			% clustername)
+		errors.append('Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername)
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug_verbose('VACN11: %r %s' % (e, str(e)))
 
@@ -629,7 +629,7 @@
 			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 generate the new cluster configuration')
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug_verbose('VACN14: %s' % e)
 
@@ -728,7 +728,7 @@
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug_verbose('vSA1: no model')
-		return (False, {'errors': ['No cluster model was found']})
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
 
 	try:
 		doc = minidom.parseString(form_xml)
@@ -921,12 +921,11 @@
 			luci_log.debug_verbose('VRA0: type is blank')
 		return (False, {'errors': ['No resource type was given']})
 
-	try:
-		model = request.SESSION.get('model')
-	except Exception, e:
+	model = LuciExtractCluModel(self, request)
+	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VRA1: no model: %r %s' % (e, str(e)))
-		return None
+			luci_log.debug_verbose('VRA1: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration. The configuration XML may contain errors' ]})
 
 	errors = list()
 	try:
@@ -1397,8 +1396,8 @@
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VCC0: no model, no cluster name')
-		return (False, {'errors': ['No cluster model was found']})
+			luci_log.debug_verbose('VCC0: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
 
 	if clustername is None:
 		clustername = model.getClusterName()
@@ -1437,37 +1436,6 @@
 	request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
 		% (baseurl, CLUSTER_CONFIG, clustername))
 
-def LuciExtractCluModel(self, request, cluster_name=None):
-	model = None
-	try:
-		model = request.SESSION.get('model')
-		model.getClusterName()
-		return model
-	except Exception, e:
-		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('LECM0: %s: %r %s' \
-				% (cluster_name, e, str(e)))
-		model = None
-
-	if not cluster_name:
-		fvar = GetReqVars(request, [ 'clustername' ])
-		cluster_name = fvar['clustername']
-		if cluster_name is None:
-			if LUCI_DEBUG_MODE is True:
-				luci_log.debug_verbose('LECM1: no cluster name')
-
-	if cluster_name is None:
-		return None
-
-	try:
-		model = getModelForCluster(self, cluster_name)
-		model.getClusterName()
-		return model
-	except Exception, e:
-		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('LECM2: no model: %r %s' % (e, str(e)))
-	return None
-
 def validateFenceAdd(self, request):
 	errors = list()
 	fvar = GetReqVars(request, [ 'clustername', 'URL' ])
@@ -1476,10 +1444,10 @@
 	clustername = fvar['clustername']
 
 	model = LuciExtractCluModel(self, request, clustername)
-	if not model:
+	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE0: no model')
-		return (False, { 'errors': [ 'No cluster model was found' ] })
+			luci_log.debug_verbose('VFA0: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ] })
 
 	ret_code, ret_obj = validateNewFenceDevice(request.form, model)
 	if ret_code != FD_VAL_SUCCESS:
@@ -1502,14 +1470,14 @@
 	clustername = fvar['clustername']
 	if clustername is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE: No cluster name')
+			luci_log.debug_verbose('VFE0: No cluster name')
 		return (False, {'errors': ['No cluster name was given']})
 
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE: unable to get model from session')
-		return (False, {'errors': ['No cluster model was found']})
+			luci_log.debug_verbose('VFE1: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ] })
 
 	# This is a fence edit situation, so the model should already have an
 	# entry for this fence device.
@@ -1569,9 +1537,8 @@
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('vNFC6: unable to get model for cluster %s' \
-				% clustername)
-		return (False, {'errors': ['No cluster model was found']})
+			luci_log.debug_verbose('vNFC6: no model for %s' % clustername)
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ] })
 
 	try:
 		doc = minidom.parseString(fvar['fence_xml'])
@@ -1798,20 +1765,20 @@
 	nodename = fvar['nodename']
 	if nodename is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE: no node name')
+			luci_log.debug_verbose('DFD0: no node name')
 		return (False, {'errors': ['No node name was given']})
 
 	clustername = fvar['clustername']
 	if clustername is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE: no cluster name')
+			luci_log.debug_verbose('DFD1: no cluster name')
 		return (False, {'errors': ['No cluster name was given']})
 
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFE: model, no cluster name')
-		return (False, {'errors': ['No cluster model was found']})
+			luci_log.debug_verbose('DFD2: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ] })
 
 	fencedev_name = fvar['orig_name']
 	if fencedev_name is None:
@@ -1826,7 +1793,7 @@
 
 	if fdev_to_delete is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFD: Could not find fence device "%s" in model' % fencedev_name)
+			luci_log.debug_verbose('DFD3: Could not find fence device "%s" in model' % fencedev_name)
 		return (False, {'errors': ['Could not find fence device "%s" in model' % fencedev_name ]})
 
 	fdev_ptr = model.getFenceDevicePtr()
@@ -1840,7 +1807,7 @@
 		model.removeFenceInstancesForFenceDevice(fencedev_name)
 	except Exception, e:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('VFD: error removing %s: %r %s' \
+			luci_log.debug_verbose('DFD4: error removing %s: %r %s' \
 				% (fencedev_name, e, str(e)))
 
 	ret = propagateClusterConfAsync(self, model, None, CLUSTER_CONFIG,
@@ -1940,15 +1907,15 @@
 	if clustername is None:
 		errors.append('Unable to determine this cluster\'s name')
 
-	name = fvar['name']
-	if name is None:
-		errors.append('No name was given for this failover domain')
-
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('validateFdom0: no model: %r %s')
-		return (False, {'errors': [ 'Unable to retrieve cluster information' ]})
+			luci_log.debug_verbose('validateFdom0: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
+
+	name = fvar['name']
+	if name is None:
+		errors.append('No name was given for this failover domain')
 
 	prioritized = False
 	try:
@@ -2051,19 +2018,19 @@
 	model = LuciExtractCluModel(self, request, clustername)
 	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('validateVM0: no model')
-		return (False, {'errors': [ 'Unable to retrieve cluster information' ]})
+			luci_log.debug_verbose('validateVM1: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
 
 	vm_name = fvar['vmname']
 	if vm_name is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('validateVM0: no vm name')
+			luci_log.debug_verbose('validateVM2: no vm name')
 		errors.append('No virtual machine name was given')
 
 	vm_path = fvar['vmpath']
 	if vm_path is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('validateVM1: no vm path')
+			luci_log.debug_verbose('validateVM3: no vm path')
 		errors.append('No path to the virtual machine configuration directory was given')
 
 	autostart = 1
@@ -2205,7 +2172,7 @@
 		if getClusterInfo(self, None, req) == {}:
 			msg_list.append('invalid cluster')
 		else:
-			model = req.SESSION.get('model')
+			model = LuciExtractCluModel(self, req, clustername)
 			cc = model.exportModelAsString()
 
 	return { 'msg': ''.join(msg_list), 'cluster_conf': cc }
@@ -2283,20 +2250,12 @@
 
 	if not model:
 		cluname = fvar['clustername']
-		if cluname is None:
+		model = LuciExtractCluModel(self, request, cluname)
+		if model is None:
 			if LUCI_DEBUG_MODE is True:
-				luci_log.debug('CTP1: no cluster name')
-			return 'No cluster name was given'
-
-		try:
-			model = getModelForCluster(self, cluname)
-			if not model:
-				raise Exception, 'No cluster model'
-		except Exception, e:
-			if LUCI_DEBUG_MODE is True:
-				luci_log.debug_verbose('CTP2: GMFC failed for %s: %r %s' \
-					% (e, str(e), cluname))
-			return 'Unable to get the model object for %s' % cluname
+				luci_log.debug_verbose('CTP2: No cluster model for %s' \
+					% cluname)
+			return 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors.' % cluname
 
 	redirect_page = NODES
 	if task == CLUSTER_STOP:
@@ -2312,7 +2271,7 @@
 		from LuciClusterActions import ClusterDelete
 		ret = ClusterDelete(self, model)
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('CTP3: ret is %s' % str(e))
+			luci_log.debug_verbose('CTP3: ret is %r' % ret)
 		if ret is not None:
 			redirect_page = ret
 	else:
@@ -2869,20 +2828,19 @@
 	fvars = GetReqVars(req,
 				[ 'clustername', 'servicename', 'nodename', 'URL' ])
 	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+	clustername = fvars['clustername']
 
-	try:
-		model = LuciExtractCluModel(self, req,
-					cluster_name=fvars['clustername'])
-	except Exception, e:
+	model = LuciExtractCluModel(self, req, clustername)
+	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('serviceDelete0: %r %s' % (e, str(e)))
-		return (False, { 'errors': [ 'No resource name was given' ]})
+			luci_log.debug_verbose('serviceDelete0: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
 
 	ret = DeleteCluSvc(self, rc, fvars, model)
 	if ret is None:
 		response = req.RESPONSE
 		response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
-			% (baseurl, SERVICES, fvars['clustername']))
+			% (baseurl, SERVICES, clustername))
 	else:
 		return ret
 
@@ -2907,21 +2865,19 @@
 	fvars = GetReqVars(req,
 		[ 'clustername', 'resourcename', 'nodename', 'URL' ])
 	baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
+	clustername = fvars['clustername']
 
-	try:
-		model = LuciExtractCluModel(self, req, fvars['clustername'])
-		if not model:
-			raise Exception, 'no model'
-	except Exception, e:
+	model = LuciExtractCluModel(self, req, clustername)
+	if model is None:
 		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('resourceDelete0: %r %s' % (e, str(e)))
-		return (False, { 'errors': [ 'No resource name was given' ] })
+			luci_log.debug_verbose('resourceDelete0: no model')
+		return (False, { 'errors': [ 'Unable to retrieve the cluster configuration for %s. The configuration XML may contain errors' % clustername ]})
 
 	ret = DeleteResource(self, rc, model, fvars['resourcename'])
 	if ret is None:
 		response = req.RESPONSE
 		response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
-			% (baseurl, RESOURCES, fvars['clustername']))
+			% (baseurl, RESOURCES, clustername))
 	else:
 		return ret
 
--- conga/luci/site/luci/Extensions/ricci_communicator.py	2007/07/03 16:56:39	1.28
+++ conga/luci/site/luci/Extensions/ricci_communicator.py	2007/07/12 22:35:40	1.29
@@ -5,8 +5,7 @@
 # GNU General Public License as published by the
 # Free Software Foundation.
 
-from xml.dom import minidom
-from xml.dom.Node import ELEMENT_NODE
+from xml.dom import minidom, Node
 from conga_ssl import SSLSocket
 from LuciSyslog import get_logger
 from conga_constants import LUCI_DEBUG_MODE, LUCI_DEBUG_NET
@@ -242,7 +241,7 @@
 
 		batch_node = None
 		for node in doc.firstChild.childNodes:
-			if node.nodeType == ELEMENT_NODE:
+			if node.nodeType == Node.ELEMENT_NODE:
 				if node.nodeName == 'batch':
 					batch_node = node#.cloneNode(True)
 		if batch_node is None:
@@ -361,7 +360,7 @@
 
 		batch_node = None
 		for node in doc.firstChild.childNodes:
-			if node.nodeType == ELEMENT_NODE:
+			if node.nodeType == Node.ELEMENT_NODE:
 				if node.nodeName == 'batch':
 					batch_node = node#.cloneNode(True)
 		if batch_node is None:
@@ -500,7 +499,7 @@
 	total = 0
 	last  = 0
 	for node in batch_xml.childNodes:
-		if node.nodeType == ELEMENT_NODE:
+		if node.nodeType == Node.ELEMENT_NODE:
 			if node.nodeName == 'module':
 				total = total + 1
 				status = node.getAttribute('status')
@@ -549,7 +548,7 @@
 
 	c = 0
 	for node in batch_xml.childNodes:
-		if node.nodeType == ELEMENT_NODE:
+		if node.nodeType == Node.ELEMENT_NODE:
 			if node.nodeName == 'module':
 				module_xml = node
 				c = c + 1
@@ -558,17 +557,17 @@
 					if status == '0' or status == '4':
 						# module executed, dig deeper into request
 						for node_i in module_xml.childNodes:
-							if node_i.nodeType == ELEMENT_NODE:
+							if node_i.nodeType == 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 == ELEMENT_NODE:
+										if node_j.nodeType == Node.ELEMENT_NODE:
 											if node_j.nodeName == 'function_response':
 												code = -11111111
 												msg = 'BUG'
 												for var in node_j.childNodes:
-													if var.nodeType == ELEMENT_NODE:
+													if var.nodeType == Node.ELEMENT_NODE:
 														if var.nodeName == 'var':
 															if var.getAttribute('name') == 'success' and var.getAttribute('value') == 'true':
 																return 0, ''




More information about the Cluster-devel mailing list