All of lore.kernel.org
 help / color / mirror / Atom feed
From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/cluster busy_wait-macro cluster_con ...
Date: 19 Nov 2007 18:22:49 -0000	[thread overview]
Message-ID: <20071119182249.10562.qmail@sourceware.org> (raw)

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 @@
+<div metal:define-macro="busywaitpage">
+	<table>
+		<tr><td>
+			<h2>Please be patient - this cluster's configuration is being modified.</h2>
+		</td></tr>
+
+		<tr><td>
+			<img src="100wait.gif" />
+		</td></tr>
+
+		<span tal:define="global nodereports isBusy/nodereports" />
+
+		<tr tal:repeat="nodereport nodereports"><td>
+			<tal:block
+				tal:condition="python:nodereport.get('isnodecreation') != True">
+
+				<h2><span tal:replace="nodereport/desc" /></h2>
+			</tal:block>
+
+			<tal:block
+				tal:condition="python:nodereport.get('isnodecreation') == True">
+
+				<tal:block
+					tal:condition="python:nodereport.get('iserror') == True">
+
+					<h2><span tal:content="nodereport/desc" /></h2>
+
+					<span class="errmsg"
+						tal:content="nodereport/errormessage" />
+				</tal:block>
+
+				<tal:block
+					tal:condition="python:nodereport.get('iserror') != True">
+
+					<h2><span tal:content="nodereport/desc" /></h2>
+					<em tal:content="nodereport/statusmessage | nothing" />
+					<br/>
+
+					<tal:block tal:condition="python: nodereport['statusindex'] < 1">
+						<img src="notstarted.png" />
+					</tal:block>
+
+					<tal:block tal:condition="python: nodereport['statusindex'] == 1 or nodereport['statusindex'] == 2">
+						<img src="installed.png" alt="[cluster software installed]" />
+					</tal:block>
+
+					<tal:block tal:condition="python: nodereport['statusindex'] == 3">
+						<img src="rebooted.png" alt="[cluster node rebooted]" />
+					</tal:block>
+
+					<tal:block tal:condition="python: nodereport['statusindex'] == 4 or nodereport['statusindex'] == 5">
+						<img src="configured.png" alt="[cluster node configured]" />
+					</tal:block>
+
+					<tal:block tal:condition="python: nodereport['statusindex'] == 6">
+						<img src="joined.png" alt="[cluster node joined cluster]" />
+					</tal:block>
+				</tal:block>
+			</tal:block>
+		</td></tr>
+	</table>
+</div>
/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 @@
+<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="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">&nbsp;</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>
+						&nbsp;
+					</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>



                 reply	other threads:[~2007-11-19 18:22 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071119182249.10562.qmail@sourceware.org \
    --to=rmccabe@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.