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

rmccabe at sourceware.org rmccabe at sourceware.org
Mon Feb 12 23:26:55 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-02-12 23:26:54

Modified files:
	luci/cluster   : form-macros validate_fence.js 
	luci/site/luci/Extensions: FenceHandler.py 

Log message:
	Support the 'passwd_script' fence device attribute

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.186&r2=1.187
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.17&r2=1.18

--- conga/luci/cluster/form-macros	2007/02/09 20:32:52	1.186
+++ conga/luci/cluster/form-macros	2007/02/12 23:26:54	1.187
@@ -651,7 +651,7 @@
 								<a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#rrp_mode', 55, 65);">Redundant Ring Protocol Mode</a>
 							</td>
 							<td class="systemsTable">
-								<select name="text" name="rrp_mode">
+								<select type="text" name="rrp_mode">
 									<option value="none">
 										None
 									</option>
@@ -1489,6 +1489,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1547,6 +1558,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1596,6 +1618,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1646,6 +1679,17 @@
 						tal:attributes="value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1694,6 +1738,18 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="value nothing" />
 				</td>
+			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1743,6 +1799,17 @@
 						tal:attributes="value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1800,6 +1867,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1858,6 +1936,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1907,6 +1996,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -2046,6 +2146,17 @@
 						tal:attributes="value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -2104,6 +2215,17 @@
 							value nothing" />
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -2259,6 +2381,17 @@
 				</td>
 			</tr>
 			<tr>
+				<td>
+					<span title="Full path to a script to generate fence password">Password Script (optional)</span>
+				</td>
+				<td>
+					<input type="text" name="passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
+			<tr>
 				<td>Authentication Type</td>
 				<td>
 					<input name="auth" type="text" title="Options are to leave blank for none, password, or md5"
@@ -4855,8 +4988,6 @@
 			<input type="hidden" name="pagetype" value="54" />
 			<input type="hidden" name="clustername"
 				tal:attributes="value request/clustername" />
-			<input type="hidden" name="orig_name"
-				tal:attributes="value request/fencename"/>
 			<input type="hidden" name="fencename"
 				tal:attributes="value request/fencename" />
 
--- conga/luci/cluster/validate_fence.js	2007/02/09 18:30:43	1.4
+++ conga/luci/cluster/validate_fence.js	2007/02/12 23:26:54	1.5
@@ -13,27 +13,27 @@
 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['apc'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['bladecenter'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['brocade'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['bullpap'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['drac'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
 fence_validator['egenera'] = [ 'cserver' ];
 fence_validator['gnbd'] = [ 'servers' ];
-fence_validator['ilo'] = [ 'hostname', 'login', 'passwd' ];
-fence_validator['ipmilan'] = [ 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ];
+fence_validator['ilo'] = [ 'hostname', 'login', 'passwd', 'passwd_script' ];
+fence_validator['ipmilan'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'lanplus', 'auth' ];
 fence_validator['manual'] = [];
-fence_validator['mcdata'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['mcdata'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
 fence_validator['rps10'] = [ 'device', 'port'];
-fence_validator['rsa'] = [ 'hostname', 'login', 'passwd' ];
-fence_validator['sanbox2'] = [ 'ipaddr', 'login', 'passwd' ];
+fence_validator['rsa'] = [ 'hostname', 'login', 'passwd', 'passwd_script' ];
+fence_validator['sanbox2'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
 fence_validator['scsi'] = [];
 fence_validator['unknown'] = [];
-fence_validator['vixel'] = [ 'ipaddr', 'passwd' ];
-fence_validator['wti'] = [ 'ipaddr', 'passwd' ];
+fence_validator['vixel'] = [ 'ipaddr', 'passwd', 'passwd_script' ];
+fence_validator['wti'] = [ 'ipaddr', 'passwd', 'passwd_script' ];
 fence_validator['xvm'] = [];
 
-function validate_field_str(form_elem) {
+function validate_field_str(form, form_elem) {
 	var errors = new Array();
 
 	if (!form_elem || str_is_blank(form_elem.value)) {
@@ -50,26 +50,33 @@
 	return (null);
 }
 
-function validate_field_passwd(form_elem) {
+function validate_field_passwd(form, form_elem) {
 	if (form_elem.disabled) {
 		clr_form_err(form_elem);
 		return (null);
 	}
-	return validate_field_str(form_elem);
+
+	var errors = validate_field_str(form, form_elem);
+	if (errors && errors.length > 0 && form.passwd_script && !str_is_blank(form.passwd_script.value))
+	{
+		clr_form_err(form_elem);
+		return (null);
+	}
+	return errors;
 }
 
 /* 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_field_host(form, form_elem) {
+	return (validate_field_str(form, form_elem));
 }
 
-function validate_field_noop(form_elem) {
+function validate_field_noop(form, form_elem) {
 	if (form_elem)
 		clr_form_err(form_elem);
 	return (null);
 }
 
-function validate_field_ipmilan_auth(form_elem) {
+function validate_field_ipmilan_auth(form, form_elem) {
 	var errors = new Array();
 
 	if (!form_elem || str_is_blank(form_elem.value))
@@ -95,6 +102,7 @@
 field_validator['cserver'] = validate_field_str;
 field_validator['device'] = validate_field_str;
 field_validator['port'] = validate_field_str;
+field_validator['passwd_script'] = validate_field_noop;
 
 /* IPMI fence device */
 field_validator['lanplus'] = validate_field_noop;
@@ -138,7 +146,7 @@
 
 	for (var i = 0 ; i < fields.length ; i++) {
 		var field_name = fields[i];
-		var err = field_validator[field_name](form[field_name]);
+		var err = field_validator[field_name](form, form[field_name]);
 		if (err)
 			errors = errors.concat(err);
 	}
--- conga/luci/site/luci/Extensions/FenceHandler.py	2007/01/25 19:55:09	1.17
+++ conga/luci/site/luci/Extensions/FenceHandler.py	2007/02/12 23:26:54	1.18
@@ -221,16 +221,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_wti_fd(form, fencedev):
@@ -243,15 +263,35 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_IP)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_brocade_fd(form, fencedev):
@@ -271,16 +311,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_vixel_fd(form, fencedev):
@@ -293,15 +353,35 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_IP)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_mcdata_fd(form, fencedev):
@@ -321,16 +401,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_gnbd_fd(form, fencedev):
@@ -376,16 +476,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_bladecenter_fd(form, fencedev):
@@ -405,16 +525,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_bullpap_fd(form, fencedev):
@@ -434,16 +574,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_noop_fd(dummy, _dummy):
@@ -468,16 +628,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('hostname', hostname)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_drac_fd(form, fencedev):
@@ -497,16 +677,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_rps10_fd(form, fencedev):
@@ -547,11 +747,32 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
 		if not pwd:
 			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	try:
@@ -578,7 +799,6 @@
 
 	fencedev.addAttribute('ipaddr', ip)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 def val_ilo_fd(form, fencedev):
@@ -598,14 +818,36 @@
 	except Exception, e:
 		errors.append(FD_PROVIDE_LOGIN)
 
+	has_passwd = False
 	try:
 		pwd = form['passwd'].strip()
+		if not pwd:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('passwd_script', pwd_script)
+		has_passwd = True
 	except Exception, e:
+		try:
+			fencedev.removeAttribute('passwd_script')
+		except:
+			pass
+
+	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
 	fencedev.addAttribute('hostname', hostname)
 	fencedev.addAttribute('login', log)
-	fencedev.addAttribute('passwd', pwd)
 	return errors
 
 FD_VALIDATE = {




More information about the Cluster-devel mailing list