FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Cluster Development

 
 
LinkBack Thread Tools
 
Old 02-08-2008, 08:57 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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&r 1=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=RHEL 5&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=RHEL 5&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=RHE L5&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_ta g=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&r 1=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=RHEL 5&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('
'));
+ 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().flushBrowser IdCookie()
+ 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>
 
Old 07-14-2008, 09:52 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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_t ag=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 pythonclusterinfo.get('label') or not clusterinfo.get('device')) and ' or 'disabled';
+ checked pythonclusterinfo.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");
}
}
}
 
Old 08-07-2008, 06:08 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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&onl y_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_t ag=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&r 1=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=RHEL 5&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 pythonclusterinfo.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 pythonclusterinfo.get('label') or not clusterinfo.get('device')) and ' or 'disabled';
- checked pythonclusterinfo.get('label') or not clusterinfo.get('label')) and 'checked' or ';
+ disabled pythonnot 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
 
Old 09-18-2008, 03:20 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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_t ag=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&r 1=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
 
Old 02-16-2009, 04:23 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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_t ag=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)
 
Old 03-24-2009, 07:06 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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=RHEL 5&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 pythonnot 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 pythonsinfo 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
 
Old 09-29-2010, 05:08 PM
 
Default conga ./conga.spec.in.in luci/cluster/cluster_ ...

CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe@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_ta g=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_t ag=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=RH EL5&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_t ag=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&on ly_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&r 1=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="pythons_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 pythoncur_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"
- talmit-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"
- talmit-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 pythoncur_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 pythoncur_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"
- talmit-tag="exists: cur_fence_dev_id">
- <div id="fence_lpar_instance" name="fence_lpar" class="fencedev_instance"
- talmit-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="stringefault"
+ 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="stringefault"
+ 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="stringefault"
+ tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+ <option value=""
+ tal:content="stringefault"
+ 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="stringefault"
+ tal:attributes="selected python: snmp_priv_prot == 'default' and 'selected'"/>
+ <option value="DES"
+ tal:content="stringES"
+ 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="stringefault"
+ 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="stringefault"
+ 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="stringefault"
+ tal:attributes="selected python: snmp_auth_prot == 'default' and 'selected'"/>
+
+ <option value=""
+ tal:content="stringefault"
+ 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="stringefault"
+ tal:attributes="selected python: snmp_priv_prot == 'default' and 'selected'"/>
+ <option value="DES"
+ tal:content="stringES"
+ 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"
+ talmit-tag="exists: cur_fence_dev_id">
+
+ <div id="fence_apc_instance" name="fence_apc" class="fencedev_instance"
+ talmit-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 pythoncur_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"
+ talmit-tag="exists: cur_fence_dev_id">
+ <div id="fence_lpar_instance" name="fence_lpar" class="fencedev_instance"
+ talmit-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"
+ talmit-tag="exists: cur_fence_dev_id">
+ <div id="fence_ucs_instance" name="fence_ucs" class="fencedev_instance"
+ talmit-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"
+ talmit-tag="exists: cur_fence_dev_id">
+ <div id="fence_ifmib_instance" name="fence_ifmib" class="fencedev_instance"
+ talmit-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"
+ talmit-tag="exists: cur_fence_dev_id">
+ <div id="fence_cisco_mds_instance" name="fence_cisco_mds" class="fencedev_instance"
+ talmit-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 pythonisubtree in ['1', 'true', 'True', True, 1]) and 'checked' or None" />
+ tal:attributes="checked pythonisubtree 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 pythonisubtree 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_noncriti cal'):
+ 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/define
 

Thread Tools




All times are GMT. The time now is 07:01 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org