From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte ...
Date: 19 Jul 2006 20:19:54 -0000 [thread overview]
Message-ID: <20060719201954.11998.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-07-19 20:19:53
Modified files:
luci/site/luci/Extensions: cluster_adapters.py
homebase_adapters.py
Log message:
cluster create, and cluster remove (stop managing) bits
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.13&r2=1.14
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2006/07/14 16:00:26 1.2
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2006/07/19 20:19:53 1.3
@@ -14,12 +14,111 @@
#then only display chooser if the current user has
#permissions on at least one. If the user is admin, show ALL clusters
-
+from homebase_adapters import nodeAuth, nodeUnauth
CLUSTER_FOLDER_PATH = '/luci/systems/cluster/'
+def validatePost(request):
+ if int(request.form['pagetype']) != 6:
+ return
+
+ errors = list()
+ nodeList = list()
+ nodeHash = {}
+ rnodeHash = {}
+ oldNodeHash = {}
+ oldRnodeHash = {}
+ requestResults = {}
+
+ sessionData = request.SESSION.get('checkRet')
+ if sessionData and 'requestResults' in sessionData:
+ requestResults = sessionData['requestResults']
+ if 'nodeHash' in requestResults:
+ oldNodeHash = requestResults['nodeHash']
+ if 'rnodeHash' in requestResults:
+ oldRnodeHash = requestResults['rnodeHash']
+
+ if not 'clusterName' in request.form or not request.form['clusterName']:
+ return (False, {'errors': [ 'No cluster name was specified.' ] })
+ clusterName = request.form['clusterName']
+
+ try:
+ numStorage = int(request.form['numStorage'])
+ except:
+ return (False, { 'errors': ['Unknown number of systems entered'], 'requestResults': requestResults })
+
+ if numStorage < 2:
+ return (False, { 'errors': ['A cluster must contain@least two nodes'], 'requestResults': requestResults })
+
+ i = 0
+ while i < numStorage:
+ try:
+ sysData = request.form['__SYSTEM' + str(i)]
+ if not sysData or sysData[0] == '':
+ raise
+
+ if len(sysData) < 2 or sysData[1] == '':
+ errors.append('No password was specified for host \"' + sysData[0] + '\"')
+ raise
+ except:
+ i += 1
+ continue
+
+ if len(sysData) > 1:
+ node = nodeAuth(None, sysData[0], sysData[1])
+
+ if oldRnodeHash and node['ricci_host'] in oldRnodeHash:
+ oldNode = oldRnodeHash[node['ricci_host']]
+ elif oldNodeHash and node['host'] in nodeHash:
+ oldNode = oldNodeHash[node['host']]
+ else:
+ oldNode = None
+
+ if 'errors' in node:
+ errors.append(node['errors'])
+ node['errors'] = True
+
+ if node['host'] in nodeHash or node['ricci_host'] in rnodeHash:
+ node['errors'] = True
+ errors.append('You added the node \"' + node['host'] + '\" more than once')
+ else:
+ if oldNode and 'prev_auth' in oldNode:
+ node['prev_auth'] = oldNode['prev_auth']
+
+ nodeHash[node['host']] = node
+ rnodeHash[node['ricci_host']] = node
+ nodeList.append(node)
+ i += 1
+
+ if len(nodeList) < 2:
+ errors.append('A cluster must contain@least two nodes')
+
+ sfn = lambda x, y: \
+ x['cur_auth'] - y['cur_auth'] or (('errors' in y) - ('errors' in x))
+ nodeList.sort(sfn)
+
+ dfn = lambda x: not 'cur_auth' in x or x['cur_auth'] != True
+ cluster_properties = {
+ 'clusterName': clusterName,
+ 'nodeList': nodeList,
+ 'nodeHash': nodeHash,
+ 'rnodeHash': rnodeHash,
+ 'isComplete': len(errors) < 1 and len(filter(dfn, nodeList)) == 0
+ }
+ return (len(errors) < 1, {'errors': errors, 'requestResults': cluster_properties })
+
def createCluChooser(self, request, systems):
dummynode = {}
+
+ if request.REQUEST_METHOD == 'POST':
+ ret = validatePost(request)
+ try:
+ request.SESSION.set('checkRet', ret[1])
+ except:
+ request.SESSION.set('checkRet', {})
+ else:
+ try: request.SESSION.set('checkRet', {})
+ except: pass
#First, see if a cluster is chosen, then
#check that the current user can access that system
@@ -39,6 +138,7 @@
except KeyError, e:
pagetype = "0"
+
cldata = {}
cldata['Title'] = "Cluster List"
cldata['cfg_type'] = "clusters"
--- conga/luci/site/luci/Extensions/homebase_adapters.py 2006/07/18 19:26:03 1.13
+++ conga/luci/site/luci/Extensions/homebase_adapters.py 2006/07/19 20:19:53 1.14
@@ -174,8 +174,13 @@
systemName = host
node = { 'host': host, 'ricci_host': systemName, 'prev_auth': prevAuth, 'cur_auth': True }
cluster_info = rc.cluster_info()
- if not cluster_info or cluster_info[0] != cluster:
- node['errors'] = 'Node ' + host + ' is reporting it is not a member of cluster \"' + cluster + '\"'
+ if not cluster or not cluster_info or cluster_info[0] != cluster:
+ if cluster:
+ node['errors'] = 'Node \"' + host + '\" is reporting it is not a member of cluster \"' + cluster + '\"'
+ if cluster_info[0]:
+ node['errors'] += ' and that it is a member of cluster \"' + cluster_info[0] + '\"'
+ else:
+ node['errors'] = 'Node \"' + host + '\" reports it is a member of cluster \"' + cluster_info[0] + '\"'
return node
error = 'Unable to authenticate to the ricci agent on \"' + host + '\"'
@@ -563,21 +568,20 @@
except:
sessionData = None
-
if 'ACTUAL_URL' in request:
url = request['ACTUAL_URL']
else:
url = '.'
if 'pagetype' in request.form:
- pagetype = request.form['pagetype']
+ pagetype = int(request.form['pagetype'])
else:
try: request.SESSION.set('checkRet', {})
except: pass
return homebasePortal(self, request, '.', '0')
try:
- validatorFn = formValidators[int(request.form['pagetype']) - 1]
+ validatorFn = formValidators[pagetype - 1]
except:
try: request.SESSION.set('checkRet', {})
except: pass
@@ -887,6 +891,12 @@
except:
return 'Unable to set permissions on new system \"' + host + '\"'
+def abortManageCluster(self):
+ try:
+ sessionData = request.SESSION.get('checkRet')
+ nodeUnauth(sessionData['requestResults']['nodeList'])
+ except: pass
+
def manageCluster(self, clusterName, nodeList):
clusterName = str(clusterName)
@@ -920,11 +930,6 @@
except: pass
return 'Unable to set permissions on new cluster \"' + clusterName + '\"-- Cluster creation failed'
- try:
- ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
- except:
- ssystem = None
-
for i in nodeList:
if 'ricci_host' in i:
host = str(i['ricci_host'])
@@ -938,25 +943,39 @@
raise 'not there'
newSystem.manage_acquiredPermissions([])
newSystem.manage_role('View', [ 'Access contents information' , 'View' ])
- except Exception, e:
+ except:
nodeUnauth(nodeList)
try: clusters.manage_delObjects([clusterName])
except: pass
return 'Unable to create cluster node \"' + host + '\" for cluster \"' + clusterName + '\" -- Cluster creation failed."'
- if ssystem:
- try:
- # It's already there, as a storage system, no problem.
- exists = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + host)
- continue
- except: pass
+ try:
+ ssystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/')
+ if not ssystem:
+ raise
+ except:
+ return
- try:
- ssystem.manage_addFolder(host, '__luci__:system')
- newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + host)
- newSystem.manage_acquiredPermissions([])
- newSystem.manage_role('View', [ 'Access contents information' , 'View' ])
- except: pass
+ # Only add storage systems if the cluster and cluster node DB
+ # objects were added successfully.
+ for i in nodeList:
+ if 'ricci_host' in i:
+ host = str(i['ricci_host'])
+ else:
+ host = str(i['host'])
+
+ try:
+ # It's already there, as a storage system, no problem.
+ exists = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + host)
+ continue
+ except: pass
+
+ try:
+ ssystem.manage_addFolder(host, '__luci__:system')
+ newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + host)
+ newSystem.manage_acquiredPermissions([])
+ newSystem.manage_role('View', [ 'Access contents information' , 'View' ])
+ except: pass
def delSystem(self, systemName):
try:
@@ -964,28 +983,25 @@
except:
return 'Unable to find storage system \"' + systemName + '\"'
- rc = RicciCommunicator(systemName)
- cluster_info = rc.cluster_info()
-
try:
- rc.unauth()
- except Exception, e:
- e = str(e)
- if str(e) != '5':
- # If it's simply a case where we're not authed in the first
- # place, an attempt to unauthorize failing isn't a problem.
- return 'Unable to unauthenticate to storage system \"' + systemName + '\"'
- pass
+ rc = RicciCommunicator(systemName)
+ if not rc:
+ raise
+ except:
+ return 'Unable to connect to the ricci agent on \"' + systemName + '\" to unauthenticate'
- if len(cluster_info) > 0 and cluster_info[0] != '':
+ # Only unauthenticate if the system isn't a member of
+ # a managed cluster.
+ cluster_info = rc.cluster_info()
+ if not cluster_info[0]:
+ try: rc.unauth()
+ except: pass
+ else:
try:
- delClusterSystem(self, str(cluster_info[0]), systemName)
- except KeyError:
- # The cluster may have been deleted, but the system
- # may still exist in the storage dir.
- pass
+ newSystem = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + cluster_info[0] + '/' + rc.system_name())
except:
- return 'Unable to delete cluster storage system \"' + systemName + '\"'
+ try: rc.unauth()
+ except: pass
try:
ssystem.manage_delObjects([systemName])
@@ -1007,8 +1023,7 @@
except:
return 'Unable to delete cluster \"' + clusterName + '\"'
-def delClusterSystem(self, clusterName, systemName):
- cluster = self.restrictedTraverse(PLONE_ROOT + '/systems/cluster/' + clusterName)
+def delClusterSystem(self, cluster, systemName):
try:
if not self.restrictedTraverse(PLONE_ROOT + '/systems/storage/' + systemName):
raise
@@ -1029,10 +1044,9 @@
errors = ''
for i in csystems:
try:
- cluster.manage_delObjects([i])
- delClusterSystem(i)
+ delClusterSystem(self, cluster, i[0])
except:
- errors += 'Unable to delete the cluster system \"' + i + '\"\n'
+ errors += 'Unable to delete the cluster system \"' + i[0] + '\"\n'
return errors
next reply other threads:[~2006-07-19 20:19 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-19 20:19 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-07-19 20:57 [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte rmccabe
2006-07-19 21:38 rmccabe
2006-07-19 22:28 rmccabe
2006-07-24 19:50 jparsons
2006-07-24 21:13 jparsons
2006-07-24 21:51 jparsons
2006-07-25 0:56 jparsons
2006-07-25 20:01 jparsons
2006-07-25 20:16 jparsons
2006-07-27 15:53 rmccabe
2006-07-27 16:34 jparsons
2006-07-28 11:46 jparsons
2006-07-28 14:02 jparsons
2006-07-28 14:16 jparsons
2006-07-28 18:40 jparsons
2006-07-28 18:57 jparsons
2006-07-28 19:03 jparsons
2006-07-31 18:21 rmccabe
2006-08-01 15:04 jparsons
2006-08-01 15:13 jparsons
2006-08-01 15:20 jparsons
2006-08-01 15:25 jparsons
2006-08-01 15:29 jparsons
2006-08-02 17:25 rmccabe
2006-08-02 18:59 rmccabe
2006-08-03 13:37 jparsons
2006-08-09 21:48 jparsons
2006-08-09 22:05 jparsons
2006-08-10 14:16 jparsons
2006-08-10 16:50 jparsons
2006-08-10 23:06 shuennek
2006-08-11 0:29 jparsons
2006-08-12 17:53 jparsons
2006-08-12 18:22 jparsons
2006-08-12 20:31 jparsons
2006-08-12 21:13 jparsons
2006-08-13 13:48 jparsons
2006-08-13 14:57 jparsons
2006-08-13 15:02 jparsons
2006-08-13 16:15 jparsons
2006-08-13 16:32 jparsons
2006-08-13 18:36 jparsons
2006-08-13 19:37 jparsons
2006-08-13 19:38 jparsons
2006-08-14 15:12 jparsons
2006-08-16 16:10 jparsons
2006-08-16 19:14 rmccabe
2006-08-16 21:51 jparsons
2006-08-16 21:54 jparsons
2006-08-16 21:56 jparsons
2006-08-16 23:40 jparsons
2006-08-22 17:41 jparsons
2006-08-22 17:46 jparsons
2006-08-30 22:59 rmccabe
2006-09-22 18:24 rmccabe
2006-09-25 22:59 rmccabe
2006-09-27 15:35 jparsons
2006-09-27 15:51 jparsons
2006-09-27 16:18 jparsons
2006-09-27 18:46 rmccabe
2006-09-28 20:10 rmccabe
2006-09-28 22:04 rmccabe
2006-10-02 20:53 rmccabe
2006-10-02 21:09 rmccabe
2006-10-02 21:42 rmccabe
2006-10-02 22:30 rmccabe
2006-10-04 15:11 jparsons
2006-10-04 16:05 jparsons
2006-10-04 16:20 rmccabe
2006-10-09 20:21 rmccabe
2006-10-10 21:33 kupcevic
2006-10-11 16:18 rmccabe
2006-10-11 16:25 jparsons
2006-10-11 16:35 jparsons
2006-10-11 17:29 rmccabe
2006-10-11 17:43 jparsons
2006-10-11 20:58 jparsons
2006-10-11 22:37 jparsons
2006-10-11 23:08 rmccabe
2006-10-11 23:11 jparsons
2006-10-11 23:56 jparsons
2006-10-12 0:04 jparsons
2006-10-12 15:45 jparsons
2006-10-12 15:50 jparsons
2006-10-12 17:08 jparsons
2006-10-12 17:27 jparsons
2006-10-12 19:40 rmccabe
2006-10-12 20:48 jparsons
2006-10-12 20:54 jparsons
2006-10-12 21:00 kupcevic
2006-10-12 22:11 jparsons
2006-10-13 22:56 rmccabe
2006-10-16 4:51 rmccabe
2006-10-16 4:54 rmccabe
2006-10-16 5:28 rmccabe
2006-10-16 19:17 jparsons
2006-10-16 20:51 jparsons
2006-10-16 21:01 rmccabe
2006-10-18 19:16 rmccabe
2006-10-18 23:12 rmccabe
2006-10-19 14:57 rmccabe
2006-10-20 21:59 rmccabe
2006-10-20 22:09 rmccabe
2006-10-23 20:47 jparsons
2006-10-24 14:08 rmccabe
2006-10-25 0:43 rmccabe
2006-10-27 1:11 rmccabe
2006-10-30 20:43 jparsons
2006-10-30 22:52 rmccabe
2006-10-31 0:16 rmccabe
2006-10-31 17:18 rmccabe
2006-11-02 3:17 rmccabe
2006-11-02 20:41 rmccabe
2006-11-02 20:45 rmccabe
2006-11-02 20:58 rmccabe
2006-11-03 1:08 rmccabe
2006-11-03 1:24 rmccabe
2006-11-03 21:13 jparsons
2006-11-05 0:59 rmccabe
2006-11-06 23:55 rmccabe
2006-11-07 1:32 jparsons
2006-11-07 2:36 jparsons
2006-11-07 20:13 jparsons
2006-11-07 20:14 jparsons
2006-11-08 15:52 jparsons
2006-11-08 21:42 rmccabe
2006-11-09 14:17 rmccabe
2006-11-09 22:30 rmccabe
2006-11-10 17:59 rmccabe
2006-11-10 18:18 rmccabe
2006-11-17 5:48 rmccabe
2006-11-17 5:50 rmccabe
2006-11-20 15:05 jparsons
2006-11-20 23:32 rmccabe
2006-11-27 18:15 rmccabe
2006-11-27 21:05 rmccabe
2006-11-27 21:06 rmccabe
2006-11-30 20:12 jparsons
2006-12-08 23:02 rmccabe
2006-12-14 17:03 rmccabe
2006-12-14 21:37 rmccabe
2006-12-20 20:40 jparsons
2007-01-10 20:06 rmccabe
2007-01-10 22:45 rmccabe
2007-01-10 23:33 jparsons
2007-01-17 22:14 rmccabe
2007-01-17 22:26 rmccabe
2007-01-18 2:48 rmccabe
2007-01-26 19:35 rmccabe
2007-01-29 23:30 rmccabe
2007-01-30 21:05 jparsons
2007-01-30 21:21 jparsons
2007-01-30 21:41 jparsons
2007-01-31 18:50 rmccabe
2007-01-31 19:28 rmccabe
2007-01-31 23:45 rmccabe
2007-02-05 19:56 rmccabe
2007-02-07 21:30 rmccabe
2007-02-07 22:00 rmccabe
2007-02-12 20:24 rmccabe
2007-02-12 20:25 rmccabe
2007-02-13 19:50 rmccabe
2007-02-13 19:50 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-03-06 22:48 rmccabe
2007-03-12 5:46 rmccabe
2007-03-12 5:46 rmccabe
2007-03-12 5:47 rmccabe
2007-03-13 3:06 rmccabe
2007-03-13 3:07 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-27 2:03 rmccabe
2007-04-02 15:56 rmccabe
2007-04-02 16:35 rmccabe
2007-05-03 19:51 rmccabe
2007-08-22 20:57 rmccabe
2007-08-23 19:00 rmccabe
2007-12-12 15:45 rmccabe
2008-04-18 20:37 rmccabe
2008-07-17 16:36 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=20060719201954.11998.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.