[Cluster-devel] conga/luci cluster/fence_device.js cluster/for ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Wed Jan 10 22:53:58 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe at sourceware.org 2007-01-10 22:53:56
Modified files:
luci/cluster : fence_device.js form-macros
luci/homebase : luci_homebase.css
luci/site/luci/Extensions: cluster_adapters.py
conga_constants.py
homebase_adapters.py
Log message:
fixes related to bz212021
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence_device.js.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/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.13&r2=1.90.2.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/luci_homebase.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.28.2.3&r2=1.28.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.16&r2=1.120.2.17
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.5&r2=1.19.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.34.2.10&r2=1.34.2.11
--- conga/luci/cluster/fence_device.js 2006/12/12 13:37:24 1.2.2.1
+++ conga/luci/cluster/fence_device.js 2007/01/10 22:53:56 1.2.2.2
@@ -1,3 +1,46 @@
+var num_fences_level = Array(0, 0)
+var num_fence_instances = new Array()
+
+function del_fence_instance(fi_div_id) {
+ delete_element_id(fi_div_id);
+}
+
+function del_fence(fence_id) {
+ delete_element_id(fence_id);
+}
+
+function add_fence_instance(fi_cont_id, fence_type) {
+ var instance_div = document.getElementById(fi_cont_id + '_instances');
+ if (!instance_div)
+ return (-1);
+
+ var fi_form = document.getElementById(fence_type + '_instance');
+ if (fi_form) {
+ var cloned_iform = fi_form.cloneNode(1);
+ var fencei_name = fi_cont_id + '_' + num_fence_instances[fi_cont_id]++;
+ cloned_iform.id = fencei_name;
+ cloned_iform.name = fencei_name;
+ cloned_iform.className = 'fence_instance';
+
+ var form_elem = document.createElement('form');
+ form_elem.name = cloned_iform.id;
+ form_elem.appendChild(cloned_iform);
+ var ielem = cloned_iform.getElementsByTagName('input');
+ for (var i = 0 ; i < ielem.length ; i++) {
+ if (ielem[i].name == 'parent_fencedev') {
+ ielem[i].value = fi_cont_id;
+ } else if ( ielem[i].type == 'button' &&
+ ielem[i].name == 'remove_fence')
+ {
+ ielem[i].setAttribute('onclick',
+ 'del_fence_instance(\'' + cloned_iform.id + '\')');
+ }
+ }
+
+ instance_div.appendChild(form_elem);
+ }
+}
+
function swap_fence_div(container_id, element_id) {
var container_element = document.getElementById(container_id);
if (!container_element) {
@@ -25,14 +68,13 @@
var fence_id = fence_opt.value;
var child_element = document.getElementById(fence_id);
- if (container_element.firstChild)
- container_element.removeChild(container_element.firstChild);
-
if (!child_element)
return (-1);
+ if (container_element.firstChild)
+ container_element.removeChild(container_element.firstChild);
var target = child_element.cloneNode(1);
- target.id = null;
+ target.id = '';
var fence_type = fence_id;
if (fence_opt.className.match(/shared_fencedev/)) {
@@ -46,13 +88,66 @@
}
}
+ var target_form = document.createElement('form');
+ target_form.name = container_element.id;
+ target_form.appendChild(target);
+ container_element.appendChild(target_form);
+
var fi_form = document.getElementById(fence_type + '_instance');
- if (fi_form)
- target.appendChild(fi_form.cloneNode(1));
- container_element.appendChild(target);
-}
+ var sharable = 0;
+ if (fi_form) {
+ var idiv = document.createElement('div');
+ idiv.id = container_id + '_instances';
+ idiv.name = idiv.id;
+
+ var cloned_iform = fi_form.cloneNode(1);
+ cloned_iform.id = container_id + '_0';
+ cloned_iform.name = cloned_iform.id;
+ cloned_iform.className = 'fence_instance';
+
+ var form_elem = document.createElement('form');
+ form_elem.name = cloned_iform.id;
+ form_elem.appendChild(cloned_iform);
+ var ielem = cloned_iform.getElementsByTagName('input');
+ for (var i = 0 ; i < ielem.length ; i++) {
+ if (ielem[i].name == 'parent_fencedev') {
+ ielem[i].value = container_id;
+ } else if ( ielem[i].type == 'button'
+ && ielem[i].name == 'remove_fence')
+ {
+ ielem[i].setAttribute('onclick',
+ 'del_fence_instance(\'' + cloned_iform.id + '\')');
+ }
+ }
+ idiv.appendChild(form_elem);
+ container_element.appendChild(idiv);
+ num_fence_instances[container_id] = 1;
+ sharable++;
+ }
-var num_fences_level = Array(0, 0)
+ var remove_div = document.createElement('div');
+ remove_div.className = 'hbSubmit';
+
+ var remove_button = document.createElement('input');
+ remove_button.setAttribute('type', 'button');
+ remove_button.setAttribute('value', 'Remove this device');
+ remove_button.setAttribute('onclick', "del_fence('" + container_element.id + "');");
+
+ if (sharable) {
+ var add_instance_button = document.createElement('input');
+ add_instance_button.setAttribute('type', 'button');
+ add_instance_button.setAttribute('name', 'add_fence_inst');
+ add_instance_button.setAttribute('value', 'Add an instance');
+ add_instance_button.setAttribute('onclick', "add_fence_instance('" + container_element.id + "','" + fence_type + "');");
+ add_instance_button.className = 'pad_left';
+ }
+
+ var remove_form = document.createElement('form');
+ remove_form.appendChild(remove_button);
+ remove_form.appendChild(add_instance_button);
+ remove_div.appendChild(remove_form);
+ container_element.appendChild(remove_div);
+}
function add_node_fence_device(fence_level) {
var cont_name = 'fence_list_level' + fence_level;
@@ -67,9 +162,10 @@
var div_elem = document.createElement('div');
if (!div_elem)
return (-1);
- var level_num_fences = num_fences_level[fence_level];
+ var level_num_fences = num_fences_level[fence_level - 1];
div_elem.id = 'fence' + fence_level + '_' + level_num_fences;
+ div_elem.className = 'fence_level';
chooser_elem = chooser_elem.cloneNode(1);
chooser_elem.id = null;
chooser_elem.className = null;
@@ -91,5 +187,44 @@
div_elem.appendChild(chooser_elem);
container.appendChild(div_elem);
- num_fences_level[fence_level]++;
+ num_fences_level[fence_level - 1]++;
+}
+
+function validate_fence(master_form, container_id) {
+ var errors = new Array();
+ var div_elem = document.getElementById(container_id);
+ if (!div_elem)
+ return (-1);
+ var form_xml = '';
+
+ var form = div_elem.getElementsByTagName('form');
+ for (var i = 0 ; i < form.length ; i++) {
+ var input_elem = form[i].getElementsByTagName('input');
+ var temp = '';
+ for (var j = 0 ; j < input_elem.length ; j++) {
+ var res_type = input_elem[j].type;
+ if (res_type == 'hidden' || res_type == 'text' ||
+ res_type == 'password')
+ {
+ temp += '<input type="' + res_type + '" name="' + input_elem[j].name + '" value="' + input_elem[j].value + '" />';
+ } else if (res_type == 'checkbox' || res_type == 'radio') {
+ if (input_elem[j].checked)
+ temp += '<input type="' + res_type + '" name="' + input_elem[j].name + '" checked="checked"';
+ if (res_type == 'radio')
+ temp += ' value="' + input_elem[j].value + '"';
+ temp += ' />';
+ }
+ }
+ var select_elem = form[i].getElementsByTagName('select');
+ for (var j = 0 ; j < select_elem.length ; j++) {
+ temp += '<input type="text" name="' + select_elem[j].name + '" value="' + select_elem[j].options[select_elem[j].options.selectedIndex].value + '" />';
+ }
+
+ form_xml += '<form id="' + form[i].getAttribute('name') + '">' + temp + '</form>';
+ }
+
+ master_form.fence_xml.value = '<formlist>' + form_xml + '</formlist>';
+
+ if (confirm('Update this node\'s fence configuration?'))
+ master_form.submit();
}
--- conga/luci/cluster/form-macros 2007/01/04 00:22:13 1.90.2.13
+++ conga/luci/cluster/form-macros 2007/01/10 22:53:56 1.90.2.14
@@ -1166,6 +1166,7 @@
</div>
<div metal:define-macro="shared-fence-option-list">
+ <option>Select a shared fence device</option>
<option name="fence_apc" value="fence_apc">APC Power Switch</option>
<option name="fence_wti" value="fence_wti">WTI Power Switch</option>
<option name="fence_brocade" value="fence_brocade">Brocade Fabric Switch</option>
@@ -1182,6 +1183,7 @@
</div>
<div metal:define-macro="fence-option-list">
+ <option>Select a fence device</option>
<option name="fence_apc" value="fence_apc">APC Power Switch</option>
<option name="fence_wti" value="fence_wti">WTI Power Switch</option>
<option name="fence_brocade" value="fence_brocade">Brocade Fabric Switch</option>
@@ -1202,6 +1204,31 @@
<option name="fence_manual" value="fence_manual">Manual Fencing</option>
</div>
+<div metal:define-macro="fence-form-unknown"
+ tal:attributes="id cur_fencedev/name | nothing">
+
+ <div id="fence_unknown" class="fencedev">
+ <table>
+ <tr>
+ <td><strong class="cluster">Fence Type</strong></td>
+ <td>[unknown]</td>
+ </tr>
+ <tr>
+ <td>Name</td>
+ <td>
+ <span tal:replace="cur_fencedev/name | nothing" />
+ </td>
+ </tr>
+ </table>
+
+ <tal:block tal:condition="exists: cur_fencedev">
+ <input type="hidden" name="existing_device" value="1" />
+ <input type="hidden" name="old_name"
+ tal:attributes="value cur_fencedev/name | nothing" />
+ </tal:block>
+ </div>
+</div>
+
<div metal:define-macro="fence-form-apc"
tal:attributes="id cur_fencedev/name | nothing">
@@ -1223,7 +1250,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/ipaddr | nothing" />
@@ -1241,7 +1268,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1249,15 +1276,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-apc" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1290,7 +1308,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fendev/ipaddr | nothing" />
@@ -1308,7 +1326,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1316,15 +1334,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-mcdata" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1357,7 +1366,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/ipaddr | nothing" />
@@ -1366,7 +1375,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1374,15 +1383,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-wti" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1427,7 +1427,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="value cur_fencedev/passwd | nothing" />
</td>
</tr>
@@ -1462,7 +1462,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="value cur_fencedev/ipaddr | nothing" />
</td>
</tr>
@@ -1476,7 +1476,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="value cur_fencedev/passwd | nothing" />
</td>
</table>
@@ -1524,7 +1524,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="value cur_fencedev/passwd | nothing" />
</td>
</tr>
@@ -1561,7 +1561,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/ipaddr | nothing" />
@@ -1579,7 +1579,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1587,15 +1587,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-brocade" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1627,7 +1618,12 @@
</tr>
<tr>
<td>IP Address</td>
- <td><input name="hostname" type="text"/></td>
+ <td>
+ <input name="hostname" type="text"
+ tal:attributes="
+ disabled cur_fencedev/isShared | nothing;
+ value cur_fencedev/hostname | nothing" />
+ </td>
</tr>
<tr>
<td>Login</td>
@@ -1641,7 +1637,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1649,15 +1645,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-sanbox2" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1690,7 +1677,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/ipaddr | nothing" />
@@ -1699,7 +1686,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1707,15 +1694,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-brocade" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1756,15 +1734,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-gnbd" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1814,15 +1783,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-egenera" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -1853,7 +1813,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="value cur_fencedev/ipaddr | nothing" />
</td>
</tr>
@@ -1867,7 +1827,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="value cur_fencedev/passwd | nothing" />
</td>
</tr>
@@ -1879,6 +1839,7 @@
tal:attributes="value cur_fencedev/name | nothing" />
</tal:block>
+ <input type="hidden" name="sharable" value="1" />
<input type="hidden" name="fence_type" value="fence_bladecenter" />
</div>
</div>
@@ -1904,7 +1865,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/ipaddr | nothing" />
@@ -1922,7 +1883,7 @@
<tr>
<td>Password</td>
<td>
- <input name="password" type="password" autocomplete="off"
+ <input name="passwd" type="password" autocomplete="off"
tal:attributes="
disabled cur_fencedev/isShared | nothing;
value cur_fencedev/passwd | nothing" />
@@ -1930,15 +1891,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-bullpap" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -2012,15 +1964,6 @@
</tr>
</table>
- <div name="instances">
- <tal:block tal:condition="exists: cur_fence_instances">
- <tal:block tal:repeat="cur_instance cur_fence_instances">
- <tal:block
- metal:use-macro="here/form-macros/macros/fence-instance-form-xvm" />
- </tal:block>
- </tal:block>
- </div>
-
<tal:block tal:condition="exists: cur_fencedev">
<input type="hidden" name="existing_device" value="1" />
<input type="hidden" name="old_name"
@@ -2082,7 +2025,7 @@
<tr>
<td>IP Address</td>
<td>
- <input name="ip_addr" type="text"
+ <input name="ipaddr" type="text"
tal:attributes="value cur_fencedev/ipaddr | nothing" />
</td>
</tr>
@@ -2104,6 +2047,14 @@
<td>Authentication Type</td>
<td><input name="auth_type" type="text" Title="Options are to leave blank for none, password, md2, or md5"/></td>
</tr>
+ <tr>
+ <td>Use Lanplus</td>
+ <td>
+ <input name="lanplus" type="checkbox"
+ tal:attributes="checked cur_fencedev/lanplus | nothing"
+ />
+ </td>
+ </tr>
</table>
<tal:block tal:condition="exists: cur_fencedev">
@@ -2219,8 +2170,11 @@
</tal:block>
</div>
-<div metal:define-macro="fence-instance-form-apc">
- <div id="fence_apc_instance" name="fence_apc" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-apc"
+ tal:omit-tag="exists: cur_fence_dev_id">
+
+ <div id="fence_apc_instance" name="fence_apc" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2230,21 +2184,39 @@
</td>
</tr>
<tr>
- <td>Switch</td>
+ <td>Switch (optional)</td>
<td>
<input name="switch" type="text"
tal:attributes="value cur_instance/switch | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-egenera">
- <div id="fence_egenera_instance" name="fence_egenera" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-egenera"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_egenera_instance" name="fence_egenera" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>lpan</td>
@@ -2260,15 +2232,33 @@
tal:attributes="value cur_instance/pserver | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-wti">
- <div id="fence_wti_instance" name="fence_wti" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-wti"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_wti_instance" name="fence_wti" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2277,15 +2267,33 @@
tal:attributes="value cur_instance/port | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-brocade">
- <div id="fence_brocade_instance" name="fence_brocade" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-brocade"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_brocade_instance" name="fence_brocade" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2294,15 +2302,33 @@
tal:attributes="value cur_instance/port | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-vixel">
- <div id="fence_vixel_instance" name="fence_vixel" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-vixel"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_vixel_instance" name="fence_vixel" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2311,15 +2337,33 @@
tal:attributes="value cur_instance/port | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-sanbox2">
- <div id="fence_sanbox2_instance" name="fence_sanbox2" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-sanbox2"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_sanbox2_instance" name="fence_sanbox2" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2328,15 +2372,33 @@
tal:attributes="value cur_instance/port | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-mcdata">
- <div id="fence_mcdata_instance" name="fence_mcdata" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-mcdata"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_mcdata_instance" name="fence_mcdata" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Port</td>
@@ -2345,15 +2407,33 @@
tal:attributes="value cur_instance/port | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-gndb">
- <div id="fence_gnbd_instance" name="fence_gnbd" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-gndb"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_gnbd_instance" name="fence_gnbd" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>IP Address</td>
@@ -2362,32 +2442,68 @@
tal:attributes="value cur_instance/ipaddress | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-bladecenter">
- <div id="fence_bladecenter_instance" name="fence_bladecenter" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-bladecenter"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_bladecenter_instance" name="fence_bladecenter" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Blade</td>
<td>
- <input name="ipaddress" type="text"
- tal:attributes="value cur_instance/ipaddress | nothing" />
+ <input name="blade" type="text"
+ tal:attributes="value cur_instance/blade | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-bullpap">
- <div id="fence_bullpap_instance" name="fence_bullpap" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-bullpap"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_bullpap_instance" name="fence_bullpap" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Domain</td>
@@ -2396,15 +2512,55 @@
tal:attributes="value cur_instance/domain | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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-scsi"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_scsi_instance" name="fence_scsi" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <table>
+ <tr>
+ <td>Node name</td>
+ <td>
+ <input type="text" name="nodename" disabled="disabled"
+ tal:attributes="value request/nodename | nothing" />
+ </td>
+ </tr>
</table>
+
+ <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-xvm">
- <div id="fence_xvm_instance" name="fence_xvm" class="fencedev_instance">
+<div metal:define-macro="fence-instance-form-xvm"
+ tal:omit-tag="exists: cur_fence_dev_id">
+ <div id="fence_xvm_instance" name="fence_xvm" class="fencedev_instance"
+ tal:omit-tag="exists: cur_fence_dev_id">
<table>
<tr>
<td>Domain</td>
@@ -2413,10 +2569,26 @@
tal:attributes="value cur_instance/domain | nothing" />
</td>
</tr>
- <input tal:condition="exists: cur_instance"
- type="hidden" name="existing_instance" value="1" />
- <input type="hidden" name="parent_fencedev" value="" />
+ <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="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>
@@ -2440,13 +2612,82 @@
<tal:block
metal:use-macro="here/form-macros/macros/fence-instance-form-bullpap" />
<tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-scsi" />
+ <tal:block
metal:use-macro="here/form-macros/macros/fence-instance-form-xvm" />
<tal:block
metal:use-macro="here/form-macros/macros/fence-instance-form-bladecenter" />
</div>
+<div metal:define-macro="fencedev-instance-cond-ladder"
+ tal:condition="exists: cur_fence_type">
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_apc'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-apc" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_mcdata'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-mcdata" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_wti'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-wti" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_brocade'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-brocade" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_sanbox2'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-sanbox2" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_vixel'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-vixel" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_gnbd'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-gnbd" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_egenera'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-egenera" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_bullpap'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-bullpap" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_scsi'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-scsi" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_xvm'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-xvm" />
+ </tal:block>
+
+ <tal:block tal:condition="python: cur_fence_type == 'fence_bladecenter'">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fence-instance-form-bladecenter" />
+ </tal:block>
+</div>
+
<div metal:define-macro="node-form">
<script type="text/javascript"
+ src="/luci/homebase/homebase_common.js">
+ </script>
+ <script type="text/javascript"
src="/luci/cluster/fence_device.js">
</script>
<script type="text/javascript">
@@ -2647,13 +2888,6 @@
</div>
<table id="fence_devices" class="cluster node fence">
- <tfoot class="fence">
- <tr class="cluster node fence"><td class="cluster node fence">
- <input type="button" value="Update fence properties"
- onClick="validate_fence_properties('fence_devices')" />
- </td></tr>
- </tfoot>
-
<tbody class="fence">
<tr class="cluster node info_top fence">
<td class="cluster node fence">
@@ -2661,6 +2895,7 @@
<strong class="cluster node">Main Fencing Method</strong>
</span>
</td>
+
<td class="cluster node fence_backup">
<span class="fence">
<strong class="cluster node">Backup Fencing Method</strong>
@@ -2671,46 +2906,132 @@
<tr class="cluster node info_top fence">
<td class="cluster node fence_main fence">
<div class="fence_container">
+
<div id="fence_list_level1" tal:define="global cur_fence_num python: 0">
<tal:block tal:condition="exists: fenceinfo/level1">
- <tal:block tal:repeat="cur_fencedev fenceinfo/level1">
+
+ <div class="fence_level"
+ tal:repeat="cur_fencedev fenceinfo/level1"
+ tal:attributes="id python: 'fence1_' + str(cur_fence_num)">
+
<tal:block tal:define="
- cur_fence_instances cur_fencedev/instance_list | nothing;
+ cur_fence_dev_id python: 'fence1_' + str(cur_fence_num);
cur_fence_type cur_fencedev/agent | nothing;
- cur_fence_level python: 1;">
- <div tal:attributes="id python: 'fence1_' + str(cur_fence_num)">
- <tal:block
- metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
+ cur_fence_level python: 1">
+
+ <form tal:attributes="name cur_fence_dev_id | string:[unknown]">
+ <tal:block metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
+ </form>
+
+ <tal:block
+ tal:define="global cur_instance_num python:0" />
+
+ <div tal:attributes="id python: cur_fence_dev_id + '_instances'">
+ <tal:block tal:condition="exists: cur_fencedev/instance_list">
+ <tal:block tal:replace="structure python: '<script type='+chr(0x22)+'text/javascript'+chr(0x22)+'>num_fence_instances[\'' + cur_fence_dev_id + '\'] = ' + str(len(cur_fencedev['instance_list'])) + ';</script>'" />
+ <tal:block tal:repeat="cur_instance cur_fencedev/instance_list">
+ <tal:block
+ tal:define="global cur_fence_instance_id python: cur_fence_dev_id + '_' + str(cur_instance_num)" />
+
+ <div class="fence_instance"
+ tal:attributes="
+ name cur_fence_instance_id | nothing;
+ id cur_fence_instance_id | nothing">
+
+ <form
+ tal:attributes="name cur_fence_instance_id | nothing">
+ <tal:block metal:use-macro="here/form-macros/macros/fencedev-instance-cond-ladder" />
+ </form>
+ <tal:block
+ tal:define="global cur_instance_num python:cur_instance_num + 1" />
+ </div>
+ </tal:block>
+ </tal:block>
</div>
+ <div class="hbSubmit">
+ <input type="button" name="remove_fence_dev"
+ value="Remove this device"
+ tal:attributes="
+ onclick python: 'del_fence(\'' + cur_fence_dev_id + '\')'" />
+ <input tal:condition="exists: cur_fencedev/isShared"
+ name="add_instance" type="button"
+ value="Add an instance"
+ tal:attributes="onclick python: 'add_fence_instance(\'' + cur_fence_dev_id + '\',\'' + cur_fence_type + '\')'" />
+ </div>
+ <tal:block tal:define="global cur_fence_num python: cur_fence_num + 1" />
</tal:block>
- <tal:block tal:define="global cur_fence_num python: cur_fence_num + 1" />
- </tal:block>
+ </div>
</tal:block>
+
<tal:block
tal:replace="structure python: '<script type='+chr(0x22)+'text/javascript'+chr(0x22)+'>num_fences_level[0] = ' + str(cur_fence_num) + ';</script>'" />
</div>
<div class="fence_control">
<input type="button" value="Add a fence to this level"
- onclick="add_node_fence_device(1);" />
- </div>
+ onclick="add_node_fence_device(1)" />
</div>
</td>
<td class="cluster node fence_main fence">
<div class="fence_container">
+
<div id="fence_list_level2" tal:define="global cur_fence_num python: 0">
<tal:block tal:condition="exists: fenceinfo/level2">
- <tal:block tal:repeat="cur_fencedev fenceinfo/level2">
- <tal:block tal:define="cur_fence_type cur_fencedev/agent | nothing">
- <div tal:attributes="id python: 'fence2_' + str(cur_fence_num)">
- <tal:block
- metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
+
+ <div class="fence_level"
+ tal:repeat="cur_fencedev fenceinfo/level2"
+ tal:attributes="id python: 'fence2_' + str(cur_fence_num)">
+
+ <tal:block tal:define="
+ cur_fence_dev_id python: 'fence2_' + str(cur_fence_num);
+ cur_fence_type cur_fencedev/agent | nothing;
+ cur_fence_level python: 2">
+
+ <form tal:attributes="name cur_fence_dev_id | string:[unknown]">
+ <tal:block metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
+ </form>
+
+ <tal:block
+ tal:define="global cur_instance_num python:0" />
+
+ <div tal:attributes="id python: cur_fence_dev_id + '_instances'">
+ <tal:block tal:condition="exists: cur_fencedev/instance_list">
+ <tal:block tal:replace="structure python: '<script type='+chr(0x22)+'text/javascript'+chr(0x22)+'>num_fence_instances[\'' + cur_fence_dev_id + '\'] = ' + str(len(cur_fencedev['instance_list'])) + ';</script>'" />
+ <tal:block tal:repeat="cur_instance cur_fencedev/instance_list">
+ <tal:block
+ tal:define="global cur_fence_instance_id python: cur_fence_dev_id + '_' + str(cur_instance_num)" />
+
+ <div class="fence_instance"
+ tal:attributes="
+ name cur_fence_instance_id | nothing;
+ id cur_fence_instance_id | nothing">
+
+ <form
+ tal:attributes="name cur_fence_instance_id | nothing">
+ <tal:block metal:use-macro="here/form-macros/macros/fencedev-instance-cond-ladder" />
+ </form>
+ <tal:block
+ tal:define="global cur_instance_num python:cur_instance_num + 1" />
+ </div>
+ </tal:block>
+ </tal:block>
+ </div>
+ <div class="hbSubmit">
+ <input type="button" name="remove_fence_dev"
+ value="Remove this device"
+ tal:attributes="
+ onclick python: 'del_fence(\'' + cur_fence_dev_id + '\')'" />
+ <input tal:condition="exists: cur_fencedev/isShared"
+ name="add_instance" type="button"
+ value="Add an instance"
+ tal:attributes="onclick python: 'add_fence_instance(\'' + cur_fence_dev_id + '\',\'' + cur_fence_type + '\')'" />
</div>
+ <tal:block tal:define="global cur_fence_num python: cur_fence_num + 1" />
</tal:block>
- <tal:block tal:define="global cur_fence_num python: cur_fence_num + 1" />
- </tal:block>
+ </div>
</tal:block>
+
<tal:block
tal:replace="structure python: '<script type='+chr(0x22)+'text/javascript'+chr(0x22)+'>num_fences_level[1] = ' + str(cur_fence_num) + ';</script>'" />
</div>
@@ -2719,12 +3040,46 @@
<input type="button" value="Add a fence to this level"
onclick="add_node_fence_device(2)" />
</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="fence_control">
+ <form name="fence1_master" method="post" action="">
+ <input type="hidden" name="clustername"
+ tal:attributes="value request/clustername | nothing" />
+ <input type="hidden" name="nodename"
+ tal:attributes="value request/nodename | nothing" />
+ <input type="hidden" name="fence_level" value="1" />
+ <input type="hidden" name="fence_xml" value="" />
+ <input type="hidden" name="pagetype" value="58" />
+ <input type="button"
+ value="Update main fence properties"
+ onclick="validate_fence(this.form, 'fence_list_level1')" />
+ </form>
+ </div>
+ </td>
+ <td>
+ <div class="fence_control">
+ <form name="fence2_master" method="post" action="">
+ <input type="hidden" name="clustername"
+ tal:attributes="value request/clustername | nothing" />
+ <input type="hidden" name="nodename"
+ tal:attributes="value request/nodename | nothing" />
+ <input type="hidden" name="fence_level" value="2" />
+ <input type="hidden" name="fence_xml" value="" />
+ <input type="hidden" name="pagetype" value="58" />
+ <input type="button"
+ value="Update backup fence properties"
+ onclick="validate_fence(this.form, 'fence_list_level2')" />
+ </form>
</div>
</td>
</tr>
</tbody>
</table>
</tal:block>
+
<tal:block tal:condition="python: 'ricci_error' in nodeinfo">
<hr/>
<strong class="errmsgs">
@@ -2880,7 +3235,7 @@
<h2>Add a node to <span tal:replace="cur_cluster_name | string:this cluster" /></h2>
<input type="hidden" name="clusterName"
- tal:attributes="value cur_cluster_name | string:[unknown]" />
+ tal:attributes="value cur_cluster_name | string:[unknown]" />
<input name="pagetype" type="hidden"
tal:attributes="value request/form/pagetype | request/pagetype | string:15" />
@@ -3192,7 +3547,7 @@
</div>
<div metal:define-macro="xenvmprocess">
- <span tal:define="retrn python:here.processXenVM(request)"/>
+ <span tal:define="retrn python:here.processXenVM(request)"/>
</div>
@@ -3707,19 +4062,24 @@
<tr class="cluster node info_top fence">
<td class="cluster node fence_main fence">
<form name="main_fence_form">
- <select name="select_div"
- onChange="swap_fence_div('fence_container',
- this.options[this.selectedIndex].value)">
- <tal:block metal:use-macro="here/form-macros/macros/shared-fence-option-list" />
- </select>
+ <select name="select_div"
+ onChange="swap_fence_div('fence_container',
+ this.options[this.selectedIndex].value)">
+ <tal:block metal:use-macro="here/form-macros/macros/shared-fence-option-list" />
+ </select>
+ </form>
+
+ <form name="fencedevaddform" action="" method="post">
+ <div id="fence_container">
+ </div>
+ <div class="hbSubmit">
+ <input type="submit"
+ value="Add this shared fence device" />
+ <input type="hidden" name="pagetype"
+ value="51" id="pagetype" />
+ <input type="hidden" name="clustername" id="pagetype"
+ tal:attributes="value request/clustername" />
</form>
- <form name="fencedevaddform" action="" method="post">
- <div id="fence_container">
- </div>
- <input type="submit" value="Add this shared fence device"/>
- <input type="hidden" name="pagetype" value="51" id="pagetype" />
- <input type="hidden" name="clustername" value="" id="pagetype" tal:attributes="value request/clustername"/>
- </form>
</td>
</tr>
</tbody>
@@ -3740,7 +4100,7 @@
<tal:block tal:define="fencedevs python: here.getFenceInfo(modelb, None)">
- <tal:block tal:condition="fencedevs/fencedevs">
+ <tal:block tal:condition="exists: fencedevs/fencedevs">
<table class="systemsTable">
<thead class="systemsTable">
<tr class="systemsTable">
@@ -3837,40 +4197,57 @@
<tal:block tal:condition="python: cur_fence_type == 'fence_manual'">
<tal:block metal:use-macro="here/form-macros/macros/fence-form-manual" />
</tal:block>
+
+ <tal:block tal:condition="exists:cur_fencedev/unknown">
+ <tal:block metal:use-macro="here/form-macros/macros/fence-form-unknown" />
+ </tal:block>
</div>
<div metal:define-macro="fencedev-form">
<h2>Fence Device Form</h2>
- <div class="cluster fencedev">
+ <div class="cluster fencedev fence">
<tal:block tal:define="
global cur_fencename request/fencename | nothing;
global cur_cluster request/clustername | nothing;
- global cur_fence_type python: 'fence_apc'"/>
+ global cur_fence_type nothing" />
- <span tal:condition="cur_fencename">
- <span tal:define="
+ <tal:block tal:condition="cur_fencename">
+ <tal:block tal:define="
global cur_fencedev python:here.getFence(modelb,request);
- global cur_fence_type cur_fencedev/agent" />
- </span>
+ global cur_fence_type cur_fencedev/agent | nothing" />
+ </tal:block>
- <form name="fencedeveditform" action="" method="post">
- <tal:block
- metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
- <input type="submit" value="Update this fence device"/>
- <input type="hidden" name="pagetype" value="54" id="pagetype" />
- <input type="hidden" name="clustername" value="" id="pagetype" tal:attributes="value request/clustername"/>
- <input type="hidden" name="orig_name" value="" id="orig_name" tal:attributes="value request/fencename"/>
- <input type="hidden" name="fencename" value="" id="fencename" tal:attributes="value request/fencename"/>
- </form>
- <form name="fencedevdeleteform" action="" method="post">
- <input type="submit" value="Delete this fence device"/>
- <input type="hidden" name="pagetype" value="57" id="pagetype"/>
- <input type="hidden" name="clustername" value="" id="pagetype" tal:attributes="value request/clustername"/>
- <input type="hidden" name="fencename" value="" id="fencename" tal:attributes="value request/fencename"/>
- <input type="hidden" name="orig_name" value="" id="orig_name" tal:attributes="value request/fencename"/>
- </form>
+ <form name="fencedeveditform" action="" method="post">
+ <tal:block
+ metal:use-macro="here/form-macros/macros/fencedev-cond-ladder" />
+
+ <input type="hidden" name="pagetype" value="54" />
+ <input type="hidden" name="clustername"
+ tal:attributes="value request/clustername" />
+ <input type="hidden" name="orig_name"
+ tal:attributes="value request/fencename"/>
+ <input type="hidden" name="fencename"
+ tal:attributes="value request/fencename" />
+
+ <div class="hbSubmit">
+ <input type="submit" value="Update this fence device" />
+ </div>
+ </form>
+
+ <form name="fencedevdeleteform" action="" method="post">
+ <input type="hidden" name="pagetype" value="57" />
+ <input type="hidden" name="clustername"
+ tal:attributes="value request/clustername" />
+ <input type="hidden" name="fencename"
+ tal:attributes="value request/fencename" />
+ <input type="hidden" name="orig_name"
+ tal:attributes="value request/fencename" />
+ <div class="hbSubmit">
+ <input type="submit" value="Delete this fence device" />
+ </div>
+ </form>
</div>
</div>
--- conga/luci/homebase/luci_homebase.css 2006/12/22 17:50:16 1.28.2.3
+++ conga/luci/homebase/luci_homebase.css 2007/01/10 22:53:56 1.28.2.4
@@ -14,6 +14,10 @@
background: #dee7ec;
}
+input.pad_left {
+ margin-left: +.3333em;
+}
+
div.fence {
max-width: 700px;
padding: .5em;
@@ -28,6 +32,17 @@
width: 700px;
}
+div.fence_level {
+ padding: .4045em;
+ border-bottom: 1px solid #cccccc;
+}
+
+div.fence_instance {
+ margin-left: 1em;
+ padding-left: .4045em;
+ border-left: 1px solid #cccccc;
+}
+
div.fence,
td.fence {
padding-top: .309em;
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/01/02 20:21:26 1.120.2.16
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/01/10 22:53:56 1.120.2.17
@@ -23,6 +23,10 @@
from QuorumD import QuorumD
from Heuristic import Heuristic
from clusterOS import resolveOSType
+from Fence import Fence
+from Method import Method
+from FenceDevice import FenceDevice
+from Device import Device
from FenceHandler import validateNewFenceDevice, FENCE_OPTS, validateFenceDevice
from GeneralError import GeneralError
from homebase_adapters import manageCluster, createClusterSystems, havePermCreateCluster, setNodeFlag, delNodeFlag, userAuthenticated, getStorageNode, getClusterNode, delCluster, parseHostForm
@@ -1433,6 +1437,327 @@
errors.append(error_string)
return (False, {'errors': errors, 'messages': messages})
+def validateNodeFenceConfig(self, request):
+ try:
+ form_xml = request['fence_xml']
+ if not form_xml:
+ raise KeyError, 'form_xml must not be blank'
+ except Exception, e:
+ luci_log.debug_verbose('vNFC0: no form_xml: %s' % str(e))
+ return (False, {'errors': ['No fence data was supplied.']})
+
+ try:
+ fence_level = int(request.form['fence_level'].strip())
+ except Exception, e:
+ luci_log.debug_verbose('vNFC1: no fence level: %s' % str(e))
+ return (False, {'errors': ['No fence level was supplied.']})
+
+ try:
+ nodename = request['nodename']
+ if not nodename:
+ raise Exception, 'nodename is blank'
+ except Exception, e:
+ luci_log.debug_verbose('vNFC2: no nodename: %s' % str(e))
+ return (False, {'errors': ['No node name was given.']})
+
+ try:
+ clustername = request['clustername']
+ if not clustername:
+ raise Exception, 'clustername is blank'
+ except Exception, e:
+ luci_log.debug_verbose('vNFC3: no clustername: %s' % str(e))
+ return (False, {'errors': ['No cluster name was given.']})
+
+ try:
+ model = request.SESSION.get('model')
+ if not model:
+ raise Exception, 'model is none'
+ except Exception, e:
+ model = None
+ try:
+ model = getModelForCluster(self, clustername)
+ except:
+ model = None
+
+ if model is None:
+ luci_log.debug_verbose('vNFC4: unable to get model for cluster %s' % clustername)
+ return (False, {'errors': ['No cluster model was found.']})
+
+ try:
+ doc = minidom.parseString(form_xml)
+ except Exception, e:
+ luci_log.debug_verbose('vNFC5: error: %s' % str(e))
+ return (False, {'errors': ['The fence data submitted is not properly formed.']})
+
+ try:
+ node = model.retrieveNodeByName(nodename)
+ except GeneralError, e:
+ luci_log.debug_verbose('vNFC6: unable to find node name %s in current node list' % (str(nodename), str(e)))
+ return (False, {'errors': ['Unable to find the cluster node %s in the node list.' % str(nodename) ]})
+
+ fence_level_num = int(fence_level)
+ levels = node.getFenceLevels()
+ try:
+ method_id = levels[fence_level_num - 1].getAttribute('name')
+ if not method_id:
+ raise Exception, 'No method ID'
+ fence_method = Method()
+ fence_method.addAttribute('name', str(method_id))
+ levels[fence_level_num - 1] = fence_method
+ except Exception, e:
+ method_id = fence_level
+ fence_method = Method()
+ fence_method.addAttribute('name', str(method_id))
+
+ forms = doc.getElementsByTagName('form')
+ if len(forms) < 1:
+ delete_target = None
+ for l in levels:
+ # delete the fence level
+ if l.getAttribute('name') == method_id:
+ delete_target = l
+ break
+ if delete_target is not None:
+ try:
+ node.getChildren()[0].removeChild(l)
+ except Exception, e:
+ luci_log.debug_verbose('vNFC6a: %s: %s' % (method_id, str(e)))
+ return (False, {'errors': ['An error occurred while deleting fence method %s' % method_id ]})
+ else:
+ return (True, {'messages': ['No changes were made.'] })
+
+ form_hash = {}
+ for i in forms:
+ form_id = i.getAttribute('id')
+ if not form_id:
+ continue
+ ielems = i.getElementsByTagName('input')
+ if not ielems or len(ielems) < 1:
+ continue
+
+ dummy_form = {}
+
+ for i in ielems:
+ try:
+ input_type = str(i.getAttribute('type'))
+ except Exception, e:
+ luci_log.debug_verbose('vNFC7: input type: %s' % str(e))
+ continue
+
+ if not input_type or input_type == 'button':
+ continue
+
+ try:
+ dummy_form[str(i.getAttribute('name'))] = str(i.getAttribute('value'))
+ except Exception, e:
+ luci_log.debug_verbose('vNFC8: parsing XML: %s' % str(e))
+
+ if len(dummy_form) < 1:
+ continue
+
+ if 'fence_instance' in dummy_form:
+ try:
+ parent = dummy_form['parent_fencedev']
+ except:
+ luci_log.debug_verbose('vNFC9: no parent for instance')
+ return (False, {'errors': [ 'Unable to determine what device the current instance uses.' ]})
+
+ try:
+ parent_form = form_hash[parent][1].append(dummy_form)
+ del dummy_form['fence_instance']
+ except Exception, e:
+ luci_log.debug_verbose('vNFC10: no parent for instance')
+ return (False, {'errors': [ 'Unable to determine what device the current instance uses.' ]})
+ else:
+ form_hash[form_id] = (dummy_form, list())
+
+ fh_keys = form_hash.keys()
+ fh_keys.sort()
+ for i in fh_keys:
+ fencedev_name = None
+ fencedev_unknown = False
+ fencedev_obj = None
+
+ try:
+ fence_form, instance_list = form_hash[i]
+ except Exception, e:
+ luci_log.debug_verbose('vNFC11: %s' % str(e))
+ continue
+
+ try:
+ fence_type = fence_form['fence_type']
+ if not fence_type:
+ raise Exception, 'fence type is blank'
+ fence_form['agent'] = fence_type
+ except Exception, e:
+ luci_log.debug_verbose('vNFC12: %s %s' % (i, str(e)))
+ fence_type = None
+
+ try:
+ del fence_form['fence_type']
+ except:
+ pass
+
+ if 'existing_device' in fence_form:
+ del fence_form['existing_device']
+ fencedev_name = fence_form['name']
+
+ if fence_type is None:
+ # An unknown device. Pull the data out of
+ # the model and persist it and all instances.
+ # All we care about is its name.
+ fencedev_unknown = True
+ else:
+ if 'sharable' in fence_form:
+ # If it's a shared fence device that already exists, the
+ # user could not have edited it (without playing dirty
+ # games), so it's safe to pull the existing entry from
+ # the model. All we need is the device name.
+ pass
+ else:
+ # An existing non-shared device; build up the device
+ # from scratch since the user could have edited it.
+ try:
+ old_name = fence_form['old_name']
+ if not old_name:
+ raise Exception, 'old name is blank'
+ del fence_form['old_name']
+ except Exception, e:
+ luci_log.debug_verbose('vNFC12: no old name for %s %s' \
+ % (fence_form['name'], str(e)))
+ return (False, {'errors': [ 'Unable to determine the original name for the device now named %s' % fencedev_name ]})
+
+ fencedev_obj = None
+ fence_dev_list = model.getFenceDevices()
+ for fd in fence_dev_list:
+ if fd.getAttribute('name') == old_name:
+ fencedev_obj = fd
+ break
+
+ if fencedev_obj is None:
+ luci_log.debug_verbose('vNFC14: no fence device named %s was found' % old_name)
+ return (False, {'errors': ['No fence device named %s was found' % old_name ] })
+ else:
+ try:
+ model.fencedevices_ptr.removeChild(fd)
+ except Exception, e:
+ luci_log.debug_verbose('VNFC8a: %s: %s' \
+ % (old_name, str(e)))
+ return (False, {'errors': [ 'Unable to remove old fence device %s' % old_name ]})
+
+ for k in fence_form.keys():
+ if fence_form[k]:
+ fencedev_obj.addAttribute(k, str(fence_form[k]))
+
+ # Add back the tags under the method block
+ # for the fence instance
+ instance_list.append({'name': fencedev_name })
+ else:
+ # The user created a new fence device.
+ fencedev_name = fence_form['name']
+ fencedev_obj = FenceDevice()
+ for k in fence_form.keys():
+ if fence_form[k]:
+ fencedev_obj.addAttribute(k, str(fence_form[k]))
+
+ # If it's not shared, we need to create an instance form
+ # so the appropriate XML goes into the <method> block inside
+ # <node><fence>. All we need for that is the device name.
+ if not 'sharable' in fence_form:
+ instance_list.append({'name': fencedev_name })
+
+ if fencedev_obj is not None:
+ # If a device with this name exists in the model
+ # already, replace it with the current object. If
+ # this block is not executed, we don't need to make
+ # any changes to the fencedevices block for this
+ # device
+ fence_dev_list = model.getFenceDevices()
+ for fd in fence_dev_list:
+ if fencedev_name == fd.getAttribute('name'):
+ luci_log.debug_verbose('vNFC15: fence ident %s already in use' % fencedev_name)
+ return (False, {'errors': ['There is already a fence device named %s' % fencedev_name ] })
+ model.fencedevices_ptr.addChild(fencedev_obj)
+
+ if fencedev_unknown is True:
+ # Save any instances for this fence device.
+ pass
+
+ for inst in instance_list:
+ try:
+ del inst['parent_fencedev']
+ except:
+ pass
+ try:
+ del inst['new_instance']
+ except:
+ pass
+ try:
+ del inst['name']
+ except:
+ pass
+ try:
+ del inst['existing_instance']
+ except:
+ pass
+
+ device_obj = Device()
+ device_obj.setAgentType(fence_type)
+ device_obj.addAttribute('name', fencedev_name)
+ for k in inst.keys():
+ if inst[k]:
+ device_obj.addAttribute(k, str(inst[k]))
+ fence_method.addChild(device_obj)
+
+ if len(node.getChildren()) > 0:
+ # There's already a <fence> block
+ found_target = False
+ for idx in xrange(len(levels)):
+ if levels[idx].getAttribute('name') == method_id:
+ found_target = True
+ break
+
+ if found_target is False:
+ # There's a fence block, but no relevant method
+ # block
+ node.getChildren()[0].addChild(fence_method)
+ else:
+ # There is no <fence> tag under the node yet.
+ fence_node = Fence()
+ fence_node.addChild(fence_method)
+ node.addChild(fence_node)
+
+ try:
+ cp = model.getClusterPtr()
+ cp.incrementConfigVersion()
+ model.setModified(True)
+ conf = str(model.exportModelAsString())
+ if not conf:
+ raise Exception, 'model string is blank'
+ luci_log.debug_verbose('vNFC16: exported \"%s\"' % conf)
+ except Exception, e:
+ luci_log.debug_verbose('vNFC17: exportModelAsString failed: %s' \
+ % str(e))
+ return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration.' ]})
+
+ rc = getRicciAgent(self, clustername)
+ if not rc:
+ luci_log.debug_verbose('vNFC18: unable to find a ricci agent for cluster %s' % clustername)
+ return (False, {'errors': ['Unable to find a ricci agent for the %s cluster' % clustername ]})
+ ragent = rc.hostname()
+
+ batch_number, result = setClusterConf(rc, conf)
+ if batch_number is None or result is None:
+ luci_log.debug_verbose('vNFC19: missing batch and/or result')
+ return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration.' ]})
+
+ try:
+ set_node_flag(self, clustername, ragent, str(batch_number), FENCEDEV_NODE_CONFIG, "Updating fence configuration for node \'%s\'" % nodename)
+ except Exception, e:
+ luci_log.debug_verbose('vNFC20: failed to set flags: %s' % str(e))
+
+ response = request.RESPONSE
+ response.redirect(request['URL'] + "?pagetype=" + NODE + "&clustername=" + clustername + '&nodename=' + nodename + '&busyfirst=true')
def deleteFenceDevice(self, request):
errors = list()
@@ -1654,7 +1979,8 @@
51: validateFenceAdd,
50: validateFenceEdit,
55: validateDaemonProperties,
- 57: deleteFenceDevice
+ 57: deleteFenceDevice,
+ 58: validateNodeFenceConfig
}
def validatePost(self, request):
@@ -3922,6 +4248,7 @@
try:
map['pretty_name'] = FENCE_OPTS[fencedev.getAgentType()]
except:
+ map['unknown'] = True
map['pretty_name'] = fencedev.getAgentType()
nodes_used = list()
@@ -4036,7 +4363,11 @@
if fd is not None:
if fd.isShared() == False: #Not a shared dev...build struct and add
fencedev = {}
- fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ try:
+ fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ except:
+ fencedev['unknown'] = True
+ fencedev['prettyname'] = fd.getAgentType()
fencedev['isShared'] = False
fencedev['id'] = str(major_num)
major_num = major_num + 1
@@ -4073,7 +4404,11 @@
continue
else: #Shared, but not used above...so we need a new fencedev struct
fencedev = {}
- fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ try:
+ fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ except:
+ fencedev['unknown'] = True
+ fencedev['prettyname'] = fd.getAgentType()
fencedev['isShared'] = True
fencedev['cfgurl'] = baseurl + "?clustername=" + clustername + "&fencename=" + fd.getName().strip() + "&pagetype=" + FENCEDEV
fencedev['id'] = str(major_num)
@@ -4111,7 +4446,11 @@
shared_struct['name'] = fd.getName().strip()
agentname = fd.getAgentType()
shared_struct['agent'] = agentname
- shared_struct['prettyname'] = FENCE_OPTS[agentname]
+ try:
+ shared_struct['prettyname'] = FENCE_OPTS[agentname]
+ except:
+ shared_struct['unknown'] = True
+ shared_struct['prettyname'] = agentname
shared1.append(shared_struct)
map['shared1'] = shared1
@@ -4131,7 +4470,11 @@
if fd is not None:
if fd.isShared() == False: #Not a shared dev...build struct and add
fencedev = {}
- fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ try:
+ fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ except:
+ fencedev['unknown'] = True
+ fencedev['prettyname'] = fd.getAgentType()
fencedev['isShared'] = False
fencedev['id'] = str(major_num)
major_num = major_num + 1
@@ -4168,7 +4511,11 @@
continue
else: #Shared, but not used above...so we need a new fencedev struct
fencedev = {}
- fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ try:
+ fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()]
+ except:
+ fencedev['unknown'] = True
+ fencedev['prettyname'] = fd.getAgentType()
fencedev['isShared'] = True
fencedev['cfgurl'] = baseurl + "?clustername=" + clustername + "&fencename=" + fd.getName().strip() + "&pagetype=" + FENCEDEV
fencedev['id'] = str(major_num)
@@ -4206,7 +4553,11 @@
shared_struct['name'] = fd.getName().strip()
agentname = fd.getAgentType()
shared_struct['agent'] = agentname
- shared_struct['prettyname'] = FENCE_OPTS[agentname]
+ try:
+ shared_struct['prettyname'] = FENCE_OPTS[agentname]
+ except:
+ shared_struct['unknown'] = True
+ shared_struct['prettyname'] = agentname
shared2.append(shared_struct)
map['shared2'] = shared2
@@ -4237,6 +4588,7 @@
try:
fencedev['pretty_name'] = FENCE_OPTS[fd.getAgentType()]
except:
+ fencedev['unknown'] = True
fencedev['pretty_name'] = fd.getAgentType()
fencedev['agent'] = fd.getAgentType()
#Add config url for this fencedev
--- conga/luci/site/luci/Extensions/conga_constants.py 2007/01/08 15:29:09 1.19.2.5
+++ conga/luci/site/luci/Extensions/conga_constants.py 2007/01/10 22:53:56 1.19.2.6
@@ -45,6 +45,7 @@
CLUSTER_DAEMON="55"
SERVICE_DELETE = '56'
FENCEDEV_DELETE = "57"
+FENCEDEV_NODE_CONFIG = '58'
CONF_EDITOR = '80'
--- conga/luci/site/luci/Extensions/homebase_adapters.py 2007/01/08 19:49:20 1.34.2.10
+++ conga/luci/site/luci/Extensions/homebase_adapters.py 2007/01/10 22:53:56 1.34.2.11
@@ -794,6 +794,7 @@
def validateAuthenticate(self, request):
try:
request.SESSION.delete('auth_systems')
+ request.SESSION.delete('auth_status')
except:
pass
@@ -874,7 +875,6 @@
else:
try:
request.SESSION.delete('auth_systems')
- del auth_systems
except:
pass
More information about the Cluster-devel
mailing list