From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte ...
Date: 28 Sep 2006 20:10:29 -0000 [thread overview]
Message-ID: <20060928201029.22598.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-09-28 20:10:29
Modified files:
luci/site/luci/Extensions: cluster_adapters.py
Log message:
flesh out more of the backend form handlers
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.74&r2=1.75
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2006/09/27 18:46:08 1.74
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2006/09/28 20:10:29 1.75
@@ -1,3 +1,4 @@
+import socket
from ModelBuilder import ModelBuilder
from ZPublisher import HTTPRequest
import AccessControl
@@ -278,8 +279,185 @@
def validateResourceEdit(self, request):
return (True, {})
+
+## Cluster properties form validation routines
+
+def validateMCastConfig(self, form):
+ try:
+ mcast_val = form['mcast'].strip().lower()
+ if mcast_val != 'true' and mcast_val != 'false':
+ raise KeyError(mcast_val)
+ if mcast_val == 'true':
+ mcast_val = 1
+ else:
+ mcast_val = 0
+ except KeyError, e:
+ return (False, {'errors': 'An invalid multicast selection was made.'})
+
+ if not mcast_val:
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+ try:
+ addr_str = form['mcast_addr'].strip()
+ socket.inet_pton(socket.AF_INET, addr_str)
+ except KeyError, e:
+ return (False, {'errors': 'No multicast address was given'})
+ except socket.error, e:
+ try:
+ socket.inet_pton(socket.AF_INET6, addr_str)
+ except socket.error, e6:
+ return (False, {'errors': 'An invalid multicast address was given: ' + e})
+
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+def validateQDiskConfig(self, form):
+ errors = list()
+
+ try:
+ qdisk_val = form['quorumd'].strip().lower()
+ if qdisk_val != 'true' and qdisk_val != 'false':
+ raise KeyError(qdisk_val)
+ if qdisk_val == 'true':
+ qdisk_val = 1
+ else:
+ qdisk_val = 0
+ except KeyError, e:
+ return (False, {'errors': 'An invalid quorum partition selection was made.'})
+
+ if not qdisk_val:
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+ try:
+ interval = int(form['interval'])
+ if interval < 0:
+ raise ValueError('Interval must be 0 or greater')
+ except KeyError, e:
+ errors.append('No Interval value was given.')
+ except ValueError, e:
+ errros.append('An invalid Interval value was given: ' + e)
+
+ try:
+ votes = int(form['votes'])
+ if votes < 1:
+ raise ValueError('Votes must be greater than 0')
+ except KeyError, e:
+ errors.append('No Votes value was given.')
+ except ValueError, e:
+ errors.append('An invalid Votes value was given: ' + e)
+
+ try:
+ tko = int(form['tko'])
+ if tko < 0:
+ raise ValueError('TKO must be 0 or greater')
+ except KeyError, e:
+ errors.append('No TKO value was given.')
+ except ValueError, e:
+ errors.append('An invalid TKO value was given: ' + e)
+
+ try:
+ min_score = int(form['min_score'])
+ if min_score < 1:
+ raise ValueError('Minimum Score must be greater than 0')
+ except KeyError, e:
+ errors.append('No Minimum Score value was given.')
+ except ValueError, e:
+ errors.append('An invalid Minimum Score value was given: ' + e)
+
+ try:
+ device = form['device'].strip()
+ except KeyError, e:
+ errors.append('No Device value was given.')
+
+ try:
+ label = form['label'].strip()
+ except KeyError, e:
+ errors.append('No Label value was given.')
+
+ if len(errors) > 0:
+ return (False, {'errors': errors })
+
+ # heur: heuristicN:hname heuristicN:hprog heuristicN:hint heuristicN:score
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+def validateGeneralConfig(self, form):
+ errors = list()
+
+ try:
+ cluster_name = form['cluname'].strip()
+ except KeyError, e:
+ errors.append('No cluster name was given.')
+
+ try:
+ version_num = int(form['cfgver'])
+ if version_num < 0:
+ raise ValueError('configuration version numbers must be 0 or greater.')
+ except KeyError, e:
+ errors.append('No cluster configuration version was given.')
+ except ValueError, e:
+ errors.append('An invalid configuration version was given: ' + e)
+
+ if len(errors) > 0:
+ return (False, {'errors': errors})
+
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+def validateFenceConfig(self, form):
+ errors = list()
+
+ 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.')
+ except KeyError, e:
+ errors.append('No post fail delay was given.')
+ except ValueError, e:
+ errors.append('Invalid post fail delay: ' + 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.')
+ except KeyError, e:
+ errors.append('No post join delay was given.')
+ except ValueError, e:
+ errors.append('Invalid post join delay: ' + e)
+
+ if len(errors) > 0:
+ return (False, {'errors': errors })
+
+ return (True, {'messages': 'Changes accepted. - FILL ME IN'})
+
+configFormValidators = {
+ 'general': validateGeneralConfig,
+ 'mcast': validateMCastConfig,
+ 'fence': validateFenceConfig,
+ 'qdisk': validateQDiskConfig
+}
+
def validateConfigCluster(self, request):
- return (True, {})
+ errors = list()
+ messages = list()
+
+ if not 'form' in request:
+ return (False, {'errors': 'No form was submitted.' })
+ if not 'configtype' in request.form:
+ return (False, {'errors': 'No configuration type was submitted.' })
+ if not request.form['configtype'] in configFormValidators:
+ return (False, {'errors': 'An invalid configuration type was submitted.' })
+
+ val = configFormValidators[request.form['configtype']]
+ ret = val(self, request.form)
+
+ retcode = ret[0]
+ if 'errors' in ret[1]:
+ errors.extend(ret[1]['errors'])
+ if 'messages' in ret[1]:
+ messages.extend(ret[1]['messages'])
+
+ if len(errors) < 1:
+ messages.append('The cluster properties have been updated.')
+
+ return (retcode, {'errors': errors, 'messages': messages})
def validateFenceAdd(self, request):
return (True, {})
@@ -296,7 +474,7 @@
31: validateResourceAdd,
33: validateResourceEdit,
51: validateFenceAdd,
- 50: validateFenceEdit
+ 50: validateFenceEdit,
}
def validatePost(self, request):
next reply other threads:[~2006-09-28 20:10 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-28 20:10 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2008-07-17 16:36 [Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte rmccabe
2008-04-18 20:37 rmccabe
2007-12-12 15:45 rmccabe
2007-08-23 19:00 rmccabe
2007-08-22 20:57 rmccabe
2007-05-03 19:51 rmccabe
2007-04-02 16:35 rmccabe
2007-04-02 15:56 rmccabe
2007-03-27 2:03 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-16 3:19 rmccabe
2007-03-13 3:07 rmccabe
2007-03-13 3:06 rmccabe
2007-03-12 5:47 rmccabe
2007-03-12 5:46 rmccabe
2007-03-12 5:46 rmccabe
2007-03-06 22:48 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-03-01 20:22 rmccabe
2007-02-13 19:50 rmccabe
2007-02-13 19:50 rmccabe
2007-02-12 20:25 rmccabe
2007-02-12 20:24 rmccabe
2007-02-07 22:00 rmccabe
2007-02-07 21:30 rmccabe
2007-02-05 19:56 rmccabe
2007-01-31 23:45 rmccabe
2007-01-31 19:28 rmccabe
2007-01-31 18:50 rmccabe
2007-01-30 21:41 jparsons
2007-01-30 21:21 jparsons
2007-01-30 21:05 jparsons
2007-01-29 23:30 rmccabe
2007-01-26 19:35 rmccabe
2007-01-18 2:48 rmccabe
2007-01-17 22:26 rmccabe
2007-01-17 22:14 rmccabe
2007-01-10 23:33 jparsons
2007-01-10 22:45 rmccabe
2007-01-10 20:06 rmccabe
2006-12-20 20:40 jparsons
2006-12-14 21:37 rmccabe
2006-12-14 17:03 rmccabe
2006-12-08 23:02 rmccabe
2006-11-30 20:12 jparsons
2006-11-27 21:06 rmccabe
2006-11-27 21:05 rmccabe
2006-11-27 18:15 rmccabe
2006-11-20 23:32 rmccabe
2006-11-20 15:05 jparsons
2006-11-17 5:50 rmccabe
2006-11-17 5:48 rmccabe
2006-11-10 18:18 rmccabe
2006-11-10 17:59 rmccabe
2006-11-09 22:30 rmccabe
2006-11-09 14:17 rmccabe
2006-11-08 21:42 rmccabe
2006-11-08 15:52 jparsons
2006-11-07 20:14 jparsons
2006-11-07 20:13 jparsons
2006-11-07 2:36 jparsons
2006-11-07 1:32 jparsons
2006-11-06 23:55 rmccabe
2006-11-05 0:59 rmccabe
2006-11-03 21:13 jparsons
2006-11-03 1:24 rmccabe
2006-11-03 1:08 rmccabe
2006-11-02 20:58 rmccabe
2006-11-02 20:45 rmccabe
2006-11-02 20:41 rmccabe
2006-11-02 3:17 rmccabe
2006-10-31 17:18 rmccabe
2006-10-31 0:16 rmccabe
2006-10-30 22:52 rmccabe
2006-10-30 20:43 jparsons
2006-10-27 1:11 rmccabe
2006-10-25 0:43 rmccabe
2006-10-24 14:08 rmccabe
2006-10-23 20:47 jparsons
2006-10-20 22:09 rmccabe
2006-10-20 21:59 rmccabe
2006-10-19 14:57 rmccabe
2006-10-18 23:12 rmccabe
2006-10-18 19:16 rmccabe
2006-10-16 21:01 rmccabe
2006-10-16 20:51 jparsons
2006-10-16 19:17 jparsons
2006-10-16 5:28 rmccabe
2006-10-16 4:54 rmccabe
2006-10-16 4:51 rmccabe
2006-10-13 22:56 rmccabe
2006-10-12 22:11 jparsons
2006-10-12 21:00 kupcevic
2006-10-12 20:54 jparsons
2006-10-12 20:48 jparsons
2006-10-12 19:40 rmccabe
2006-10-12 17:27 jparsons
2006-10-12 17:08 jparsons
2006-10-12 15:50 jparsons
2006-10-12 15:45 jparsons
2006-10-12 0:04 jparsons
2006-10-11 23:56 jparsons
2006-10-11 23:11 jparsons
2006-10-11 23:08 rmccabe
2006-10-11 22:37 jparsons
2006-10-11 20:58 jparsons
2006-10-11 17:43 jparsons
2006-10-11 17:29 rmccabe
2006-10-11 16:35 jparsons
2006-10-11 16:25 jparsons
2006-10-11 16:18 rmccabe
2006-10-10 21:33 kupcevic
2006-10-09 20:21 rmccabe
2006-10-04 16:20 rmccabe
2006-10-04 16:05 jparsons
2006-10-04 15:11 jparsons
2006-10-02 22:30 rmccabe
2006-10-02 21:42 rmccabe
2006-10-02 21:09 rmccabe
2006-10-02 20:53 rmccabe
2006-09-28 22:04 rmccabe
2006-09-27 18:46 rmccabe
2006-09-27 16:18 jparsons
2006-09-27 15:51 jparsons
2006-09-27 15:35 jparsons
2006-09-25 22:59 rmccabe
2006-09-22 18:24 rmccabe
2006-08-30 22:59 rmccabe
2006-08-22 17:46 jparsons
2006-08-22 17:41 jparsons
2006-08-16 23:40 jparsons
2006-08-16 21:56 jparsons
2006-08-16 21:54 jparsons
2006-08-16 21:51 jparsons
2006-08-16 19:14 rmccabe
2006-08-16 16:10 jparsons
2006-08-14 15:12 jparsons
2006-08-13 19:38 jparsons
2006-08-13 19:37 jparsons
2006-08-13 18:36 jparsons
2006-08-13 16:32 jparsons
2006-08-13 16:15 jparsons
2006-08-13 15:02 jparsons
2006-08-13 14:57 jparsons
2006-08-13 13:48 jparsons
2006-08-12 21:13 jparsons
2006-08-12 20:31 jparsons
2006-08-12 18:22 jparsons
2006-08-12 17:53 jparsons
2006-08-11 0:29 jparsons
2006-08-10 23:06 shuennek
2006-08-10 16:50 jparsons
2006-08-10 14:16 jparsons
2006-08-09 22:05 jparsons
2006-08-09 21:48 jparsons
2006-08-03 13:37 jparsons
2006-08-02 18:59 rmccabe
2006-08-02 17:25 rmccabe
2006-08-01 15:29 jparsons
2006-08-01 15:25 jparsons
2006-08-01 15:20 jparsons
2006-08-01 15:13 jparsons
2006-08-01 15:04 jparsons
2006-07-31 18:21 rmccabe
2006-07-28 19:03 jparsons
2006-07-28 18:57 jparsons
2006-07-28 18:40 jparsons
2006-07-28 14:16 jparsons
2006-07-28 14:02 jparsons
2006-07-28 11:46 jparsons
2006-07-27 16:34 jparsons
2006-07-27 15:53 rmccabe
2006-07-25 20:16 jparsons
2006-07-25 20:01 jparsons
2006-07-25 0:56 jparsons
2006-07-24 21:51 jparsons
2006-07-24 21:13 jparsons
2006-07-24 19:50 jparsons
2006-07-19 22:28 rmccabe
2006-07-19 21:38 rmccabe
2006-07-19 20:57 rmccabe
2006-07-19 20:19 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=20060928201029.22598.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.