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