From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 19 Nov 2007 18:22:49 -0000 Subject: [Cluster-devel] conga/luci/cluster busy_wait-macro cluster_con ... Message-ID: <20071119182249.10562.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe at sourceware.org 2007-11-19 18:22:48 Added files: luci/cluster : busy_wait-macro cluster_config-macros cluster_svc-macros fdom-macros fence-macros system_svc-macros Log message: split up form-macros into manageable modules Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fdom-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&r1=NONE&r2=1.1 /cvs/cluster/conga/luci/cluster/busy_wait-macro,v --> standard output revision 1.1 --- conga/luci/cluster/busy_wait-macro +++ - 2007-11-19 18:22:48.660504000 +0000 @@ -0,0 +1,62 @@ +
+ + + + + + + + +
+

Please be patient - this cluster's configuration is being modified.

+
+ +
+ + +

+
+ + + + + +

+ + +
+ + + +

+ +
+ + + + + + + [cluster software installed] + + + + [cluster node rebooted] + + + + [cluster node configured] + + + + [cluster node joined cluster] + +
+
+
+
/cvs/cluster/conga/luci/cluster/cluster_config-macros,v --> standard output revision 1.1 --- conga/luci/cluster/cluster_config-macros +++ - 2007-11-19 18:22:48.741556000 +0000 @@ -0,0 +1,955 @@ + +** Copyright (C) 2006-2007 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. + + + + + + +</head> + +<body> + +<div metal:define-macro="clusterconfig-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? Configure cluster properties'); + </script> + <script type="text/javascript" + src="conga_ajax.js"> + </script> + <script type="text/javascript" + src="validate_xvm_key.js"> + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:condition="not: exists: modelb"> + <tal:block tal:define="global modelb python: None" /> + </tal:block> + + <tal:block + tal:define="global clusterinfo python: here.getClusterInfo(modelb, request)" /> + +<tal:block tal:condition="clusterinfo"> + <span tal:omit-tag="" tal:define="global configTabNum python: 'tab' in request and int(request['tab']) or 1" /> + + <ul class="configTab"> + <li class="configTab"> + <a tal:attributes=" + href clusterinfo/basecluster_url | nothing; + class python: 'configTab' + (configTabNum == 1 and ' configTabActive' or ''); + ">General</a> + </li> + <li class="configTab" + tal:condition="not:clusterinfo/gulm"> + <a tal:attributes=" + href clusterinfo/fencedaemon_url | nothing; + class python: 'configTab' + (configTabNum == 2 and ' configTabActive' or ''); + ">Fence</a> + </li> + <li class="configTab" + tal:condition="not:clusterinfo/gulm"> + <a tal:attributes=" + href clusterinfo/multicast_url | nothing; + class python: 'configTab' + (configTabNum == 3 and ' configTabActive' or ''); + ">Multicast</a> + </li> + + <li class="configTab" + tal:condition="clusterinfo/gulm"> + <a tal:attributes=" + href clusterinfo/gulm_url | nothing; + class python: 'configTab' + (configTabNum == 5 and ' configTabActive' or '')">GULM</a> + </li> + + <li class="configTab"> + <a tal:attributes=" + href clusterinfo/quorumd_url | nothing; + class python: 'configTab' + (configTabNum == 4 and ' configTabActive' or ''); + ">Quorum Partition</a> + </li> + </ul> + + <div id="configTabContent" tal:condition="python: configTabNum == 1"> + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + <script type="text/javascript" + src="/luci/cluster/validate_config_general.js"> + </script> + + <form name="basecluster" action="" method="post"> + <input type="hidden" name="cluster_version" + tal:attributes="value os_version | nothing" /> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | request/form/pagetype" + /> + <input type="hidden" name="configtype" value="general" /> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | clusterinfo/clustername | nothing" /> + + <table id="systemsTable" class="systemsTable" border="0" cellspacing="0"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="1"> + <div class="systemsTableTop"> + <strong>General Properties</strong> + </div> + </td></tr> + </thead> + + <tbody class="systemsTable" id="sys_tbody"> + <tr class="systemsTable"> + <td class="systemsTable">Cluster Name</td> + <td class="systemsTable"> + <input type="text" name="cluname" + tal:attributes="value clusterinfo/clustername" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable">Configuration Version</td> + <td class="systemsTable"> + <input type="text" name="cfgver" size="5" + tal:attributes="value clusterinfo/config_version"/> + </td> + </tr> + </tbody> + </table> + + <table tal:condition="python: os_version and os_version == 'rhel5'"> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <img src="arrow_right.png" alt="[+]" + onclick="toggle_visible(this, 'genprops_advanced', 'genprops_advanced_label')"> + <span id="genprops_advanced_label">Show</span> + advanced cluster properties + </td> + </tr> + + <tr class="systemsTable invisible" id="genprops_advanced"> + <td class="systemsTable" colspan="2"> + <table class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#token', 55, 65);">Token Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" name="token" + tal:attributes="value clusterinfo/totem/token | string:10000" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#retransmits_before_loss', 55, 65);">Number of token retransmits before loss</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="token_retransmits_before_loss_const" + tal:attributes="value clusterinfo/totem/token_retransmits_before_loss_const | string:20" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#join', 55, 65);">Join Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" name="join" + tal:attributes="value clusterinfo/totem/join | string:60" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#consensus', 55, 65);">Consensus Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="consensus" + tal:attributes="value clusterinfo/totem/consensus | string:4800" /> + </td> + </tr> + +<tal:comment tal:replace="nothing"> + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#secauth', 55, 65);">Secure Authentication</a> + </td> + <td class="systemsTable"> + <input type="checkbox" name="secauth" checked="checked" /> + </tr> + + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#rrp_mode', 55, 65);">Redundant Ring Protocol Mode</a> + </td> + <td class="systemsTable"> + <select type="text" name="rrp_mode"> + <option value="none"> + None + </option> + <option value="active"> + Active + </option> + <option value="passive"> + Passive + </option> + </select> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#netmtu', 55, 65);">Network MTU</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="netmtu" + tal:attributes="value string:1500" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#threads', 55, 65);">Number of Threads + </td> + <td class="systemsTable"> + <input type="text" size="10" name="threads" + tal:attributes="value string:0" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#vsftype', 55, 65);">Virtual Synchrony Type + </td> + <td class="systemsTable"> + <select name="vsftype"> + <option value="none"> + None + </option> + <option value="ykd"> + YKD + </option> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#token_retransmit', 55, 65);">Token Retransmit</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="token_retransmit" + tal:attributes="value string:238" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#hold', 55, 65);">Hold Token Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" name="hold" + tal:attributes="value string:180" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#send_join', 55, 65);">Maximum time to wait before sending a join message</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" name="send_join" + tal:attributes="value string:0" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#merge', 55, 65);">Merge Detection Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="merge" + tal:attributes="value string:200" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#downcheck', 55, 65);">Interface Down Check Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="downcheck" + tal:attributes="value string:1000" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#fail_to_recv_const', 55, 65);">Fail to Receive Constant</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="fail_to_recv_const" + tal:attributes="value string:50" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#seqno_unchanged_const', 55, 65);">Rotations with no mcast traffic before merge detection timeout started</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="seqno_unchanged_const" + tal:attributes="value string:30" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#heartbeat_failures_allowed', 55, 65);">Number of Heartbeat Failures Allowed</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="heartbeat_failures_allowed" + tal:attributes="value string:0" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#max_network_delay', 55, 65);">Maximum Network Delay</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="max_network_delay" + tal:attributes="value string:50" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#window_size', 55, 65);">Window Size</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="window_size" + tal:attributes="value string:50" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#max_messages', 55, 65);">Maximum Messages</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="max_messages" + tal:attributes="value string:17" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#rrp_problem_count_timeout', 55, 65);">RRP Problem Count Timeout</a> (ms) + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="rrp_problem_count_timeout" + tal:attributes="value string:1000" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#rrp_problem_count_threshold', 55, 65);">RRP Problem Count Threshold</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="rrp_problem_count_threshold" + tal:attributes="value string:20" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <a class="cluster_help" href="javascript:popup_window('/luci/doc/config_rhel5#rrp_token_expired_timeout', 55, 65);">RRP Token Expired Timeout</a> + </td> + <td class="systemsTable"> + <input type="text" size="10" + name="rrp_token_expired_timeout" + tal:attributes="value string:47" /> + </td> + </tr> +</tal:comment> + </table> + </td></tr> + </table> + + <table class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <div class="systemsTableEnd"> + <input type="button" value="Apply" + onClick="validate_form(this.form);"/> + </div> + </td> + </tr> + </table> + </form> + </div> + + <div id="configTabContent" tal:condition="python: configTabNum == 2"> + <form name="fencedaemon" method="post" id="fence_config_form" action=""> + <input type="hidden" name="configtype" value="fence" /> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | request/form/pagetype" + /> + <input type="hidden" name="cluster_version" + tal:attributes="value os_version | nothing" /> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | clusterinfo/clustername | nothing" /> + + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + <script type="text/javascript" + src="/luci/cluster/validate_config_fence.js"> + </script> + + <table id="systemsTable" class="systemsTable" border="0" cellspacing="0"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="1"> + <div class="systemsTableTop"> + <strong>Fence Daemon Properties</strong> + </div> + </td></tr> + </thead> + + <tbody class="systemsTable" id="sys_tbody"> + <tr class="systemsTable"> + <td class="systemsTable">Post Fail <span tal:attributes="onclick python:'window.location.assign(\'./?pagetype=80&clustername=' + request['clustername'] + '\')'">Delay</span> + </td> + <td class="systemsTable"> + <input type="text" name="post_fail_delay" + tal:attributes="value clusterinfo/pfd" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable">Post Join Delay</td> + <td class="systemsTable"> + <input type="text" name="post_join_delay" + tal:attributes="value clusterinfo/pjd" /> + </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> + <td class="systemsTable"> + <input type="checkbox" name="run_xvmd" + tal:attributes="checked python: ('fence_xvmd' in clusterinfo and clusterinfo['fence_xvmd']) and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <div class="systemsTableTop"> </div> + <strong>XVM fence daemon key distribution</strong> + </td> + </tr> + + <tr id="fence_xvm_config" class="invisible"> + <td class="systemsTable" colspan="2" id="fence_xvm_config"> + <table class="systemsTable" width="100%"> + <tr class="systemsTable"> + <td class="systemsTable"> + <div id="fence_xvm_hosts" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable"> + <input type="button" name="distribute" + value="Create and distribute keys" + onclick="validate_xvm_dist_form(this.form)" + /> + </td> + </tr> + </table> + </td> + </tr> + + <tr class="systemsTable" id="fence_xvm_init"> + <td class="systemsTable" colspan="2"> + <table class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable"> + Enter a node hostname from the host cluster + </td> + <td> + <input type="text" value="" + name="host_cluster_name" + id="host_cluster_name" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable"> + Enter a node hostname from the hosted (virtual) cluster + </td> + <td> + <input type="text" value="" + name="virt_cluster_name" + id="virt_cluster_name" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <input type="button" + name="Retrieve cluster nodes" + value="Retrieve cluster nodes" + onclick="get_cluster_members(this.form)" + /> + </td> + </tr> + </table> + </td> + </tr> + </tbody> + + <tfoot class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <div class="systemsTableEnd"> + <input type="button" value="Apply" + id="fence_config_submit" + onClick="validate_form(this.form)" /> + </div> + </td> + </tr> + </tfoot> + </table> + </form> + </div> + + <div id="configTabContent" tal:condition="python: configTabNum == 3"> + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + <script type="text/javascript" + src="/luci/cluster/validate_config_multicast.js"> + </script> + + <form name="multicast" action="" method="post"> + <input type="hidden" name="configtype" value="mcast" /> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | request/form/pagetype" + /> + <input type="hidden" name="cluster_version" + tal:attributes="value os_version | nothing" /> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | clusterinfo/clustername | nothing" /> + <table id="systemsTable" class="systemsTable" border="0" cellspacing="0"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="1"> + <div class="systemsTableTop"> + <strong>Multicast Configuration</strong> + </div> + </td></tr> + </thead> + + <tbody class="systemsTable" id="sys_tbody"> + <tr class="systemsTable"> + <td class="systemsTable"> + <input type="radio" name="mcast" value="False" + onClick="disable_mcast('mcast_address', 'mcast_interface');" + tal:attributes="checked python: clusterinfo['is_mcast'] != 'True'" + /> + <tal:block tal:condition="python:os_version == 'rhel4'"> + Do not use multicast + </tal:block> + <tal:block tal:condition="python:os_version != 'rhel4'"> + Let cluster choose the multicast address + </tal:block> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + <input type="radio" name="mcast" value="True" + onClick="enable_mcast('mcast_address', 'mcast_interface');" + tal:attributes="checked python: clusterinfo['is_mcast'] == 'True'" + + /> + <tal:block tal:condition="python:os_version == 'rhel4'"> + Use multicast + </tal:block> + <tal:block tal:condition="python:os_version != 'rhel4'"> + Specify the multicast address manually + </tal:block> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable"> + Multicast address + </td> + <td class="systemsTable"> + <input type="text" + name="mcast_address" id="mcast_address" + tal:attributes=" + disabled not:clusterinfo/mcast_addr; + value clusterinfo/mcast_addr |nothing" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable"> + Multicast network interface <span tal:condition="python:os_version != 'rhel4'">(optional)</span> + </td> + <td class="systemsTable"> + <input type="text" + name="mcast_interface" id="mcast_interface" + tal:attributes=" + disabled not:clusterinfo/mcast_addr; + value clusterinfo/mcast_interface |nothing" /> + </td> + </tr> + </tbody> + + <tfoot class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="2"> + <div class="systemsTableEnd"> + <input type="button" value="Apply" + onClick="validate_form(this.form);"/> + </div> + </td></tr> + </tfoot> + </table> + </form> + </div> + + <div id="configTabContent" tal:condition="python: configTabNum == 4"> + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + <script type="text/javascript" + src="/luci/cluster/validate_config_qdisk.js"> + </script> + <form name="quorum_partition" action="" method="post"> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | request/form/pagetype" + /> + <input type="hidden" name="configtype" value="qdisk" /> + <input type="hidden" name="cluster_version" + tal:attributes="value os_version | nothing" /> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | clusterinfo/clustername | nothing" /> + <div class="configTabContent"> + <table id="systemsTable" class="systemsTable" border="0" cellspacing="0"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="1"> + <div class="systemsTableTop"> + <strong>Quorum Partition Configuration</strong> + </div> + </td></tr> + </thead> + + <tbody class="systemsTable" id="sys_tbody"> + <tr class="systemsTable" id="st_row"><td class="systemsTable" id="st_col"> + <input type="radio" name="quorumd" value="False" + onClick="disableChildrenInput('quorumdisk');" + tal:attributes="checked python: (not clusterinfo['is_quorumd']) and 'checked' or ''" /> + Do not use a Quorum Partition + </td></tr> + + <tr class="systemsTable"><td class="systemsTable"> + <input type="radio" name="quorumd" value="True" + onClick="enableChildrenInput('quorumdisk');" + tal:attributes="checked python: (clusterinfo['is_quorumd']) and 'checked' or ''" /> + Use a Quorum Partition + </td></tr> + </tbody> + </table> + </div> + + <div class="spacing configTabContent"></div> + + <div id="quorumdisk" class="configTabContent"> + <div class="configTabContent"> + <table name="qdiskprefs" class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable">Interval</td> + <td class="systemsTable"> + <input type="text" name="interval" + tal:attributes="value clusterinfo/interval | nothing" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable">Votes</td> + <td class="systemsTable"> + <input type="text" name="votes" + tal:attributes="value clusterinfo/votes | nothing" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable">TKO</td> + <td class="systemsTable"> + <input type="text" name="tko" + tal:attributes="value clusterinfo/tko | nothing" /> + </td> + </tr> + + <tr class="systemsTable"> + <td class="systemsTable">Minimum Score</td> + <td class="systemsTable"> + <input type="text" name="min_score" + tal:attributes="value clusterinfo/min_score | nothing" /> + </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> + </table> + </div> + + <div class="configTabContent"> + <table name="qdiskheur" class="systemsTable"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable" colspan="1"> + <div class="systemsTableTop"> + <strong>Heuristics</strong> + </div> + </td></tr> + + <tr class="systemsTable"> + <th class="systemsTable"> + <div class="systemsTableTop">Path to Program</div> + </th> + <th class="systemsTable"> + <div class="systemsTableTop">Interval</div> + </th> + <th class="systemsTable"> + <div class="systemsTableTop">Score</div> + </th> + <th> +   + </th> + </tr> + </thead> + + <tbody class="systemsTable" id="heuristicList" + tal:define="global heuristics clusterinfo/hlist | nothing"> + + <tal:block tal:condition="python: not heuristics or not len(heuristics)"> + <input type="hidden" name="num_heuristics" id="num_heuristics" value="0"> + <tr class="systemsTable" id="heuristic0"> + <td class="systemsTable"> + <input class="qdpath qdisk" type="text" + name="heuristic0:hprog" id="heuristic0:hprog" /> + </td> + <td class="systemsTable"> + <input class="qdint qdisk" type="text" + name="heuristic0:hinterval" id="heuristic0:hinterval" /> + </td> + <td class="systemsTable"> + <input class="qdscore qdisk" type="text" + name="heuristic0:hscore" id="heuristic0:hscore" /> + </td> + <td class="systemsTable"> + <img class="qdisk deleteRow" + id="heuristic0:hdel" name="heuristic0:hdel" + src="delete-row.png" + title="delete this heuristic" + onClick="delete_qdisk_heur(this, document.quorum_partition);"> + </td> + </tr> + </tal:block> + + <tal:block + tal:condition="python: len(heuristics)" + tal:define="global curHeur python: -1"> + + <input type="hidden" name="num_heuristics" id="num_heuristics" + tal:attributes="value python: len(heuristics)" /> + + <tr class="systemsTable" + tal:repeat="heuristic heuristics" + tal:attributes="id python: 'heuristic' + str(curHeur)" + tal:define="global curHeur python: curHeur + 1"> + + <td class="systemsTable"> + <input class="qdpath qdisk" type="text" + tal:attributes=" + value heuristic/hprog; + id python: 'heuristic' + str(curHeur) + ':hprog'; + name python: 'heuristic' + str(curHeur) + ':hprog'" /> + </td> + + <td class="systemsTable"> + <input class="qdint qdisk" type="text" + tal:attributes=" + value heuristic/hinterval; + id python: 'heuristic' + str(curHeur) + ':hinterval'; + name python: 'heuristic' + str(curHeur) + ':hinterval'" /> + </td> + + <td class="systemsTable"> + <input class="qdscore qdisk" type="text" + tal:attributes=" + value heuristic/hscore; + id python: 'heuristic' + str(curHeur) + ':hscore'; + name python: 'heuristic' + str(curHeur) + ':hscore'" /> + </td> + <td class="systemsTable"> + <img class="qdisk deleteRow" + src="delete-row.png" + title="delete this heuristic" + onClick="delete_qdisk_heur(this, document.quorum_partition);" + tal:attributes=" + id python: 'heuristic' + str(curHeur) + ':hdel'; + name python: 'heuristic' + str(curHeur) + ':hdel'" /> + </td> + </tr> + </tal:block> + </tbody> + + <tfoot> + <tr class="systemsTable"><td class="systemsTable"> + <input class="addrow" type="button" value="Add another heuristic" onClick="addHeuristic('heuristicList')"> + </td></tr> + </tfoot> + </table> + </div> + </div> + + <div class="spacing configTabContent"></div> + <div class="hbSubmit spacing configTabContent"> + <input type="button" value="Apply" + onClick="validate_form(this.form)" /> + </div> + <script tal:condition="not: clusterinfo/is_quorumd"> + disableChildrenInput('quorumdisk'); + </script> + </form> + </div> + + <tal:block tal:condition="clusterinfo/gulm"> + <div id="configTabContent" tal:condition="python: configTabNum == 5"> + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + <script type="text/javascript" + src="/luci/cluster/validate_config_gulm.js"> + </script> + + <form name="basecluster" action="" method="post"> + <input type="hidden" name="cluster_version" + tal:attributes="value os_version | nothing" /> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | request/form/pagetype" + /> + <input type="hidden" name="configtype" value="gulm" /> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | clusterinfo/clustername | nothing" /> + + <strong class="cluster">GULM Configuration</strong><br/> + <table id="systemsTable" class="systemsTable" cellspacing="0"> + <thead> + <tr class="systemsTable" align="left"> + <th class="systemsTable">Node</th> + <th class="systemsTable">Lock Server</th> + </tr> + </thead> + <tbody id="sys_tbody"> + <tal:block tal:repeat="c clusterinfo/gulm_lockservers"> + <tr class="systemsTable"> + <td class="systemsTable"> + <span tal:replace="python:c[0]" /> + </td> + <td class="systemsTable"> + <input type="checkbox" + tal:attributes=" + name python:c[0]; + checked python:c[1]" /> + </td> + </tr> + </tal:block> + + <tr><td colspan="2"> + <div class="spacing" /> + <p><em class="cluster">You may have exactly 1, 3, or 5 GULM lock servers, in any combination of the hosts checked above and given below.</em></p> + </td></tr> + + <tr> + <td class="pad_right">External Lock Server 1</td> + <td> + <input type="text" name="__GULM__:server1" + class="hostname" value="" /> + </td> + </tr> + <tr> + <td class="pad_right">External Lock Server 2</td> + <td> + <input type="text" name="__GULM__:server2" + class="hostname" value="" /> + </td> + </tr> + <tr> + <td class="pad_right">External Lock Server 3</td> + <td> + <input type="text" name="__GULM__:server3" + class="hostname" value="" /> + </td> + </tr> + <tr> + <td class="pad_right">External Lock Server 4</td> + <td> + <input type="text" name="__GULM__:server4" + class="hostname" value="" /> + </td> + </tr> + <tr> + <td class="pad_right">External Lock Server 5</td> + <td> + <input type="text" name="__GULM__:server5" + class="hostname" value="" /> + </td> + </tr> + </tbody> + </table> + + <div class="spacing configTabContent"></div> + <div class="hbSubmit spacing configTabContent"> + <input type="button" value="Apply" + onClick="validate_form(this.form)"/> + </div> + </div> + </tal:block> +</tal:block> +</div> + +</body> +</html> /cvs/cluster/conga/luci/cluster/cluster_svc-macros,v --> standard output revision 1.1 --- conga/luci/cluster/cluster_svc-macros +++ - 2007-11-19 18:22:48.840511000 +0000 @@ -0,0 +1,850 @@ +<tal:comment tal:replace="nothing"> +** Copyright (C) 2006-2007 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. +</tal:comment> + +<html> + +<head> + <title tal:content="string:" /> +</head> + +<body> + +<div metal:define-macro="services-form"> + <h2>Services Form</h2> +</div> + +<div metal:define-macro="servicelist-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + global svcstatus python: here.getClusterStatus(request, ricci_agent); + global svcinf python: here.getServicesInfo(svcstatus,modelb,request); + global svcs svcinf/services" /> + + <tal:block tal:repeat="svc svcs"> + <table class="cluster service" width="100%" + tal:define=" + running svc/running | nothing; + autostart svc/autostart |nothing"> + + <tr class="cluster service info_top"> + <td class="cluster service service_name"> + <strong class="cluster service">Service Name</strong> + <a tal:attributes=" + href svc/cfgurl; + class python: 'cluster service ' + (running and 'running' or 'stopped')" + tal:content="svc/name" /> + <tal:block tal:condition="exists:svc/is_vm"> + (virtual service) + </tal:block> + </td> + + <td class="cluster service service_action"> + <form method="post"> + <select name="gourl"> + <option value="">Choose a Task...</option> + <option + tal:attributes="value svc/cfgurl | nothing" + tal:content="string:Configure this service" /> + + <option value="">----------</option> + + <option + tal:condition="running" + tal:attributes="value svc/restarturl | nothing" + tal:content="string:Restart this service" /> + + <option + tal:condition="running" + tal:attributes="value svc/disableurl | nothing" + tal:content="string:Stop this service" /> + + <option + tal:condition="not: running" + tal:attributes="value svc/enableurl | nothing" + tal:content="string:Enable this service" /> + + <option + tal:condition="not: running" + tal:attributes="value svc/delurl | nothing" + tal:content="string:Delete this service" /> + + <option value="">----------</option> + + <tal:block tal:condition="not: running"> + <tal:block tal:repeat="starturl svc/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Start this service on <span tal:replace="starturl/nodename" /></option> + </tal:block> + </tal:block> + + <tal:block tal:condition="running"> + <tal:block tal:repeat="starturl svc/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Relocate this service to <span tal:replace="starturl/nodename" /></option> + </tal:block> + + <tal:block tal:condition="svc/is_vm | nothing"> + <option value="">----------</option> + <tal:block tal:repeat="starturl svc/links"> + <option + tal:condition="exists: starturl/migrate" + tal:attributes="value starturl/url">Migrate this service to <span tal:replace="starturl/nodename" /></option> + </tal:block> + </tal:block> + </tal:block> + + </select> + <input type="button" value="Go" + onclick="if (this.form.gourl[this.form.gourl.selectedIndex].value && confirm(this.form.gourl[this.form.gourl.selectedIndex].text + '?')) return dropdown(this.form.gourl)" /> + </form> + </td> + </tr> + + <tr class="cluster service info_middle"> + <td class="cluster service service_nodename"> + <div class="cluster service service_status"> + <strong class="cluster service">Status:</strong> + <tal:block tal:condition="running"> + Running on <tal:block tal:replace="svc/nodename"/> + </tal:block> + <tal:block tal:condition="not: running"> + This service is stopped + </tal:block> + </div> + <p>Autostart is <span tal:condition="python: autostart.lower() == 'false'" tal:replace="string:not" /> enabled for this service</p> + </td> + </tr> + + <tr class="cluster service info_bottom"> + <td class="cluster service service_fdom" tal:condition="running" colspan="2"> + <strong class="cluster service">Failover Domain Association:</strong> <span tal:replace="svc/faildom"/> + </td> + </tr> + </table> + <hr/> + </tal:block> +</div> + +<div metal:define-macro="vmadd-form"> +<form method="post" action=""> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | nothing" /> + + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | nothing" /> + + <div class="service_comp_list"> + <table class="systemsTable"> + <thead class="systemsTable"> + <tr class="systemsTable"><td class="systemsTable"> + <p class="reshdr">Create a Virtual Machine Service</p> + </td></tr> + <tfoot class="systemsTable"> + <tr class="systemsTable"> + <td>Automatically start this service</td> + <td> + <input type="checkbox" name="autostart" checked="checked"> + </td> + </tr> + <tr class="systemsTable"> + <td>Run exclusive</td> + <td> + <input type="checkbox" name="exclusive"> + </td> + </tr> + <tr class="systemsTable"> + <td>Failover Domain</td> + <td> + <select name="domain"> + <option value="" selected="selected">None</option> + <tal:block tal:repeat="f python:here.get_fdom_names(modelb)"> + <option tal:content="f" + tal:attributes="value f" /> + </tal:block> + </select> + </td> + </tr> + <tr class="systemsTable"> + <td>Recovery policy</td> + <td> + <select name="recovery"> + <option value="">Select a recovery policy</option> + <option name="relocate" value="relocate">Relocate</option> + <option name="restart" value="restart">Restart</option> + <option name="disable" value="disable">Disable</option> + </select> + </td> + </tr> + <tr class="systemsTable"><td colspan="2"> + <div class="hbSubmit"> + <input type="submit" value="Create Virtual Machine Service" /> + </div> + </td></tr> + </tfoot> + <tbody class="systemsTable"> + <tr class="systemsTable"> + <td><span class="cluster_help" title="e.g., guest1 if the VM config file is@/etc/xen/guest1">Virtual machine name</span></td> + <td><input type="text" name="vmname" value="" /></td> + </tr> + <tr class="systemsTable"> + <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> + </tbody> + </table> + </div> +</form> +</div> + +<div metal:define-macro="vmconfig-form"> +<form method="post" action="" + tal:define="vminfo python:here.getVMInfo(modelb, request)"> + + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | nothing" /> + + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | nothing" /> + + <input type="hidden" name="oldname" + tal:attributes="value vminfo/name | nothing" /> + + <div class="service_comp_list"> + <table class="systemsTable"> + <thead class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable"> + <p class="reshdr">Properties for <tal:block tal:replace="vminfo/name | string:virtual machine service"/></p> + </td> + </tr> + + <tr class="systemsTable"> + <td class="cluster service service_action" + tal:condition="python: sinfo and 'innermap' in sinfo"> + <form method="post"> + <input type="hidden" name="pagetype" tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <select name="gourl" + tal:define="global innermap sinfo/innermap; + starturls innermap/links"> + + <option value="">Choose a Task...</option> + <tal:block tal:condition="running"> + <option + tal:attributes="value innermap/restarturl">Restart this service</option> + + <option + tal:attributes="value innermap/disableurl">Disable this service</option> + + <option value="">----------</option> + + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Relocate this service to <span tal:replace="starturl/nodename" /> + </option> + </tal:block> + + <tal:block tal:condition="svc/is_vm | nothing"> + <option value="">----------</option> + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="exists: starturl/migrate" + tal:attributes="value starturl/url">Migrate this service to <span tal:replace="starturl/nodename" /></option> + </tal:block> + </tal:block> + </tal:block> + + <tal:block tal:condition="not: running"> + <option + tal:attributes="value innermap/enableurl">Enable this service</option> + <option value="">----------</option> + + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Start this service on <span tal:replace="starturl/nodename" /> + </option> + </tal:block> + + <option value="">----------</option> + + <option + tal:attributes="value innermap/delurl | nothing" + tal:content="string:Delete this service" /> + </tal:block> + </select> + + <input type="button" value="Go" + onclick="if (this.form.gourl[this.form.gourl.selectedIndex].value && confirm(this.form.gourl[this.form.gourl.selectedIndex].text + '?')) return dropdown(this.form.gourl)" /> + </form> + </td> + </tr> + </thead> + + <tfoot class="systemsTable"> + <tr class="systemsTable"> + <td>Automatically start this service</td> + <td> + <input type="checkbox" name="autostart" + tal:attributes="checked python: ('autostart' in vminfo and vminfo['autostart'] != '0') and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td>Run exclusive</td> + <td> + <input type="checkbox" name="exclusive" + tal:attributes="checked python: ('exclusive' in vminfo and vminfo['exclusive'] != '0') and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td>Failover Domain</td> + <td> + <select name="domain"> + <option value="" tal:content="string:None" + tal:attributes="selected python: (not 'domain' in vminfo or not vminfo['domain']) and 'selected' or ''" /> + <tal:block tal:repeat="f python:here.get_fdom_names(modelb)"> + <option tal:content="f" + tal:attributes=" + value f; + selected python: ('domain' in vminfo and vminfo['domain'] == f) and 'selected' or ''" /> + </tal:block> + </select> + </td> + </tr> + <tr class="systemsTable"> + <td>Recovery policy</td> + <td> + <select name="recovery"> + <option value="">Select a recovery policy</option> + <option name="relocate" value="relocate" + tal:content="string:Relocate" + tal:attributes="selected python: ('recovery' in vminfo and vminfo['recovery'] == 'relocate') and 'selected' or ''" /> + <option name="restart" value="restart" + tal:content="string:Restart" + tal:attributes="selected python: ('recovery' in vminfo and vminfo['recovery'] == 'restart') and 'selected' or ''" /> + <option name="disable" value="disable" + tal:content="string:Disable" + tal:attributes="selected python: ('recovery' in vminfo and vminfo['recovery'] == 'disable') and 'selected' or ''" /> + </select> + </td> + </tr> + <tr class="systemsTable"><td colspan="2"> + <div class="hbSubmit"> + <input name="submit" type="submit" value="Update Virtual Machine Service" /> + <input name="delete" type="submit" value="Delete Virtual Machine Service" /> + </div> + </td></tr> + </tfoot> + <tbody class="systemsTable"> + <tr class="systemsTable"> + <td><span class="cluster_help" title="e.g., guest1 if the VM config file is@/etc/xen/guest1">Virtual machine name</span></td> + <td> + <input type="text" name="vmname" + tal:attributes="value vminfo/name | nothing" /> + </td> + </tr> + <tr class="systemsTable"> + <td><span class="cluster_help" title="e.g., /etc/xen/">Path to VM configuration files</span></td> + <td> + <input type="text" name="vmpath" + tal:attributes="value vminfo/path | nothing" /> + </td> + </tr> + </tbody> + </table> + </div> +</form> +</div> + +<div metal:define-macro="serviceadd-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Add a new service'); + </script> + <tal:block metal:use-macro="here/cluster_svc-macros/macros/service-config-head-macro" /> + + <h2>Add a Service</h2> + <tal:block tal:define=" + global clusterinfo python: here.getClusterInfo(modelb, request)" /> + + <div id="resskel" class="invisible"> + <tal:block metal:use-macro="here/resource-form-macros/macros/service-compose-macro" /> + </div> + + <div class="service_comp_list"> + <form name="service_name_form"> + <table class="systemsTable"> + <tr class="systemsTable"> + <td class="systemsTable"> + <strong class="reshdr">Service name</strong> + </td> + <td class="systemsTable"> + <input type="text" length="20" name="service_name" value="" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable"> + Automatically start this service + </td> + <td class="systemsTable"> + <input type="checkbox" name="autostart" checked="checked" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable">Run exclusive</td> + <td class="systemsTable"> + <input type="checkbox" name="exclusive"> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable">Failover Domain</td> + <td class="systemsTable"> + <select name="domain"> + <option value="" selected="selected">None</option> + <tal:block tal:repeat="f sinfo/fdoms"> + <option tal:content="f" + tal:attributes="value f" /> + </tal:block> + </select> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable">Recovery policy</td> + <td class="systemsTable"> + <select name="recovery"> + <option value="">Select a recovery policy</option> + <option name="relocate" value="relocate">Relocate</option> + <option name="restart" value="restart">Restart</option> + <option name="disable" value="disable">Disable</option> + </select> + </td> + </tr> + </table> + </form> + </div> + <div class="service_comp_list" tal:attributes="id sinfo/root_uuid"> + </div> + + <div class="service_comp_list"> + <form name="master" method="post"> + <input type="button" value="Add a resource to this service" + onclick="add_child_resource(this.form);" /> + <input type="hidden" name="pagetype" + tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <input type="hidden" name="orig_pagetype" + tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <input type="hidden" name="clustername" + tal:attributes="value clusterinfo/clustername" /> + <input type="button" value="Submit" + onClick="forms_to_xml(this, this.form)" /> + <input type="hidden" name="uuid" value="toplevel" /> + <input type="hidden" name="parent_uuid" value="_toplevel" /> + <input type="hidden" name="tree_level" value="-1" /> + <input type="hidden" name="svc_name" value="" /> + <input type="hidden" name="autostart" value="-1" /> + <input type="hidden" name="exclusive" value="-1" /> + <input type="hidden" name="recovery" /> + <input type="hidden" name="domain" /> + <input type="hidden" name="form_xml" /> + <input type="hidden" name="action" value="add" /> + </form> + </div> + + <div class="invisible" id="global_resources_block"> + <tal:block tal:repeat="gr global_resources"> + <tal:block tal:define=" + global res gr; + global type python: 'tag_name' in res and res['tag_name'] or ''; + global resourceIsRef python: True" /> + <tal:block metal:use-macro="here/cluster_svc-macros/macros/serviceconfig-type-macro" /> + </tal:block> + </div> +</div> + +<div metal:define-macro="servicestart"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Start a service'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + result python: here.serviceStart(ricci_agent, request)" /> +</div> + +<div metal:define-macro="servicemigrate"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Migrate a virtual service'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + result python: here.serviceMigrate(ricci_agent, request)" /> +</div> + +<div metal:define-macro="servicerestart"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Restart a service'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + result python: here.serviceRestart(ricci_agent, request)" /> +</div> + +<div metal:define-macro="servicestop"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Stop a service'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <span tal:define=" + result python: here.serviceStop(ricci_agent, request)" /> +</div> + +<div metal:define-macro="serviceconfig-type-macro" tal:omit-tag=""> + <tal:block tal:condition="python: type == 'ip'"> + <div metal:use-macro="here/resource-form-macros/macros/ip_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'fs'"> + <div metal:use-macro="here/resource-form-macros/macros/fs_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'gfs' or type == 'clusterfs'"> + <div metal:use-macro="here/resource-form-macros/macros/gfs_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'netfs'"> + <div metal:use-macro="here/resource-form-macros/macros/nfsm_macro"/> + </tal:block> + + <tal:block tal:condition="python: type == 'nfsexport'"> + <div metal:use-macro="here/resource-form-macros/macros/nfsx_macro"/> + </tal:block> + + <tal:block tal:condition="python: type == 'nfsclient'"> + <div metal:use-macro="here/resource-form-macros/macros/nfsc_macro"/> + </tal:block> + + <tal:block tal:condition="python: type == 'smb'"> + <div metal:use-macro="here/resource-form-macros/macros/smb_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'script'"> + <div metal:use-macro="here/resource-form-macros/macros/scr_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'apache'"> + <div metal:use-macro="here/resource-form-macros/macros/apache_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'openldap'"> + <div metal:use-macro="here/resource-form-macros/macros/openldap_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'mysql'"> + <div metal:use-macro="here/resource-form-macros/macros/mysql_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'lvm'"> + <div metal:use-macro="here/resource-form-macros/macros/lvm_macro" /> + </tal:block> + + <tal:block tal:condition="python: type == 'postgres-8'"> + <div metal:use-macro="here/resource-form-macros/macros/postgres-8_macro" /> + </tal:block> + <tal:block tal:condition="python: type == 'tomcat-5'"> + <div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" /> + </tal:block> + <tal:block tal:condition="python: type == 'SAPInstance'"> + <div metal:use-macro="here/resource-form-macros/macros/SAPInstance_macro" /> + </tal:block> + <tal:block tal:condition="python: type == 'SAPDatabase'"> + <div metal:use-macro="here/resource-form-macros/macros/SAPDatabase_macro" /> + </tal:block> +</div> + +<div metal:define-macro="service-config-head-macro" tal:omit-tag=""> + <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> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + global global_resources python: here.getResourcesInfo(modelb, request); + global sstat python: here.getClusterStatus(request, ricci_agent); + global sinfo python: here.getServiceInfo(sstat, modelb, request); + global resource_list sinfo/resource_list | python:[]; + global running sinfo/running | nothing" /> + + <tal:block tal:replace="structure python: '<script type='+chr(0x22)+'text/javascript'+chr(0x22)+'>'" /> + var uuid_list = <tal:block tal:replace="sinfo/uuid_list | nothing" />; + var global_resources = <tal:block tal:replace="python: map(lambda x: str(x['name']), global_resources) or 'null'" />; + var active_resources = <tal:block tal:replace="python: map(lambda x: str(x['name']), resource_list) or 'null'" />; + var resource_names = <tal:block tal:replace="python: (map(lambda x: str(x['name']), global_resources) + map(lambda x: str(x['name']), resource_list)) or 'null'" />; + <tal:block tal:replace="structure string: </script>" /> +</div> + +<div metal:define-macro="serviceconfig-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? services ??? Configure a service'); + </script> + <tal:block metal:use-macro="here/cluster_svc-macros/macros/service-config-head-macro" /> + + <table class="cluster service" width="100%"> + <tr class="cluster service info_top"> + <td class="cluster service service_name"> + <strong class="service_name">Service Name</strong> + <span + tal:content="sinfo/name | nothing" + tal:attributes="class python: running and 'running' or 'stopped'" /> + </td> + <td class="cluster service service_action" + tal:condition="python: sinfo and 'innermap' in sinfo"> + <form method="post"> + <input type="hidden" name="pagetype" tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <select name="gourl" + tal:define="global innermap sinfo/innermap; + starturls innermap/links"> + + <option value="">Choose a Task...</option> + <tal:block tal:condition="running"> + <option + tal:attributes="value innermap/restarturl">Restart this service</option> + + <option + tal:attributes="value innermap/disableurl">Disable this service</option> + + <option value="">----------</option> + + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Relocate this service to <span tal:replace="starturl/nodename" /> + </option> + </tal:block> + + <tal:block tal:condition="innermap/is_vm | nothing"> + <option value="">----------</option> + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="exists: starturl/migrate" + tal:attributes="value starturl/url">Migrate this service to <span tal:replace="starturl/nodename" /></option> + </tal:block> + </tal:block> + </tal:block> + + <tal:block tal:condition="not: running"> + <option + tal:attributes="value innermap/enableurl">Enable this service</option> + <option value="">----------</option> + + <tal:block tal:repeat="starturl innermap/links"> + <option + tal:condition="not:exists: starturl/migrate" + tal:attributes="value starturl/url">Start this service on <span tal:replace="starturl/nodename" /> + </option> + </tal:block> + + <option value="">----------</option> + + <option + tal:attributes="value innermap/delurl | nothing" + tal:content="string:Delete this service" /> + </tal:block> + </select> + + <input type="button" value="Go" + onclick="if (this.form.gourl[this.form.gourl.selectedIndex].value && confirm(this.form.gourl[this.form.gourl.selectedIndex].text + '?')) return dropdown(this.form.gourl)" /> + </form> + </td> + </tr> + + <tr class="cluster service info_middle"> + <td class="cluster service service_status"> + <strong>Service Status</strong> + + <tal:block tal:condition="running"> + <span tal:condition="exists:innermap/current" + tal:replace="innermap/current | nothing" /> + <span tal:condition="not:exists:innermap/current" + tal:replace="string:Running" /> + </tal:block> + + <tal:block tal:condition="not:running"> + Stopped + </tal:block> + </td> + </tr> + </table> + <br/> + + <h2>Service Composition</h2> + <tal:block tal:define=" + global clusterinfo python: here.getClusterInfo(modelb, request)" /> + + <div id="resskel" class="invisible"> + <tal:block metal:use-macro="here/resource-form-macros/macros/service-compose-macro" /> + </div> + + <div class="service_comp_list" tal:attributes="id sinfo/root_uuid"> + <div tal:repeat="res resource_list" + tal:attributes=" + class python: 'service_comp rc_indent' + str(res['indent_ctr']); + id python: res['uuid']"> + + <tal:block + tal:condition="python: 'max_depth' in res and res['max_depth'] > 0" + tal:replace="structure python: '<div class=nothing>'" /> + + <tal:block tal:define=" + global type python: 'tag_name' in res and res['tag_name'] or ''; + global resourceIsRef res/ref_object | nothing" /> + + <tal:block metal:use-macro="here/cluster_svc-macros/macros/serviceconfig-type-macro" /> + + <tal:block + tal:condition="python: 'indent_ctr' in res and 'max_depth' in res" + tal:replace="structure python: '</div>' * (res['indent_ctr'] - res['max_depth'])" /> + </div> + </div> + <div class="service_comp_list"> + <form name="service_name_form"> + <table class="rescfg"> + <tr> + <td>Automatically start this service</td> + <td><input type="checkbox" name="autostart" + tal:attributes="checked python: ('autostart' in sinfo and sinfo['autostart'].lower() != 'false') and 'checked'" /> + </td> + </tr> + <tr> + <td>Run exclusive</td> + <td><input type="checkbox" name="exclusive" + tal:attributes="checked python: ('exclusive' in sinfo and sinfo['exclusive'].lower() != 'false') and 'checked'" /> + </td> + </tr> + <tr> + <td>Failover Domain</td> + <td> + <select name="domain"> + <option value="" + tal:attributes="selected python: (not 'domain' in sinfo or not sinfo['domain']) and 'selected' or ''">None</option> + <tal:block tal:repeat="f sinfo/fdoms"> + <option tal:content="f" + tal:attributes=" + value f; + selected python: ('domain' in sinfo and sinfo['domain'] == f) and 'selected' or ''" /> + </tal:block> + </select> + </td> + </tr> + <tr class="systemsTable"> + <td>Recovery policy</td> + <td> + <select name="recovery"> + <option value="">Select a recovery policy</option> + <option name="relocate" value="relocate" + tal:content="string:Relocate" + tal:attributes="selected python: ('recovery' in sinfo and sinfo['recovery'] == 'relocate') and 'selected' or ''" /> + <option name="restart" value="restart" + tal:content="string:Restart" + tal:attributes="selected python: ('recovery' in sinfo and sinfo['recovery'] == 'restart') and 'selected' or ''" /> + <option name="disable" value="disable" + tal:content="string:Disable" + tal:attributes="selected python: ('recovery' in sinfo and sinfo['recovery'] == 'disable') and 'selected' or ''" /> + </select> + </td> + </tr> + </table> + <input type="hidden" name="service_name" + tal:attributes="value sinfo/name | string:1" /> + </form> + + <form name="master" method="post"> + <input type="hidden" name="pagetype" + tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <input type="hidden" name="orig_pagetype" + tal:attributes=" + value request/pagetype | request/form/pagetype | nothing" /> + <input type="hidden" name="clustername" + tal:attributes="value clusterinfo/clustername" /> + <input type="button" value="Add a resource to this service" + onclick="add_child_resource(this.form);" /> + <input type="button" value="Save changes" + onClick="forms_to_xml(this, this.form)" /> + <input type="hidden" name="uuid" value="toplevel" /> + <input type="hidden" name="parent_uuid" value="_toplevel" /> + <input type="hidden" name="tree_level" value="-1" /> + <input type="hidden" name="svc_name" value="" /> + <input type="hidden" name="autostart" value="-1" /> + <input type="hidden" name="exclusive" value="-1" /> + <input type="hidden" name="recovery" /> + <input type="hidden" name="domain" /> + <input type="hidden" name="form_xml" /> + <input type="hidden" name="action" value="edit" /> + </form> + </div> + + <div class="invisible" id="global_resources_block"> + <tal:block tal:repeat="gr global_resources"> + <tal:block tal:define=" + global res gr; + global type python: 'tag_name' in res and res['tag_name'] or ''; + global resourceIsRef python: True" /> + <tal:block metal:use-macro="here/cluster_svc-macros/macros/serviceconfig-type-macro" /> + </tal:block> + </div> +</div> + +<div metal:define-macro="service-form"> + <h2>Service Form</h2> +</div> + +<div metal:define-macro="serviceprocess-form"> + <h2>Service Process Form</h2> +</div> + +<div metal:define-macro="servicedelete-form"> + <h2>Service Delete Form</h2> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <span tal:define=" + result python: here.serviceDelete(ricci_agent, request)" /> +</div> + +</body> +</html> /cvs/cluster/conga/luci/cluster/fdom-macros,v --> standard output revision 1.1 --- conga/luci/cluster/fdom-macros +++ - 2007-11-19 18:22:48.929331000 +0000 @@ -0,0 +1,227 @@ +<tal:comment tal:replace="nothing"> +** Copyright (C) 2006-2007 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. +</tal:comment> + +<html> + +<head> + <title tal:content="string:" /> +</head> + +<body> + +<div metal:define-macro="fdoms-form"> + <h2>Failover Domains Form</h2> +</div> + +<div metal:define-macro="fdomlist-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? failover domains'); + </script> + + <tal:block tal:define=" + global ricci_agent ri_agent | python: here.getRicciAgentForCluster(request)" /> + + <tal:block tal:define=" + global sta python: here.getClusterStatus(request, ricci_agent); + global fdominfo python: here.getFdomsInfo(modelb, request, sta);" /> + + <div class="cluster fdom" tal:repeat="fdom fdominfo"> + <div class="cluster fdom fdomname"> + <img src="fDom.png" /> + <strong class="cluster fdom">Failover Domain Name<strong>: + <a class="cluster fdom_link" + tal:attributes="href fdom/cfgurl" + tal:content="fdom/name" /> + </div> + + <div class="fdomordered"> + <h4>This Failover Domain is + <strong> + <span tal:replace="python: fdom['ordered'] == True and 'Ordered' or 'Unordered'" /> + </strong> + </div> + + <tal:block tal:define="nofailback python:fdom.get('nofailback')"> + <div class="formordered" + tal:condition="python:nofailback is True"> + <h4>Services running in this failover domain will not be failed back. + </div> + </tal:block> + + <div class="fdomrestricted"> + <h4>This Failover Domain is <span tal:replace="python: fdom['restricted'] == True and 'Restricted' or 'Unrestricted'"/></h4> + </div> + + <div class="fdommembers"> + <h3>Members of this Failover Domain</h3> + <ul class="cluster node"> + <tal:block tal:repeat="node fdom/nodeslist"> + <tal:block + tal:define="global nodeclass python: 'cluster ' + (node['status'] == '0' and 'node_active' or (node['status'] == '1' and 'node_inactive' or 'node_unknown'));" /> + <li tal:attributes="class python: nodeclass"> + <a tal:content="node/nodename" + tal:attributes=" + href node/nodecfgurl; + class python: nodeclass;" /> + </li> + </tal:block> + </ul> + </div> + + <div class="fdomservice"> + <h2>Services employing this Failover Domain: </h2> + <ul> + <tal:block tal:condition="python: len(fdom['svclist']) < 1"> + <li>No Services Defined</li> + </tal:block> + <tal:block tal:repeat="svc fdom/svclist"> + <tal:block + tal:define="global svcclass python: svc['status'] == 'true' and 'running' or 'stopped'" /> + + <li tal:attributes="class python: 'cluster cluster_service ' + svcclass"> + <a tal:content="python: svc['name'] + ' ' + (svcclass == 'running' and ('Running on node ' + svc['location']) or 'Not running')" + tal:attributes="href svc/svcurl; + class python: 'cluster cluster_service ' + svcclass" /> + </li> + </tal:block> + </ul> + <hr/> + </div> + + </div> +</div> + +<tal:block metal:define-macro="fdom-macro"> +<script type="text/javascript" + src="/luci/homebase/homebase_common.js"> +</script> +<script type="text/javascript" + src="/luci/cluster/validate_fdom.js"> +</script> + +<form method="post" action=""> + <input type="hidden" name="clustername" + tal:attributes="value request/clustername | nothing" /> + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | nothing" /> + <input type="hidden" name="oldname" + tal:condition="exists: fdom/name" + tal:attributes="value fdom/name | nothing" /> + + <table class="systemsTable" width="100%"> + <thead class="systemsTable"> + <tr class="systemsTable"> + <td width="60%"><strong>Failover Domain Name</strong></td> + <td> + <input type="text" name="name" + tal:attributes="value fdom/name | nothing" /> + </td> + </tr> + <tr class="systemsTable"> + <td>Prioritized</td> + <td> + <input type="checkbox" name="prioritized" id="prioritized" + onchange="fdom_set_prioritized(this.form, this.checked)" + tal:attributes="checked python: (fdom and 'prioritized' in fdom and fdom['prioritized'] == '1') and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td>Restrict failover to this domain's members</td> + <td> + <input type="checkbox" name="restricted" + tal:attributes="checked python: (fdom and 'restricted' in fdom and fdom['restricted'] == '1') and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td>Do not fail back services in this domain</td> + <td> + <input type="checkbox" name="nofailback" + tal:attributes="checked python: (fdom and 'nofailback' in fdom and fdom['nofailback'] == '1') and 'checked' or ''" /> + </td> + </tr> + <tr class="systemsTable"> + <td class="systemsTable" colspan="2"> + <p></p> + <p class="reshdr">Failover domain membership</p> + </td> + </tr> + </thead> + + <tfoot class="systemsTable"> + <tr class="systemsTable"><td> + <div class="hbSubmit"> + <input type="button" name="add" value="Submit" + onclick="validate_add_fdom(this.form)" /> + </div> + </td></tr> + </tfoot> + + <tbody width="60%"> + <tr class="systemsTable"> + <th class="systemsTable" width="33%">Node</th> + <th class="systemsTable" width="10%">Member</th> + <th class="systemsTable" width="57%">Priority</th> + </tr> + <tal:block tal:repeat="n python:here.getnodes(modelb)"> + <tr class="systemsTable"> + <td class="systemsTable" width="33%"> + <tal:block tal:replace="n" /> + <td class="systemsTable" width="10%"> + <input type="checkbox" + onchange="fdom_set_member(this.form, this.name, this.checked)" + tal:attributes=" + checked python: ('members' in fdom and n in fdom['members']) and 'checked' or ''; + name n" /> + </td> + <td class="systemsTable" width="75%"> + <input type="text" class="fdom_priority" + tal:attributes=" + id n; + name python: '__PRIORITY__' + n; + value python: ('members' in fdom and n in fdom['members'] and 'priority' in fdom['members'][n]) and fdom['members'][n]['priority'] or '1'; + disabled python: (not fdom or not 'prioritized' in fdom or fdom['prioritized'] != '1' or not 'members' in fdom or not n in fdom['members']) and 'disabled' or ''" /> + </td> + </tr> + </tal:block> + </tbody> + </table> +</form> + +</tal:block> + +<div metal:define-macro="fdomadd-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? failover domains ??? Add a failover domain'); + </script> + + <h2>Add a Failover Domain</h2> + <tal:block tal:define="fdom python:{}"> + <tal:block metal:use-macro="here/fdom-macros/macros/fdom-macro" /> + </tal:block> +</div> + +<div metal:define-macro="fdomconfig-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? failover domains ??? Configure a failover domain'); + </script> +</div> + +<div metal:define-macro="fdom-form"> + <h2>Failover Domain Form</h2> + <tal:block tal:define="fdom python:here.getFdomInfo(modelb, request)"> + <tal:block metal:use-macro="here/fdom-macros/macros/fdom-macro" /> + </tal:block> +</div> + +<div metal:define-macro="fdomprocess-form"> + <h2>Failover Domain Process Form</h2> +</div> + +</body> +</html> /cvs/cluster/conga/luci/cluster/fence-macros,v --> standard output revision 1.1 --- conga/luci/cluster/fence-macros +++ - 2007-11-19 18:22:49.045000000 +0000 @@ -0,0 +1,1999 @@ +<tal:comment tal:replace="nothing"> +** Copyright (C) 2006-2007 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. +</tal:comment> + +<html> + +<head> + <title tal:content="string:" /> +</head> + +<body> + +<div metal:define-macro="fencedevprocess-form"> + <h2>Fence Device Process Form</h2> +</div> + +<div metal:define-macro="fencedevs-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? shared fence devices'); + </script> + + <h2>Shared Fence Devices for Cluster: <span tal:replace="request/clustername" /></h2> + + <tal:block tal:define=" + global fencedevinfo python: here.getFencesInfo(modelb, request); + global fencedevs python: fencedevinfo['fencedevs']" /> + + <tal:block tal:repeat="fencedev fencedevs"> + <h3>Agent type: <span tal:content="fencedev/pretty_name"/></h3> + <h3>Name: <a class="running" tal:attributes="href fencedev/cfgurl"><span tal:replace="fencedev/name" /></a></h3> + <h3>Nodes using this device for fencing:</h3> + <ul> + <tal:block tal:define="global usednodes python:fencedev['nodesused']"/> + <tal:block tal:condition="python: len(usednodes) == 0"> + <li>No nodes currently employ this fence device</li> + </tal:block> + + <tal:block tal:repeat="usednode usednodes"> + <li><a class="cluster node" + tal:attributes="href usednode/nodeurl" + tal:content="usednode/nodename" /> + </li> + </tal:block> + </ul> + <hr/> + </tal:block> +</div> + +<div metal:define-macro="fencedevlist-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? fence devices'); + </script> + <h2>Fence Device List Form</h2> +</div> + +<div metal:define-macro="fencedevadd-form"> + <script type="text/javascript" + src="/luci/cluster/fence_device.js"> + </script> + + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + + <script type="text/javascript" + src="/luci/cluster/validate_fence.js"> + </script> + + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? fence devices - Add a new fence device'); + </script> + + <h2>Add a Sharable Fence Device</h2> + + <div id="invisible" class="invisible"> + <tal:block metal:use-macro="here/fence-macros/macros/shared-fence-form-list" /> + </div> + + <table id="fence_devices" class="cluster node fence"> + <tfoot class="fence"> + <tr class="cluster node fence"><td class="cluster node fence"> + </td></tr> + </tfoot> + <tbody class="fence"> + <tr class="cluster node info_top fence"> + <td class="cluster node fence"> + <span class="fence"> + <strong class="cluster node">Fencing Type</strong> + </span> + </td> + </tr> + <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/fence-macros/macros/shared-fence-option-list" /> + </select> + </form> + + <form name="fencedevaddform" action="" method="post"> + <div id="fence_container"> + </div> + <div class="hbSubmit"> + <input type="button" + value="Add this shared fence device" + onclick="validate_fence_form(this.form)" /> + + <input type="hidden" name="pagetype" + value="51" id="pagetype" /> + + <input type="hidden" name="clustername" id="pagetype" + tal:attributes="value request/clustername" /> + </form> + </td> + </tr> + </tbody> + </table> + + <script type="text/javascript"> + swap_fence_div('fence_container', + document.main_fence_form.select_div.options[document.main_fence_form.select_div.selectedIndex].value); + </script> +</div> + +<div metal:define-macro="fencedevconfig-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? fence devices - Configure a fence device'); + </script> + + <h3>Configure a Fence Device</h3> + + <tal:block tal:define="fencedevs python: here.getFenceInfo(modelb, None)"> + + <tal:block tal:condition="exists: fencedevs/fencedevs"> + <table class="systemsTable"> + <thead class="systemsTable"> + <tr class="systemsTable"> + <th class="systemsTable" width="100">Name</th> + <th class="systemsTable" width="100">Type</th> + <th class="systemsTable" width="75">Configure</th> + </tr> + </thead> + <tr class="systemsTable" tal:repeat="f fencedevs/fencedevs"> + <td class="systemsTable" tal:content="f/name | string:[unknown]"/> + <td class="systemsTable" tal:content="f/agent | string:[unknown]"/> + <td tal:condition="python: 'name' in f and 'clustername' in request"> + <a class="cluster" + tal:attributes=" + href python:str('/luci/cluster/index_html?pagetype=54&fencename=' + f['name'] + '&clustername=' + request['clustername'])"> + configure + </a> + </td> + </tr> + </table> + </tal:block> + </tal:block> +</div> + +<div metal:define-macro="fencedev-cond-ladder"> + <tal:block tal:condition="python: cur_fence_type == 'fence_apc'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_mcdata'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_wti'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_ilo'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-ilo" /> + </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> + + <tal:block tal:condition="python: cur_fence_type == 'fence_rsa'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-rsa" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_brocade'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_sanbox2'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_vixel'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_gnbd'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_egenera'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_bladecenter'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_bullpap'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_rps10'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-rps10" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_ipmilan'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-ipmilan" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_xvm'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_scsi'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" /> + </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> + + <tal:block tal:condition="exists:cur_fencedev/unknown"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-unknown" /> + </tal:block> +</div> + + +<div metal:define-macro="fencedev-form"> + <script type="text/javascript"> + set_page_title('Luci ??? cluster ??? fence devices - Configure a fence device'); + </script> + + <script type="text/javascript" + src="/luci/homebase/homebase_common.js"> + </script> + + <script type="text/javascript" + src="/luci/cluster/validate_fence.js"> + </script> + + <h2>Fence Device Form</h2> + + <div class="cluster fencedev fence"> + <tal:block tal:define=" + global cur_fencename request/fencename | nothing; + global cur_cluster request/clustername | nothing; + global cur_fence_type nothing" /> + + <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 | nothing" /> + </tal:block> + + <form name="fencedeveditform" action="" method="post"> + <tal:block + metal:use-macro="here/fence-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="fencename" + tal:attributes="value request/fencename" /> + + <div class="hbSubmit"> + <input type="button" value="Update this fence device" + onclick="validate_fence_form(this.form)" /> + </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="button" value="Delete this fence device" + onclick="if (confirm('Delete this fence device?')) this.form.submit()" /> + </div> + </form> + </div> +</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> + <option name="fence_mcdata" value="fence_mcdata">McData SAN Switch</option> + <option name="fence_sanbox2" value="fence_sanbox2">QLogic SANbox2</option> + <option name="fence_vixel" value="fence_vixel">Vixel SAN Switch</option> + <option name="fence_gnbd" value="fence_gnbd">GNBD</option> + <option name="fence_egenera" value="fence_egenera">Egenera SAN Controller</option> + <option name="fence_bladecenter" value="fence_bladecenter">IBM Blade Center</option> + <option name="fence_bullpap" value="fence_bullpap">Bull PAP</option> + <option name="fence_xvm" value="fence_xvm">Virtual Machine Fencing</option> + <option name="fence_scsi" value="fence_scsi">SCSI Fencing</option> +</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> + <option name="fence_mcdata" value="fence_mcdata">McData SAN Switch</option> + <option name="fence_sanbox2" value="fence_sanbox2">QLogic SANbox2</option> + <option name="fence_vixel" value="fence_vixel">Vixel SAN Switch</option> + <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_rsa" value="fence_rsa">IBM RSA II</option> + <option name="fence_bladecenter" value="fence_bladecenter">IBM Blade Center</option> + <option name="fence_bullpap" value="fence_bullpap">Bull PAP</option> + <option name="fence_rps10" value="fence_rps10">RPS10 Serial Switch</option> + <option name="fence_drac" value="fence_drac">Dell DRAC</option> + <option name="fence_ipmilan" value="fence_ipmilan">IPMI Lan</option> + <option name="fence_xvm" value="fence_xvm">Virtual Machine Fencing</option> + <option name="fence_scsi" value="fence_scsi">SCSI Fencing</option> + <option name="fence_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="orig_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"> + + <div id="fence_apc" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>APC Power Switch</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_apc" /> + </div> +</div> + +<div metal:define-macro="fence-form-mcdata" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_mcdata" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>McData SAN Switch</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fendev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_mcdata" /> + </div> +</div> + +<div metal:define-macro="fence-form-wti" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_wti" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>WTI Power Switch</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | nothing" /> + </td> + </tr> + <tr> + <td>Password</td> + <td> + <input name="passwd" type="password" autocomplete="off" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_wti" /> + </div> +</div> + +<div metal:define-macro="fence-form-ilo" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_ilo" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>HP iLO</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="hostname" type="text" + tal:attributes="value cur_fencedev/hostname | cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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" /> + </div> +</div> + +<div metal:define-macro="fence-form-drac" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_drac" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Dell Drac</td> + </tr> + <tr> + <td>Name</td> + <td> + <input name="name" type="text" + tal:attributes="value cur_fencedev/name | nothing" /> + </td> + </tr> + <tr> + <td>IP Address</td> + <td> + <input name="ipaddr" type="text" + tal:attributes="value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_drac" /> + </div> +</div> + +<div metal:define-macro="fence-form-rsa" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_rsa" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>IBM RSA II</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="hostname" type="text" + tal:attributes="value cur_fencedev/hostname | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_rsa" /> + </div> +</div> + +<div metal:define-macro="fence-form-brocade" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_brocade" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Brocade Fabric Switch</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_brocade" /> + </div> +</div> + +<div metal:define-macro="fence-form-sanbox2" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_sanbox2" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>QLogic SANbox2</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_sanbox2" /> + </div> +</div> + +<div metal:define-macro="fence-form-vixel" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_vixel" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Vixel SAN Switch</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | nothing" /> + </td> + </tr> + <tr> + <td>Password</td> + <td> + <input name="passwd" type="password" autocomplete="off" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_vixel" /> + </div> +</div> + +<div metal:define-macro="fence-form-gnbd" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_gnbd" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>GNBD</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>Servers (whitespace separated list)</td> + <td> + <input name="servers" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/servers | 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_gnbd" /> + </div> +</div> + +<div metal:define-macro="fence-form-egenera" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_egenera" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Egenera SAN Controller</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>CServer</td> + <td> + <input name="cserver" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/cserver | nothing" /> + </td> + </tr> + <tr> + <td>ESH Path (Optional)</td> + <td> + <input name="login" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/login | string:/opt/pan-mgr/bin/esh" /> + </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_egenera" /> + </div> +</div> + +<div metal:define-macro="fence-form-bladecenter" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_bladecenter" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>IBM Blade Center</td> + </tr> + <tr> + <td>Name</td> + <td> + <input name="name" type="text" + tal:attributes="value cur_fencedev/name | nothing" /> + </td> + </tr> + <tr> + <td>IP Address</td> + <td> + <input name="ipaddr" type="text" + tal:attributes="value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_bladecenter" /> + </div> +</div> + +<div metal:define-macro="fence-form-bullpap" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_bullpap" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Bull PAP</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</td> + <td> + <input name="ipaddr" type="text" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/ipaddr | 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 nothing" /> + </td> + </tr> + <tr> + <td> + <span title="Full path to a script to generate fence password">Password Script (optional)</span> + </td> + <td> + <input type="text" name="passwd_script" + tal:attributes=" + disabled cur_fencedev/isShared | nothing; + value cur_fencedev/passwd_script | nothing" /> + </td> + </tr> + </table> + + <tal:block tal:condition="exists: cur_fencedev"> + <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_bullpap" /> + </div> +</div> + +<div metal:define-macro="fence-form-rps10" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_rps10" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>RPS10 Serial Switch</td> + </tr> + <tr> + <td>Name</td> + <td> + <input name="name" type="text" + tal:attributes="value cur_fencedev/name | nothing" /> + </td> + </tr> + <tr> + <td>Device Name</td> + <td> + <input name="device" type="text" + tal:attributes="value cur_fencedev/device | nothing" /> + </td> + </tr> + <tr> + <td>Port</td> + <td> + <input name="port" type="text" + tal:attributes="value cur_fencedev/port | 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_rps10" /> + </div> +</div> + +<div metal:define-macro="fence-form-xvm" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_xvm" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Virtual Machine Fencing</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> + </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_xvm" /> + </div> +</div> + +<div metal:define-macro="fence-form-scsi" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_scsi" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>SCSI Reservation Fencing</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> + </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_scsi" /> + </div> +</div> + +<div metal:define-macro="fence-form-ipmilan" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_ipmilan" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>IPMI Lan</td> + </tr> + <tr> + <td>Name</td> + <td> + <input name="name" type="text" + tal:attributes="value cur_fencedev/name | nothing" /> + </td> + </tr> + <tr> + <td>IP Address</td> + <td> + <input name="ipaddr" type="text" + tal:attributes="value cur_fencedev/ipaddr | 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 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>Authentication Type</td> + <td> + <input name="auth" type="text" title="Options are to leave blank for none, password, or md5" + tal:attributes="value cur_fencedev/auth | nothing" /> + </td> + </tr> + <tr> + <td>Use Lanplus</td> + <td> + <tal:block tal:condition="exists: cur_fencedev"> + <input name="lanplus" type="checkbox" + tal:attributes="checked python: ('lanplus' in cur_fencedev and cur_fencedev['lanplus'] == '1') and 'checked' or ''" + /> + </tal:block> + <tal:block tal:condition="not:exists:cur_fencedev"> + <input name="lanplus" type="checkbox" /> + </tal:block> + </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_ipmilan" /> + </div> +</div> + +<div metal:define-macro="fence-form-manual" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_manual" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>Manual Fencing</td> + </tr> + <tr> + <td>Name</td> + <td> + <input name="name" type="text" + tal:attributes="value 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="orig_name" + tal:attributes="value cur_fencedev/name | nothing" /> + </tal:block> + <input type="hidden" name="fence_type" value="fence_manual" /> + </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-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-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" /> +</div> + +<div metal:define-macro="shared-fence-device-list"> +<tal:block tal:condition="exists: cur_fencedev"> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_apc'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-apc" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_mcdata'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-mcdata" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_wti'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-wti" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_brocade'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-brocade" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_sanbox2'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-sanbox2" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_vixel'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-vixel" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_gnbd'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-gnbd" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_egenera'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-egenera" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_bladecenter'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-bladecenter" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_bullpap'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-bullpap" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_xvm'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-xvm" /> + </tal:block> + <tal:block tal:condition="python: cur_fencedev['agent'] == 'fence_scsi'"> + <tal:block metal:use-macro="here/fence-macros/macros/fence-form-scsi" /> + </tal:block> +</tal:block> +</div> + +<div metal:define-macro="fence-instance-form-apc" + tal:omit-tag="exists: cur_fence_dev_id"> + + <div id="fence_apc_instance" name="fence_apc" class="fencedev_instance" + tal:omit-tag="exists: cur_fence_dev_id"> + <table> + <tr> + <td>Port</td> + <td> + <input name="port" type="text" + tal:attributes="value cur_instance/port | nothing" /> + </td> + </tr> + <tr> + <td>Switch (optional)</td> + <td> + <input name="switch" type="text" + tal:attributes="value cur_instance/switch | nothing" /> + </td> + </tr> + <tr><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-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> + <td> + <input name="lpan" type="text" + tal:attributes="value cur_instance/lpan | nothing" /> + </td> + </tr> + <tr> + <td>pserver</td> + <td> + <input name="pserver" type="text" + tal:attributes="value cur_instance/pserver | 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_egenera" /> + <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" + 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> + <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_wti" /> + <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" + 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> + <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_brocade" /> + <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" + 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> + <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_vixel" /> + <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" + 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> + <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_sanbox2" /> + <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" + 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> + <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_mcdata" /> + <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" + 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> + <td> + <input name="ipaddress" type="text" + tal:attributes="value cur_instance/ipaddress | 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_gnbd" /> + <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" + 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="blade" type="text" + tal:attributes="value cur_instance/blade | 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_bladecenter" /> + <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" + 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> + <td> + <input name="domain" type="text" + tal:attributes="value cur_instance/domain | 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_bullpap" /> + <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="node" disabled="disabled" + tal:attributes="value request/node | nothing" /> + </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_scsi" /> + <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" + 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> + <td> + <input name="domain" type="text" + tal:attributes="value cur_instance/domain | 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_xvm" /> + <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" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-egenera" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-wti" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-brocade" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-vixel" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-sanbox2" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-mcdata" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-gndb" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-bullpap" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-scsi" /> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-xvm" /> + <tal:block + metal:use-macro="here/fence-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/fence-macros/macros/fence-instance-form-apc" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_mcdata'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-mcdata" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_wti'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-wti" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_brocade'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-brocade" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_sanbox2'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-sanbox2" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_vixel'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-vixel" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_gnbd'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-gnbd" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_egenera'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-egenera" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_bullpap'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-bullpap" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_scsi'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-scsi" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_xvm'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-xvm" /> + </tal:block> + + <tal:block tal:condition="python: cur_fence_type == 'fence_bladecenter'"> + <tal:block + metal:use-macro="here/fence-macros/macros/fence-instance-form-bladecenter" /> + </tal:block> +</div> + +</body> +</html> /cvs/cluster/conga/luci/cluster/system_svc-macros,v --> standard output revision 1.1 --- conga/luci/cluster/system_svc-macros +++ - 2007-11-19 18:22:49.199275000 +0000 @@ -0,0 +1,118 @@ +<tal:comment tal:replace="nothing"> +** Copyright (C) 2006-2007 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. +</tal:comment> + +<html> + +<head> + <title tal:content="string:" /> +</head> + +<body> + +<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> + + <form name="svcform" method="post" action=""> + + <input type="hidden" name="pagetype" + tal:attributes="value request/pagetype | nothing" /> + + <input type="hidden" name="systemname" + tal:attributes="value request/systemname | nothing" /> + + <table class="systemsTable" + tal:define="svcinfo python:'systemname' in request and here.get_sys_svc_list(request, request['systemname']) or []"> + <tr class="systemsTable"> + <th class="systemsTable">Name</th> + <th class="systemsTable">State</th> + <th class="systemsTable">Enabled at boot</th> + <th></th> + </tr> + + <tr tal:repeat="s svcinfo"> + <td class="systemsTable"> + <span tal:content="s/name |string:[unknown]" + tal:attributes="title s/desc | nothing" /> + </td> + + <td class="systemsTable"> + <span + tal:content="s/state |string:[unknown]" + tal:attributes="id python: '__STATUS__' + s['name']" /> + </td> + + <td class="systemsTable"> + <input type="checkbox" + tal:attributes=" + name s/name; + id s/name; + checked python: s['enabled'] and 'checked' or ''" + /> + </td> + + <td class="systemsTable" + tal:define=" + restart_disabled python:not s['running'] and 'disabled' or ''; + start_disabled python:s['running'] and 'disabled' or ''; + stop_disabled python:not s['running'] and 'disabled' or ''"> + + <input type="button" + title="start this service" + class="svc_control svc_control_start" + onfocus="if (this.blur) this.blur()" + tal:attributes=" + onclick python: 'update_sys_svc(\'' + s['starturl'] + '\')'; + id python: '__START__' + s['name']; + name python: '__START__' + s['name']; + disabled start_disabled" /> + + <input type="button" + title="restart this service" + class="svc_control svc_control_restart" + onfocus="if (this.blur) this.blur()" + tal:attributes=" + onclick python: 'update_sys_svc(\'' + s['restarturl'] + '\')'; + id python: '__RESTART__' + s['name']; + name python: '__RESTART__' + s['name']; + disabled restart_disabled" /> + + <input type="button" + title="stop this service" + class="svc_control svc_control_stop" + onfocus="if (this.blur) this.blur()" + tal:attributes=" + onclick python: 'update_sys_svc(\'' + s['stopurl'] + '\')'; + id python: '__STOP__' + s['name']; + name python: '__STOP__' + s['name']; + disabled stop_disabled" /> + </td> + </tr> + <tr class="systemsTable"> + <td> + <div class="hbSubmit"> + <input type="submit" value="Update" /> + </div> + </td> + </tr> + </table> + </form> +</div> + +<div metal:define-macro="system-svc-update-form"> + <tal:block tal:define="ret python: here.validate_manage_svc(request)" /> +</div> + +</body> +</html>