[Cluster-devel] conga/luci/site/luci/Extensions homebase_adapt ...

rmccabe at sourceware.org rmccabe at sourceware.org
Wed Nov 1 20:34:03 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2006-11-01 20:34:02

Modified files:
	luci/site/luci/Extensions: homebase_adapters.py ricci_bridge.py 
	                           ricci_communicator.py 

Log message:
	fixes for bz# 213504

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.37&r2=1.38
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_bridge.py.diff?cvsroot=cluster&r1=1.39&r2=1.40
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.16&r2=1.17

--- conga/luci/site/luci/Extensions/homebase_adapters.py	2006/10/30 20:42:03	1.37
+++ conga/luci/site/luci/Extensions/homebase_adapters.py	2006/11/01 20:34:02	1.38
@@ -13,6 +13,12 @@
 from ricci_communicator import CERTS_DIR_PATH
 from clusterOS import resolveOSType
 from conga_constants import *
+from LuciSyslog import LuciSyslog, LuciSyslogError
+
+try:
+	luci_log = LuciSyslog()
+except LuciSyslogError, e:
+	pass
 
 def siteIsSetup(self):
 	try:
@@ -136,20 +142,27 @@
 			pass
 
 def nodeAuth(cluster, host, passwd):
+	messages = list()
 	systemName = host
 	os_str = 'rhel5'
 
 	try:
 		rc = RicciCommunicator(host)
 		if not rc:
-			raise
-		systemName = rc.system_name()
-	except:
-		error = 'Unable to establish a connection to the ricci agent on \"' + host + '\"'
-		return { 'host': host, 'ricci_host': systemName, 'errors': error, 'cur_auth': False, 'os': os_str }
+			luci_log.debug_verbose('nodeAuth0: rc is None')
+			raise Exception, 'unknown error'
+	except Exception, e:
+		try:
+			error = 'Ricci connection to %s failed: %s' % (host, str(e))
+		except:
+			error = 'Ricci connection to %s failed' % host
+		luci_log.debug_verbose('nodeAuth1: rc failed: %s' % error)
+
+		return { 'host': host, 'ricci_host': host, 'errors': error, 'cur_auth': False, 'os': os_str }
 
 	if rc.authed():
 		prevAuth = True
+		messages.append('Luci is already authenticated to %s -- not checking password' % host)
 	else:
 		prevAuth = False
 		if not passwd:
@@ -157,11 +170,15 @@
 		else:
 			try:
 				rc.auth(passwd)
-			except: pass
+			except:
+				pass
 
 	if rc.authed():
-		os_str = resolveOSType(rc.os())
-		if not os_str:
+		try:
+			os_str = resolveOSType(rc.os())
+			if not os_str:
+				raise
+		except:
 			os_str = "rhel5"  #Backup plan in case all is almost lost...
 
 		systemName = rc.system_name()
@@ -183,6 +200,7 @@
 
 def validateAddClusterInitial(self, request, must_complete=True):
 	errors = list()
+	messages = list()
 	newNodeList = list()
 	nodeHash = {}
 	rnodeHash = {}
@@ -196,8 +214,10 @@
 
 	try:
 		rc = RicciCommunicator(sysData[0])
-	except:
-		return (False, { 'errors': [ 'Unable to establish a connection to the Ricci agent on \"' + sysData[0] + '\"' ] })
+		if not rc:
+			raise Exception, 'unknown error'
+	except Exception, e:
+		return (False, { 'errors': [ 'Unable to establish a connection to the Ricci agent on %s: %s' % (sysData[0], str(e)) ] })
 
 	prevAuth = 0
 	if not rc.authed():
@@ -241,7 +261,7 @@
 	if systemName[:9] == 'localhost':
 		systemName = sysData[0]
 
-	node = { 'host': sysData[0], 'ricci_host': systemName, 'prev_auth': prevAuth, 'cur_auth': rc.authed(), 'os': os_str }
+	node = { 'host': rc.hostname(), 'ricci_host': systemName, 'prev_auth': prevAuth, 'cur_auth': rc.authed(), 'os': os_str }
 	nodeHash[sysData[0]] = node
 	rnodeHash[systemName] = node
 	newNodeList.append(node)
@@ -253,6 +273,8 @@
 		
 	for i in nodeList:
 		node = nodeAuth(clusterName, i, passwd)
+		if 'messages' in node:
+			messages.extend(node['messages'])
 		if node['host'] in nodeHash or node['ricci_host'] in rnodeHash:
 			continue
 		nodeHash[node['host']] = node
@@ -281,11 +303,11 @@
 		'isComplete': len(filter(dfn, newNodeList)) == 0
 	}
 
-	if len(errors) < 1:
+	if len(errors) < len(nodeList):
 		cluster_properties['redirect'] = HOMEBASE_ADD_CLUSTER
 
 	return (len(errors) < 1,
-		{'errors': errors, 'requestResults': cluster_properties })
+		{'messages': messages, 'errors': errors, 'requestResults': cluster_properties })
 
 def validateAddCluster(self, request, must_complete=True):
 	errors = list()
@@ -296,7 +318,8 @@
 	try:
 		sessionData = request.SESSION.get('checkRet')
 		requestResults = sessionData['requestResults']
-	except:
+	except Exception, e:
+		luci_log.debug_verbose('VAC0: error getting session obj: %s' % str(e))
 		try:
 			clusterName = request.form['clusterName']
 		except:
@@ -304,24 +327,27 @@
 
 		try:
 			nodeList = requestResults['nodeList']
+			luci_log.debug_verbose('VAC1: unauth to node list')
 			nodeUnauth(nodeList)
 		except:
 			pass
 
-		return (False, { 'errors': [ 'A data integrity error has occurred. Please attempt adding the cluster again.' ], 'requestResults': { 'clusterName': clusterName, 'isComplete': False, 'nodeList': [] } })
+		return (False, { 'errors': [ 'A data integrity error has occurred. Please attempt adding the cluster again.' ], 'requestResults': { 'clusterName': clusterName, 'isComplete': False, 'nodeList': [], 'redirect': HOMEBASE_ADD_CLUSTER_INITIAL } })
 		
 	try:
 		clusterName = request.form['clusterName']
 		if not clusterName:
-			raise
-	except:
+			raise Exception, 'no cluster name was found'
+	except Exception, e:
+		luci_log.debug_verbose('VAC2: no cluser name found: %s', str(e))
 		return (False, { 'errors': ['No cluster name was given.'], 'requestResults': requestResults })
 
 	try:
 		nodeList = requestResults['nodeList']
 		if not nodeList or len(nodeList) < 1:
-			raise
-	except:
+			raise Exception, 'no node list found'
+	except Exception, e:
+		luci_log.debug_verbose('VAC3: no nodeList found: %s', str(e))
 		return (False, { 'errors': ['No cluster nodes were given.'], 'requestResults': requestResults })
 
 	try:
@@ -338,13 +364,15 @@
 	try:
 		numStorage = int(request.form['numStorage'])
 		if numStorage != len(nodeList):
-			raise
-	except:
-		nodeUnauth(nodeList)
+			raise Exception, 'numstorage != len(nodelist)'
+	except Exception, e:
 		try:
 			requestResults['isComplete'] = False
+			luci_log.debug_verbose('VAC4: error: %s' % str(e))
 		except:
 			pass
+
+		nodeUnauth(nodeList)
 		return (False, {
 				'errors': [ 'Unknown number of nodes entered' ],
 				'requestResults': requestResults })
@@ -372,8 +400,9 @@
 					oldNode = rnodeHash[k]
 
 		if not oldNode:
+			luci_log.debug_verbose('VAC5: node %s not found', sysData[0])
 			nodeUnauth(nodeList)
-			return (False, { 'errors': [ 'A data integrity error has occurred. Please attempt adding the cluster again.' ], 'requestResults': { 'clusterName': clusterName, 'nodeList': nodeList, 'isComplete': False } })
+			return (False, { 'errors': [ 'A data integrity error has occurred. Please attempt adding the cluster again.' ], 'requestResults': { 'clusterName': clusterName, 'nodeList': nodeList, 'isComplete': False, 'redirect': HOMEBASE_ADD_CLUSTER_INITIAL } })
 
 		if oldNode['host'] != node['host']:
 			del nodeHash[oldNode['host']]
@@ -587,8 +616,11 @@
 
 		try:
 			rc = RicciCommunicator(sysData[0])
-		except:
-			errors.append('Unable to contact the ricci agent for ' + host)
+			if rc is None:
+				raise Exception, 'unknown error'
+		except Exception, e:
+			errors.append('Unable to contact the ricci agent for %s: %s' \
+				% (sysData[0], str(e)))
 			i += 1
 			continue
 
@@ -658,20 +690,23 @@
 	except:
 		sessionData = None
 
-	try:
-		request.SESSION.delete('checkRet')
-	except:
-		pass
-
 	if 'ACTUAL_URL' in request:
 		url = request['ACTUAL_URL']
 	else:
 		url = '.'
 
-	try:
+	if 'pagetype' in request.form:
 		pagetype = int(request.form['pagetype'])
+	else:
+		try: request.SESSION.set('checkRet', {})
+		except: pass
+		return homebasePortal(self, request, '.', '0')
+
+	try:
 		validatorFn = formValidators[pagetype - 1]
 	except:
+		try: request.SESSION.set('checkRet', {})
+		except: pass
 		return homebasePortal(self, request, '.', '0')
 
 	if validatorFn == validateAddClusterInitial or validatorFn == validateAddCluster:
@@ -699,7 +734,7 @@
 		return homebaseControlPost(self, request)
 
 	try:
-		request.SESSION.delete('checkRet')
+		request.SESSION.set('checkRet', {})
 	except:
 		pass
 
@@ -948,8 +983,11 @@
 
 	try:
 		rc = RicciCommunicator(host)
-	except:
-		return 'Unable to establish a connection to the ricci agent on \"' + host + '\"'
+		if rc is None:
+			raise Exception, 'unknown error'
+	except Exception, e:
+		return 'Unable to establish a connection to the ricci agent on %s: %s' \
+			% (host, str(e))
 
 	try:
 		if not rc.authed():
@@ -977,20 +1015,20 @@
 
 	try:
 		ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
-	except:
-		return 'Unable to create storage system \"' + host + '\"'
+	except Exception, e:
+		return 'Unable to create storage system %s: %s' % (host, str(e))
 
 	try:
 		ssystem.manage_addFolder(host, '__luci__:system')
 		newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + host)
-	except:
-		return 'Unable to create storage system \"' + host + '\"'
+	except Exception, e:
+		return 'Unable to create storage system %s: %s' % (host, str(e))
 
 	try:
 		newSystem.manage_acquiredPermissions([])
 		newSystem.manage_role('View', ['Access contents information','View'])
-	except:
-		return 'Unable to set permissions on new system \"' + host + '\"'
+	except Exception, e:
+		return 'Unable to set permissions on storage system %s: %s' % (host, str(e))
 
 	return None
 
@@ -1003,11 +1041,12 @@
 
 def manageCluster(self, clusterName, nodeList):
 	clusterName = str(clusterName)
+	luci_log.debug_verbose('manageCluster for %s' % clusterName)
 
 	try:
 		clusters = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/')
 		if not clusters:
-			raise
+			raise Exception, 'cannot find the cluster entry in the DB'
 	except:
 		nodeUnauth(nodeList)
 		return 'Unable to create cluster \"' + clusterName + '\": the cluster directory is missing.'
@@ -1024,28 +1063,29 @@
 		clusters.manage_addFolder(clusterName, '__luci__:cluster')
 		newCluster = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName)
 		if not newCluster:
-			raise
-	except:
+			raise Exception, 'unable to find cluster folder for %s' % clusterName
+	except Exception, e:
 		nodeUnauth(nodeList)
-		return 'Unable to create cluster \"' + clusterName + '\"'
+		return 'Unable to create cluster %s: %s' % (clusterName, str(e))
 
 	try:
 		newCluster.manage_acquiredPermissions([])
 		newCluster.manage_role('View', ['Access Contents Information','View'])
-	except:
+	except Exception, e:
 		nodeUnauth(nodeList)
 		try:
 			clusters.manage_delObjects([clusterName])
 		except:
 			pass
-		return 'Unable to set permissions on new cluster \"' + clusterName + '\"-- Cluster creation failed'
+		return 'Unable to set permissions on new cluster: %s: %s' % (clusterName, str(e))
 
-	# XXX this needs to be improved.
 	try:
 		cluster_os = nodeList[0]['os']
 		if not cluster_os:
 			raise KeyError, 'Cluster OS is blank'
 	except KeyError, e:
+		luci_log.debug_verbose('Warning adding cluster %s: %s' \
+			% (clusterName, str(e)))
 		cluster_os = 'rhel5'
 
 	try:
@@ -1063,23 +1103,24 @@
 			newCluster.manage_addFolder(host, '__luci__:csystem:' + clusterName)
 			newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName + '/' + host)
 			if not newSystem:
-				raise 'not there'
+				raise Exception, 'unable to create cluster system DB entry'
 			newSystem.manage_acquiredPermissions([])
 			newSystem.manage_role('View', [ 'Access contents information' , 'View' ])
-		except:
+		except Exception, e:
 			nodeUnauth(nodeList)
 			try:
 				clusters.manage_delObjects([clusterName])
 			except:
 				pass
-			return 'Unable to create cluster node \"' + host + '\" for cluster \"' + clusterName + '\" -- Cluster creation failed."'
+			return 'Unable to create cluster node %s for cluster %s: %s' \
+				% (host, clusterName, str(e))
 
 	try:
 		ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
 		if not ssystem:
-			raise
-	except:
-		return 'The storage directory is missing.'
+			raise Exception, 'The storage DB entry is missing'
+	except Exception, e:
+		return 'Error adding storage node %s: %s' % (host, str(e))
 
 	# Only add storage systems if the cluster and cluster node DB
 	# objects were added successfully.
@@ -1106,7 +1147,7 @@
 	try:
 		clusterObj = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName)
 		if not clusterObj:
-			raise
+			raise Exception, 'cluster %s DB entry is missing' % clusterName
 	except:
 		nodeUnauth(nodeList)
 		return 'No cluster named \"' + clusterName + '\" is managed by Luci'
@@ -1121,18 +1162,22 @@
 			clusterObj.manage_addFolder(host, '__luci__:csystem:' + clusterName)
 			newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName + '/' + host)
 			if not newSystem:
-				raise
+				raise Exception, 'cluster node DB entry for %s disappeared from under us' % host
+					
 			newSystem.manage_acquiredPermissions([])
 			newSystem.manage_role('View', [ 'Access contents information' , 'View' ])
-		except:
+		except Exception, e:
 			nodeUnauth(nodeList)
-			return 'Unable to create cluster node \"' + host + '\" for cluster \"' + clusterName + '\"'
+			return 'Unable to create cluster node %s for cluster %s: %s' \
+				% (host, clusterName, str(e))
 
 	try:
 		ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
 		if not ssystem:
-			raise
-	except:
+			raise Exception, 'storage DB entry is missing'
+	except Exception, e:
+		luci_log.debug_verbose('Error: adding storage DB node for %s: %s' \
+			% (host, str(e)))
 		return
 
 	# Only add storage systems if the and cluster node DB
@@ -1160,19 +1205,20 @@
 	try:
 		ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
 		if not ssystem:
-			raise
-	except:
-		return 'Unable to find storage system \"' + systemName + '\"'
+			raise Exception, 'storage DB entry is missing'
+	except Exception, e:
+		return 'Unable to find storage system %s: %s' % (systemName, str(e))
 
 	try:
 		rc = RicciCommunicator(systemName)
-		if not rc:
-			raise
-	except:
+		if rc is None:
+			raise Exception, 'unknown error'
+	except Exception, e:
 		try:
 			ssystem.manage_delObjects([systemName])
 		except:
 			return 'Unable to delete the storage system \"' + systemName + '\"'
+		luci_log.debug_verbose('ricci error for %s: %s' % (systemName, str(e)))
 		return
 
 	# Only unauthenticate if the system isn't a member of
@@ -1190,8 +1236,9 @@
 
 	try:
 		ssystem.manage_delObjects([systemName])
-	except:
-		return 'Unable to delete storage system \"' + systemName + '\"'
+	except Exception, e:
+		return 'Unable to delete storage system %s: %s' \
+			% (systemName, str(e))
 
 def delCluster(self, clusterName):
 	try:
@@ -1218,25 +1265,33 @@
 		try:
 			rc = RicciCommunicator(systemName)
 			rc.unauth()
-		except: pass
-	cluster.manage_delObjects([systemName])
+		except Exception, e:
+			luci_log.debug_verbose('ricci error for %s: %s' \
+				% (systemName, str(e)))
+
+	try:
+		cluster.manage_delObjects([systemName])
+	except Exception, e:
+		err_str = 'Error deleting cluster object %s: %s' % (systemName, str(e))
+		luci_log.debug_verbose(err_str)
+		return err_str
 
 def delClusterSystems(self, clusterName):
 	try:
 		cluster = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName)
 		if not cluster:
-			raise
+			raise Exception, 'cluster DB entry is missing'
 		csystems = getClusterSystems(self, clusterName)
-	except:
+	except Exception, e:
+		luci_log.debug_verbose('delCluSysterms: error for %s: %s' \
+			% (clusterName, str(e)))
 		return 'Unable to find any systems for cluster \"' + clusterName + '\"'
 
 	errors = ''
 	for i in csystems:
-		try:
-			delClusterSystem(self, cluster, i[0])
-		except:
-			errors += 'Unable to delete the cluster system \"' + i[0] + '\"\n'
-
+		err = delClusterSystem(self, cluster, i[0])
+		if err:
+			errors += 'Unable to delete the cluster system %s: %s\n' % (i[0], err)
 	return errors
 
 def getDefaultUser(self, request):
--- conga/luci/site/luci/Extensions/ricci_bridge.py	2006/10/31 13:51:53	1.39
+++ conga/luci/site/luci/Extensions/ricci_bridge.py	2006/11/01 20:34:02	1.40
@@ -507,13 +507,22 @@
 	batch.appendChild(module)
 
 	# temporary workaround for ricci bug
-	system_info = rc.system_name()
-	rc = RicciCommunicator(system_info)
+	system_info = rc.hostname()
+	try:
+		rc = RicciCommunicator(system_info)
+		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)))
+		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)))
 		return None
 
 	if not ret:
--- conga/luci/site/luci/Extensions/ricci_communicator.py	2006/10/31 17:18:12	1.16
+++ conga/luci/site/luci/Extensions/ricci_communicator.py	2006/11/01 20:34:02	1.17
@@ -32,6 +32,10 @@
         except Exception, e:
             raise RicciError, 'Error connecting to %s:%d: %s' \
                     % (self.__hostname, self.__port, str(e))
+        except:
+            raise RicciError, 'Error connecting to %s:%d: unknown error' \
+                    % (self.__hostname, self.__port)
+
         luci_log.debug_verbose('Connected to %s:%d' \
             % (self.__hostname, self.__port))
         try:
@@ -42,6 +46,9 @@
         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()
@@ -168,6 +175,8 @@
                 % (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()
@@ -264,8 +273,11 @@
             try:
                 pos = self.ss.write(buff)
             except Exception, e:
-                luci_log.debug('Error sending XML \"%s\" to %s' \
-                    % (buff, self.__hostname))
+                luci_log.debug('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
             buff = buff[pos:]
@@ -294,8 +306,9 @@
         except Exception, e:
             luci_log.debug('Error reading data from %s: %s' \
                 % (self.__hostname, str(e)))
-            raise RicciError, 'Error reading data from host %s' \
-                    % self.__hostname
+            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('Received XML \"%s\" from host %s' \
             % (xml_in, self.__hostname))
 




More information about the Cluster-devel mailing list