diff -ur a/luci/cluster/fence-macros b/luci/cluster/fence-macros --- a/luci/cluster/fence-macros 2010-09-27 01:50:15.000000000 -0400 +++ b/luci/cluster/fence-macros 2010-09-27 02:05:04.000000000 -0400 @@ -262,6 +262,10 @@ <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_manual'"> <tal:block metal:use-macro="here/fence-macros/macros/fence-form-manual" /> </tal:block> @@ -348,6 +352,7 @@ <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_ifmib" value="fence_ifmib">IF MIB</option> </div> <div metal:define-macro="fence-option-list"> @@ -374,6 +379,7 @@ <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_ifmib" value="fence_ifmib">IF MIB</option> <option name="fence_manual" value="fence_manual">Manual Fencing</option> </div> @@ -1832,6 +1838,209 @@ </div> </div> +<div metal:define-macro="fence-form-ifmib" + tal:attributes="id cur_fencedev/name | nothing"> + + <div id="fence_ifmib" class="fencedev"> + <table> + <tr> + <td><strong class="cluster">Fence Type</strong></td> + <td>IF MIB</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_ifmib" /> + </div> +</div> + <div metal:define-macro="fence-form-cisco_mds" tal:attributes="id cur_fencedev/name | nothing"> @@ -2057,6 +2266,7 @@ <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-manual" /> </div> @@ -2076,6 +2286,7 @@ <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" /> </div> @@ -2688,6 +2899,44 @@ </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" @@ -2757,6 +3006,8 @@ 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" /> </div> <div metal:define-macro="fencedev-instance-cond-ladder" @@ -2836,6 +3087,11 @@ <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> </div> </body> diff -ur a/luci/cluster/validate_fence.js b/luci/cluster/validate_fence.js --- a/luci/cluster/validate_fence.js 2010-09-27 01:50:15.000000000 -0400 +++ b/luci/cluster/validate_fence.js 2010-09-27 02:09:32.000000000 -0400 @@ -23,6 +23,7 @@ fence_inst_validator['lpar'] = [ 'partition', 'managed' ]; fence_inst_validator['vmware'] = [ 'port' ]; fence_inst_validator['cisco_mds'] = [ 'port' ]; +fence_inst_validator['ifmib'] = [ 'port' ]; var fence_validator = []; fence_validator['apc'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script' ]; @@ -47,6 +48,7 @@ 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['vmware'] = [ 'ipaddr', 'login', 'passwd', 'passwd_script', 'vmlogin' ]; fence_validator['xvm'] = []; diff -ur a/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py b/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py --- a/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py 2010-09-27 01:50:15.000000000 -0400 +++ b/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py 2010-09-27 02:02:07.000000000 -0400 @@ -33,6 +33,7 @@ 'fence_lpar': 'LPAR Fencing', 'fence_vmware': 'VMware Fencing', 'fence_cisco_mds': 'Cisco MDS', + 'fence_ifmib': 'IF MIB', 'fence_manual': 'Manual Fencing' } @@ -52,6 +53,7 @@ 'fence_lpar': True, 'fence_vmware': True, 'fence_cisco_mds': True, + 'fence_ifmib': True, 'fence_ilo': False, 'fence_ilo_mp': False, 'fence_ipmilan': False, @@ -97,6 +99,7 @@ 'fence_lpar': ( 'partition' ), 'fence_vmware': ( 'port' ), 'fence_cisco_mds': ( 'port' ), + 'fence_ifmib': ( 'port' ), 'fence_ilo': ( ), 'fence_ipmilan': ( ), 'fence_drac': ( ), @@ -134,6 +137,8 @@ ( 'name', 'ipaddr', 'login', 'passwd', 'vmlogin', 'vmpasswd' ), 'fence_cisco_mds': ( 'name', 'ipaddr', 'login', 'passwd' ), + 'fence_ifmib': + ( 'name', 'ipaddr', 'login', 'passwd' ), 'fence_scsi': ( 'name' ), 'fence_ilo': diff -ur a/luci/site/luci/Extensions/FenceHandler.py b/luci/site/luci/Extensions/FenceHandler.py --- a/luci/site/luci/Extensions/FenceHandler.py 2010-09-27 01:50:15.000000000 -0400 +++ b/luci/site/luci/Extensions/FenceHandler.py 2010-09-27 02:01:08.000000000 -0400 @@ -1386,6 +1386,7 @@ 'fence_bullpap': val_bullpap_fd, 'fence_lpar': val_lpar_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, @@ -1727,6 +1728,7 @@ 'fence_scsi': val_scsi_fi, 'fence_lpar': val_lpar_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,