cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-02-08 21:57 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-02-08 21:57 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-02-08 21:56:56

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros cluster_svc-macros 
	                 form-chooser form-macros index_html 
	                 system_svc-macros 
	luci/homebase  : form-macros index_html 
	luci/site/luci/Extensions: LuciZope.py LuciZopeAsync.py 
	                           LuciZopeExternal.py 
	                           conga_constants.py 
	luci/site/luci/var: Data.fs 
	luci/storage   : index_html 
Added files:
	luci/plone-custom: manage_inactive.js 

Log message:
	- Fix bz429151 ([RFE] Luci: increase min password length to 6 characters)
	- Fix bz429152 ([RFE] add inactivity timeout)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.67&r2=1.45.2.68
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.7&r2=1.12.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.33&r2=1.90.2.34
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.14&r2=1.20.2.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.13&r2=1.44.2.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.6&r2=1.18.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.5&r2=1.1.4.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.3&r2=1.1.4.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.15&r2=1.19.2.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.28&r2=1.15.2.29
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.5&r2=1.7.2.6

--- conga/conga.spec.in.in	2008/02/07 06:52:55	1.45.2.67
+++ conga/conga.spec.in.in	2008/02/08 21:56:33	1.45.2.68
@@ -292,6 +292,10 @@
 
 ###  changelog ###
 %changelog
+* Fri Feb 08 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-4
+- Fix bz429151 ([RFE] Luci: increase min password length to 6 characters)
+- Fix bz429152 ([RFE] add inactivity timeout)
+
 * Wed Feb 06 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-3
 - Fix bz431105 (IP Address Resource configuration: cannot enter fully qualified hostname)
 
--- conga/luci/cluster/cluster_config-macros	2008/01/23 04:44:30	1.3.2.1
+++ conga/luci/cluster/cluster_config-macros	2008/02/08 21:56:33	1.3.2.2
@@ -22,9 +22,6 @@
 		var cur_label_elem = null;
 	</script>
 	<script type="text/javascript"
-		src="conga_ajax.js">
-	</script>
-	<script type="text/javascript"
 		src="validate_xvm_key.js">
 	</script>
 
--- conga/luci/cluster/cluster_svc-macros	2008/01/23 04:44:30	1.3.2.1
+++ conga/luci/cluster/cluster_svc-macros	2008/02/08 21:56:33	1.3.2.2
@@ -623,7 +623,6 @@
 	<script type="text/javascript"
 		src="/luci/homebase/homebase_common.js">
 	</script>
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript"
 		src="/luci/cluster/resource_form_handlers.js">
 	</script>
--- conga/luci/cluster/form-chooser	2008/01/23 04:44:30	1.12.2.7
+++ conga/luci/cluster/form-chooser	2008/02/08 21:56:33	1.12.2.8
@@ -229,6 +229,14 @@
 	<tal:block tal:condition="python: ptype == '1002'">
 		<div metal:use-macro="here/form-macros/macros/get-system-info-form" />
 	</tal:block>
+
+	<tal:block tal:condition="python: ptype == '1010'">
+		<div metal:use-macro="here/form-macros/macros/check-inactive-form" />
+	</tal:block>
+
+	<tal:block tal:condition="python: ptype == '1011'">
+		<div metal:use-macro="here/form-macros/macros/update-inactive-form" />
+	</tal:block>
 </tal:block>
 </metal:choose-form>
 
--- conga/luci/cluster/form-macros	2008/01/25 17:18:37	1.90.2.33
+++ conga/luci/cluster/form-macros	2008/02/08 21:56:33	1.90.2.34
@@ -156,7 +156,6 @@
 	<script type="text/javascript" src="/luci/homebase/homebase_common.js"></script>
 	<script type="text/javascript" src="/luci/homebase/validate_cluster_add.js"></script>
 	<script type="text/javascript" src="validate_create_gulm.js"></script>
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript" src="update_hostinfo.js"></script>
 	
 	<script type="text/javascript">
@@ -1075,7 +1074,6 @@
 	</script>
 	<script type="text/javascript" src="/luci/homebase/validate_cluster_add.js">
 	</script>
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript" src="update_hostinfo.js"></script>
 
 	<form name="add_node" action="" method="post"
@@ -1324,5 +1322,14 @@
 	<tal:block tal:define="ret python: here.get_sysinfo_async(request)" />
 </div>
 
+<div metal:define-macro="check-inactive-form">
+	<tal:block tal:define="ret python: here.check_inactive_async(request)" />
+</div>
+
+<div metal:define-macro="update-inactive-form">
+	<tal:block tal:define="ret python: here.update_inactive_async(request)" />
+</div>
+
+
 </body>
 </html>
--- conga/luci/cluster/index_html	2008/01/23 04:44:30	1.20.2.14
+++ conga/luci/cluster/index_html	2008/02/08 21:56:33	1.20.2.15
@@ -58,17 +58,10 @@
     </metal:headslot>
 
     <metal:cssslot fill-slot="css_slot">
-		<style type="text/css">
-			<!-- @import url(clusterportlet.css); -->
-		</style>
-		<style type="text/css">
-			<!-- @import url(luci.css); -->
-		</style>
 		<metal:cssslot define-slot="css_slot" />
     </metal:cssslot>
 
     <metal:javascriptslot fill-slot="javascript_head_slot">
-		<script type="text/javascript" src="/luci/conga.js"></script>
       <SCRIPT TYPE="text/javascript">
       <!--
        function dropdown(mySel)
--- conga/luci/cluster/system_svc-macros	2008/01/23 04:44:30	1.2.2.1
+++ conga/luci/cluster/system_svc-macros	2008/02/08 21:56:33	1.2.2.2
@@ -17,9 +17,6 @@
 
 <div metal:define-macro="system-svc-form">
 	<script type="text/javascript"
-		src="conga_ajax.js">
-	</script>
-	<script type="text/javascript"
 		src="/luci/cluster/validate_sys_svc.js">
 	</script>
 	<h2>Configure System Services</h2>
--- conga/luci/homebase/form-macros	2008/02/07 06:52:56	1.44.2.13
+++ conga/luci/homebase/form-macros	2008/02/08 21:56:33	1.44.2.14
@@ -289,7 +289,6 @@
 					-> if yes, confirm again, showing list
 	</tal:comment>
 
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript" src="update_hostinfo.js"></script>
 	<script type="text/javascript" src="validate_auth.js"></script>
 	<script type="text/javascript" src="/luci/homebase/validate_sys_remove.js">
@@ -612,7 +611,6 @@
 
 	<script type="text/javascript" src="/luci/homebase/validate_sys_add.js">
 	</script>
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript" src="update_hostinfo.js"></script>
 
 	<script type="text/javascript">
@@ -940,7 +938,6 @@
 			- At least one node name/password are given and are valid
 	</tal:comment>
 
-	<script type="text/javascript" src="conga_ajax.js"></script>
 	<script type="text/javascript" src="update_hostinfo.js"></script>
 	<script type="text/javascript" src="/luci/homebase/validate_cluster_add_initial.js">
 	</script>
--- conga/luci/homebase/index_html	2008/01/23 04:44:31	1.18.2.6
+++ conga/luci/homebase/index_html	2008/02/08 21:56:33	1.18.2.7
@@ -34,20 +34,12 @@
 	</metal:headslot>
 
 	<metal:cssslot fill-slot="css_slot">
-		<style type="text/css">
-			<!-- @import url(clusterportlet.css); -->
-		</style>
-
-		<style type="text/css">
-			<!-- @import url(luci.css); -->
-		</style>
 		<tal:block
 			tal:define="global data python:here.homebaseControl(request)" />
 		<metal:cssslot define-slot="css_slot" />
 	</metal:cssslot>
 
 	<metal:javascriptslot fill-slot="javascript_head_slot">
-		<script type="text/javascript" src="/luci/conga.js"></script>
 		<script type="text/javascript"
 			src="/luci/homebase/homebase_common.js">
 		</script>
/cvs/cluster/conga/luci/plone-custom/manage_inactive.js,v  -->  standard output
revision 1.1.2.1
--- conga/luci/plone-custom/manage_inactive.js
+++ -	2008-02-08 21:56:58.251531000 +0000
@@ -0,0 +1,84 @@
+/*
+** Copyright (C) 2008 Red Hat, Inc.
+**
+** This program is free software; you can redistribute
+** it and/or modify it under the terms of version 2 of the
+** GNU General Public License as published by the
+** Free Software Foundation.
+*/
+
+var update_activity_url = '/luci/cluster?pagetype=1011';
+var check_inactive_url = '/luci/cluster?pagetype=1010';
+var pending_events = 0;
+
+function activity_event_handler() {
+	++pending_events;
+}
+
+function update_activity_check(ret_status, obj) {
+	/* Doesn't matter what comes back */
+	return;
+}
+
+function check_inactive_check(ret_status, obj) {
+	if (ret_status === null) {
+		return;
+	}
+
+	if (ret_status !== true) {
+		/* A communication error occurred. */
+		return;
+	}
+
+	var err = get_ricci_response_status(obj.responseXML);
+	if (err !== null && err.length > 0) {
+		alert(err.join('\n'));
+		return;
+	}
+
+	try {
+		obj = obj.responseXML.getElementsByTagName('dict')[0];
+	} catch (e) {
+		alert('Received a malformed response from the luci server.');
+		return;
+	}
+
+	var var_elem = obj.getElementsByTagName('var');
+	for (var i = 0 ; i < var_elem.length ; i++) {
+		if (var_elem[i].getAttribute('name') == 'inactive') {
+			if (var_elem[i].getAttribute('value') != 'False') {
+				window.location.assign('/luci/logout');
+				alert('You have been logged out due to inactivity.');
+			}
+		}
+	}
+}
+
+function update_activity_callback() {
+	return check_ajax_xml(xmlHttp_object, update_activity_check);
+}
+
+function check_inactive_callback() {
+	return check_ajax_xml(xmlHttp_object, check_inactive_check);
+}
+
+function update_last_active() {
+	if (pending_events < 1) {
+		return (false);
+	}
+	initiate_async_get(update_activity_url, update_activity_callback);
+	pending_events = 0;
+	return (true);
+}
+
+function check_user_inactive() {
+	if (update_last_active() === true) {
+		return (0);
+	}
+	return (initiate_async_get(check_inactive_url, check_inactive_callback));
+}
+
+setInterval("update_last_active()", 1000 * 30);
+setInterval("check_user_inactive()", 1000 * 60);
+window.onmousemove = new Function('activity_event_handler()');
+window.onkeypress = new Function('activity_event_handler()');
--- conga/luci/site/luci/Extensions/LuciZope.py	2008/01/23 04:44:32	1.1.4.5
+++ conga/luci/site/luci/Extensions/LuciZope.py	2008/02/08 21:56:33	1.1.4.6
@@ -82,6 +82,8 @@
 	if not userAuthenticated(self):
 		return []
 
+	enforce_inactivity_timeout(self, req)
+
 	htab = {
 		'Title': 'homebase',
 		'Description': 'Home base for this luci server',
@@ -163,4 +165,42 @@
 
 	return '/luci/cluster/index_html?pagetype=7&clustername=%s' % clustername
 
+def user_update_inactive(self, request):
+	from time import time
+	if userAuthenticated(self):
+		request.SESSION.set('last_activity', int(time()))
+
+def user_check_inactive(self, request):
+	from time import time
+	from conga_constants import INACTIVITY_TIMEOUT_SEC as INACTIVITY_TIMEOUT
+
+	if not userAuthenticated(self):
+		return (False, -1)
 
+	cur_time = int(time())
+	old_time = request.SESSION.get('last_activity', None)
+	if old_time is None:
+		request.SESSION.set('last_activity', cur_time)
+		return (False, -2)
+	old_time = int(old_time)
+
+	time_diff = cur_time - old_time
+	if time_diff >= INACTIVITY_TIMEOUT:
+		return (True, time_diff)
+	return (False, time_diff)
+
+def enforce_inactivity_timeout(self, request):
+	from time import time
+	pagetype = request.get('pagetype')
+	if pagetype != '1010' and pagetype != '1011':
+		(ret, dummy) = user_check_inactive(self, request)
+		if ret is True:
+			try:
+				request.SESSION.getBrowserIdManager().flushBrowserIdCookie()
+				request.SESSION.invalidate()
+			except Exception, e:
+				if LUCI_DEBUG_MODE is True:
+					luci_log.debug_verbose('UCI0: %r %s' % (e, str(e)))
+			request.RESPONSE.redirect('/luci/logout')
+		else:
+			request.SESSION.set('last_activity', int(time()))
--- conga/luci/site/luci/Extensions/LuciZopeAsync.py	2008/02/07 06:52:56	1.1.2.4
+++ conga/luci/site/luci/Extensions/LuciZopeAsync.py	2008/02/08 21:56:33	1.1.2.5
@@ -169,6 +169,18 @@
 	xml_obj = result_to_xml((len(errors) < len(node_list), ret))
 	write_xml_resp(request, xml_obj)
 
+def check_inactive_async(self, request):
+	from LuciZope import user_check_inactive
+	(inactive, diff) = user_check_inactive(self, request)
+	xml_obj = result_to_xml((True, { 'inactive': inactive, 'diff': diff }))
+	write_xml_resp(request, xml_obj)
+
+def update_inactive_async(self, request):
+	from LuciZope import user_update_inactive
+	user_update_inactive(self, request)
+	xml_obj = result_to_xml((True, { 'result': True }))
+	write_xml_resp(request, xml_obj)
+
 def get_sysinfo_async(self, request):
 	from HelperFunctions import get_system_info
 
--- conga/luci/site/luci/Extensions/LuciZopeExternal.py	2008/01/23 04:44:32	1.1.4.3
+++ conga/luci/site/luci/Extensions/LuciZopeExternal.py	2008/02/08 21:56:33	1.1.4.4
@@ -55,4 +55,4 @@
 from system_adapters import get_sys_svc_list, validate_manage_svc
 
 from LuciZopeAsync import get_cluster_nodes_async, get_sysinfo_async, \
-	validate_clusvc_async
+	validate_clusvc_async, check_inactive_async, update_inactive_async
--- conga/luci/site/luci/Extensions/conga_constants.py	2008/01/23 04:44:32	1.19.2.15
+++ conga/luci/site/luci/Extensions/conga_constants.py	2008/02/08 21:56:33	1.19.2.16
@@ -147,6 +147,9 @@
 
 REDIRECT_MSG = ' -- You will be redirected in %d seconds.' % REDIRECT_SEC
 
+# Log users out after 10 minutes of inactivity.
+
+INACTIVITY_TIMEOUT_SEC = 600
 
 # Debugging parameters. Set LUCI_DEBUG_MODE to True and LUCI_DEBUG_VERBOSITY
 # to >= 2 to get full debugging output in syslog (LOG_DAEMON/LOG_DEBUG).
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/02/07 06:52:56	1.15.2.28 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/02/08 21:56:33	1.15.2.29 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
--- conga/luci/storage/index_html	2008/01/23 04:44:56	1.7.2.5
+++ conga/luci/storage/index_html	2008/02/08 21:56:56	1.7.2.6
@@ -36,7 +36,6 @@
 	<metal:javascriptslot fill-slot="javascript_head_slot">
 		<metal:javascriptslot define-slot="javascript_head_slot">
 			<!-- async helper functions -->
-			<script type="text/javascript" src="conga.js"></script>
 			<script type="text/javascript" src="storage_async.js"></script>
 		</metal:javascriptslot>
 	</metal:javascriptslot>



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-02-27 20:22 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-02-27 20:22 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-02-27 20:22:49

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros 
	luci/site/luci/Extensions: LuciZopeAsync.py 
	luci/site/luci/var: Data.fs 
	make           : version.in 

Log message:
	Fix 434586

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.69&r2=1.45.2.70
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.29&r2=1.15.2.30
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.34&r2=1.21.2.35

--- conga/conga.spec.in.in	2008/02/12 17:40:38	1.45.2.69
+++ conga/conga.spec.in.in	2008/02/27 20:22:18	1.45.2.70
@@ -292,6 +292,9 @@
 
 ###  changelog ###
 %changelog
+* Wed Feb 27 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-6
+- Fix bz434586 (Resource tree does not display multiple children of a parent correctly)
+
 * Tue Feb 12 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-5
 - Fix bz432533 (Do not attempt to install the cmirror package when shared storage is requested)
 
--- conga/luci/cluster/cluster_svc-macros	2008/02/08 21:56:33	1.3.2.2
+++ conga/luci/cluster/cluster_svc-macros	2008/02/27 20:22:19	1.3.2.3
@@ -756,7 +756,7 @@
 
 		<tal:block
 			tal:condition="python: 'max_depth' in res and res['max_depth'] > 0"
-			tal:replace="structure python: '<div class=nothing>'" />
+			tal:replace="structure python:'<div class=%cnothing%c>' % (chr(0x22), chr(0x22))" />
 
 		<tal:block tal:define="
 			global type python: 'tag_name' in res and res['tag_name'] or '';
@@ -766,7 +766,7 @@
 
 		<tal:block
 			tal:condition="python: 'indent_ctr' in res and 'max_depth' in res"
-			tal:replace="structure python: '</div>' * (res['indent_ctr'] - res['max_depth'])" />
+			tal:replace="structure python: '</div>' * (res['indent_ctr'] - res['max_depth'] - 1)" />
 		</div>
 	</div>
 	<div class="service_comp_list">
--- conga/luci/site/luci/Extensions/LuciZopeAsync.py	2008/02/08 21:56:33	1.1.2.5
+++ conga/luci/site/luci/Extensions/LuciZopeAsync.py	2008/02/27 20:22:19	1.1.2.6
@@ -11,6 +11,7 @@
 from LuciZope import GetReqVars
 from ricci_communicator import RicciCommunicator
 from conga_constants import LUCI_DEBUG_MODE
+from LuciClusterInfo import LuciExtractCluModel
 
 luci_log = get_logger()
 
@@ -218,6 +219,7 @@
 
 def validate_clusvc_async(self, request):
 	from LuciValidation import validate_clusvc_add
-	ret = validate_clusvc_add(self, request)
+	model = LuciExtractCluModel(self, request)
+	ret = validate_clusvc_add(model, request)
 	xml_obj = result_to_xml(ret)
 	write_xml_resp(request, xml_obj)
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/02/08 21:56:33	1.15.2.29 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/02/27 20:22:19	1.15.2.30 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
--- conga/make/version.in	2008/02/12 17:40:38	1.21.2.34
+++ conga/make/version.in	2008/02/27 20:22:49	1.21.2.35
@@ -1,2 +1,2 @@
 VERSION=0.12.0
-RELEASE=5
+RELEASE=6



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-03-12 15:13 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-03-12 15:13 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-03-12 15:13:13

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros resource-form-macros 
	                 resource_form_handlers.js 
	luci/site/luci/Extensions: LuciClusterActions.py LuciDB.py 
	                           LuciValidation.py LuciZope.py 
	                           ResourceHandler.py RicciQueries.py 
	                           cluster_adapters.py 
	                           conga_constants.py 
	luci/site/luci/Extensions/ClusterModel: ModelBuilder.py 
Added files:
	luci/site/luci/Extensions/ClusterModel: OracleDB.py SybaseASE.py 

Log message:
	backport fixes from HEAD for bz304931 (Rich Sybase resource agent configuration support)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.70&r2=1.45.2.71
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.9&r2=1.21.2.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.14&r2=1.20.2.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.2&r2=1.6.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.9&r2=1.1.4.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.42&r2=1.120.2.43
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.16&r2=1.19.2.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8

--- conga/conga.spec.in.in	2008/02/27 20:22:18	1.45.2.70
+++ conga/conga.spec.in.in	2008/03/12 15:13:12	1.45.2.71
@@ -294,6 +294,7 @@
 %changelog
 * Wed Feb 27 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-6
 - Fix bz434586 (Resource tree does not display multiple children of a parent correctly)
+- Fix bz304931 (Rich Sybase resource agent configuration support)
 
 * Tue Feb 12 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-5
 - Fix bz432533 (Do not attempt to install the cmirror package when shared storage is requested)
--- conga/luci/cluster/cluster_svc-macros	2008/02/27 20:22:19	1.3.2.3
+++ conga/luci/cluster/cluster_svc-macros	2008/03/12 15:13:12	1.3.2.4
@@ -617,6 +617,12 @@
 	<tal:block tal:condition="python: type == 'SAPDatabase'">
 		<div metal:use-macro="here/resource-form-macros/macros/SAPDatabase_macro" />
 	</tal:block>
+	<tal:block tal:condition="python: type == 'ASEHAagent'">
+		<div metal:use-macro="here/resource-form-macros/macros/ASEHAagent_macro" />
+	</tal:block>
+	<tal:block tal:condition="python: type == 'oracledb'">
+		<div metal:use-macro="here/resource-form-macros/macros/oracledb_macro" />
+	</tal:block>
 </div>
 
 <div metal:define-macro="service-config-head-macro" tal:omit-tag="">
--- conga/luci/cluster/resource-form-macros	2008/01/23 04:44:30	1.21.2.9
+++ conga/luci/cluster/resource-form-macros	2008/03/12 15:13:12	1.21.2.10
@@ -146,6 +146,8 @@
 			<option name="TOMCAT-5" value="TOMCAT-5">Tomcat 5</option>
 			<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
 			<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
+			<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
+			<option name="oracledb" value="oracledb">Oracle 10g Failover Instance</option>
 		</select>
 	</form>
 
@@ -167,6 +169,8 @@
 		<div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" />
 		<div metal:use-macro="here/resource-form-macros/macros/SAPInstance_macro" />
 		<div metal:use-macro="here/resource-form-macros/macros/SAPDatabase_macro" />
+		<div metal:use-macro="here/resource-form-macros/macros/ASEHAagent_macro" />
+		<div metal:use-macro="here/resource-form-macros/macros/oracledb_macro" />
 	</div>
 </div>
 
@@ -195,6 +199,8 @@
 			<option name="TOMCAT-5" value="TOMCAT-5">Tomcat 5</option>
 			<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
 			<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
+			<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
+			<option name="oracledb" value="oracledb">Oracle 10g Failover Instance</option>
 		</select>
 	</form>
 
@@ -240,6 +246,8 @@
 		<div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" />
 		<div metal:use-macro="here/resource-form-macros/macros/SAPInstance_macro" />
 		<div metal:use-macro="here/resource-form-macros/macros/SAPDatabase_macro" />
+		<div metal:use-macro="here/resource-form-macros/macros/ASEHAagent_macro" />
+		<div metal:use-macro="here/resource-form-macros/macros/oracledb_macro" />
 	</div>
 </div>
 
@@ -312,7 +320,7 @@
 		src="/luci/cluster/resource_form_handlers.js">
 	</script>
 
-	<tal:block tal:define="global resourcename request/resourcename | request/form/resourceName | nothing" />
+	<tal:block tal:define="global resourcename request/resourcename | request/form/resourcename | nothing" />
 
 	<tal:block tal:condition="resourcename"
 		tal:define="
@@ -435,7 +443,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing"/>
@@ -587,7 +595,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -709,7 +717,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -834,7 +842,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -918,7 +926,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1011,7 +1019,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1104,7 +1112,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1198,7 +1206,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1270,7 +1278,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">SAP Instance Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1314,6 +1322,222 @@
 	</form>
 </div>
 
+<div class="rescfg" name="oracledb"
+	tal:attributes="id res/name | nothing" metal:define-macro="oracledb_macro">
+	<p class="reshdr">Oracle 10g Failover Instance</p>
+
+	<form method="post"
+		tal:attributes="name res/parent_uuid | nothing"
+		tal:define="editDisabled resourceIsRef | nothing">
+
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
+		tal:condition="python: ptype == '33' and True or False" />
+
+	<input name="pagetype" type="hidden"
+		tal:attributes="value python: ptype" />
+
+	<input name="global" type="hidden"
+		tal:attributes="value resourceIsRef | nothing" />
+
+	<input name="parent_uuid" type="hidden"
+		tal:attributes="value res/parent_uuid | nothing" />
+
+	<input name="uuid" type="hidden"
+		tal:attributes="value res/uuid | nothing" />
+
+	<input name="tree_level" type="hidden"
+		tal:attributes="value res/indent_ctr | string:0" />
+
+	<input name="clustername" type="hidden"
+		tal:attributes="
+			value request/clustername | request/form/clustername | nothing" />
+
+	<input name="oldname" type="hidden"
+		tal:attributes="value res/name | nothing" />
+
+	<input name="type" type="hidden" value="oracledb" />
+
+	<table class="systemsTable">
+		<tr class="systemsTable">
+			<td class="systemsTable">Instance name (SID) of Oracle instance</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="resourcename"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/name | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Oracle user name</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="user"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/user | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Oracle application home directory</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="home"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/home | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Virtual hostname (optional)</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="vhost"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/vhost | nothing" />
+			</td>
+		</tr>
+	</table>
+	
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
+	</form>
+</div>
+
+<div class="rescfg" name="ASEHAagent"
+	tal:attributes="id res/name | nothing" metal:define-macro="ASEHAagent_macro">
+	<p class="reshdr">Sybase ASE Failover Instance Configuration</p>
+
+	<form method="post"
+		tal:attributes="name res/parent_uuid | nothing"
+		tal:define="editDisabled resourceIsRef | nothing">
+
+	<input name="immutable" type="hidden" value="true"
+		tal:condition="editDisabled" />
+
+	<input name="edit" type="hidden" value="true"
+		tal:condition="python: ptype == '33' and True or False" />
+
+	<input name="pagetype" type="hidden"
+		tal:attributes="value python: ptype" />
+
+	<input name="global" type="hidden"
+		tal:attributes="value resourceIsRef | nothing" />
+
+	<input name="parent_uuid" type="hidden"
+		tal:attributes="value res/parent_uuid | nothing" />
+
+	<input name="uuid" type="hidden"
+		tal:attributes="value res/uuid | nothing" />
+
+	<input name="tree_level" type="hidden"
+		tal:attributes="value res/indent_ctr | string:0" />
+
+	<input name="clustername" type="hidden"
+		tal:attributes="
+			value request/clustername | request/form/clustername | nothing" />
+
+	<input name="oldname" type="hidden"
+		tal:attributes="value res/name | nothing" />
+
+	<input name="type" type="hidden" value="ASEHAagent" />
+
+	<table class="systemsTable">
+		<tr class="systemsTable">
+			<td class="systemsTable">Instance Name</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="resourcename"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/name | nothing" />
+			</td>
+		</tr>
+
+		<tr class="systemsTable">
+			<td class="systemsTable">
+				<span title="">ASE server name</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="server_name"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/server_name | nothing" />
+			</td>
+		</tr>
+
+		<tr class="systemsTable">
+			<td class="systemsTable">
+				<span title="">SYBASE home directory</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="sybase_home"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/sybase_home | nothing" />
+			</td>
+		</tr>
+
+		<tr class="systemsTable">
+			<td class="systemsTable">
+				<span title="">Login file</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="login_file"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/login_file | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Interfaces file</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="interfaces_file"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/interfaces_file | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">SYBASE_ASE directory name</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="sybase_ase"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/sybase_ase | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">SYBASE_OCS directory name</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="sybase_ocs"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/sybase_ocs | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Sybase user</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="sybase_user"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/sybase_user | nothing" />
+			</td>
+		</tr>
+		<tr class="systemsTable">
+			<td class="systemsTable">Deep probe timeout</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="deep_probe_timeout"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/deep_probe_timeout | nothing" />
+			</td>
+		</tr>
+	</table>
+
+	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
+	</form>
+</div>
+
 <div class="rescfg" name="SAPDatabase"
 	tal:attributes="id res/name | nothing" metal:define-macro="SAPDatabase_macro">
 
@@ -1357,7 +1581,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">SAP Database Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1490,7 +1714,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1583,7 +1807,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1687,7 +1911,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1742,7 +1966,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
@@ -1807,7 +2031,7 @@
 		<tr class="systemsTable">
 			<td class="systemsTable">Name</td>
 			<td class="systemsTable">
-				<input type="text" size="20" name="resourceName"
+				<input type="text" size="20" name="resourcename"
 					tal:attributes="
 						disabled python: editDisabled;
 						value res/name | nothing" />
--- conga/luci/cluster/resource_form_handlers.js	2008/02/07 06:52:55	1.20.2.14
+++ conga/luci/cluster/resource_form_handlers.js	2008/03/12 15:13:12	1.20.2.15
@@ -250,6 +250,16 @@
 	return (errors);
 }
 
+function validate_sybase(form) {
+	var errors = new Array();
+	return (errors);
+}
+
+function validate_oracle(form) {
+	var errors = new Array();
+	return (errors);
+}
+
 function validate_sapdatabase(form) {
 	var errors = new Array();
 
@@ -295,6 +305,8 @@
 form_validators['lvm'] = validate_lvm;
 form_validators['SAPInstance'] = validate_sapinstance;
 form_validators['SAPDatabase'] = validate_sapdatabase;
+form_validators['ASEHAagent'] = validate_sybase;
+form_validators['oracledb'] = validate_oracle;
 
 function check_form(form) {
 	var valfn = form_validators[form.type.value];
@@ -302,11 +314,11 @@
 		return (-1);
 	var errors = valfn(form);
 	if (form.type.value != 'ip') {
-		if (!form.resourceName || str_is_blank(form.resourceName.value)) {
+		if (!form.resourcename || str_is_blank(form.resourcename.value)) {
 			errors.push('No resource name was given.');
-			set_form_err(form.resourceName);
+			set_form_err(form.resourcename);
 		} else
-			clr_form_err(form.resourceName);
+			clr_form_err(form.resourcename);
 	}
 
 	return (errors);
--- conga/luci/site/luci/Extensions/LuciClusterActions.py	2008/01/23 04:44:32	1.1.4.6
+++ conga/luci/site/luci/Extensions/LuciClusterActions.py	2008/03/12 15:13:12	1.1.4.7
@@ -12,7 +12,7 @@
 
 from LuciDB import set_node_flag, getRicciAgent, \
 	getClusterNode, getStorageNode, NodeBusy, \
-	setNodeStatus, resolve_nodename, \
+	setNodeStatus, resolve_nodename, getCluster, \
 	delCluster, delClusterSystem, \
 	CLUSTER_NODE_NEED_AUTH
 
@@ -280,6 +280,8 @@
 				% (nodename_resolved, clustername))
 		return None
 
+	cluster_obj = getCluster(self, clustername)
+
 	try:
 		model.deleteNodeByName(nodename.lower())
 	except Exception, e:
@@ -306,7 +308,7 @@
 		return None
 
 	try:
-		ret = delClusterSystem(self, clustername, nodename_resolved)
+		ret = delClusterSystem(self, cluster_obj, nodename_resolved)
 		if ret is not None:
 			raise Exception, ret
 	except Exception, e:
@@ -332,9 +334,11 @@
 							nodename_resolved,
 							delete_cluster=False):
 
+	cluster_obj = getCluster(self, clustername)
+
 	# We need to get a node name other than the node
 	# to be deleted, then delete the node from the cluster.conf
-	# and propogate it. We will need two ricci agents for this task,
+	# and propagate it. We will need two ricci agents for this task,
 	# unless we are deleting the cluster itself.
 
 	if delete_cluster is False:
@@ -364,7 +368,7 @@
 
 	# Unless we're deleting the whole cluster, it is not worth
 	# flagging this node in DB, as we are going to delete it
-	# anyway. Now, we need to delete node from model and send out
+	# anyway. Now, we need to the delete node from model and send out
 	# new cluster.conf
 
 	if delete_cluster is True:
@@ -405,7 +409,7 @@
 			return None
 
 	try:
-		ret = delClusterSystem(self, clustername, nodename_resolved)
+		ret = delClusterSystem(self, cluster_obj, nodename_resolved)
 		if ret is not None:
 			raise Exception, ret
 	except Exception, e:
@@ -445,7 +449,7 @@
 		nodename_resolved = resolve_nodename(self, clustername, nodename)
 
 		try:
-			# XXX - do this in parallel
+			# XXX - do this in parallel on all nodes
 			rc = RicciCommunicator(nodename_resolved)
 		except Exception, e:
 			if LUCI_DEBUG_MODE is True:
@@ -477,7 +481,7 @@
 		nodename_resolved = resolve_nodename(self, clustername, nodename)
 
 		try:
-			# XXX - do this in parallel
+			# XXX - do this in parallel on all nodes
 			rc = RicciCommunicator(nodename_resolved)
 		except Exception, e:
 			if LUCI_DEBUG_MODE is True:
@@ -529,15 +533,6 @@
 			luci_log.debug_verbose('ClusterDelete0: %r %s' % (e, str(e)))
 		return None
 
-	# Try to stop all the cluster nodes before deleting any.
-	num_errors = ClusterStop(self, model, delete=False)
-	if num_errors > 0:
-		if LUCI_DEBUG_MODE is True:
-			luci_log.debug_verbose('ClusterDelete1: %s: %d errors' \
-				% (clustername, num_errors))
-		return None
-
-	# If the cluster is stopped, delete all of the nodes.
 	num_errors = ClusterStop(self, model, delete=True)
 	if num_errors > 0:
 		if LUCI_DEBUG_MODE is True:
--- conga/luci/site/luci/Extensions/LuciDB.py	2008/02/07 06:52:56	1.1.4.8
+++ conga/luci/site/luci/Extensions/LuciDB.py	2008/03/12 15:13:12	1.1.4.9
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2007 Red Hat, Inc.
+# Copyright (C) 2006-2008 Red Hat, Inc.
 #
 # This program is free software; you can redistribute
 # it and/or modify it under the terms of version 2 of the
@@ -667,10 +667,11 @@
 
 	error_list = list()
 	for i in csystems:
-		err = delClusterSystem(self, cluster, i[0])
+		cur_sysname = str(i[0])
+		err = delClusterSystem(self, cluster, cur_sysname)
 		if err:
 			error_list.append('Unable to delete the cluster system %s: %s\n' \
-				% (i[0], err))
+				% (cur_sysname, err))
 			if LUCI_DEBUG_MODE is True:
 				luci_log.debug_verbose('delCluSystems2: %s' % err)
 	return ''.join(error_list)
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/02/07 06:52:56	1.6.2.2
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2008/03/12 15:13:12	1.6.2.3
@@ -8,7 +8,6 @@
 from ClusterModel.RefObject import RefObject
 from ClusterModel.Service import Service
 from ClusterModel.Method import Method
-from ClusterModel.Fence import Fence
 from ClusterModel.FailoverDomain import FailoverDomain
 from ClusterModel.FailoverDomainNode import FailoverDomainNode
 from ClusterModel.QuorumD import QuorumD
@@ -333,7 +332,7 @@
 
 		try:
 			if res_type == 'ip':
-				dummy_form['resourceName'] = dummy_form['ip_address']
+				dummy_form['resourcename'] = dummy_form['ip_address']
 		except Exception, e:
 			if LUCI_DEBUG_MODE is True:
 				luci_log.debug_verbose('vSA3a: type is ip but no addr: %r %s' \
@@ -342,7 +341,7 @@
 
 		try:
 			if dummy_form.has_key('immutable'):
-				newRes = model.getResourceByName(dummy_form['resourceName'])
+				newRes = model.getResourceByName(dummy_form['resourcename'])
 				resObj = RefObject(newRes)
 				resObj.setRef(newRes.getName())
 			else:
@@ -471,6 +470,8 @@
 	try:
 		res = create_resource(res_type, request.form, model)
 	except Exception, e:
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('VRA1: create res: %r %s' % (e, str(e)))
 		return (False, { 'errors': e[0] } )
 
 	resname = ''
--- conga/luci/site/luci/Extensions/LuciZope.py	2008/02/08 21:56:33	1.1.4.6
+++ conga/luci/site/luci/Extensions/LuciZope.py	2008/03/12 15:13:12	1.1.4.7
@@ -148,6 +148,21 @@
 		ret[i] = pval
 	return ret
 
+def GetFormVars(req, varlist):
+	ret = {}
+	from types import ListType
+
+	for i in varlist:
+		pval = None
+		if req and req.has_key(i):
+			pval = req[i]
+			if type(req[i]) is not ListType:
+				pval = req[i].strip()
+			if not pval:
+				pval = None
+		ret[i] = pval
+	return ret
+
 def getClusterURL(self, request, model):
 	try:
 		clustername = request['clustername'].strip()
--- conga/luci/site/luci/Extensions/ResourceHandler.py	2008/01/23 04:44:32	1.1.4.2
+++ conga/luci/site/luci/Extensions/ResourceHandler.py	2008/03/12 15:13:12	1.1.4.3
@@ -21,6 +21,10 @@
 from ClusterModel.MySQL import MySQL
 from ClusterModel.SAPDatabase import SAPDatabase
 from ClusterModel.SAPInstance import SAPInstance
+from ClusterModel.OracleDB import OracleDB
+from ClusterModel.SybaseASE import SybaseASE
+
+from LuciZope import GetFormVars
 from LuciSyslog import get_logger
 from conga_constants import LUCI_DEBUG_MODE
 
@@ -736,23 +740,80 @@
 				luci_log.debug_verbose('addSAPI1: %s %s' % (param, err))
 	return errors
 
+def config_resource(params, res, rname, form):
+	errors = list()
+
+	fvar = GetFormVars(form, map(lambda x: x[0], params))
+	for i in params:
+		name = i[0]
+		val = fvar[name]
+		required = i[2]
+		default_val = i[3]
+
+		if val is None:
+			if required is True:
+				if default_val is None:
+					errors.append('No value for %s was given for resource "%s"' % (i[1], rname))
+				else:
+					res.addAttribute(name, default_val)
+			else:
+				try:
+					res.removeAttribute(name)
+				except:
+					pass
+		else:
+			res.addAttribute(name, val)
+	return errors
+
+def addSybaseASE(res, rname, form, model):
+	# parameter (str), short desc (str), required (bool), default (str or None)
+	params = (
+		('sybase_home', 'SYBASE home directory', True, None),
+		('server_name', 'ASE server name', True, None),
+		('login_file', 'Login file', True, None),
+		('interfaces_file', 'Interfaces file', True, None),
+		('sybase_ase', 'SYBASE_ASE directory name', True, 'ASE-15_0'),
+		('sybase_ocs', 'SYBASE_OCS directory name', True, 'OCS-15_0'),
+		('sybase_user', 'Sybase user', True, 'sybase'),
+		('shutdown_timeout', 'Shutdown timeout value', True, '0'),
+		('start_timeout', 'Start timeout value', True, '0'),
+		('deep_probe_timeout', 'Deep probe timeout value', True, '0')
+	)
+	errors = config_resource(params, res, rname, form)
+	return errors
+
+def addOracleDB(res, rname, form, model):
+	params = (
+		('user', 'Oracle User Name', True, None),
+		('home', 'Oracle Home Directory', True, None),
+		#('type', 'Oracle Installation Type', True, None),
+		('vhost', 'Virtual Hostname', False, None)
+	)
+	errors = config_resource(params, res, rname, form)
+	dbtype = res.getAttribute('type')
+	if not dbtype:
+		res.addAttribute('type', '10g')
+	return errors
+
 resource_table = {
-	'ip':			[ addIp,			Ip			],
-	'fs':			[ addFs,			Fs			],
-	'gfs':			[ addClusterfs,		Clusterfs	],
-	'nfsm':			[ addNetfs,			Netfs		],
-	'nfsx':			[ addNFSExport,		NFSExport	],
-	'nfsc':			[ addNFSClient,		NFSClient	],
-	'scr':			[ addScript,		Script		],
-	'smb':			[ addSamba,			Samba		],
-	'tomcat-5':		[ addTomcat5,		Tomcat5		],
-	'postgres-8':	[ addPostgres8,		Postgres8	],
-	'apache':		[ addApache,		Apache		],
-	'openldap':		[ addOpenLDAP,		OpenLDAP	],
-	'lvm':			[ addLVM,			LVM			],
-	'mysql':		[ addMySQL,			MySQL		],
-	'SAPDatabase':	[ addSAPDatabase,	SAPDatabase	],
-	'SAPInstance':	[ addSAPInstance,	SAPInstance	]
+	'ip':			( addIp,			Ip			),
+	'fs':			( addFs,			Fs			),
+	'gfs':			( addClusterfs,		Clusterfs	),
+	'nfsm':			( addNetfs,			Netfs		),
+	'nfsx':			( addNFSExport,		NFSExport	),
+	'nfsc':			( addNFSClient,		NFSClient	),
+	'scr':			( addScript,		Script		),
+	'smb':			( addSamba,			Samba		),
+	'tomcat-5':		( addTomcat5,		Tomcat5		),
+	'postgres-8':	( addPostgres8,		Postgres8	),
+	'apache':		( addApache,		Apache		),
+	'openldap':		( addOpenLDAP,		OpenLDAP	),
+	'lvm':			( addLVM,			LVM			),
+	'mysql':		( addMySQL,			MySQL		),
+	'SAPDatabase':	( addSAPDatabase,	SAPDatabase	),
+	'SAPInstance':	( addSAPInstance,	SAPInstance	),
+	'oracledb':		( addOracleDB,		OracleDB	),
+	'ASEHAagent':	( addSybaseASE,		SybaseASE	)
 }
 
 def create_resource(res_type, form, model):
@@ -779,9 +840,9 @@
 		res = resource_table[res_type][1]()
 
 	if res_type != 'ip':
-		if not form.has_key('resourceName') or not form['resourceName'].strip():
+		if not form.has_key('resourcename') or not form['resourcename'].strip():
 			raise Exception, [ 'All resources must have a unique name.' ]
-		rname = form['resourceName'].strip()
+		rname = form['resourcename'].strip()
 		res.addAttribute('name', rname)
 	else:
 		rname = form['ip_address'].strip()
--- conga/luci/site/luci/Extensions/RicciQueries.py	2008/01/25 17:18:38	1.1.4.9
+++ conga/luci/site/luci/Extensions/RicciQueries.py	2008/03/12 15:13:12	1.1.4.10
@@ -121,7 +121,6 @@
 	batch.append('</module>')
 
 	return ''.join(batch)
-##	return minidom.parseString(''.join(batch)).firstChild
 
 def createClusterBatch( os_str,
 						cluster_name,
--- conga/luci/site/luci/Extensions/cluster_adapters.py	2008/01/25 17:18:38	1.120.2.42
+++ conga/luci/site/luci/Extensions/cluster_adapters.py	2008/03/12 15:13:12	1.120.2.43
@@ -24,7 +24,7 @@
 from conga_constants import BATCH_ID, CLUNODE_CREATE_ERRORS, \
 	CLUSTER_ADD, CLUSTER_CONFIG, CLUSTER_DAEMON, CLUSTER_DELETE, \
 	CLUSTER_FOLDER_PATH, CLUSTER_RESTART, CLUSTER_START, CLUSTER_STOP, \
-	DISABLE_SVC_TASK, ENABLE_SVC_TASK, FDOM, FENCEDEV, \
+	CLUSTER_DELETE2, DISABLE_SVC_TASK, ENABLE_SVC_TASK, FDOM, FENCEDEV, \
 	FENCEDEV_NODE_CONFIG, FENCEDEVS, FLAG_DESC, INSTALL_TASK, CLUSTER_PROCESS, \
 	LAST_STATUS, LUCI_DEBUG_MODE, NODE, NODE_ADD, NODE_DELETE, \
 	NODE_FENCE, NODE_FORCE_DELETE, NODE_JOIN_CLUSTER, NODE_LEAVE_CLUSTER, \
@@ -1271,6 +1271,12 @@
 			% (baseurl, CLUSTER_PROCESS, cluname, CLUSTER_START))
 		return
 	elif task == CLUSTER_DELETE:
+		from LuciClusterActions import ClusterStop
+		ClusterStop(self, model)
+		request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&task=%s&busyfirst=true' \
+			% (baseurl, CLUSTER_PROCESS, cluname, CLUSTER_DELETE2))
+		return
+	elif task == CLUSTER_DELETE2:
 		from LuciClusterActions import ClusterDelete
 		ret = ClusterDelete(self, model)
 		if LUCI_DEBUG_MODE is True:
--- conga/luci/site/luci/Extensions/conga_constants.py	2008/02/08 21:56:33	1.19.2.16
+++ conga/luci/site/luci/Extensions/conga_constants.py	2008/03/12 15:13:13	1.19.2.17
@@ -64,6 +64,7 @@
 CLUSTER_START			= '1001'
 CLUSTER_RESTART			= '1002'
 CLUSTER_DELETE			= '1003'
+CLUSTER_DELETE2			= '1004'
 
 # Node tasks
 NODE_LEAVE_CLUSTER		= '100'
/cvs/cluster/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py,v  -->  standard output
revision 1.1.2.1
--- conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py
+++ -	2008-03-12 15:13:14.966263000 +0000
@@ -0,0 +1,18 @@
+# Copyright (C) 2008 Red Hat, Inc.
+#
+# This program is free software; you can redistribute
+# it and/or modify it under the terms of version 2 of the
+# GNU General Public License as published by the
+# Free Software Foundation.
+
+from BaseResource import BaseResource
+from gettext import gettext as _
+
+TAG_NAME = 'oracledb'
+RESOURCE_TYPE = _('Oracle 10g Failover Instance')
+
+class OracleDB(BaseResource):
+  def __init__(self):
+    BaseResource.__init__(self)
+    self.TAG_NAME = TAG_NAME
+    self.resource_type = RESOURCE_TYPE
/cvs/cluster/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py,v  -->  standard output
revision 1.1.2.1
--- conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py
+++ -	2008-03-12 15:13:15.053372000 +0000
@@ -0,0 +1,18 @@
+# Copyright (C) 2008 Red Hat, Inc.
+#
+# This program is free software; you can redistribute
+# it and/or modify it under the terms of version 2 of the
+# GNU General Public License as published by the
+# Free Software Foundation.
+
+from BaseResource import BaseResource
+from gettext import gettext as _
+
+TAG_NAME = 'ASEHAagent'
+RESOURCE_TYPE = _('Sybase ASE Failover Instance')
+
+class SybaseASE(BaseResource):
+  def __init__(self):
+    BaseResource.__init__(self)
+    self.TAG_NAME = TAG_NAME
+    self.resource_type = RESOURCE_TYPE
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2008/02/07 06:52:56	1.1.4.7
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2008/03/12 15:13:13	1.1.4.8
@@ -33,6 +33,8 @@
 from Tomcat5 import Tomcat5
 from SAPDatabase import SAPDatabase
 from SAPInstance import SAPInstance
+from SybaseASE import SybaseASE 
+from OracleDB import OracleDB
 from Multicast import Multicast
 from FenceDaemon import FenceDaemon
 from FenceXVMd import FenceXVMd
@@ -93,6 +95,8 @@
              'nfsclient': NFSClient,
              'SAPDatabase': SAPDatabase,
              'SAPInstance': SAPInstance,
+             'ASEHAagent': SybaseASE,
+             'oracledb': OracleDB,
              'device': Device }
 
 



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-07-14 21:52 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-07-14 21:52 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-07-14 21:52:30

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros validate_config_qdisk.js 
	luci/plone-custom: conga.js 
	luci/site/luci/Extensions: LuciValidation.py 
	ricci/modules/rpm: PackageHandler.cpp 

Log message:
	fix bz441581

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.93&r2=1.45.2.94
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.6&r2=1.4.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.6&r2=1.3.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.4&r2=1.6.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.11&r2=1.9.2.12

--- conga/conga.spec.in.in	2008/07/14 16:29:28	1.45.2.93
+++ conga/conga.spec.in.in	2008/07/14 21:52:29	1.45.2.94
@@ -302,6 +302,7 @@
 - Fix bz430737 (Conga should install the 'cmirror' package when clustered storage is requested)
 - Fix bz379461 (Conga doesn't have the option for modulename for drac fencing)
 - Fix bz433089 (when adding multiple nodes the order is reversed.)
+- Fix bz441581 (Don't allow both label and device for qdisk config if only one can be specified)
 
 * Fri Apr 18 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.0-8
 - Fix bz441580 (conga should install 'sg3_utils' and start service 'scsi_reserve' when scsi fencing is used)
--- conga/luci/cluster/cluster_config-macros	2008/02/08 21:56:33	1.3.2.2
+++ conga/luci/cluster/cluster_config-macros	2008/07/14 21:52:30	1.3.2.3
@@ -715,21 +715,39 @@
 				</td>
 			</tr>
 
-			<tr class="systemsTable">
-				<td class="systemsTable">Device</td>
-				<td class="systemsTable">
-					<input type="text" name="device"
-						tal:attributes="value clusterinfo/device | nothing" />
-				</td>
-			</tr>
-
-			<tr class="systemsTable">
-				<td class="systemsTable">Label</td>
-				<td class="systemsTable">
-					<input type="text" name="label"
-						tal:attributes="value clusterinfo/label | nothing" />
-				</td>
-			</tr>
+			
+			<tr class="systemsTable"><td colspan="2">
+				<table class="systemsTable">
+					<tr class="systemsTable">
+						<td class="systemsTable">
+							<input type="radio" name="qdisk_dev_label"
+								onclick="disable_text_field(this.form.label, this.form.device)">Label
+						</td>
+						<td class="systemsTable">
+							<input type="text" name="label" id="qdisk_label"
+								onfocus="disable_text_field(this.form.label, this.form.device);this.form.qdisk_dev_label[0].checked='checked';"
+								tal:attributes="
+									disabled python:(clusterinfo.get('label') or not clusterinfo.get('device')) and '' or 'disabled';
+									checked python:(clusterinfo.get('label') or not clusterinfo.get('label')) and 'checked' or '';
+									value clusterinfo/label | nothing" />
+						</td>
+					</tr>
+					<tr class="systemsTable">
+						<td class="systemsTable">
+							<input type="radio" name="qdisk_dev_label"
+								onclick="disable_text_field(this.form.device, this.form.label)">Device (deprecated)
+						</td>
+						<td class="systemsTable">
+							<input type="text" name="device" id="qdisk_device"
+								onfocus="disable_text_field(this.form.device, this.form.label);this.form.qdisk_dev_label[1].checked='checked';"
+								tal:attributes="
+									disabled python:clusterinfo.get('device') and '' or 'disabled';
+									checked python:clusterinfo.get('device') and 'checked' or '';
+									value clusterinfo/device | nothing" />
+						</td>
+					</tr>
+				</table>
+			</td></tr>
 		</table>
 		</div>
 
--- conga/luci/cluster/validate_config_qdisk.js	2008/01/23 04:44:30	1.4.2.6
+++ conga/luci/cluster/validate_config_qdisk.js	2008/07/14 21:52:30	1.4.2.7
@@ -206,6 +206,9 @@
 		var no_label = !form.label || str_is_blank(form.label.value);
 		if (no_dev && no_label)
 			errors.push('You must give either a label or a device.');
+		if (!no_dev && !no_label) {
+			errors.push('You may not specify both a device and a label.');
+		}
 
 		var hnum = document.getElementById('num_heuristics');
 		if (hnum) {
--- conga/luci/plone-custom/conga.js	2008/06/13 18:37:46	1.3.2.6
+++ conga/luci/plone-custom/conga.js	2008/07/14 21:52:30	1.3.2.7
@@ -248,6 +248,12 @@
 	elem.parentNode.removeChild(elem);
 }
 
+function disable_text_field(enable_obj, disable_obj) {
+	disable_obj.value = "";
+	disable_obj.disabled = "disabled";
+	enable_obj.disabled = "";
+}
+
 function swap_tabs(new_label, cur_tab, new_tab) {
 	if (cur_tab == new_tab) {
 		return (cur_tab);
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/05/12 17:04:41	1.6.2.4
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2008/07/14 21:52:30	1.6.2.5
@@ -725,6 +725,8 @@
 
 	if not device and not label:
 		errors.append('No Device or Label value was given')
+	if device and label:
+		errors.append('You may not specify both device and label')
 
 	num_heuristics = 0
 	try:
--- conga/ricci/modules/rpm/PackageHandler.cpp	2008/07/14 16:00:12	1.9.2.11
+++ conga/ricci/modules/rpm/PackageHandler.cpp	2008/07/14 21:52:30	1.9.2.12
@@ -506,15 +506,17 @@
 		}
 	} else if (RHEL5 || FC6) {
 		set.packages.push_back("gfs2-utils");
-		set.packages.push_back("cmirror");
 		if (RHEL5) {
 			set.packages.push_back("gfs-utils");
 			if (kernel.find("xen") == kernel.npos) {
 				set.packages.push_back("kmod-gfs");
 				set.packages.push_back("kmod-gfs2");
+				set.packages.push_back("cmirror");
+				set.packages.push_back("kmod-cmirror");
 			} else {
 				set.packages.push_back("kmod-gfs-xen");
 				set.packages.push_back("kmod-gfs2-xen");
+				set.packages.push_back("kmod-cmirror-xen");
 			}
 		}
 	}



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-08-07 18:08 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-08-07 18:08 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-08-07 18:08:24

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros cluster_svc-macros 
	                 resource_form_handlers.js 
	luci/site/luci/Extensions: LuciClusterInfo.py LuciValidation.py 
	luci/site/luci/var: Data.fs 
	make           : version.in 

Log message:
	More fixes for bz429350

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.99&r2=1.45.2.100
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.6&r2=1.3.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.15&r2=1.20.2.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.12&r2=1.1.4.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.7&r2=1.6.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.36&r2=1.15.2.37
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.43&r2=1.21.2.44

--- conga/conga.spec.in.in	2008/07/28 17:49:44	1.45.2.99
+++ conga/conga.spec.in.in	2008/08/07 18:07:36	1.45.2.100
@@ -312,6 +312,9 @@
 
 ###  changelog ###
 %changelog
+* Thu Aug 07 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.1-3
+- More fixes for bz429350
+
 * Thu Jul 10 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.1-1
 - Fix bz444938 (conga fails to create proper cluster.conf entries for gfs2 filesystem type)
 - Fix bz444210 (Adding multiple fence devices at the same time causes duplicate entries)
--- conga/luci/cluster/cluster_config-macros	2008/07/14 21:52:30	1.3.2.3
+++ conga/luci/cluster/cluster_config-macros	2008/08/07 18:07:37	1.3.2.4
@@ -715,34 +715,35 @@
 				</td>
 			</tr>
 
-			
 			<tr class="systemsTable"><td colspan="2">
 				<table class="systemsTable">
 					<tr class="systemsTable">
 						<td class="systemsTable">
 							<input type="radio" name="qdisk_dev_label"
-								onclick="disable_text_field(this.form.label, this.form.device)">Label
+								onclick="disable_text_field(this.form.label, this.form.device)"
+								tal:attributes="
+									checked python:(clusterinfo.get('label') or not clusterinfo.get('device')) and 'checked' or ''">Label
 						</td>
 						<td class="systemsTable">
 							<input type="text" name="label" id="qdisk_label"
 								onfocus="disable_text_field(this.form.label, this.form.device);this.form.qdisk_dev_label[0].checked='checked';"
 								tal:attributes="
-									disabled python:(clusterinfo.get('label') or not clusterinfo.get('device')) and '' or 'disabled';
-									checked python:(clusterinfo.get('label') or not clusterinfo.get('label')) and 'checked' or '';
+									disabled python:(not clusterinfo.get('label') and clusterinfo.get('device')) and 'disabled' or '';
 									value clusterinfo/label | nothing" />
 						</td>
 					</tr>
 					<tr class="systemsTable">
 						<td class="systemsTable">
 							<input type="radio" name="qdisk_dev_label"
-								onclick="disable_text_field(this.form.device, this.form.label)">Device (deprecated)
+								onclick="disable_text_field(this.form.device, this.form.label)"
+									tal:attributes="
+										checked python:clusterinfo.get('device') and 'checked' or ''">Device (deprecated)
 						</td>
 						<td class="systemsTable">
 							<input type="text" name="device" id="qdisk_device"
 								onfocus="disable_text_field(this.form.device, this.form.label);this.form.qdisk_dev_label[1].checked='checked';"
 								tal:attributes="
-									disabled python:clusterinfo.get('device') and '' or 'disabled';
-									checked python:clusterinfo.get('device') and 'checked' or '';
+									disabled python:not clusterinfo.get('device') and 'disabled' or '';
 									value clusterinfo/device | nothing" />
 						</td>
 					</tr>
--- conga/luci/cluster/cluster_svc-macros	2008/08/04 21:49:30	1.3.2.6
+++ conga/luci/cluster/cluster_svc-macros	2008/08/07 18:07:37	1.3.2.7
@@ -375,6 +375,8 @@
 		<input type="hidden" name="exclusive" value="-1" />
 		<input type="hidden" name="recovery" />
 		<input type="hidden" name="domain" />
+		<input type="hidden" name="max_restarts" />
+		<input type="hidden" name="restart_expire_time" />
 		<input type="hidden" name="form_xml" />
 		<input type="hidden" name="action" value="add" />
 		</form>
@@ -760,6 +762,8 @@
 		<input type="hidden" name="exclusive" value="-1" />
 		<input type="hidden" name="recovery" />
 		<input type="hidden" name="domain" />
+		<input type="hidden" name="max_restarts" />
+		<input type="hidden" name="restart_expire_time" />
 		<input type="hidden" name="form_xml" />
 		<input type="hidden" name="action" value="edit" />
 		</form>
--- conga/luci/cluster/resource_form_handlers.js	2008/03/12 15:13:12	1.20.2.15
+++ conga/luci/cluster/resource_form_handlers.js	2008/08/07 18:07:37	1.20.2.16
@@ -479,6 +479,8 @@
 	var domain = null;
 	var exclusive = 0;
 	var recovery = null;
+	var max_restarts = null;
+	var restart_expire_time = null;
 
 	submit_btn = submit_button;
 	submit_button.disabled = true;
@@ -509,6 +511,18 @@
 					recovery = null;
 			}
 
+			if (form[i].max_restarts) {
+				max_restarts = form[i].max_restarts.value;
+				if (str_is_blank(max_restarts))
+					max_restarts = null;
+			}
+
+			if (form[i].restart_expire_time) {
+				restart_expire_time = form[i].restart_expire_time.value;
+				if (str_is_blank(restart_expire_time))
+					restart_expire_time = null;
+			}
+
 			if (form[i].domain) {
 				domain = form[i].domain.options[form[i].domain.options.selectedIndex].value;
 				if (str_is_blank(domain))
@@ -581,6 +595,10 @@
 		master_form.domain.value = domain;
 	if (recovery)
 		master_form.recovery.value = recovery;
+	if (max_restarts)
+		master_form.max_restarts.value = max_restarts;
+	if (restart_expire_time)
+		master_form.restart_expire_time.value = restart_expire_time;
 	master_form.autostart.value = autostart;
 	master_form.exclusive.value = exclusive;
 
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2008/08/04 21:49:30	1.1.4.12
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2008/08/07 18:07:37	1.1.4.13
@@ -423,6 +423,20 @@
 		hmap['recovery'] = None
 
 	try:
+		hmap['max_restarts'] = svc.getAttribute('max_restarts')
+		if not hmap['max_restarts']:
+			hmap['max_restarts'] = 0
+	except:
+		hmap['max_restarts'] = 0
+
+	try:
+		hmap['restart_expire_time'] = svc.getAttribute('restart_expire_time')
+		if not hmap['restart_expire_time']:
+			hmap['restart_expire_time'] = 0
+	except:
+		hmap['restart_expire_time'] = 0
+
+	try:
 		if int(svc.getAttribute('exclusive')):
 			hmap['exclusive'] = 'true'
 		else:
@@ -1088,7 +1102,7 @@
 
 		nl_map['fdoms'] = fdom_dict_list
 
-		if model.has_errors():
+		if model and model.has_errors():
 			nl_map['has_errors'] = True
 			nl_map['errmsgs'] = model.get_errmsgs()
 		resultlist.append(nl_map)
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/07/31 18:46:40	1.6.2.7
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2008/08/07 18:07:37	1.6.2.8
@@ -370,26 +370,28 @@
 	if recovery is not None and recovery != 'restart' and recovery != 'relocate' and recovery != 'disable':
 		errors.append('You entered an invalid recovery option: "%s" Valid options are "restart" "relocate" and "disable."')
 
+	max_restarts = None
+	restart_expire_time = None
+
 	if recovery == 'restart':
-		max_restarts = None
-		if fvar['max_restarts']:
+		if fvar['max_restarts'] is not None:
 			try:
 				max_restarts = int(fvar['max_restarts'])
 				if max_restarts < 0:
-					raise ValueError, 'must be greater than 0'
+					raise ValueError, 'must be greater than or equal to 0'
 			except Exception, e:
 				errors.append('Maximum restarts must be a number greater than or equal to 0')
 				max_restarts = None
-		restart_expire_time = None
-		if fvar['restart_expire_time']:
+		if fvar['restart_expire_time'] is not None:
 			try:
 				restart_expire_time = int(fvar['restart_expire_time'])
 				if restart_expire_time < 0:
-					raise ValueError, 'must be greater than 0'
+					raise ValueError, 'must be greater than or equal to 0'
 			except Exception, e:
 				errors.append('Restart expire time must be a number greater than or equal to 0')
 				restart_expire_time = None
 
+
 	service_name = fvar['svc_name']
 	if service_name is None:
 		if LUCI_DEBUG_MODE is True:
@@ -1114,22 +1116,23 @@
 	recovery = fvar['recovery']
 	if recovery is not None and recovery != 'restart' and recovery != 'relocate' and recovery != 'disable':
 		errors.append('You entered an invalid recovery option "%s" for VM service "%s". Valid options are "restart" "relocate" and "disable"' % (recovery, vm_name))
+
+	max_restarts = None
+	restart_expire_time = None
 	if recovery == 'restart':
-		max_restarts = None
-		if fvar['max_restarts']:
+		if fvar['max_restarts'] is not None:
 			try:
 				max_restarts = int(fvar['max_restarts'])
 				if max_restarts < 0:
-					raise ValueError, 'must be greater than 0'
+					raise ValueError, 'must be greater than or equal to 0'
 			except Exception, e:
 				errors.append('Maximum restarts must be a number greater than or equal to 0')
 				max_restarts = None
-		restart_expire_time = None
-		if fvar['restart_expire_time']:
+		if fvar['restart_expire_time'] is not None:
 			try:
 				restart_expire_time = int(fvar['restart_expire_time'])
 				if restart_expire_time < 0:
-					raise ValueError, 'must be greater than 0'
+					raise ValueError, 'must be greater than or equal to 0'
 			except Exception, e:
 				errors.append('Restart expire time must be a number greater than or equal to 0')
 				restart_expire_time = None
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/07/30 21:27:07	1.15.2.36 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/08/07 18:07:37	1.15.2.37 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
--- conga/make/version.in	2008/07/30 21:27:55	1.21.2.43
+++ conga/make/version.in	2008/08/07 18:08:24	1.21.2.44
@@ -1,2 +1,2 @@
 VERSION=0.12.1
-RELEASE=2
+RELEASE=3



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2008-09-18 15:20 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2008-09-18 15:20 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2008-09-18 15:20:34

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros 
	luci/site/luci/Extensions: LuciValidation.py 
	luci/site/luci/var: Data.fs 

Log message:
	Update the zope DB.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.102&r2=1.45.2.103
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.7&r2=1.3.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.8&r2=1.6.2.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.37&r2=1.15.2.38

--- conga/conga.spec.in.in	2008/09/17 06:29:54	1.45.2.102
+++ conga/conga.spec.in.in	2008/09/18 15:19:34	1.45.2.103
@@ -315,6 +315,7 @@
 * Wed Aug 27 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.1-4
 - Fix bz459562 (charset configuration fix for luci)
 - Fix bz459469 (An unknown device type was given: "gnbd.")
+- Fix bz454933 (Add Support in Conga for Xen migration mapping)
 - Fix bz459623 (Conga error adding new node to existing cluster)
 
 * Thu Aug 07 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.1-3
--- conga/luci/cluster/cluster_svc-macros	2008/08/07 18:07:37	1.3.2.7
+++ conga/luci/cluster/cluster_svc-macros	2008/09/18 15:19:34	1.3.2.8
@@ -184,6 +184,10 @@
 				<td><span class="cluster_help" title="e.g., /etc/xen/">Path to VM configuration files</span></td>
 				<td><input type="text" name="vmpath" value="" /></td>
 			</tr>
+			<tr class="systemsTable">
+				<td><span class="cluster_help" title="memberhost:targethost,memberhost:targethost ..">VM Migration Mapping</span></td>
+				<td><input type="text" name="migration_mapping" value="" /></td>
+			</tr>
 		</tbody>
 	</table>
 	</div>
@@ -315,6 +319,13 @@
 						tal:attributes="value sinfo/path | nothing" />
 				</td>
 			</tr>
+			<tr class="systemsTable">
+				<td><span class="cluster_help" title="memberhost:targethost,memberhost:targethost ..">VM Migration Mapping</span></td>
+				<td>
+					<input type="text" name="migration_mapping"
+						tal:attributes="value sinfo/migration_mapping | nothing" />
+				</td>
+			</tr>
 		</tbody>
 	</table>
 	</div>
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/08/07 18:07:37	1.6.2.8
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2008/09/18 15:19:35	1.6.2.9
@@ -1087,7 +1087,7 @@
 def validate_vmsvc_form(model, request):
 	errors = list()
 
-	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time'])
+	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time', 'migration_mapping'])
 
 	vm_name = fvar['vmname']
 	if vm_name is None:
@@ -1141,6 +1141,8 @@
 	if migration_type is not None and migration_type != 'live' and migration_type != 'pause':
 		errors.append('Migration type must be either "live" or "pause"')
 
+	migration_mapping = fvar['migration_mapping']
+
 	if len(errors) > 0:
 		return (False, {'errors': errors })
 
@@ -1182,6 +1184,14 @@
 	if migration_type:
 		xvm.addAttribute('migrate', str(migration_type))
 
+	if migration_mapping:
+		xvm.addAttribute('migration_mapping', str(migration_mapping))
+	else:
+		try:
+			xvm.removeAttribute('migration_mapping')
+		except:
+			pass
+
 	fdom = fvar['domain']
 	if fdom:
 		xvm.addAttribute('domain', fdom)
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/08/07 18:07:37	1.15.2.37 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2008/09/18 15:19:36	1.15.2.38 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-02-16 17:23 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-02-16 17:23 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2009-02-16 17:23:28

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros 
	luci/site/luci/Extensions: LuciClusterInfo.py LuciValidation.py 
	luci/site/luci/Extensions/ClusterModel: FenceDaemon.py 

Log message:
	fix bz459160

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.111&r2=1.45.2.112
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.4&r2=1.3.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.14&r2=1.1.4.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.9&r2=1.6.2.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3

--- conga/conga.spec.in.in	2009/02/11 16:29:36	1.45.2.111
+++ conga/conga.spec.in.in	2009/02/16 17:23:27	1.45.2.112
@@ -331,7 +331,8 @@
 - Fix bz483775 (Failover Domains can't be set for VMs as services of cluster suite using Conga)
 - Fix bz483769 (Conga always shows VM properties as "Run exclusive")
 - Fix bz450007 (cannot remove shared fence device through luci)
-- Fiz bz466013 (Add luci GUI support for LPAR and vmware fencing)
+- Fix bz466013 (Add luci GUI support for LPAR and vmware fencing)
+- Fix bz459160 (fenced config option to skip nodes with undefined fencing)
 
 * Thu Sep 25 2008 Ryan McCabe <rmccabe@redhat.com> 0.12.1-7
 - Fix a typo in the fix for bz459562
--- conga/luci/cluster/cluster_config-macros	2008/08/07 18:07:37	1.3.2.4
+++ conga/luci/cluster/cluster_config-macros	2009/02/16 17:23:27	1.3.2.5
@@ -454,6 +454,18 @@
 							tal:attributes="value clusterinfo/pjd" />
 					</td>
 				</tr>
+
+				<tr tal:condition="clusterinfo/has_ignore_undef_fence"
+					class="systemsTable">
+
+					<td class="systemsTable">Skip nodes with undefined fencing</td>
+					<td class="systemsTable">
+						<input type="checkbox" name="skip_undefined"
+							tal:attributes="checked python: clusterinfo.get('skip_undefined') and 'checked' or ''" />
+					</td>
+				</tr>
+
+
 				<tr class="systemsTable">
 					<td class="systemsTable">
 						<span class="cluster_help" title="Enable if you will be running a VM cluster on this physical cluster">Run XVM fence daemon</td>
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/02/11 16:29:37	1.1.4.14
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/02/16 17:23:28	1.1.4.15
@@ -604,6 +604,7 @@
 				clumap['vm_migration_choice'] = True
 			if os_minor > 2:
 				clumap['has_fence_ssh'] = True
+				clumap['has_ignore_undef_fence'] = True
 		elif cluster_os.find('Nahant') != -1:
 			clumap['os_major'] = 4
 			os_minor = int(cluster_os[cluster_os.find('Update ') + 7])
@@ -662,6 +663,7 @@
 		clumap['pjd'] = pjd
 		#post fail delay
 		clumap['pfd'] = pfd
+		clumap['skip_undefined'] = fdp.getSkipUndefined()
 
 		#-------------
 		#if multicast
--- conga/luci/site/luci/Extensions/LuciValidation.py	2008/09/18 15:19:35	1.6.2.9
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2009/02/16 17:23:28	1.6.2.10
@@ -867,6 +867,7 @@
 	elif not run_xvmd:
 		model.delFenceXVM()
 
+	fd = None
 	try:
 		fd = model.getFenceDaemonPtr()
 		old_pj_delay = fd.getPostJoinDelay()
@@ -882,6 +883,12 @@
 			luci_log.debug_verbose('Unable to update fence daemon properties: %r %s' % (e, str(e)))
 		errors.append('An error occurred while attempting to update fence daemon properties: %s' % str(e))
 
+	skip_undef = form.has_key('skip_undefined')
+	if skip_undef is True:
+		fd.setSkipUndefined(True)
+	else:
+		fd.setSkipUndefined(False)
+
 	if len(errors) > 0:
 		return (False, {'errors': errors })
 
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py	2008/01/23 04:44:33	1.1.4.2
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py	2009/02/16 17:23:28	1.1.4.3
@@ -33,6 +33,16 @@
     val = self.getAttribute('clean_start')
     return val
 
+  def getSkipUndefined(self):
+    val = self.getAttribute('skip_undefined')
+    return val
+
+  def setSkipUndefined(self, val):
+    if val:
+      self.addAttribute('skip_undefined', '1')
+    else:
+      self.removeAttribute('skip_undefined')
+
   def setPostJoinDelay(self, delay):
     self.addAttribute('post_join_delay', delay)
 



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-03-24 20:06 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-03-24 20:06 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2009-03-24 20:06:42

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros 
	luci/site/luci/Extensions: LuciClusterInfo.py 
	make           : version.in 

Log message:
	rework fix for bz483775

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.112&r2=1.45.2.113
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.8&r2=1.3.2.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.16&r2=1.1.4.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.49&r2=1.21.2.50

--- conga/conga.spec.in.in	2009/02/16 17:23:27	1.45.2.112
+++ conga/conga.spec.in.in	2009/03/24 20:06:39	1.45.2.113
@@ -323,13 +323,18 @@
 
 ###  changelog ###
 %changelog
+* Tue Mar 24 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-4
+- Rework fix for bz483775 (Failover Domains can't be set for VMs as services of cluster suite using Conga)
+
+* Mon Mar 16 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-3
+- Fix bz483769 (Conga always shows VM properties as "Run exclusive")
+
 * Thu Jan 22 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-1
 - Fix bz452704 (Unable to add existing RHEL4 clusters with RHEL5.2 Luci)
 - Fix bz467464 (adding qdisk to existing cluster fails to update cman entry in cluster.conf)
 - Fix bz460038 (Conga fs resource error when editing service)
 - Fix bz483067 (adding resource in conga doesn't work in IE)
 - Fix bz483775 (Failover Domains can't be set for VMs as services of cluster suite using Conga)
-- Fix bz483769 (Conga always shows VM properties as "Run exclusive")
 - Fix bz450007 (cannot remove shared fence device through luci)
 - Fix bz466013 (Add luci GUI support for LPAR and vmware fencing)
 - Fix bz459160 (fenced config option to skip nodes with undefined fencing)
--- conga/luci/cluster/cluster_svc-macros	2008/09/18 15:19:34	1.3.2.8
+++ conga/luci/cluster/cluster_svc-macros	2009/03/24 20:06:41	1.3.2.9
@@ -544,6 +544,7 @@
 			<select name="domain">
 				<option value=""
 					tal:attributes="selected python:(not sinfo or not sinfo.get('domain')) and 'selected' or ''">None</option>
+
 				<tal:block tal:condition="exists:sinfo/fdoms">
 				<tal:block tal:repeat="f sinfo/fdoms">
 					<option tal:content="f" tal:attributes="
@@ -551,6 +552,14 @@
 						selected python:(sinfo and sinfo.get('domain') == f) and 'selected' or ''" />
 				</tal:block>
 				</tal:block>
+
+				<tal:block tal:condition="not:exists:sinfo/fdoms">
+					<tal:block tal:condition="exists:clusterinfo/fdoms">
+					<tal:block tal:repeat="f clusterinfo/fdoms">
+						<option tal:content="f" tal:attributes="value f" />
+					</tal:block>
+					</tal:block>
+				</tal:block>
 			</select>
 		</td>
 	</tr>
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/03/09 21:26:41	1.1.4.16
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/03/24 20:06:41	1.1.4.17
@@ -761,6 +761,11 @@
 			hlist.append(hmap)
 	clumap['hlist'] = hlist
 
+	try:
+		clumap['fdoms'] = get_fdom_names(model)
+	except:
+		clumap['fdoms'] = None
+
 	if model.has_errors():
 		clumap['has_errors'] = True
 		clumap['errmsgs'] = model.get_errmsgs()
--- conga/make/version.in	2009/01/29 16:23:21	1.21.2.49
+++ conga/make/version.in	2009/03/24 20:06:41	1.21.2.50
@@ -1,2 +1,2 @@
 VERSION=0.12.2
-RELEASE=1
+RELEASE=4



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-04-15 16:07 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-04-15 16:07 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL4
Changes by:	rmccabe at sourceware.org	2009-04-15 16:07:14

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros fence-macros 
	luci/site/luci/Extensions: FenceHandler.py LuciClusterInfo.py 
	luci/site/luci/var: Data.fs 
	make           : version.in 

Log message:
	* Mon Apr 15 2009 Ryan McCabe <rmccabe@redhat.com> 0.11.2-2
	- Fix bz494956 (Odd error display when creating a cluster)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.67.2.34&r2=1.67.2.35
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.2&r2=1.7.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.7&r2=1.2.4.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.17.2.11&r2=1.17.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.10.2.8&r2=1.10.2.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.20.2.28&r2=1.20.2.29
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.28.2.15&r2=1.28.2.16

--- conga/conga.spec.in.in	2008/11/25 16:37:18	1.67.2.34
+++ conga/conga.spec.in.in	2009/04/15 16:05:43	1.67.2.35
@@ -301,6 +301,9 @@
 
 
 %changelog
+* Mon Apr 15 2009 Ryan McCabe <rmccabe@redhat.com> 0.11.2-2
+- Fix bz494956 (Odd error display when creating a cluster)
+
 * Mon Nov 25 2008 Ryan McCabe <rmccabe@redhat.com> 0.11.2-1
 - Fix bz458298 (Cannot create new cluster in luci, python syntax error)
 - Fix bz441583 (Don't allow both label and device for qdisk config if only one can be specified)
--- conga/luci/cluster/cluster_svc-macros	2008/11/10 21:02:43	1.7.2.2
+++ conga/luci/cluster/cluster_svc-macros	2009/04/15 16:05:47	1.7.2.3
@@ -544,6 +544,7 @@
 			<select name="domain">
 				<option value=""
 					tal:attributes="selected python:(not sinfo or not sinfo.get('domain')) and 'selected' or ''">None</option>
+
 				<tal:block tal:condition="exists:sinfo/fdoms">
 				<tal:block tal:repeat="f sinfo/fdoms">
 					<option tal:content="f" tal:attributes="
@@ -551,6 +552,14 @@
 						selected python:(sinfo and sinfo.get('domain') == f) and 'selected' or ''" />
 				</tal:block>
 				</tal:block>
+
+				<tal:block tal:condition="not:exists:sinfo/fdoms">
+					<tal:block tal:condition="exists:clusterinfo/fdoms">
+					<tal:block tal:repeat="f clusterinfo/fdoms">
+						<option tal:content="f" tal:attributes="value f" />
+					</tal:block>
+					</tal:block>
+				</tal:block>
 			</select>
 		</td>
 	</tr>
--- conga/luci/cluster/fence-macros	2009/02/17 20:48:57	1.2.4.7
+++ conga/luci/cluster/fence-macros	2009/04/15 16:05:47	1.2.4.8
@@ -333,7 +333,7 @@
 	<option name="fence_bullpap" value="fence_bullpap">Bull PAP</option>
 	<option name="fence_xvm" value="fence_xvm">Virtual Machine Fencing</option>
 	<option name="fence_scsi" value="fence_scsi">SCSI Fencing</option>
-	<option name="fence_vmware" value="fence_vmware">VMWare Fencing</option>
+	<option name="fence_vmware" value="fence_vmware">VMware Fencing</option>
 	<option name="fence_lpar" value="fence_lpar">LPAR Fencing</option>
 </div>
 
@@ -357,7 +357,7 @@
 	<option name="fence_ipmilan" value="fence_ipmilan">IPMI Lan</option>
 	<option name="fence_xvm" value="fence_xvm">Virtual Machine Fencing</option>
 	<option name="fence_scsi" value="fence_scsi">SCSI Fencing</option>
-	<option name="fence_vmware" value="fence_vmware">VMWare Fencing</option>
+	<option name="fence_vmware" value="fence_vmware">VMware Fencing</option>
 	<option name="fence_lpar" value="fence_lpar">LPAR Fencing</option>
 	<option name="fence_manual" value="fence_manual">Manual Fencing</option>
 </div>
@@ -633,19 +633,6 @@
 							value cur_fencedev/passwd_script | nothing" />
 				</td>
 			</tr>
-			<tr tal:condition="exists:clusterinfo/has_fence_ssh">
-				<td>
-					<span title="Enable SSH operation">Use SSH</span>
-				</td>
-				<td>
-					<input tal:condition="exists:cur_fencedev"
-						type="checkbox" name="secure"
-						tal:attributes="
-							checked python:(cur_fencedev and cur_fencedev.has_key('secure') and (cur_fencedev['secure'] == '1' or cur_fencedev['secure'].lower() == 'true')) and 'checked' or ''" />
-					<input tal:condition="not:exists:cur_fencedev"
-						type="checkbox" name="secure" />
-				</td>
-			</tr>
 		</table>
 
 		<tal:block tal:condition="exists: cur_fencedev">
@@ -1172,7 +1159,7 @@
 		<table>
 			<tr>
 				<td><strong class="cluster">Fence Type</strong></td>
-				<td>VMWare</td>
+				<td>VMware</td>
 			</tr>
 			<tr>
 				<td>Name</td>
--- conga/luci/site/luci/Extensions/FenceHandler.py	2009/02/17 20:49:01	1.17.2.11
+++ conga/luci/site/luci/Extensions/FenceHandler.py	2009/04/15 16:05:48	1.17.2.12
@@ -967,12 +967,6 @@
 	if not has_passwd:
 		errors.append(FD_PROVIDE_PASSWD)
 
-	use_ssh = form.has_key('secure') and (form['secure'] == '1' or form['secure'].lower() == 'true')
-	if use_ssh:
-		fencedev.addAttribute('secure', '1')
-	else:
-		fencedev.removeAttribute('secure')
-
 	return errors
 
 FD_VALIDATE = {
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/02/17 20:49:01	1.10.2.8
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/04/15 16:05:48	1.10.2.9
@@ -594,6 +594,7 @@
 
 	clumap = {}
 
+	clumap['has_ignore_undef_fence'] = False
 	try:
 		cluster_os = model.getClusterOS()
 		if cluster_os.find('Tikanga') != -1:
@@ -604,7 +605,7 @@
 				clumap['vm_migration_choice'] = True
 			if os_minor > 2:
 				clumap['has_fence_ssh'] = True
-				clumap['has_ignore_undef_fence'] = True
+				#clumap['has_ignore_undef_fence'] = True
 		elif cluster_os.find('Nahant') != -1:
 			clumap['os_major'] = 4
 			os_minor = int(cluster_os[cluster_os.find('Update ') + 7])
@@ -760,6 +761,11 @@
 			hlist.append(hmap)
 	clumap['hlist'] = hlist
 
+	try:
+		clumap['fdoms'] = get_fdom_names(model)
+	except:
+		clumap['fdoms'] = None
+
 	if model.has_errors():
 		clumap['has_errors'] = True
 		clumap['errmsgs'] = model.get_errmsgs()
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2009/02/17 20:49:02	1.20.2.28 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2009/04/15 16:05:48	1.20.2.29 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
--- conga/make/version.in	2008/07/03 15:01:27	1.28.2.15
+++ conga/make/version.in	2009/04/15 16:07:14	1.28.2.16
@@ -1,2 +1,2 @@
 VERSION=0.11.2
-RELEASE=1
+RELEASE=2



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-04-27 21:03 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-04-27 21:03 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2009-04-27 21:03:32

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros resource_form_handlers.js 
	luci/site/luci/Extensions: LuciClusterInfo.py LuciValidation.py 
	make           : version.in 

Log message:
	- Fix bz491903 ([RFE] add option 'nfslock' to conga)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.113&r2=1.45.2.114
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.9&r2=1.3.2.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.16&r2=1.20.2.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.17&r2=1.1.4.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.10&r2=1.6.2.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.50&r2=1.21.2.51

--- conga/conga.spec.in.in	2009/03/24 20:06:39	1.45.2.113
+++ conga/conga.spec.in.in	2009/04/27 21:03:31	1.45.2.114
@@ -323,6 +323,10 @@
 
 ###  changelog ###
 %changelog
+* Thu Apr 23 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-5
+- Fix bz492392 (Conga Interface for Fence Agents Requires Password even when Password Script is Specified)
+- Fix bz491903 ([RFE] add option 'nfslock' to conga)
+
 * Tue Mar 24 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-4
 - Rework fix for bz483775 (Failover Domains can't be set for VMs as services of cluster suite using Conga)
 
--- conga/luci/cluster/cluster_svc-macros	2009/03/24 20:06:41	1.3.2.9
+++ conga/luci/cluster/cluster_svc-macros	2009/04/27 21:03:32	1.3.2.10
@@ -383,6 +383,7 @@
 		<input type="hidden" name="tree_level" value="-1" />
 		<input type="hidden" name="svc_name" value="" />
 		<input type="hidden" name="autostart" value="-1" />
+		<input type="hidden" name="nfslock" value="-1" />
 		<input type="hidden" name="exclusive" value="-1" />
 		<input type="hidden" name="recovery" />
 		<input type="hidden" name="domain" />
@@ -531,6 +532,14 @@
 	</tr>
 
 	<tr>
+		<td>Enable NFS lock workarounds</td>
+		<td>
+			<input type="checkbox" name="nfslock"
+				tal:attributes="checked python:(sinfo and sinfo.get('nfslock') and sinfo.get('nfslock').lower() != 'false') and 'checked'" />
+		</td>
+	</tr>
+
+	<tr>
 		<td>Run exclusive</td>
 		<td>
 			<input type="checkbox" name="exclusive"
@@ -779,6 +788,7 @@
 		<input type="hidden" name="tree_level" value="-1" />
 		<input type="hidden" name="svc_name" value="" />
 		<input type="hidden" name="autostart" value="-1" />
+		<input type="hidden" name="nfslock" value="-1" />
 		<input type="hidden" name="exclusive" value="-1" />
 		<input type="hidden" name="recovery" />
 		<input type="hidden" name="domain" />
--- conga/luci/cluster/resource_form_handlers.js	2008/08/07 18:07:37	1.20.2.16
+++ conga/luci/cluster/resource_form_handlers.js	2009/04/27 21:03:32	1.20.2.17
@@ -477,6 +477,7 @@
 	var svc_name = null;
 	var autostart = 1;
 	var domain = null;
+	var nfslock = 0;
 	var exclusive = 0;
 	var recovery = null;
 	var max_restarts = null;
@@ -505,6 +506,11 @@
 			else
 				exclusive = 1;
 
+			if (!form[i].nfslock.checked)
+				nfslock = 0;
+			else
+				nfslock = 1;
+
 			if (form[i].recovery) {
 				recovery = form[i].recovery.options[form[i].recovery.options.selectedIndex].value;
 				if (str_is_blank(recovery))
@@ -600,6 +606,7 @@
 	if (restart_expire_time)
 		master_form.restart_expire_time.value = restart_expire_time;
 	master_form.autostart.value = autostart;
+	master_form.nfslock.value = nfslock;
 	master_form.exclusive.value = exclusive;
 
 	var confirm_msg = null;
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/03/24 20:06:41	1.1.4.17
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/04/27 21:03:32	1.1.4.18
@@ -360,6 +360,14 @@
 	except:
 		hmap['exclusive'] = 'false'
 
+	try:
+		if int(svc.getAttribute('nfslock')):
+			hmap['nfslock'] = 'true'
+		else:
+			hmap['nfslock'] = 'false'
+	except:
+		hmap['nfslock'] = 'false'
+
 def getServiceInfo(self, status, model, req):
 	root_uuid = 'toplevel'
 
--- conga/luci/site/luci/Extensions/LuciValidation.py	2009/02/16 17:23:28	1.6.2.10
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2009/04/27 21:03:32	1.6.2.11
@@ -398,6 +398,18 @@
 			luci_log.debug_verbose('vSA5: no service name')
 		errors.append('No service name was given')
 
+	nfslock = '0'
+	try:
+		if not request.form.has_key('nfslock') or request.form['nfslock'] != '1':
+			nfslock = None
+		else:
+			nfslock = '1'
+	except Exception, e:
+		nfslock = None
+		if LUCI_DEBUG_MODE is True:
+			luci_log.debug_verbose('vSA5a: error getting nfslock: %r %s' \
+				% (e, str(e)))
+
 	autostart = '1'
 	try:
 		if not request.form.has_key('autostart') or request.form['autostart'] == '0':
@@ -468,6 +480,8 @@
 		new_service.addAttribute('restart_expire_time', str(restart_expire_time))
 
 	new_service.addAttribute('exclusive', str(exclusive))
+	if nfslock is not None:
+		new_service.addAttribute('nfslock', '1')
 	if autostart is not None:
 		new_service.attr_hash['autostart'] = autostart
 
@@ -1114,6 +1128,12 @@
 	else:
 		autostart = 0
 
+	nfslock = None
+	if request.form.has_key('nfslock'):
+		nfslock = 1
+	else:
+		nfslock = None
+
 	exclusive = 0
 	if request.form.has_key('exclusive'):
 		exclusive = 1
@@ -1186,6 +1206,14 @@
 			xvm.addAttribute('name', vm_name)
 			xvm.addAttribute('path', vm_path)
 
+	if nfslock is not None:
+		xvm.addAttribute('nfslock', '1')
+	else:
+		try:
+			xvm.removeAttribute('nfslock')
+		except:
+			pass
+
 	xvm.addAttribute('autostart', str(autostart))
 	xvm.addAttribute('exclusive', str(exclusive))
 	if migration_type:
--- conga/make/version.in	2009/03/24 20:06:41	1.21.2.50
+++ conga/make/version.in	2009/04/27 21:03:32	1.21.2.51
@@ -1,2 +1,2 @@
 VERSION=0.12.2
-RELEASE=4
+RELEASE=5



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-05-14 21:05 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-05-14 21:05 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2009-05-14 21:05:58

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_svc-macros fence-macros 
	make           : version.in 

Log message:
	luci: fix bz469965 (Adding existing fence device fails)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.114&r2=1.45.2.115
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.10&r2=1.3.2.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.11&r2=1.2.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.51&r2=1.21.2.52

--- conga/conga.spec.in.in	2009/04/27 21:03:31	1.45.2.114
+++ conga/conga.spec.in.in	2009/05/14 21:05:58	1.45.2.115
@@ -323,6 +323,9 @@
 
 ###  changelog ###
 %changelog
+* Thu May 14 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-6
+- Fix bz469965 (Adding existing fence device fails)
+
 * Thu Apr 23 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-5
 - Fix bz492392 (Conga Interface for Fence Agents Requires Password even when Password Script is Specified)
 - Fix bz491903 ([RFE] add option 'nfslock' to conga)
--- conga/luci/cluster/cluster_svc-macros	2009/04/27 21:03:32	1.3.2.10
+++ conga/luci/cluster/cluster_svc-macros	2009/05/14 21:05:58	1.3.2.11
@@ -361,7 +361,8 @@
 			</table>
 		</form>
 	</div>
-	<div class="service_comp_list" tal:attributes="id sinfo/root_uuid">
+	<div class="service_comp_list"
+		tal:attributes="id sinfo/root_uuid|string:toplevel">
 	</div>
 
 	<div class="service_comp_list">
--- conga/luci/cluster/fence-macros	2009/04/23 20:38:51	1.2.2.11
+++ conga/luci/cluster/fence-macros	2009/05/14 21:05:58	1.2.2.12
@@ -429,7 +429,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -498,7 +498,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -558,7 +558,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -619,7 +619,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -679,7 +679,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -759,7 +759,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -819,7 +819,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -887,7 +887,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -956,7 +956,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1016,7 +1016,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1125,7 +1125,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1195,7 +1195,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1225,7 +1225,7 @@
 					<input name="vmpasswd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1335,7 +1335,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1404,7 +1404,7 @@
 					<input name="passwd" type="password" autocomplete="off"
 						tal:attributes="
 							disabled cur_fencedev/isShared | nothing;
-							value nothing" />
+							value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1569,7 +1569,7 @@
 				<td>Password</td>
 				<td>
 					<input name="passwd" type="password" autocomplete="off"
-						tal:attributes="value nothing" />
+						tal:attributes="value cur_fencedev/passwd | nothing" />
 				</td>
 			</tr>
 			<tr>
@@ -1682,44 +1682,11 @@
 </div>
 
 <div metal:define-macro="shared-fence-device-list">
-<tal:block tal:condition="exists: cur_fencedev">
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_apc'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_mcdata'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_wti'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_brocade'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_sanbox2'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_vixel'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_gnbd'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_egenera'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_bladecenter'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_bullpap'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_xvm'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" />
-	</tal:block>
-	<tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_scsi'">
-		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
+	<tal:block tal:condition="exists: cur_fencedev">
+		<tal:block tal:define="cur_fence_type cur_fencedev/agent | nothing">
+			<tal:block metal:use-macro="here/fence-macros/macros/fencedev-cond-ladder" />
+		</tal:block>
 	</tal:block>
-</tal:block>
 </div>
 
 <div metal:define-macro="fence-instance-form-apc"
--- conga/make/version.in	2009/04/27 21:03:32	1.21.2.51
+++ conga/make/version.in	2009/05/14 21:05:58	1.21.2.52
@@ -1,2 +1,2 @@
 VERSION=0.12.2
-RELEASE=5
+RELEASE=6



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2009-05-21 13:33 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2009-05-21 13:33 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2009-05-21 13:33:19

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros cluster_svc-macros 
	                 resource-form-macros resource_form_handlers.js 
	luci/site/luci/Extensions: LuciClusterInfo.py LuciValidation.py 
	                           ResourceHandler.py 
	luci/site/luci/var: Data.fs 

Log message:
	- Fix bz469965 (Adding existing fence device fails)
	- Fix bz499741 (updating qdisk partition global settings wipes out heuristics)
	- Fix bz495109 (Need xen/kvm flag for conga UI)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.115&r2=1.45.2.116
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.5&r2=1.3.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.11&r2=1.3.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.15&r2=1.21.2.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.17&r2=1.20.2.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.18&r2=1.1.4.19
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.11&r2=1.6.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.42&r2=1.15.2.43

--- conga/conga.spec.in.in	2009/05/14 21:05:58	1.45.2.115
+++ conga/conga.spec.in.in	2009/05/21 13:32:03	1.45.2.116
@@ -325,6 +325,8 @@
 %changelog
 * Thu May 14 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-6
 - Fix bz469965 (Adding existing fence device fails)
+- Fix bz499741 (updating qdisk partition global settings wipes out heuristics)
+- Fix bz495109 (Need xen/kvm flag for conga UI)
 
 * Thu Apr 23 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-5
 - Fix bz492392 (Conga Interface for Fence Agents Requires Password even when Password Script is Specified)
--- conga/luci/cluster/cluster_config-macros	2009/02/16 17:23:27	1.3.2.5
+++ conga/luci/cluster/cluster_config-macros	2009/05/21 13:32:03	1.3.2.6
@@ -819,15 +819,14 @@
 
 				<tal:block
 					tal:condition="python: len(heuristics)"
-					tal:define="global curHeur python: -1">
+					tal:define="global curHeur python:int(0)">
 
 				<input type="hidden" name="num_heuristics" id="num_heuristics"
 					tal:attributes="value python: len(heuristics)" />
 
 				<tr class="systemsTable"
 					tal:repeat="heuristic heuristics"
-					tal:attributes="id python: 'heuristic' + str(curHeur)"
-					tal:define="global curHeur python: curHeur + 1">
+					tal:attributes="id python: 'heuristic' + str(curHeur)">
 
 					<td class="systemsTable">
 						<input class="qdpath qdisk" type="text"
@@ -861,6 +860,8 @@
 								id python: 'heuristic' + str(curHeur) + ':hdel';
 								name python: 'heuristic' + str(curHeur) + ':hdel'" />
 					</td>
+
+					<tal:block tal:define="global curHeur python:int(curHeur) + 1" />
 				</tr>
 				</tal:block>
 			</tbody>
--- conga/luci/cluster/cluster_svc-macros	2009/05/14 21:05:58	1.3.2.11
+++ conga/luci/cluster/cluster_svc-macros	2009/05/21 13:32:04	1.3.2.12
@@ -166,6 +166,19 @@
 					</select>
 				</td>
 			</tr>
+
+			<tr class="systemsTable"
+				tal:condition="python:clusterinfo and clusterinfo.get('has_qemu') == True">
+				<td>Hypervisor</td>
+				<td>
+					<select name="hypervisor">
+						<option value="auto"
+							selected="selected">Automatic</option>
+						<option value="qemu">KVM</option>
+						<option value="xen">Xen</option>
+					</select>
+				</td>
+			</tr>
 						
 			<tal:block metal:use-macro="here/cluster_svc-macros/macros/failover-prefs-macro" />
 
@@ -207,6 +220,9 @@
 	<input type="hidden" name="oldname"
 		tal:attributes="value sinfo/name | nothing" />
 
+	<tal:block tal:define="
+		global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
 	<div class="service_comp_list">
 	<table class="systemsTable">
 		<thead class="systemsTable">
@@ -295,6 +311,23 @@
 				</td>
 			</tr>
 
+			<tr class="systemsTable"
+				tal:condition="python:clusterinfo and clusterinfo.get('has_qemu') == True">
+				<td>Hypervisor</td>
+				<td>
+					<select name="hypervisor">
+						<option value="auto"
+							tal:content="string:Automatic"
+							tal:attributes="selected python:(not sinfo.get('hypervisor') or sinfo.get('hypervisor') == 'auto') and 'selected' or ''" />
+						<option value="qemu"
+							tal:content="string:KVM"
+							tal:attributes="selected python:(sinfo.get('hypervisor') == 'qemu') and 'selected' or ''" />
+						<option value="xen"
+							tal:content="string:Xen"
+							tal:attributes="selected python:(sinfo.get('hypervisor') == 'xen') and 'selected' or ''" />
+				</td>
+			</tr>
+
 			<tal:block metal:use-macro="here/cluster_svc-macros/macros/failover-prefs-macro" />
 						
 			<tr class="systemsTable"><td colspan="2">
@@ -577,7 +610,7 @@
 	<tr class="systemsTable">
 		<td>Recovery policy</td>
 		<td>
-			<select name="recovery">
+			<select name="recovery" onchange="set_recovery_type(this.form)">
 				<option value="">Select a recovery policy</option>
 				<option name="relocate" value="relocate"
 					tal:content="string:Relocate"
--- conga/luci/cluster/resource-form-macros	2008/07/30 21:14:38	1.21.2.15
+++ conga/luci/cluster/resource-form-macros	2009/05/21 13:32:04	1.21.2.16
@@ -147,7 +147,7 @@
 			<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
 			<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
 
-			<tal:block tal:condition="python:clusterinfo and clusterinfo['os_major'] == 5 and clusterinfo['os_minor'] > 1">
+			<tal:block tal:condition="python:clusterinfo and clusterinfo.get('has_sybase_agent') == True">
 				<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
 			</tal:block>
 			<option name="oracledb" value="oracledb">Oracle 10g Failover Instance</option>
@@ -203,7 +203,7 @@
 			<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
 			<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
 
-			<tal:block tal:condition="python:clusterinfo and clusterinfo['os_major'] == 5 and clusterinfo['os_minor'] > 1">
+			<tal:block tal:condition="python:clusterinfo and clusterinfo.get('has_sybase_agent') == True">
 				<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
 			</tal:block>
 
@@ -286,9 +286,13 @@
 	<script type="text/javascript">
 		set_page_title('Luci ??? cluster ??? resources ??? Resource details');
 	</script>
+
 	<tal:block
 		tal:define="global res python: here.getResourceInfo(modelb, request)" />
 
+	<tal:block tal:define="
+		global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
 	<h2>Resource details for <span tal:replace="res/name" /></h2>
 
 	<table class="systemsTable">
@@ -327,6 +331,9 @@
 		src="/luci/cluster/resource_form_handlers.js">
 	</script>
 
+	<tal:block tal:define="
+		global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
 	<tal:block tal:define="global resourcename request/resourcename | request/form/resourcename | nothing" />
 
 	<tal:block tal:condition="resourcename"
@@ -1329,6 +1336,7 @@
 						value res/attrs/DIR_PROFILE | nothing" />
 			</td>
 		</tr>
+
 		<tr class="systemsTable">
 			<td class="systemsTable">Name of the SAP START profile</td>
 			<td class="systemsTable">
@@ -1338,6 +1346,84 @@
 						value res/attrs/START_PROFILE | nothing" />
 			</td>
 		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+            class="systemsTable">
+			<td class="systemsTable">
+				<span title="After that time in seconds a monitor operation is executed by the resource agent. Does the monitor return SUCCESS, the start is handled as SUCCESS. This is useful to resolve timing problems with e.g. the J2EE-Addin instance.">Number of seconds to wait before checking startup status</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="START_WAITTIME"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/START_WAITTIME | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The SAPInstance resource agent tries to recover a failed start attempt automaticaly one time. This is done by killing runing instance processes and executing cleanipc.">Enable automatic startup recovery</span>
+			</td>
+			<td class="systemsTable">
+				<input type="checkbox" name="AUTOMATIC_RECOVER"
+					tal:attributes="
+						disabled python: editDisabled;
+						checked res/attrs/AUTOMATIC_RECOVER | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+            class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed before this resource gets started.">Path to a pre-start script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="PRE_START_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/PRE_START_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+            class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed after this resource got started.">Path to a post-start script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="POST_START_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/POST_START_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+            class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed before this resource gets stopped.">Path to a pre-stop script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="PRE_STOP_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/PRE_STOP_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+            class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed after this resource got stopped.">Path to a post-stop script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="POST_STOP_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/POST_STOP_USEREXIT | nothing" />
+			</td>
+		</tr>
 	</table>
 	<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
 	</form>
@@ -1665,6 +1751,106 @@
 			</td>
 		</tr>
 
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">Application Level Monitoring</td>
+			<td class="systemsTable">
+				<input type="checkbox" name="STRICT_MONITORING"
+					tal:attributes="
+						disabled python: editDisabled;
+						checked res/attrs/STRICT_MONITORING | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">Automatic Startup Recovery</td>
+			<td class="systemsTable">
+				<input type="checkbox" name="AUTOMATIC_RECOVER"
+					tal:attributes="
+						disabled python: editDisabled;
+						checked res/attrs/AUTOMATIC_RECOVER | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path to the Java SDK">Path to Java SDK</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="JAVA_HOME"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/JAVA_HOME | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified filename of the jdbc driver for the database connection test. It will be automaticaly read from the bootstrap.properties file in Java engine 6.40 and 7.00. For Java engine 7.10 the parameter is mandatory">File name of the JDBC driver</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="DB_JARS"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/DB_JARS | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed before this resource gets started.">Path to a pre-start script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="PRE_START_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/PRE_START_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed after this resource got started.">Path to a post-start script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="POST_START_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/POST_START_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed before this resource gets stopped.">Path to a pre-stop script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="PRE_STOP_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/PRE_STOP_USEREXIT | nothing" />
+			</td>
+		</tr>
+
+		<tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+			class="systemsTable">
+			<td class="systemsTable">
+				<span title="The fully qualified path where to find a script or program which should be executed after this resource got stopped.">Path to a post-stop script</span>
+			</td>
+			<td class="systemsTable">
+				<input type="text" size="20" name="POST_STOP_USEREXIT"
+					tal:attributes="
+						disabled python: editDisabled;
+						value res/attrs/POST_STOP_USEREXIT | nothing" />
+			</td>
+		</tr>
+
 		<tr class="systemsTable">
 			<td class="systemsTable">
 				<span title="The fully qualified path to the J2EE instance bootstrap directory">J2EE instance bootstrap directory</span>
--- conga/luci/cluster/resource_form_handlers.js	2009/04/27 21:03:32	1.20.2.17
+++ conga/luci/cluster/resource_form_handlers.js	2009/05/21 13:32:04	1.20.2.18
@@ -471,6 +471,17 @@
 
 var submit_btn = null;
 
+function set_recovery_type(form) {
+	recovery = form.recovery.options[form.recovery.options.selectedIndex].value;
+	if (recovery != 'restart') {
+		form.max_restarts.disabled = true;
+		form.restart_expire_time.disabled = true;
+	} else {
+		form.max_restarts.disabled = false;
+		form.restart_expire_time.disabled = false;
+	}
+}
+
 function forms_to_xml(submit_button, master_form) {
 	var errors = new Array();
 	var form_xml = '';
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/04/27 21:03:32	1.1.4.18
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/05/21 13:32:04	1.1.4.19
@@ -603,17 +603,25 @@
 	clumap = {}
 
 	clumap['has_ignore_undef_fence'] = False
+	clumap['sap_agent_v19'] = False
+	clumap['has_qemu'] = False
+	clumap['has_sybase_agent'] = False
 	try:
 		cluster_os = model.getClusterOS()
 		if cluster_os.find('Tikanga') != -1:
 			clumap['os_major'] = 5
 			os_minor = int(cluster_os[cluster_os.find('5.') + 2])
 			clumap['os_minor'] = os_minor
+			if os_minor > 0:
+				clumap['has_sybase_agent'] = True
 			if os_minor > 1:
 				clumap['vm_migration_choice'] = True
 			if os_minor > 2:
 				clumap['has_fence_ssh'] = True
 				#clumap['has_ignore_undef_fence'] = True
+			if os_minor > 3:
+				clumap['sap_agent_v19'] = True
+				clumap['has_qemu'] = True
 		elif cluster_os.find('Nahant') != -1:
 			clumap['os_major'] = 4
 			os_minor = int(cluster_os[cluster_os.find('Update ') + 7])
--- conga/luci/site/luci/Extensions/LuciValidation.py	2009/04/27 21:03:32	1.6.2.11
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2009/05/21 13:32:04	1.6.2.12
@@ -1108,7 +1108,7 @@
 def validate_vmsvc_form(model, request):
 	errors = list()
 
-	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time', 'migration_mapping'])
+	fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time', 'migration_mapping', 'hypervisor' ])
 
 	vm_name = fvar['vmname']
 	if vm_name is None:
@@ -1227,6 +1227,14 @@
 		except:
 			pass
 
+	hypervisor = fvar['hypervisor']
+	if hypervisor == 'xen':
+		xvm.addAttribute('hypervisor', 'xen')
+	elif hypervisor == 'qemu':
+		xvm.addAttribute('hypervisor', 'qemu')
+	else:
+		xvm.removeAttribute('hypervisor')
+
 	fdom = fvar['domain']
 	if fdom:
 		xvm.addAttribute('domain', fdom)
--- conga/luci/site/luci/Extensions/ResourceHandler.py	2009/01/23 19:33:29	1.1.4.7
+++ conga/luci/site/luci/Extensions/ResourceHandler.py	2009/05/21 13:32:04	1.1.4.8
@@ -710,13 +710,14 @@
 		if LUCI_DEBUG_MODE is True:
 			luci_log.debug_verbose('addSAPD1: %s' % err)
 
-	if form.has_key('DBJ2EE_ONLY'):
-		res.addAttribute('DBJ2EE_ONLY', 'TRUE')
-	else:
-		res.removeAttribute('DBJ2EE_ONLY')
-
+	for param in ( 'DBJ2EE_ONLY', 'AUTOMATIC_RECOVER', 'STRICT_MONITORING' ):
+		if form.has_key(param):
+			res.addAttribute(param, 'true')
+		else:
+			res.removeAttribute(param)
+			
 	# Optional string parameters
-	for param in ( 'DIR_EXECUTABLE', 'NETSERVICENAME', 'DIR_BOOTSTRAP', 'DIR_SECSTORE' ):
+	for param in ( 'DIR_EXECUTABLE', 'NETSERVICENAME', 'DIR_BOOTSTRAP', 'DIR_SECSTORE', 'JAVA_HOME', 'DB_JARS', 'PRE_START_USEREXIT', 'POST_START_USEREXIT', 'PRE_STOP_USEREXIT', 'POST_STOP_USEREXIT' ):
 		try:
 			pval = form[param].strip()
 			if not pval:
@@ -737,8 +738,13 @@
 	res.removeAttribute('name')
 	res.addAttribute('InstanceName', rname)
 
+	if form.has_key('AUTOMATIC_RECOVER'):
+		res.addAttribute('AUTOMATIC_RECOVER', 'true')
+	else:
+		res.removeAttribute('AUTOMATIC_RECOVER')
+
 	# Optional string parameters
-	for param in ( 'DIR_EXECUTABLE', 'DIR_PROFILE', 'START_PROFILE' ):
+	for param in ( 'DIR_EXECUTABLE', 'DIR_PROFILE', 'START_PROFILE', 'PRE_START_USEREXIT', 'POST_START_USEREXIT', 'PRE_STOP_USEREXIT', 'POST_STOP_USEREXIT', 'START_WAITTIME' ):
 		try:
 			pval = form[param].strip()
 			if not pval:
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs	2009/03/24 20:08:19	1.15.2.42 and /cvs/cluster/conga/luci/site/luci/var/Data.fs	2009/05/21 13:32:05	1.15.2.43 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed



^ permalink raw reply	[flat|nested] 13+ messages in thread
* [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
@ 2010-09-29 17:08 rmccabe
  0 siblings, 0 replies; 13+ messages in thread
From: rmccabe @ 2010-09-29 17:08 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2010-09-29 17:08:26

Modified files:
	.              : conga.spec.in.in 
	luci/cluster   : cluster_config-macros fence-macros 
	                 resource-form-macros 
	                 validate_config_multicast.js validate_fence.js 
	luci/docs      : Makefile 
	luci/plone-custom: conga.js 
	luci/site/luci/Extensions: FenceHandler.py LuciClusterInfo.py 
	                           LuciValidation.py 
	                           conga_storage_constants.py 
	luci/site/luci/Extensions/ClusterModel: FenceDeviceAttr.py 
	                                        ModelBuilder.py 
	ricci          : Makefile 
Added files:
	luci/docs      : luci_admin.8 
	ricci/docs     : Makefile ricci.8 

Log message:
	Sync up with RHEL56 dist cvs

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.116&r2=1.45.2.117
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.7&r2=1.3.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.17&r2=1.2.2.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.17&r2=1.21.2.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.5&r2=1.3.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.13&r2=1.1.2.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/luci_admin.8.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.10&r2=1.3.2.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.22&r2=1.4.2.23
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.19&r2=1.1.4.20
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.16&r2=1.6.2.17
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_storage_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.2&r2=1.8.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.4&r2=1.5.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.15&r2=1.1.4.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.2&r2=1.11.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/ricci.8.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1

--- conga/conga.spec.in.in	2009/05/21 13:32:03	1.45.2.116
+++ conga/conga.spec.in.in	2010/09/29 17:08:23	1.45.2.117
@@ -142,6 +142,8 @@
 %if "%{include_zope_and_plone}" == "yes"
 				%{_libdir}/luci/zope
 %endif
+%doc
+%{_mandir}/man8/luci_admin.8*
 
 %pre -n luci
 groupmod luci >&/dev/null
@@ -287,6 +289,8 @@
 %config(noreplace)	%{_sysconfdir}/oddjobd.conf.d/ricci-modvirt.oddjob.conf
 %config(noreplace)	%{_sysconfdir}/dbus-1/system.d/ricci-modvirt.systembus.conf
 			%{_libexecdir}/ricci-modvirt
+%doc
+%{_mandir}/man8/ricci.8*
 
 %pre -n ricci
 getent group ricci >/dev/null || groupadd -r ricci
--- conga/luci/cluster/cluster_config-macros	2010/08/05 18:01:15	1.3.2.7
+++ conga/luci/cluster/cluster_config-macros	2010/09/29 17:08:24	1.3.2.8
@@ -608,7 +608,14 @@
 						</tal:block>
 					</td>
 				</tr>
-
+				<tr class="systemsTable"
+					tal:condition="python:os_version != 'rhel4'">
+					<td class="systemsTable">
+						<input type="radio" name="mcast" value="broadcast"
+							onclick="disable_mcast('mcast_address', 'mcast_interface')"
+							tal:attributes="checked python: clusterinfo['is_bcast'] == 'True'"/>Use broadcast
+					</td>
+				</tr>
 				<tr class="systemsTable">
 					<td class="systemsTable">
 						Multicast address
--- conga/luci/cluster/fence-macros	2010/08/07 04:11:22	1.2.2.17
+++ conga/luci/cluster/fence-macros	2010/09/29 17:08:24	1.2.2.18
@@ -10,7 +10,7 @@
 <html>
 
 <head>
-    <title tal:content="string:" />
+	<title tal:content="string:" />
 </head>
 
 <body>
@@ -186,6 +186,10 @@
 		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo" />
 	</tal:block>
 
+	<tal:block tal:condition="python: cur_fence_type == 'fence_ilo_mp'">
+		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo_mp" />
+	</tal:block>
+
 	<tal:block tal:condition="python: cur_fence_type == 'fence_drac'">
 		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-drac" />
 	</tal:block>
@@ -254,6 +258,18 @@
 		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
 	</tal:block>
 
+	<tal:block tal:condition="python: cur_fence_type == 'fence_cisco_mds'">
+		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-cisco_mds" />
+	</tal:block>
+
+	<tal:block tal:condition="python: cur_fence_type == 'fence_ifmib'">
+		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ifmib" />
+	</tal:block>
+
+	<tal:block tal:condition="python: cur_fence_type == 'fence_ucs'">
+		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ucs" />
+	</tal:block>
+
 	<tal:block tal:condition="python: cur_fence_type == 'fence_manual'">
 		<tal:block metal:use-macro="here/fence-macros/macros/fence-form-manual" />
 	</tal:block>
@@ -339,6 +355,9 @@
 	<option name="fence_scsi" value="fence_scsi">SCSI Fencing</option>
 	<option name="fence_vmware" value="fence_vmware">VMware Fencing</option>
 	<option name="fence_lpar" value="fence_lpar">LPAR Fencing</option>
+	<option name="fence_cisco_mds" value="fence_cisco_mds">Cisco MDS</option>
+	<option name="fence_ucs" value="fence_ucs">Cisco UCS</option>
+	<option name="fence_ifmib" value="fence_ifmib">IF MIB</option>
 </div>
 
 <div metal:define-macro="fence-option-list">
@@ -352,6 +371,7 @@
 	<option name="fence_gnbd" value="fence_gnbd">GNBD</option>
 	<option name="fence_egenera" value="fence_egenera">Egenera SAN Controller</option>
 	<option name="fence_ilo" value="fence_ilo">HP iLO</option>
+	<option name="fence_ilo_mp" value="fence_ilo_mp">HP iLO MP</option>
 	<option name="fence_rsa" value="fence_rsa">IBM RSA II</option>
 	<option name="fence_rsb" value="fence_rsb">Fujitsu Siemens RSB</option>
 	<option name="fence_bladecenter" value="fence_bladecenter">IBM Blade Center</option>
@@ -363,6 +383,9 @@
 	<option name="fence_scsi" value="fence_scsi">SCSI Fencing</option>
 	<option name="fence_vmware" value="fence_vmware">VMware Fencing</option>
 	<option name="fence_lpar" value="fence_lpar">LPAR Fencing</option>
+	<option name="fence_cisco_mds" value="fence_cisco_mds">Cisco MDS</option>
+	<option name="fence_ucs" value="fence_ucs">Cisco UCS</option>
+	<option name="fence_ifmib" value="fence_ifmib">IF MIB</option>
 	<option name="fence_manual" value="fence_manual">Manual Fencing</option>
 </div>
 
@@ -676,6 +699,100 @@
 	</div>
 </div>
 
+<div metal:define-macro="fence-form-ilo_mp"
+	tal:attributes="id cur_fencedev/name | nothing">
+
+	<div id="fence_ilo_mp" class="fencedev">
+		<table>
+			<tr>
+				<td><strong class="cluster">Fence Type</strong></td>
+				<td>HP iLO MP</td>
+			</tr>
+			<tr>
+				<td>Name</td>
+				<td>
+					<input name="name" type="text"
+						tal:attributes="value cur_fencedev/name | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Hostname</td>
+				<td>
+					<input name="ipaddr" type="text"
+						tal:attributes="value cur_fencedev/ipaddr | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>IP port (optional)</td>
+				<td>
+					<input name="ipport" type="text" class="text"
+						tal:attributes="value cur_fencedev/ipport | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Login</td>
+				<td>
+					<input name="login" type="text"
+						tal:attributes="value cur_fencedev/login | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Password</td>
+				<td>
+					<input name="passwd" type="password" autocomplete="off"
+						tal:attributes="value cur_fencedev/passwd | 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="
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
+			<tr tal:condition="exists:clusterinfo/has_fence_ssh">
+				<td>
+					<span title="Enable SSH operation">Use SSH</span>
+				</td>
+				<td>
+					<input tal:condition="exists:cur_fencedev"
+						type="checkbox" name="secure"
+						tal:attributes="
+							checked python:(cur_fencedev and cur_fencedev.has_key('secure') and (cur_fencedev['secure'] == '1' or cur_fencedev['secure'].lower() == 'true')) and 'checked' or ''" />
+					<input tal:condition="not:exists:cur_fencedev"
+						type="checkbox" name="secure" />
+				</td>
+			</tr>
+			<tr>
+				<td>Force command prompt</td>
+				<td>
+					<input type="text" class="text" name="cmd_prompt"
+						tal:attributes="value cur_fencedev/cmd_prompt | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Power wait (seconds)</td>
+				<td>
+					<input type="text" name="power_wait"
+						tal:attributes="
+							value cur_fencedev/power_wait | nothing" />
+				</td>
+			</tr>
+		</table>
+
+		<tal:block tal:condition="exists: cur_fencedev">
+			<input type="hidden" name="existing_device" value="1" />
+			<input type="hidden" name="orig_name"
+				tal:attributes="value cur_fencedev/name | nothing" />
+		</tal:block>
+
+		<input type="hidden" name="fence_type" value="fence_ilo_mp" />
+	</div>
+</div>
+
 <div metal:define-macro="fence-form-drac"
 	tal:attributes="id cur_fencedev/name | nothing">
 
@@ -1727,134 +1844,635 @@
 	</div>
 </div>
 
-<div metal:define-macro="fence-form-list">
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-drac" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rsa" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rsb" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rps10" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ipmilan" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-lpar" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vmware" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-manual" />
-</div>
-
-<div metal:define-macro="shared-fence-form-list">
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-lpar" />
-	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vmware" />
-</div>
-
-<div metal:define-macro="shared-fence-device-list">
-	<tal:block tal:condition="exists: cur_fencedev">
-		<tal:block tal:define="cur_fence_type cur_fencedev/agent | nothing">
-			<tal:block metal:use-macro="here/fence-macros/macros/fencedev-cond-ladder" />
-		</tal:block>
-	</tal:block>
-</div>
-
-<div metal:define-macro="fence-instance-form-apc"
-	tal:omit-tag="exists: cur_fence_dev_id">
+<div metal:define-macro="fence-form-ucs"
+	tal:attributes="id cur_fencedev/name | nothing">
 
-	<div id="fence_apc_instance" name="fence_apc" class="fencedev_instance"
-		tal:omit-tag="exists: cur_fence_dev_id">
+	<div id="fence_ucs" class="fencedev">
 		<table>
 			<tr>
-				<td>Port</td>
+				<td><strong class="cluster">Fence Type</strong></td>
+				<td>Cisco UCS</td>
+			</tr>
+			<tr>
+				<td>Name</td>
 				<td>
-					<input name="port" type="text"
-						tal:attributes="value cur_instance/port | nothing" />
+					<input name="name" type="text"
+						tal:attributes="value cur_fencedev/name | nothing" />
 				</td>
 			</tr>
 			<tr>
-				<td>Switch (optional)</td>
+				<td>IP Address</td>
 				<td>
-					<input name="switch" type="text"
-						tal:attributes="value cur_instance/switch | nothing" />
+					<input name="ipaddr" type="text"
+						tal:attributes="value cur_fencedev/ipaddr | nothing" />
 				</td>
 			</tr>
-			<tr tal:condition="exists:clusterinfo/has_fence_ssh">
+			<tr>
+				<td>IP port (optional)</td>
 				<td>
-					<span title="Enable SSH operation">Use SSH</span>
+					<input name="ipport" type="text" class="text"
+						tal:attributes="value cur_fencedev/ipport | nothing" />
 				</td>
+			</tr>
+			<tr>
+				<td>Login</td>
 				<td>
-					<input tal:condition="exists:cur_instance"
-						type="checkbox" name="secure"
+					<input name="login" type="text"
+						tal:attributes="value cur_fencedev/login | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Password</td>
+				<td>
+					<input name="passwd" type="password" autocomplete="off"
+						tal:attributes="value cur_fencedev/passwd | 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="
-							checked python:(cur_instance and cur_instance.has_key('secure') and (cur_instance['secure'] == '1' or cur_instance['secure'].lower() == 'true')) and 'checked' or ''" />
-					<input tal:condition="not:exists:cur_instance"
-						type="checkbox" name="secure" />
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd_script | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Use SSL connections</td>
+				<td>
+					<input tal:condition="exists:cur_fencedev"
+						type="checkbox" name="ssl"
+						tal:attributes="
+							checked python:(cur_fencedev and cur_fencedev.has_key('ssl') and (cur_fencedev['ssl'] == '1' or cur_fencedev['ssl'].lower() == 'true')) and 'checked' or ''" />
+					<input tal:condition="not:exists:cur_fencedev"
+						type="checkbox" name="ssl" />
+				</td>
+			</tr>
+			<tr>
+				<td>Power wait (seconds)</td>
+				<td>
+					<input type="text" name="power_wait"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/power_wait | nothing" />
 				</td>
 			</tr>
-			<tr><td colspan="2">
-				<div class="hbSubmit">
-					<tal:block tal:condition="exists:cur_fence_instance_id">
-						<input type="button" name="remove_fence"
-							value="Remove this instance"
-							tal:attributes="onclick python: 'del_fence_instance(\'' + cur_fence_instance_id + '\')'" />
-					</tal:block>
-					<tal:block tal:condition="not:exists:cur_fence_instance_id">
-						<input type="button" name="remove_fence"
-							value="Remove this instance" />
-					</tal:block>
-				</div>
-			</td></tr>
 		</table>
 
-		<input type="hidden" name="option" tal:condition="exists:cur_instance"
-			tal:attributes="value cur_instance/option |nothing" />
-		<input type="hidden" name="fence_type" value="fence_apc" />
-		<input type="hidden" name="fence_instance" value="1" />
-		<input tal:condition="exists: cur_instance"
-			type="hidden" name="existing_instance" value="1" />
-		<input type="hidden" name="parent_fencedev"
-			tal:attributes="value cur_fence_dev_id | nothing" />
+		<tal:block tal:condition="exists: cur_fencedev">
+			<input type="hidden" name="existing_device" value="1" />
+			<input type="hidden" name="orig_name"
+				tal:attributes="value cur_fencedev/name | nothing" />
+		</tal:block>
+
+		<input type="hidden" name="fence_type" value="fence_ucs" />
+		<input type="hidden" name="sharable" value="1" />
 	</div>
 </div>
 
-<div metal:define-macro="fence-instance-form-lpar"
-	tal:omit-tag="exists: cur_fence_dev_id">
-	<div id="fence_lpar_instance" name="fence_lpar" class="fencedev_instance"
-		tal:omit-tag="exists: cur_fence_dev_id">
+<div metal:define-macro="fence-form-ifmib"
+	tal:attributes="id cur_fencedev/name | nothing">
+
+	<div id="fence_ifmib" class="fencedev">
 		<table>
 			<tr>
-				<td>Partition</td>
+				<td><strong class="cluster">Fence Type</strong></td>
+				<td>IF MIB</td>
+			</tr>
+			<tr>
+				<td>Name</td>
 				<td>
-					<input name="partition" type="text"
+					<input name="name" type="text"
 						tal:attributes="
-							value cur_instance/partition | nothing" />
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/name | nothing" />
 				</td>
 			</tr>
-
 			<tr>
-				<td>Managed System</td>
+				<td>IP address or hostname</td>
 				<td>
-					<input name="managed" type="text"
+					<input name="ipaddr" type="text"
 						tal:attributes="
-							value cur_instance/managed | nothing" />
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/ipaddr | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>UDP/TCP port (optional, defaults to 161)</td>
+				<td>
+					<input name="udpport" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/udpport | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Login</td>
+				<td>
+					<input name="login" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/login | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Password</td>
+				<td>
+					<input name="passwd" type="password" autocomplete="off"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd | 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>
+			<tr>
+				<td>SNMP version</td>
+				<td>
+					<select name="snmp_version"
+						tal:define="snmp_version cur_fencedev/snmp_version | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_version == 'default' and 'selected'"/>
+						<option value="1"
+							tal:content="string:1"
+							tal:attributes="selected python: snmp_version == '1' and 'selected'"/>
+						<option value="2c"
+							tal:content="string:2c"
+							tal:attributes="selected python: snmp_version == '2c' and 'selected'"/>
+						<option value="3"
+							tal:content="string:3"
+							tal:attributes="selected python: snmp_version == '3' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP community</td>
+				<td>
+					<input name="community" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/community | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP security level</td>
+				<td>
+					<select name="snmp_sec_level"
+						tal:define="snmp_sec_level cur_fencedev/snmp_sec_level | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_sec_level == 'default' and 'selected'"/>
+
+						<option value="noAuthNoPriv"
+							tal:content="string:noAuthNoPriv"
+							tal:attributes="selected python: snmp_sec_level == 'noAuthNoPriv' and 'selected'"/>
+
+						<option value="authNoPriv"
+							tal:content="string:authNoPriv"
+							tal:attributes="selected python: snmp_sec_level == 'authNoPriv' and 'selected'"/>
+
+						<option value="authPriv"
+							tal:content="string:authPriv"
+							tal:attributes="selected python: snmp_sec_level == 'authPriv' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP authentication protocol</td>
+				<td>
+					<select name="snmp_auth_prot"
+						tal:define="snmp_auth_prot cur_fencedev/snmp_auth_prot | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+						<option value="MD5"
+							tal:content="string:MD5"
+							tal:attributes="selected python: snmp_auth_prot == 'MD5' and 'selected'"/>
+
+						<option value="SHA"
+							tal:content="string:SHA"
+							tal:attributes="selected python: snmp_auth_prot == 'SHA' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP privacy protocol</td>
+				<td>
+					<select name="snmp_priv_prot"
+						tal:define="snmp_priv_prot cur_fencedev/snmp_priv_prot | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_priv_prot == 'default' and 'selected'"/>
+						<option value="DES"
+							tal:content="string:DES"
+							tal:attributes="selected python: snmp_priv_prot == 'DES' and 'selected'"/>
+						<option value="AES"
+							tal:content="string:AES"
+							tal:attributes="selected python: snmp_priv_prot == 'AES' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP privacy protocol password</td>
+				<td>
+					<input name="snmp_priv_passwd" type="password" autocomplete="off"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/snmp_priv_passwd | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>
+					SNMP privacy protocol script
+				</td>
+				<td>
+					<input type="text" name="snmp_priv_passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/snmp_priv_passwd_script | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Power wait (seconds)</td>
+				<td>
+					<input type="text" name="power_wait"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/power_wait | nothing" />
+				</td>
+			</tr>
+		</table>
+
+		<tal:block tal:condition="exists: cur_fencedev">
+			<input type="hidden" name="existing_device" value="1" />
+			<input type="hidden" name="orig_name"
+				tal:attributes="value cur_fencedev/name | nothing" />
+		</tal:block>
+
+		<input type="hidden" name="sharable" value="1" />
+		<input type="hidden" name="fence_type" value="fence_ifmib" />
+	</div>
+</div>
+
+<div metal:define-macro="fence-form-cisco_mds"
+	tal:attributes="id cur_fencedev/name | nothing">
+
+	<div id="fence_cisco_mds" class="fencedev">
+		<table>
+			<tr>
+				<td><strong class="cluster">Fence Type</strong></td>
+				<td>Cisco MDS</td>
+			</tr>
+			<tr>
+				<td>Name</td>
+				<td>
+					<input name="name" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/name | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>IP address or hostname</td>
+				<td>
+					<input name="ipaddr" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/ipaddr | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>UDP/TCP port (optional, defaults to 161)</td>
+				<td>
+					<input name="udpport" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/udpport | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Login</td>
+				<td>
+					<input name="login" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/login | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Password</td>
+				<td>
+					<input name="passwd" type="password" autocomplete="off"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/passwd | 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>
+			<tr>
+				<td>SNMP version</td>
+				<td>
+					<select name="snmp_version"
+						tal:define="snmp_version cur_fencedev/snmp_version | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_version == 'default' and 'selected'"/>
+						<option value="1"
+							tal:content="string:1"
+							tal:attributes="selected python: snmp_version == '1' and 'selected'"/>
+						<option value="2c"
+							tal:content="string:2c"
+							tal:attributes="selected python: snmp_version == '2c' and 'selected'"/>
+						<option value="3"
+							tal:content="string:3"
+							tal:attributes="selected python: snmp_version == '3' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP community</td>
+				<td>
+					<input name="community" type="text"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/community | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP security level</td>
+				<td>
+					<select name="snmp_sec_level"
+						tal:define="snmp_sec_level cur_fencedev/snmp_sec_level | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_sec_level == 'default' and 'selected'"/>
+
+						<option value="noAuthNoPriv"
+							tal:content="string:noAuthNoPriv"
+							tal:attributes="selected python: snmp_sec_level == 'noAuthNoPriv' and 'selected'"/>
+
+						<option value="authNoPriv"
+							tal:content="string:authNoPriv"
+							tal:attributes="selected python: snmp_sec_level == 'authNoPriv' and 'selected'"/>
+
+						<option value="authPriv"
+							tal:content="string:authPriv"
+							tal:attributes="selected python: snmp_sec_level == 'authPriv' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP authentication protocol</td>
+				<td>
+					<select name="snmp_auth_prot"
+						tal:define="snmp_auth_prot cur_fencedev/snmp_auth_prot | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+						<option value="MD5"
+							tal:content="string:MD5"
+							tal:attributes="selected python: snmp_auth_prot == 'MD5' and 'selected'"/>
+
+						<option value="SHA"
+							tal:content="string:SHA"
+							tal:attributes="selected python: snmp_auth_prot == 'SHA' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP privacy protocol</td>
+				<td>
+					<select name="snmp_priv_prot"
+						tal:define="snmp_priv_prot cur_fencedev/snmp_priv_prot | string:default"
+						tal:attributes="disabled cur_fencedev/isShared | nothing">
+						<option value=""
+							tal:content="string:Default"
+							tal:attributes="selected python: snmp_priv_prot == 'default' and 'selected'"/>
+						<option value="DES"
+							tal:content="string:DES"
+							tal:attributes="selected python: snmp_priv_prot == 'DES' and 'selected'"/>
+						<option value="AES"
+							tal:content="string:AES"
+							tal:attributes="selected python: snmp_priv_prot == 'AES' and 'selected'"/>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>SNMP privacy protocol password</td>
+				<td>
+					<input name="snmp_priv_passwd" type="password" autocomplete="off"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/snmp_priv_passwd | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>
+					SNMP privacy protocol script
+				</td>
+				<td>
+					<input type="text" name="snmp_priv_passwd_script"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/snmp_priv_passwd_script | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Power wait (seconds)</td>
+				<td>
+					<input type="text" name="power_wait"
+						tal:attributes="
+							disabled cur_fencedev/isShared | nothing;
+							value cur_fencedev/power_wait | nothing" />
+				</td>
+			</tr>
+		</table>
+
+		<tal:block tal:condition="exists: cur_fencedev">
+			<input type="hidden" name="existing_device" value="1" />
+			<input type="hidden" name="orig_name"
+				tal:attributes="value cur_fencedev/name | nothing" />
+		</tal:block>
+
+		<input type="hidden" name="sharable" value="1" />
+		<input type="hidden" name="fence_type" value="fence_cisco_mds" />
+	</div>
+</div>
+
+<div metal:define-macro="fence-form-list">
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo_mp" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-drac" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rsa" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rsb" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-rps10" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ipmilan" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-lpar" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vmware" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ifmib" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-cisco_mds" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ucs" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-manual" />
+</div>
+
+<div metal:define-macro="shared-fence-form-list">
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-lpar" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-vmware" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ifmib" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-cisco_mds" />
+	<tal:block metal:use-macro="here/fence-macros/macros/fence-form-ucs" />
+</div>
+
+<div metal:define-macro="shared-fence-device-list">
+	<tal:block tal:condition="exists: cur_fencedev">
+		<tal:block tal:define="cur_fence_type cur_fencedev/agent | nothing">
+			<tal:block metal:use-macro="here/fence-macros/macros/fencedev-cond-ladder" />
+		</tal:block>
+	</tal:block>
+</div>
+
+<div metal:define-macro="fence-instance-form-apc"
+	tal:omit-tag="exists: cur_fence_dev_id">
+
+	<div id="fence_apc_instance" name="fence_apc" class="fencedev_instance"
+		tal:omit-tag="exists: cur_fence_dev_id">
+		<table>
+			<tr>
+				<td>Port</td>
+				<td>
+					<input name="port" type="text"
+						tal:attributes="value cur_instance/port | nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Switch (optional)</td>
+				<td>
+					<input name="switch" type="text"
+						tal:attributes="value cur_instance/switch | nothing" />
+				</td>
+			</tr>
+			<tr tal:condition="exists:clusterinfo/has_fence_ssh">
+				<td>
+					<span title="Enable SSH operation">Use SSH</span>
+				</td>
+				<td>
+					<input tal:condition="exists:cur_instance"
+						type="checkbox" name="secure"
+						tal:attributes="
+							checked python:(cur_instance and cur_instance.has_key('secure') and (cur_instance['secure'] == '1' or cur_instance['secure'].lower() == 'true')) and 'checked' or ''" />
+					<input tal:condition="not:exists:cur_instance"
+						type="checkbox" name="secure" />
+				</td>
+			</tr>
+			<tr><td colspan="2">
+				<div class="hbSubmit">
+					<tal:block tal:condition="exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance"
+							tal:attributes="onclick python: 'del_fence_instance(\'' + cur_fence_instance_id + '\')'" />
+					</tal:block>
+					<tal:block tal:condition="not:exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance" />
+					</tal:block>
+				</div>
+			</td></tr>
+		</table>
+
+		<input type="hidden" name="option" tal:condition="exists:cur_instance"
+			tal:attributes="value cur_instance/option |nothing" />
+		<input type="hidden" name="fence_type" value="fence_apc" />
+		<input type="hidden" name="fence_instance" value="1" />
+		<input tal:condition="exists: cur_instance"
+			type="hidden" name="existing_instance" value="1" />
+		<input type="hidden" name="parent_fencedev"
+			tal:attributes="value cur_fence_dev_id | nothing" />
+	</div>
+</div>
+
+<div metal:define-macro="fence-instance-form-lpar"
+	tal:omit-tag="exists: cur_fence_dev_id">
+	<div id="fence_lpar_instance" name="fence_lpar" class="fencedev_instance"
+		tal:omit-tag="exists: cur_fence_dev_id">
+		<table>
+			<tr>
+				<td>Partition</td>
+				<td>
+					<input name="partition" type="text"
+						tal:attributes="
+							value cur_instance/partition | nothing" />
+				</td>
+			</tr>
+
+			<tr>
+				<td>Managed System</td>
+				<td>
+					<input name="managed" type="text"
+						tal:attributes="
+							value cur_instance/managed | nothing" />
 				</td>
 			</tr>
 
@@ -2377,6 +2995,120 @@
 	</div>
 </div>
 
+<div metal:define-macro="fence-instance-form-ucs"
+	tal:omit-tag="exists: cur_fence_dev_id">
+	<div id="fence_ucs_instance" name="fence_ucs" class="fencedev_instance"
+		tal:omit-tag="exists: cur_fence_dev_id">
+		<table>
+			<tr>
+				<td>Port</td>
+				<td>
+					<input name="port" type="text"
+						tal:attributes="value cur_instance/port | nothing" />
+				</td>
+			</tr>
+			<tr><td colspan="2">
+				<div class="hbSubmit">
+					<tal:block tal:condition="exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance"
+							tal:attributes="onclick python: 'del_fence_instance(\'' + cur_fence_instance_id + '\')'" />
+					</tal:block>
+					<tal:block tal:condition="not:exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance" />
+					</tal:block>
+				</div>
+			</td></tr>
+		</table>
+
+		<input type="hidden" name="option" tal:condition="exists:cur_instance"
+			tal:attributes="value cur_instance/option |nothing" />
+		<input type="hidden" name="fence_type" value="fence_ucs" />
+		<input type="hidden" name="fence_instance" value="1" />
+		<input tal:condition="exists: cur_instance"
+			type="hidden" name="existing_instance" value="1" />
+		<input type="hidden" name="parent_fencedev"
+			tal:attributes="value cur_fence_dev_id | nothing" />
+	</div>
+</div>
+
+<div metal:define-macro="fence-instance-form-ifmib"
+	tal:omit-tag="exists: cur_fence_dev_id">
+	<div id="fence_ifmib_instance" name="fence_ifmib" class="fencedev_instance"
+		tal:omit-tag="exists: cur_fence_dev_id">
+		<table>
+			<tr>
+				<td>Port</td>
+				<td>
+					<input name="port" type="text"
+						tal:attributes="value cur_instance/port | nothing" />
+				</td>
+			</tr>
+			<tr><td colspan="2">
+				<div class="hbSubmit">
+					<tal:block tal:condition="exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance"
+							tal:attributes="onclick python: 'del_fence_instance(\'' + cur_fence_instance_id + '\')'" />
+					</tal:block>
+					<tal:block tal:condition="not:exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance" />
+					</tal:block>
+				</div>
+			</td></tr>
+		</table>
+
+		<input type="hidden" name="option" tal:condition="exists:cur_instance"
+			tal:attributes="value cur_instance/option |nothing" />
+		<input type="hidden" name="fence_type" value="fence_ifmib" />
+		<input type="hidden" name="fence_instance" value="1" />
+		<input tal:condition="exists: cur_instance"
+			type="hidden" name="existing_instance" value="1" />
+		<input type="hidden" name="parent_fencedev"
+			tal:attributes="value cur_fence_dev_id | nothing" />
+	</div>
+</div>
+
+<div metal:define-macro="fence-instance-form-cisco_mds"
+	tal:omit-tag="exists: cur_fence_dev_id">
+	<div id="fence_cisco_mds_instance" name="fence_cisco_mds" class="fencedev_instance"
+		tal:omit-tag="exists: cur_fence_dev_id">
+		<table>
+			<tr>
+				<td>Port</td>
+				<td>
+					<input name="port" type="text"
+						tal:attributes="value cur_instance/port | nothing" />
+				</td>
+			</tr>
+			<tr><td colspan="2">
+				<div class="hbSubmit">
+					<tal:block tal:condition="exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance"
+							tal:attributes="onclick python: 'del_fence_instance(\'' + cur_fence_instance_id + '\')'" />
+					</tal:block>
+					<tal:block tal:condition="not:exists:cur_fence_instance_id">
+						<input type="button" name="remove_fence"
+							value="Remove this instance" />
+					</tal:block>
+				</div>
+			</td></tr>
+		</table>
+
+		<input type="hidden" name="option" tal:condition="exists:cur_instance"
+			tal:attributes="value cur_instance/option |nothing" />
+		<input type="hidden" name="fence_type" value="fence_cisco_mds" />
+		<input type="hidden" name="fence_instance" value="1" />
+		<input tal:condition="exists: cur_instance"
+			type="hidden" name="existing_instance" value="1" />
+		<input type="hidden" name="parent_fencedev"
+			tal:attributes="value cur_fence_dev_id | nothing" />
+	</div>
+</div>
+
 <div metal:define-macro="fence-instance-form-list">
 	<tal:block
 		metal:use-macro="here/fence-macros/macros/fence-instance-form-apc" />
@@ -2406,6 +3138,13 @@
 		metal:use-macro="here/fence-macros/macros/fence-instance-form-xvm" />
 	<tal:block
 		metal:use-macro="here/fence-macros/macros/fence-instance-form-bladecenter" />
+	<tal:block
+		metal:use-macro="here/fence-macros/macros/fence-instance-form-cisco_mds" />
+	<tal:block
+		metal:use-macro="here/fence-macros/macros/fence-instance-form-ifmib" />
+
+	<tal:block
+		metal:use-macro="here/fence-macros/macros/fence-instance-form-ucs" />
 </div>
 
 <div metal:define-macro="fencedev-instance-cond-ladder"
@@ -2480,6 +3219,21 @@
 		<tal:block
 			metal:use-macro="here/fence-macros/macros/fence-instance-form-bladecenter" />
 	</tal:block>
+
+	<tal:block tal:condition="python: cur_fence_type == 'fence_cisco_mds'">
+		<tal:block
+			metal:use-macro="here/fence-macros/macros/fence-instance-form-cisco_mds" />
+	</tal:block>
+
+	<tal:block tal:condition="python: cur_fence_type == 'fence_ifmib'">
+		<tal:block
+			metal:use-macro="here/fence-macros/macros/fence-instance-form-ifmib" />
+	</tal:block>
+
+	<tal:block tal:condition="python: cur_fence_type == 'fence_ucs'">
+		<tal:block
+			metal:use-macro="here/fence-macros/macros/fence-instance-form-ucs" />
+	</tal:block>
 </div>
 
 </body>
--- conga/luci/cluster/resource-form-macros	2010/08/07 03:16:01	1.21.2.17
+++ conga/luci/cluster/resource-form-macros	2010/09/29 17:08:24	1.21.2.18
@@ -32,7 +32,29 @@
 				<td tal:define="isubtree res/attrs/__independent_subtree|nothing">
 					<input class="vanilla" type="checkbox"
 						name="__independent_subtree"
-						tal:attributes="checked python:(isubtree in ['1', 'true', 'True', True, 1]) and 'checked' or None" />
+						tal:attributes="checked python:(isubtree in ['1', 1]) and 'checked' or None" />
+				</td>
+			</tr>
+			<tr>
+				<td>This resource is non-critical</td>
+				<td tal:define="isubtree res/attrs/__independent_subtree|nothing">
+					<input class="vanilla" type="checkbox"
+						name="__independent_subtree_noncritical"
+						tal:attributes="checked python:(isubtree in ['2', 2]) and 'checked' or None" />
+				</td>
+			</tr>
+			<tr>
+				<td>Maximum number of restart failures before giving up<br>(applies only for non-critical resources)</td>
+				<td>
+					<input type="text" name="__max_restarts" size="3"
+						tal:attributes="value res/attrs/__max_restarts|nothing" />
+				</td>
+			</tr>
+			<tr>
+				<td>Restart expire time<br>(applies only for non-critical resources)</td>
+				<td>
+					<input type="text" name="__restart_expire_time" size="3"
+						tal:attributes="value res/attrs/__restart_expire_time|nothing" />
 				</td>
 			</tr>
 		</table>
@@ -478,6 +500,12 @@
 					<option name="ext2" value="ext2"
 						tal:content="string: ext2"
 						tal:attributes="selected python: fstype == 'ext2' and 'selected'" />
+					<option name="ext4" value="ext4"
+						tal:content="string: ext4"
+						tal:attributes="selected python: fstype == 'ext4' and 'selected'" />
+					<option name="xfs" value="xfs"
+						tal:content="string: xfs"
+						tal:attributes="selected python: fstype == 'xfs' and 'selected'" />
 				</select>
 			</td>
 		</tr>
--- conga/luci/cluster/validate_config_multicast.js	2010/08/05 18:01:15	1.3.2.5
+++ conga/luci/cluster/validate_config_multicast.js	2010/09/29 17:08:24	1.3.2.6
@@ -56,6 +56,8 @@
 		mcast = 0;
 	else if (form.mcast.length > 1 && form.mcast[1].checked)
 		mcast = 1;
+	else if (form.mcast[2].checked)
+		mcast = null;
 	else {
 		errors.push('An invalid value was given while specifying how the multicast address should be chosen.');
 		set_form_err(form.mcast[0]);
--- conga/luci/cluster/validate_fence.js	2010/08/05 17:33:05	1.1.2.13
+++ conga/luci/cluster/validate_fence.js	2010/09/29 17:08:24	1.1.2.14
@@ -22,6 +22,9 @@
 fence_inst_validator['xvm'] = [ 'domain' ];
 fence_inst_validator['lpar'] = [ 'partition', 'managed' ];
 fence_inst_validator['vmware'] = [ 'port' ];
+fence_inst_validator['cisco_mds'] = [ 'port' ];
+fence_inst_validator['ifmib'] = [ 'port' ];
+fence_inst_validator['ucs'] = [ 'port' ];
 
 var fence_validator = [];
 fence_validator['apc'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
@@ -32,6 +35,7 @@
 fence_validator['egenera'] = [ 'cserver' ];
 fence_validator['gnbd'] = [ 'servers' ];
 fence_validator['ilo'] = [ 'hostname', 'login', 'passwd', 'passwd_script', 'secure' ];
+fence_validator['ilo_mp'] = [ 'hostname', 'login', 'passwd', 'passwd_script', 'secure', 'ipport', 'secure', 'cmd_prompt' ];
 fence_validator['ipmilan'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'lanplus', 'auth' ];
 fence_validator['manual'] = [];
 fence_validator['mcdata'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
@@ -44,6 +48,9 @@
 fence_validator['vixel'] = [ 'ipaddr', 'passwd', 'passwd_script' ];
 fence_validator['wti'] = [ 'ipaddr', 'passwd', 'passwd_script' ];
 fence_validator['lpar'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['cisco_mds'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['ifmib'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
+fence_validator['ucs'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ];
 fence_validator['vmware'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'vmlogin' ];
 fence_validator['xvm'] = [];
 
--- conga/luci/docs/Makefile	2008/01/23 04:44:31	1.2.2.1
+++ conga/luci/docs/Makefile	2010/09/29 17:08:24	1.2.2.2
@@ -8,6 +8,8 @@
 ##
 ################################################################################
 
+include ../make/defines.mk
+
 LUCI_HOST=luci
 LUCI_USER=admin
 LUCI_PASS=changeme
@@ -20,6 +22,8 @@
 docs:
 
 install:
+	install -d ${mandir}/man8
+	install luci_admin.8 ${mandir}/man8
 
 clean:
 
--- conga/luci/plone-custom/conga.js	2010/08/07 02:39:59	1.3.2.10
+++ conga/luci/plone-custom/conga.js	2010/09/29 17:08:24	1.3.2.11
@@ -223,7 +223,7 @@
 		return (null);
 	}
 
-	if (!isNaN(parseInt(i[i.length - 1], 10))) {
+	if (!isNaN(Number(i[i.length - 1]))) {
 		return ('Invalid IP address.');
 	}
 
--- conga/luci/site/luci/Extensions/FenceHandler.py	2010/08/07 04:11:22	1.4.2.22
+++ conga/luci/site/luci/Extensions/FenceHandler.py	2010/09/29 17:08:25	1.4.2.23
@@ -776,6 +776,267 @@
 
 	return errors
 
+def val_ucs_fd(form, fencedev):
+	errors = list()
+
+	try:
+		ip = form['ipaddr'].strip()
+		if not ip:
+			raise Exception, 'blank'
+		fencedev.addAttribute('ipaddr', ip)
+	except Exception, e:
+		errors.append(FD_PROVIDE_IP)
+
+	try:
+		log = form['login'].strip()
+		if not log:
+			raise Exception, 'blank'
+		fencedev.addAttribute('login', log)
+	except Exception, e:
+		errors.append(FD_PROVIDE_LOGIN)
+
+	try:
+		power_wait = form['power_wait'].strip()
+		if power_wait:
+			power_wait = int(power_wait)
+			if power_wait < 0:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		power_wait = None
+	except Exception, e:
+		power_wait = None
+		errors.append('An invalid value for power_wait was given: "%s"' % form['power_wait'])
+	if power_wait:
+		fencedev.addAttribute('power_wait', str(power_wait))
+	else:
+		fencedev.removeAttribute('power_wait')
+
+	try:
+		ipport = form['ipport'].strip()
+		if ipport:
+			ipport = int(ipport)
+			if ipport < 1 or ipport & 0xffff != ipport:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		ipport = None
+	except Exception, e:
+		ipport = None
+		errors.append('An invalid value for ipport was given: "%s"' % form['ipport'])
+	if ipport:
+		fencedev.addAttribute('ipport', str(ipport))
+	else:
+		fencedev.removeAttribute('ipport')
+
+	use_ssl = form.has_key('ssl') and form['ssl'].lower() in ('1', 'on', 'true')
+	if use_ssl:
+		fencedev.addAttribute('ssl', '1')
+	else:
+		fencedev.removeAttribute('ssl')
+
+	has_passwd = False
+	try:
+		pwd = form['passwd'].strip()
+		if not pwd:
+			# Allow passwords that consist of only spaces.
+			if not form.has_key('passwd') or form['passwd'] == '':
+				raise Exception, 'blank'
+			else:
+				pwd = form['passwd']
+		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)
+
+	return errors
+
+def val_cisco_mds_fd(form, fencedev):
+	errors = list()
+
+	try:
+		ip = form['ipaddr'].strip()
+		if not ip:
+			raise Exception, 'blank'
+		fencedev.addAttribute('ipaddr', ip)
+	except Exception, e:
+		errors.append(FD_PROVIDE_IP)
+
+	try:
+		log = form['login'].strip()
+		if not log:
+			raise Exception, 'blank'
+		fencedev.addAttribute('login', log)
+	except Exception, e:
+		errors.append(FD_PROVIDE_LOGIN)
+
+	try:
+		power_wait = form['power_wait'].strip()
+		if power_wait:
+			power_wait = int(power_wait)
+			if power_wait < 0:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		power_wait = None
+	except Exception, e:
+		power_wait = None
+		errors.append('An invalid value for power_wait was given: "%s"' % form['power_wait'])
+	if power_wait:
+		fencedev.addAttribute('power_wait', str(power_wait))
+	else:
+		fencedev.removeAttribute('power_wait')
+
+	try:
+		udpport = form['udpport'].strip()
+		if udpport:
+			udpport = int(udpport)
+			if udpport < 1 or udpport & 0xffff != udpport:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		udpport = None
+	except Exception, e:
+		udpport = None
+		errors.append('An invalid value for udpport was given: "%s"' % form['udpport'])
+	if udpport:
+		fencedev.addAttribute('udpport', str(udpport))
+	else:
+		fencedev.removeAttribute('udpport')
+
+	try:
+		snmp_community = form['community'].strip()
+	except Exception, e:
+		snmp_community = None
+	if snmp_community:
+		fencedev.addAttribute('community', snmp_community)
+	else:
+		fencedev.removeAttribute('community')
+
+	has_passwd = False
+	try:
+		pwd = form['passwd'].strip()
+		if not pwd:
+			# Allow passwords that consist of only spaces.
+			if not form.has_key('passwd') or form['passwd'] == '':
+				raise Exception, 'blank'
+			else:
+				pwd = form['passwd']
+		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:
+		pwd = form['snmp_priv_passwd'].strip()
+		if not pwd:
+			# Allow passwords that consist of only spaces.
+			if not form.has_key('snmp_priv_passwd') or form['snmp_priv_passwd'] == '':
+				raise Exception, 'blank'
+			else:
+				pwd = form['snmp_priv_passwd']
+		fencedev.addAttribute('snmp_priv_passwd', pwd)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_priv_passwd')
+		except:
+			pass
+
+	try:
+		pwd_script = form['snmp_priv_passwd_script'].strip()
+		if not pwd_script:
+			raise Exception, 'blank'
+		fencedev.addAttribute('snmp_priv_passwd_script', pwd_script)
+		has_passwd = True
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_priv_passwd_script')
+		except:
+			pass
+
+	try:
+		snmp_version = form['snmp_version'].strip()
+		if not snmp_version in ('1', '2c', '3'):
+			snmp_version = None
+			raise Exception, 'blank'
+		fencedev.addAttribute('snmp_version', snmp_version)
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_version')
+		except:
+			pass
+
+	try:
+		snmp_sec_level = form['snmp_sec_level'].strip()
+		if not snmp_sec_level in ('noAuthNoPriv', 'authNoPriv', 'authPriv'):
+			snmp_sec_level = None
+			raise Exception, 'blank'
+		fencedev.addAttribute('snmp_sec_level', snmp_sec_level)
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_sec_level')
+		except:
+			pass
+
+	try:
+		snmp_auth_prot = form['snmp_auth_prot'].strip()
+		if not snmp_auth_prot in ('MD5', 'SHA'):
+			snmp_auth_prot = None
+			raise Exception, 'blank'
+		fencedev.addAttribute('snmp_auth_prot', snmp_auth_prot)
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_auth_prot')
+		except:
+			pass
+
+	try:
+		snmp_priv_prot = form['snmp_priv_prot'].strip()
+		if not snmp_priv_prot in ('DES', 'AES'):
+			snmp_priv_prot = None
+			raise Exception, 'blank'
+		fencedev.addAttribute('snmp_priv_prot', snmp_priv_prot)
+	except Exception, e:
+		try:
+			fencedev.removeAttribute('snmp_priv_prot')
+		except:
+			pass
+
+	return errors
+
 def val_noop_fd(dummy, _dummy):
 	return []
 
@@ -1103,6 +1364,106 @@
 
 	return errors
 
+def val_ilo_mp_fd(form, fencedev):
+	errors = list()
+
+	try:
+		hostname = form['ipaddr'].strip()
+		if not hostname:
+			raise Exception, 'blank'
+		fencedev.addAttribute('ipaddr', hostname)
+	except Exception, e:
+		errors.append(FD_PROVIDE_HOSTNAME)
+
+	try:
+		log = form['login'].strip()
+		if not log:
+			raise Exception, 'blank'
+		fencedev.addAttribute('login', log)
+	except Exception, e:
+		errors.append(FD_PROVIDE_LOGIN)
+
+	try:
+		power_wait = form['power_wait'].strip()
+		if power_wait:
+			power_wait = int(power_wait)
+			if power_wait < 0:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		power_wait = None
+	except Exception, e:
+		power_wait = None
+		errors.append('An invalid value for power_wait was given: "%s"' % form['power_wait'])
+	if power_wait:
+		fencedev.addAttribute('power_wait', str(power_wait))
+	else:
+		fencedev.removeAttribute('power_wait')
+
+	has_passwd = False
+	try:
+		pwd = form['passwd'].strip()
+		if not pwd:
+			# Allow passwords that consist of only spaces.
+			if not form.has_key('passwd') or form['passwd'] == '':
+				raise Exception, 'blank'
+			else:
+				pwd = form['passwd']
+		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)
+
+	use_ssh = form.has_key('secure') and (form['secure'] == '1' or form['secure'].lower() == 'true')
+	if use_ssh:
+		fencedev.addAttribute('secure', '1')
+	else:
+		fencedev.removeAttribute('secure')
+
+	try:
+		ipport = form['ipport'].strip()
+		if ipport:
+			ipport = int(ipport)
+			if ipport < 1 or ipport & 0xffff != ipport:
+				raise ValueError
+	except (KeyError, AttributeError), e:
+		ipport = None
+	except Exception, e:
+		ipport = None
+		errors.append('An invalid value for ipport was given: "%s"' % form['ipport'])
+	if ipport:
+		fencedev.addAttribute('ipport', str(ipport))
+	else:
+		fencedev.removeAttribute('ipport')
+
+	try:
+		cmd_prompt = form['cmd_prompt'].strip()
+	except Exception, e:
+		cmd_prompt = None
+	if cmd_prompt:
+		fencedev.addAttribute('cmd_prompt', cmd_prompt)
+	else:
+		fencedev.removeAttribute('cmd_prompt')
+
+	return errors
+
 FD_VALIDATE = {
 	'fence_apc':			val_apc_fd,
 	'fence_wti':			val_wti_fd,
@@ -1115,10 +1476,14 @@
 	'fence_egenera':		val_egenera_fd,
 	'fence_bullpap':		val_bullpap_fd,
 	'fence_lpar':			val_lpar_fd,
+	'fence_ucs':			val_ucs_fd,
+	'fence_cisco_mds':		val_cisco_mds_fd,
+	'fence_ifmib':			val_cisco_mds_fd,
 	'fence_vmware':			val_vmware_fd,
 	'fence_xvm':			val_noop_fd,
 	'fence_scsi':			val_noop_fd,
 	'fence_ilo':			val_ilo_fd,
+	'fence_ilo_mp':			val_ilo_mp_fd,
 	'fence_ipmilan':		val_ipmilan_fd,
 	'fence_drac':			val_drac_fd,
 	'fence_drac5':			val_drac_fd,
@@ -1417,6 +1782,32 @@
 
 	return errors
 
+def val_cisco_mds_fi(form, fenceinst):
+	errors = list()
+
+	try:
+		port = form['port'].strip()
+		if not port:
+			raise Exception, 'blank'
+		fenceinst.addAttribute('port', port)
+	except Exception, e:
+		errors.append(FI_PROVIDE_PORT)
+
+	return errors
+
+def val_ucs_fi(form, fenceinst):
+	errors = list()
+
+	try:
+		port = form['port'].strip()
+		if not port:
+			raise Exception, 'blank'
+		fenceinst.addAttribute('port', port)
+	except Exception, e:
+		errors.append(FI_PROVIDE_PORT)
+
+	return errors
+
 def val_manual_fi(form, fenceinst):
 	nodename = form.get('nodename')
 	if nodename:
@@ -1441,8 +1832,12 @@
 	'fence_xvm':			val_xvm_fi,
 	'fence_scsi':			val_scsi_fi,
 	'fence_lpar':			val_lpar_fi,
+	'fence_ucs':			val_ucs_fi,
+	'fence_cisco_mds':		val_cisco_mds_fi,
+	'fence_ifmib':			val_cisco_mds_fi,
 	'fence_vmware':			val_vmware_fi,
 	'fence_ilo':			val_noop_fi,
+	'fence_ilo_mp':			val_noop_fi,
 	'fence_ipmilan':		val_noop_fi,
 	'fence_drac':			val_noop_fi,
 	'fence_drac5':			val_noop_fi,
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py	2009/05/21 13:32:04	1.1.4.19
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py	2010/09/29 17:08:25	1.1.4.20
@@ -682,6 +682,10 @@
 		clumap['pfd'] = pfd
 		clumap['skip_undefined'] = fdp.getSkipUndefined()
 
+		if model.get_cluster_broadcast() is True:
+			clumap['is_bcast'] = 'True'
+		else:
+			clumap['is_bcast'] = 'False'
 		#-------------
 		#if multicast
 		multicast_url = '%stab=%s' % (prop_baseurl, PROP_MCAST_TAB)
--- conga/luci/site/luci/Extensions/LuciValidation.py	2010/08/06 23:54:12	1.6.2.16
+++ conga/luci/site/luci/Extensions/LuciValidation.py	2010/09/29 17:08:25	1.6.2.17
@@ -390,6 +390,29 @@
 			resObj.addAttribute('__independent_subtree', '1')
 		else:
 			resObj.removeAttribute('__independent_subtree')
+
+		if dummy_form.has_key('__independent_subtree_noncritical'):
+			resObj.addAttribute('__independent_subtree', '2')
+
+			if dummy_form.has_key('__max_restarts'):
+				try:
+					resObj.addAttribute('__max_restarts', str(int(dummy_form['__max_restarts'])))
+				except:
+					resObj.removeAttribute('__max_restarts')
+			else:
+				resObj.removeAttribute('__max_restarts')
+
+			if dummy_form.has_key('__restart_expire_time'):
+				try:
+					resObj.addAttribute('__restart_expire_time', str(int(dummy_form['__restart_expire_time'])))
+				except:
+					resObj.removeAttribute('__restart_expire_time')
+			else:
+				resObj.removeAttribute('__restart_expire_time')
+		else:
+			resObj.removeAttribute('__restart_expire_time')
+			resObj.removeAttribute('__max_restarts')
+
 		form_hash[form_id]['obj'] = resObj
 
 	if len(errors) > 0:
@@ -663,16 +686,21 @@
 	errors = list()
 	try:
 		mcast_val = form['mcast'].strip().lower()
-		if mcast_val != 'true' and mcast_val != 'false':
+		if mcast_val not in ('true', 'false', 'broadcast'):
 			raise KeyError, mcast_val
 		if mcast_val == 'true':
 			mcast_manual = True
-		else:
+		elif mcast_val == 'false':
 			mcast_manual = False
+		elif mcast_val == 'broadcast':
+			model.del_cluster_multicast()
+			model.set_cluster_broadcast()
+			return (True, {})
 	except KeyError, e:
 		errors.append('An invalid multicast selection was made')
 		return (False, {'errors': errors})
 
+	model.del_cluster_broadcast()
 	mcast_interface = None
 	if form.has_key('mcast_interface'):
 		mcast_interface = form['mcast_interface'].strip()
--- conga/luci/site/luci/Extensions/conga_storage_constants.py	2008/01/23 04:44:32	1.8.2.2
+++ conga/luci/site/luci/Extensions/conga_storage_constants.py	2010/09/29 17:08:25	1.8.2.3
@@ -80,7 +80,7 @@
 	'fstab':					'List in /etc/fstab',
 	'fstabpoint':				'/etc/fstab Mountpoint',
 	'gfs_fsname':				'Unique GFS Name',
-	'has_journal':				'Journaling Enabled - ext3',
+	'has_journal':				'Journaling Enabled - ext3, ext4',
 	'journals_num':				'Number of Journals',
 	'journal_size':				'Journal Size',
 	'label':					'Label',
--- conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py	2010/08/05 17:33:05	1.5.2.4
+++ conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py	2010/09/29 17:08:25	1.5.2.5
@@ -25,12 +25,16 @@
 	'fence_xvm':			'Virtual Machine Fencing',
 	'fence_scsi':			'SCSI Reservation',
 	'fence_ilo':			'HP iLO Device',
+	'fence_ilo_mp':			'HP iLO MP',
 	'fence_ipmilan':		'IPMI Lan',
 	'fence_drac':			'Dell DRAC',
 	'fence_rsa':			'IBM RSA II Device',
 	'fence_rps10':			'RPS10 Serial Switch',
 	'fence_lpar':			'LPAR Fencing',
 	'fence_vmware':			'VMware Fencing',
+	'fence_cisco_mds':		'Cisco MDS',
+	'fence_ucs':			'Cisco UCS',
+	'fence_ifmib':			'IF MIB',
 	'fence_manual':			'Manual Fencing'
 }
 
@@ -49,7 +53,11 @@
 	'fence_scsi':			True,
 	'fence_lpar':			True,
 	'fence_vmware':			True,
+	'fence_cisco_mds':		True,
+	'fence_ucs':			True,
+	'fence_ifmib':			True,
 	'fence_ilo':			False,
+	'fence_ilo_mp':			False,
 	'fence_ipmilan':		False,
 	'fence_drac':			False,
 	'fence_rsa':			False,
@@ -92,6 +100,9 @@
 	'fence_scsi':			( 'node' ),
 	'fence_lpar':			( 'partition' ),
 	'fence_vmware':			( 'port' ),
+	'fence_cisco_mds':		( 'port' ),
+	'fence_ucs':			( 'port' ),
+	'fence_ifmib':			( 'port' ),
 	'fence_ilo':			( ),
 	'fence_ipmilan':		( ),
 	'fence_drac':			( ),
@@ -127,10 +138,18 @@
 		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_vmware':
 		( 'name', 'ipaddr', 'login', 'passwd', 'vmlogin', 'vmpasswd' ),
+	'fence_cisco_mds':
+		( 'name', 'ipaddr', 'login', 'passwd' ),
+	'fence_ucs':
+		( 'name', 'ipaddr', 'login', 'passwd' ),
+	'fence_ifmib':
+		( 'name', 'ipaddr', 'login', 'passwd' ),
 	'fence_scsi':
 		( 'name' ),
 	'fence_ilo':
 		( 'name', 'hostname', 'login', 'passwd' ),
+	'fence_ilo_mp':
+		( 'name', 'ipaddr', 'login', 'passwd', 'ipport', 'secure', 'cmd_prompt' ),
 	'fence_ipmilan':
 		( 'name', 'ipaddr', 'login', 'passwd', 'lanplus', 'auth' ),
 	'fence_drac':
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2010/08/06 23:54:12	1.1.4.15
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2010/09/29 17:08:25	1.1.4.16
@@ -1020,6 +1020,25 @@
           node.removeChild(node_child)
           break
 
+  def set_cluster_broadcast(self):
+    if self.del_cluster_multicast() is False:
+      return False
+    broadcast = self.CMAN_ptr.addAttribute('broadcast', 'yes')
+
+  def del_cluster_broadcast(self):
+    if self.CMAN_ptr is None:
+      return False
+    self.CMAN_ptr.removeAttribute('broadcast')
+    self.isModified = True
+
+  def get_cluster_broadcast(self):
+    if self.CMAN_ptr is None:
+      return False
+    broadcast = self.CMAN_ptr.getAttribute('broadcast')
+    if broadcast and broadcast.lower() in ('1', 'true', 'yes'):
+        return True
+    return False
+
   def del_cluster_multicast(self):
     if self.CMAN_ptr is None:
       return False
--- conga/ricci/Makefile	2008/01/17 17:38:36	1.11.2.2
+++ conga/ricci/Makefile	2010/09/29 17:08:26	1.11.2.3
@@ -33,6 +33,7 @@
 	${MAKE} -C modules install
 	${MAKE} -C init.d install
 	${MAKE} -C pam.d install
+	${MAKE} -C docs install
 	${INSTALL_DIR} ${docdir}/ricci-${VERSION}/
 	${INSTALL_FILE} COPYING ${docdir}/ricci-${VERSION}/
 
/cvs/cluster/conga/ricci/docs/Makefile,v  -->  standard output
revision 1.2.2.1
--- conga/ricci/docs/Makefile
+++ -	2010-09-29 17:08:31.840720000 +0000
@@ -0,0 +1,8 @@
+include ../make/defines.mk
+
+all:
+	@true
+
+install:
+	install -d ${mandir}/man8
+	install ricci.8 ${mandir}/man8



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-09-29 17:08 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-08 21:57 [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ rmccabe
  -- strict thread matches above, loose matches on Subject: below --
2008-02-27 20:22 rmccabe
2008-03-12 15:13 rmccabe
2008-07-14 21:52 rmccabe
2008-08-07 18:08 rmccabe
2008-09-18 15:20 rmccabe
2009-02-16 17:23 rmccabe
2009-03-24 20:06 rmccabe
2009-04-15 16:07 rmccabe
2009-04-27 21:03 rmccabe
2009-05-14 21:05 rmccabe
2009-05-21 13:33 rmccabe
2010-09-29 17:08 rmccabe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).