From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci cluster/form-macros cluster/validat ...
Date: 25 Jan 2007 19:55:09 -0000 [thread overview]
Message-ID: <20070125195509.28688.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-01-25 19:55:09
Modified files:
luci/cluster : form-macros validate_fence.js
luci/site/luci/Extensions: FenceHandler.py
Log message:
front-end fence validation
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.159&r2=1.160
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.16&r2=1.17
--- conga/luci/cluster/form-macros 2007/01/24 20:05:38 1.159
+++ conga/luci/cluster/form-macros 2007/01/25 19:55:08 1.160
@@ -1235,7 +1235,6 @@
<option name="fence_egenera" value="fence_egenera">Egenera SAN Controller</option>
<option name="fence_bladecenter" value="fence_bladecenter">IBM Blade Center</option>
<option name="fence_bullpap" value="fence_bullpap">Bull PAP</option>
- <option name="fence_rps10" value="fence_rps10">RPS10 Serial Switch</option>
<option name="fence_xvm" value="fence_xvm">Virtual Machine Fencing</option>
<option name="fence_scsi" value="fence_scsi">SCSI Fencing</option>
</div>
@@ -4138,6 +4137,15 @@
<script type="text/javascript"
src="/luci/cluster/fence_device.js">
</script>
+
+ <script type="text/javascript"
+ src="/luci/homebase/homebase_common.js">
+ </script>
+
+ <script type="text/javascript"
+ src="/luci/cluster/validate_fence.js">
+ </script>
+
<script type="text/javascript">
set_page_title('Luci ??? cluster ??? fence devices - Add a new fence device');
</script>
@@ -4175,10 +4183,13 @@
<div id="fence_container">
</div>
<div class="hbSubmit">
- <input type="submit"
- value="Add this shared fence device" />
+ <input type="button"
+ value="Add this shared fence device"
+ onclick="validate_fence_form(this.form)" />
+
<input type="hidden" name="pagetype"
value="51" id="pagetype" />
+
<input type="hidden" name="clustername" id="pagetype"
tal:attributes="value request/clustername" />
</form>
@@ -4307,6 +4318,18 @@
<div metal:define-macro="fencedev-form">
+ <script type="text/javascript">
+ set_page_title('Luci ??? cluster ??? fence devices - Configure a fence device');
+ </script>
+
+ <script type="text/javascript"
+ src="/luci/homebase/homebase_common.js">
+ </script>
+
+ <script type="text/javascript"
+ src="/luci/cluster/validate_fence.js">
+ </script>
+
<h2>Fence Device Form</h2>
<div class="cluster fencedev fence">
@@ -4334,7 +4357,8 @@
tal:attributes="value request/fencename" />
<div class="hbSubmit">
- <input type="submit" value="Update this fence device" />
+ <input type="button" value="Update this fence device"
+ onclick="validate_fence_form(this.form)" />
</div>
</form>
--- conga/luci/cluster/validate_fence.js 2006/10/04 17:25:20 1.1
+++ conga/luci/cluster/validate_fence.js 2007/01/25 19:55:09 1.2
@@ -1,48 +1,153 @@
-function validate_fence_apc(form) {
- return (0);
-}
+var fence_inst_validator = new Array();
+fence_inst_validator['apc'] = [ 'port', 'switch' ];
+fence_inst_validator['bladecenter'] = [ 'blade' ];
+fence_inst_validator['brocade'] = [ 'port' ];
+fence_inst_validator['bullpap'] = [ 'domain' ];
+fence_inst_validator['egenera'] = [ 'lpan', 'pserver' ];
+fence_inst_validator['gndb'] = [ 'ipaddress' ];
+fence_inst_validator['mcdata'] = [ 'port' ];
+fence_inst_validator['sanbox2'] = [ 'port' ];
+fence_inst_validator['scsi'] = [ 'nodename' ];
+fence_inst_validator['vixel'] = [ 'port' ];
+fence_inst_validator['wti'] = [ 'port' ];
+fence_inst_validator['xvm'] = [ 'domain' ];
+
+var fence_validator = new Array();
+fence_validator['apc'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['bladecenter'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['brocade'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['bullpap'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['drac'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['egenera'] = [ 'cserver' ];
+fence_validator['gnbd'] = [ 'servers' ];
+fence_validator['ilo'] = [ 'hostname', 'login', 'passwd' ];
+fence_validator['ipmilan'] = [ 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ];
+fence_validator['manual'] = [];
+fence_validator['mcdata'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['rps10'] = [ 'device', 'port'];
+fence_validator['rsa'] = [ 'hostname', 'login', 'passwd' ];
+fence_validator['sanbox2'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['scsi'] = [];
+fence_validator['unknown'] = [];
+fence_validator['vixel'] = [ 'ipaddr', 'passwd' ];
+fence_validator['wti'] = [ 'ipaddr', 'passwd' ];
+fence_validator['xvm'] = [];
+
+function validate_field_str(form_elem) {
+ var errors = new Array();
+
+ if (!form_elem || str_is_blank(form_elem.value)) {
+ if (!form_elem)
+ errors.push('No value was given for this field.');
+ else {
+ set_form_err(form_elem);
+ errors.push(form_elem.name + ' values must not be blank.');
+ }
+ return (errors);
+ }
-function validate_fence_wti(form) {
- return (0);
+ clr_form_err(form_elem);
+ return (null);
}
-function validate_fence_rsa(form) {
- return (0);
+/* Very loose checking for now -- just make sure it's not blank */
+function validate_field_host(form_elem) {
+ return (validate_field_str(form_elem));
}
-function validate_fence_ilo(form) {
- return (0);
+function validate_field_noop(form_elem) {
+ if (form_elem)
+ clr_form_err(form_elem);
+ return (null);
}
-function validate_fence_drac(form) {
- return (0);
-}
+function validate_field_ipmilan_auth(form_elem) {
+ var errors = new Array();
-function validate_fence_ipmilan(form) {
- return (0);
-}
+ if (!form_elem || str_is_blank(form_elem.value))
+ return (null);
-var fence_validator = new Object();
-fence_validator['apc'] = validate_fence_apc;
-fence_validator['wti'] = validate_fence_wti;
-fence_validator['rsa'] = validate_fence_rsa;
-fence_validator['ilo'] = validate_fence_ilo;
-fence_validator['drac'] = validate_fence_drac;
-fence_validator['ipmilan'] = validate_fence_ipmilan;
+ var auth_type = form_elem.value.strip();
+ if (auth_type != 'none' && auth_type != 'password' && auth_type != 'md5') {
+ errors.push('Auth type must be either \'none\' (or blank), \'md5\' or \'password\'');
+ set_form_err(form_elem);
+ return (errors);
+ }
-function validate_fence_common(form) {
+ clr_form_err(form_elem);
return (null);
}
+var field_validator = new Object();
+field_validator['ipaddr'] = validate_field_host;
+field_validator['hostname'] = validate_field_host;
+field_validator['login'] = validate_field_str;
+field_validator['passwd'] = validate_field_str;
+field_validator['servers'] = validate_field_str;
+field_validator['cserver'] = validate_field_str;
+field_validator['device'] = validate_field_str;
+field_validator['port'] = validate_field_str;
+
+/* IPMI fence device */
+field_validator['lanplus'] = validate_field_noop;
+field_validator['auth'] = validate_field_ipmilan_auth;
+
+/* APC instance switch */
+field_validator['switch'] = validate_field_noop;
+
+field_validator['ipaddress'] = validate_field_host;
+field_validator['blade'] = validate_field_str;
+field_validator['nodename'] = validate_field_host;
+field_validator['lpan'] = validate_field_str;
+field_validator['pserver'] = validate_field_str;
+field_validator['domain'] = validate_field_str;
+
function validate_fence(form) {
- if (!form || !form.fence_type || !form.fence_type.value)
- return (-1);
- var errors = validate_fence_common(form);
- var f = fence_validator[form.fence_type.value];
- if (!f)
- return (-1);
- var err = f(form);
- if (err)
- errors = errors.concat(err);
+ var errors = new Array();
+
+ if (!form.fence_type || str_is_blank(form.fence_type.value))
+ errors.push('No fence device was selected.');
+
+ if (errors.length > 0)
+ return (errors);
+
+ if (!form.name || str_is_blank(form.name.value)) {
+ errors.push('A unique name must be given for all fence devices.');
+ set_form_err(form.name);
+ } else
+ clr_form_err(form.name);
+
+ if (errors.length > 0)
+ return (errors);
+
+ var fence_type = form.fence_type.value.replace(/^fence_/, '');
+ var fields = fence_validator[fence_type];
+ if (!fields)
+ errors.push('An unknown fence device type was given: \"' + fence_type + '.\"');
+
+ if (errors.length > 0)
+ return (errors);
+
+ for (var i = 0 ; i < fields.length ; i++) {
+ var field_name = fields[i];
+ var err = field_validator[field_name](form[field_name]);
+ if (err)
+ errors = errors.concat(err);
+ }
+
return (errors);
}
+
+function validate_fence_form(form) {
+ var errors = validate_fence(form);
+
+ if (error_dialog(errors))
+ return (-1);
+
+ if (confirm('Update fence device properties?'))
+ form.submit();
+}
+
+function validate_fence_instance(form) {
+ var errors = new Array();
+}
--- conga/luci/site/luci/Extensions/FenceHandler.py 2007/01/20 04:50:20 1.16
+++ conga/luci/site/luci/Extensions/FenceHandler.py 2007/01/25 19:55:09 1.17
@@ -128,7 +128,7 @@
'fence_wti': ['name', 'ipaddr', 'passwd'],
'fence_brocade': ['name', 'ipaddr', 'login', 'passwd'],
'fence_vixel': ['name', 'ipaddr', 'passwd'],
- 'fence_gnbd': ['name', 'server'],
+ 'fence_gnbd': ['name', 'servers'],
'fence_sanbox2': ['name', 'ipaddr', 'login', 'passwd'],
'fence_bladecenter': ['name', 'ipaddr', 'login', 'passwd'],
'fence_mcdata': ['name', 'ipaddr', 'login', 'passwd'],
@@ -337,13 +337,13 @@
errors = list()
try:
- server = form['server'].strip()
+ server = form['servers'].strip()
if not server:
raise Exception, 'blank'
except Exception, e:
errors.append(FD_PROVIDE_SERVER)
- fencedev.addAttribute('server', server)
+ fencedev.addAttribute('servers', server)
return errors
def val_egenera_fd(form, fencedev):
next reply other threads:[~2007-01-25 19:55 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-25 19:55 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-02-01 23:48 [Cluster-devel] conga/luci cluster/form-macros cluster/validat rmccabe
2007-02-08 2:34 rmccabe
2007-02-08 3:43 rmccabe
2007-02-09 18:30 rmccabe
2007-02-09 18:32 rmccabe
2007-02-12 23:26 rmccabe
2007-02-12 23:28 rmccabe
2007-02-16 5:26 rmccabe
2007-02-16 5:29 rmccabe
2007-02-24 7:02 rmccabe
2007-08-09 4:34 rmccabe
2007-08-09 4:37 rmccabe
2007-08-24 18:40 rmccabe
2007-08-24 18:42 rmccabe
2007-08-24 21:55 rmccabe
2007-08-24 22:01 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=20070125195509.28688.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.