[Cluster-devel] conga/luci cluster/form-macros cluster/resourc ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Feb 16 02:12:47 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL4
Changes by: rmccabe at sourceware.org 2007-02-16 02:12:46
Modified files:
luci/cluster : form-macros resource-form-macros
resource_form_handlers.js
luci/site/luci/Extensions: ModelBuilder.py cluster_adapters.py
Added files:
luci/site/luci/Extensions: LVM.py Totem.py
Log message:
- Add support for the <totem> tag
- Add support for the LVM resource agent
- Fixes for the other new resource agents
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.176.2.10&r2=1.176.2.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.31.2.1&r2=1.31.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.29.2.1&r2=1.29.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LVM.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/Totem.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.19.2.3&r2=1.19.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.227.2.7&r2=1.227.2.8
--- conga/luci/cluster/form-macros 2007/02/14 15:06:15 1.176.2.10
+++ conga/luci/cluster/form-macros 2007/02/16 02:12:46 1.176.2.11
@@ -755,6 +755,16 @@
<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#consensus', 55, 65);">Consensus Timeout</a> (ms)
</td>
<td class="systemsTable">
@@ -4296,6 +4306,10 @@
<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>
--- conga/luci/cluster/resource-form-macros 2007/02/08 15:59:20 1.31.2.1
+++ conga/luci/cluster/resource-form-macros 2007/02/16 02:12:46 1.31.2.2
@@ -122,6 +122,7 @@
<tal:block
tal:condition="python: os_version and os_version == 'rhel4'">
<option name="APACHE" value="APACHE">Apache</option>
+ <option name="LVM" value="LVM">LVM</option>
<option name="MYSQL" value="MYSQL">MySQL</option>
<option name="OPENLDAP" value="OPENLDAP">Open LDAP</option>
<option name="POSTGRES-8" value="POSTGRES-8">
@@ -143,14 +144,12 @@
<div metal:use-macro="here/resource-form-macros/macros/nfsc_macro" />
<div metal:use-macro="here/resource-form-macros/macros/smb_macro" />
<div metal:use-macro="here/resource-form-macros/macros/scr_macro" />
-
- <tal:block tal:condition="python: os_version and os_version == 'rhel4'">
- <div metal:use-macro="here/resource-form-macros/macros/apache_macro" />
- <div metal:use-macro="here/resource-form-macros/macros/mysql_macro" />
- <div metal:use-macro="here/resource-form-macros/macros/openldap_macro" />
- <div metal:use-macro="here/resource-form-macros/macros/postgres-8_macro" />
- <div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" />
- </tal:block>
+ <div metal:use-macro="here/resource-form-macros/macros/apache_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/mysql_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/lvm_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/openldap_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/postgres-8_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" />
</div>
</div>
@@ -173,6 +172,7 @@
<tal:block
tal:condition="python: os_version and os_version == 'rhel4'">
<option name="APACHE" value="APACHE">Apache</option>
+ <option name="LVM" value="LVM">LVM</option>
<option name="MYSQL" value="MYSQL">MySQL</option>
<option name="OPENLDAP" value="OPENLDAP">Open LDAP</option>
<option name="POSTGRES-8" value="POSTGRES-8">
@@ -217,6 +217,12 @@
<div metal:use-macro="here/resource-form-macros/macros/nfsc_macro" />
<div metal:use-macro="here/resource-form-macros/macros/smb_macro" />
<div metal:use-macro="here/resource-form-macros/macros/scr_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/apache_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/mysql_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/lvm_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/openldap_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/postgres-8_macro" />
+ <div metal:use-macro="here/resource-form-macros/macros/tomcat-5_macro" />
</div>
</div>
@@ -874,7 +880,7 @@
<input type="text" size="20" name="config_file"
tal:attributes="
disabled python: editDisabled;
- value res/config_file | string:/var/lib/pgsql/data/postgresql.conf" />
+ value res/attrs/config_file | string:/var/lib/pgsql/data/postgresql.conf" />
</td>
</tr>
@@ -884,7 +890,7 @@
<input type="text" size="20" name="postmaster_user"
tal:attributes="
disabled python: editDisabled;
- value res/postmaster_user | string:postgres" />
+ value res/attrs/postmaster_user | string:postgres" />
</td>
</tr>
@@ -894,7 +900,7 @@
<input type="text" size="20" name="postmaster_options"
tal:attributes="
disabled python: editDisabled;
- value res/postmaster_options | nothing" />
+ value res/attrs/postmaster_options | nothing" />
</td>
</tr>
@@ -904,7 +910,7 @@
<input type="text" size="20" name="shutdown_wait"
tal:attributes="
disabled python: editDisabled;
- value res/shutdown_wait | string:0" />
+ value res/attrs/shutdown_wait | string:0" />
</td>
</tr>
</table>
@@ -967,7 +973,7 @@
<input type="text" size="20" name="server_root"
tal:attributes="
disabled python: editDisabled;
- value res/server_root | string:/etc/httpd" />
+ value res/attrs/server_root | string:/etc/httpd" />
</td>
</tr>
@@ -977,7 +983,7 @@
<input type="text" size="20" name="config_file"
tal:attributes="
disabled python: editDisabled;
- value res/config_file | string:conf/httpd.conf" />
+ value res/attrs/config_file | string:conf/httpd.conf" />
</td>
</tr>
@@ -987,7 +993,7 @@
<input type="text" size="20" name="httpd_options"
tal:attributes="
disabled python: editDisabled;
- value res/httpd_options | nothing" />
+ value res/attrs/httpd_options | nothing" />
</td>
</tr>
@@ -997,7 +1003,7 @@
<input type="text" size="20" name="shutdown_wait"
tal:attributes="
disabled python: editDisabled;
- value res/shutdown_wait | string:0" />
+ value res/attrs/shutdown_wait | string:0" />
</td>
</tr>
</table>
@@ -1060,7 +1066,7 @@
<input type="text" size="20" name="config_file"
tal:attributes="
disabled python: editDisabled;
- value res/config_file | string:/etc/openldap/slapd.conf" />
+ value res/attrs/config_file | string:/etc/openldap/slapd.conf" />
</td>
</tr>
@@ -1070,7 +1076,7 @@
<input type="text" size="20" name="url_list"
tal:attributes="
disabled python: editDisabled;
- value res/url_list | string:ldap:///" />
+ value res/attrs/url_list | string:ldap:///" />
</td>
</tr>
@@ -1080,7 +1086,7 @@
<input type="text" size="20" name="slapd_options"
tal:attributes="
disabled python: editDisabled;
- value res/slapd_options | nothing" />
+ value res/attrs/slapd_options | nothing" />
</td>
</tr>
@@ -1090,10 +1096,83 @@
<input type="text" size="20" name="shutdown_wait"
tal:attributes="
disabled python: editDisabled;
- value res/shutdown_wait | string:0" />
+ value res/attrs/shutdown_wait | string:0" />
+ </td>
+ </tr>
+ </table>
+ <div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
+ </form>
+</div>
+
+<div class="rescfg" name="LVM"
+ tal:attributes="id res/name | nothing" metal:define-macro="lvm_macro">
+
+ <p class="reshdr">LVM Resource Configuration</p>
+
+ <form method="post"
+ tal:attributes="name res/parent_uuid | nothing"
+ tal:define="editDisabled resourceIsRef | nothing">
+
+ <input name="immutable" type="hidden" value="true"
+ tal:condition="editDisabled" />
+
+ <input name="edit" type="hidden" value="true"
+ tal:condition="python: ptype == '33' and True or False" />
+
+ <input name="pagetype" type="hidden"
+ tal:attributes="value python: ptype" />
+
+ <input name="global" type="hidden"
+ tal:attributes="value resourceIsRef | nothing" />
+
+ <input name="parent_uuid" type="hidden"
+ tal:attributes="value res/parent_uuid | nothing" />
+
+ <input name="uuid" type="hidden"
+ tal:attributes="value res/uuid | nothing" />
+
+ <input name="tree_level" type="hidden"
+ tal:attributes="value res/indent_ctr | string:0" />
+
+ <input name="clustername" type="hidden"
+ tal:attributes="
+ value request/clustername | request/form/clustername | nothing" />
+
+ <input name="oldname" type="hidden"
+ tal:attributes="value res/name | nothing" />
+
+ <input name="type" type="hidden" value="lvm" />
+
+ <table class="systemsTable">
+ <tr class="systemsTable">
+ <td class="systemsTable">Name</td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="resourceName"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/name | nothing" />
+ </td>
+ </tr>
+ <tr class="systemsTable">
+ <td class="systemsTable">Volume Group Name</td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="vg_name"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/vg_name | nothing" />
+ </td>
+ </tr>
+ <tr class="systemsTable">
+ <td class="systemsTable">Logical Volume Name</td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="lv_name"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/lv_name | nothing" />
</td>
</tr>
</table>
+
<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
</form>
</div>
@@ -1153,7 +1232,7 @@
<input type="text" size="20" name="config_file"
tal:attributes="
disabled python: editDisabled;
- value res/config_file | string:/etc/my.cnf" />
+ value res/attrs/config_file | string:/etc/my.cnf" />
</td>
</tr>
@@ -1163,7 +1242,7 @@
<input type="text" size="20" name="listen_address"
tal:attributes="
disabled python: editDisabled;
- value res/listen_address | nothing" />
+ value res/attrs/listen_address | nothing" />
</td>
</tr>
@@ -1173,7 +1252,7 @@
<input type="text" size="20" name="mysqld_options"
tal:attributes="
disabled python: editDisabled;
- value res/mysqld_options | nothing" />
+ value res/attrs/mysqld_options | nothing" />
</td>
</tr>
@@ -1183,7 +1262,7 @@
<input type="text" size="20" name="shutdown_wait"
tal:attributes="
disabled python: editDisabled;
- value res/shutdown_wait | string:0" />
+ value res/attrs/shutdown_wait | string:0" />
</td>
</tr>
</table>
@@ -1246,7 +1325,7 @@
<input type="text" size="20" name="config_file"
tal:attributes="
disabled python: editDisabled;
- value res/config_file | string:/etc/tomcat5/tomcat5.conf" />
+ value res/attrs/config_file | string:/etc/tomcat5/tomcat5.conf" />
</td>
</tr>
@@ -1256,7 +1335,7 @@
<input type="text" size="20" name="tomcat_user"
tal:attributes="
disabled python: editDisabled;
- value res/tomcat_user | string:tomcat" />
+ value res/attrs/tomcat_user | string:tomcat" />
</td>
</tr>
@@ -1266,7 +1345,7 @@
<input type="text" size="20" name="catalina_options"
tal:attributes="
disabled python: editDisabled;
- value res/catalina_options | nothing" />
+ value res/attrs/catalina_options | nothing" />
</td>
</tr>
@@ -1276,7 +1355,7 @@
<input type="text" size="20" name="catalina_base"
tal:attributes="
disabled python: editDisabled;
- value res/catalina_base | string:/usr/share/tomcat5" />
+ value res/attrs/catalina_base | string:/usr/share/tomcat5" />
</td>
</tr>
@@ -1286,7 +1365,7 @@
<input type="text" size="20" name="shutdown_wait"
tal:attributes="
disabled python: editDisabled;
- value res/shutdown_wait | string:30" />
+ value res/attrs/shutdown_wait | string:30" />
</td>
</tr>
</table>
--- conga/luci/cluster/resource_form_handlers.js 2007/02/08 15:59:20 1.29.2.1
+++ conga/luci/cluster/resource_form_handlers.js 2007/02/16 02:12:46 1.29.2.2
@@ -118,6 +118,11 @@
return (errors);
}
+function validate_lvm(form) {
+ var errors = new Array();
+ return (errors);
+}
+
function validate_openldap(form) {
var errors = new Array();
return (errors);
@@ -258,6 +263,7 @@
form_validators['postgres-8'] = validate_postgres8;
form_validators['openldap'] = validate_openldap;
form_validators['mysql'] = validate_mysql;
+form_validators['lvm'] = validate_lvm;
function check_form(form) {
var valfn = form_validators[form.type.value];
/cvs/cluster/conga/luci/site/luci/Extensions/LVM.py,v --> standard output
revision 1.1.2.1
--- conga/luci/site/luci/Extensions/LVM.py
+++ - 2007-02-16 02:12:46.864267000 +0000
@@ -0,0 +1,15 @@
+import string
+from TagObject import TagObject
+from BaseResource import BaseResource
+
+import gettext
+_ = gettext.gettext
+
+TAG_NAME = "lvm"
+RESOURCE_TYPE = _("LVM")
+
+class LVM(BaseResource):
+ def __init__(self):
+ BaseResource.__init__(self)
+ self.TAG_NAME = TAG_NAME
+ self.resource_type = RESOURCE_TYPE
/cvs/cluster/conga/luci/site/luci/Extensions/Totem.py,v --> standard output
revision 1.1.2.1
--- conga/luci/site/luci/Extensions/Totem.py
+++ - 2007-02-16 02:12:46.949829000 +0000
@@ -0,0 +1,9 @@
+import string
+from TagObject import TagObject
+
+TAG_NAME = "totem"
+
+class Totem(TagObject):
+ def __init__(self):
+ TagObject.__init__(self)
+ self.TAG_NAME = TAG_NAME
--- conga/luci/site/luci/Extensions/ModelBuilder.py 2007/02/08 03:46:51 1.19.2.3
+++ conga/luci/site/luci/Extensions/ModelBuilder.py 2007/02/16 02:12:46 1.19.2.4
@@ -17,6 +17,7 @@
from Method import Method
from Device import Device
from Cman import Cman
+from Totem import Totem
from Gulm import Gulm
from Lockserver import Lockserver
from Ip import Ip
@@ -25,6 +26,12 @@
from NFSExport import NFSExport
from Fs import Fs
from Samba import Samba
+from Apache import Apache
+from LVM import LVM
+from MySQL import MySQL
+from OpenLDAP import OpenLDAP
+from Postgres8 import Postgres8
+from Tomcat5 import Tomcat5
from Multicast import Multicast
from FenceDaemon import FenceDaemon
from FenceXVMd import FenceXVMd
@@ -52,6 +59,7 @@
'fencedevices':FenceDevices,
'method':Method,
'cman':Cman,
+ 'totem':Totem,
'gulm':Gulm,
'lockserver':Lockserver,
'rm':Rm,
@@ -65,6 +73,12 @@
'ip':Ip,
'fs':Fs,
'smb':Samba,
+ 'apache':Apache,
+ 'lvm':LVM,
+ 'mysql':MySQL,
+ 'openldap':OpenLDAP,
+ 'postgres-8':Postgres8,
+ 'tomcat-5':Tomcat5,
'fence_daemon':FenceDaemon,
'multicast':Multicast,
'clusterfs':Clusterfs,
@@ -91,6 +105,7 @@
GULM_TAG_STR="gulm"
MCAST_STR="multicast"
CMAN_PTR_STR="cman"
+TOTEM_PTR_STR="totem"
QUORUMD_PTR_STR="quorumd"
###-----------------------------------
@@ -113,6 +128,7 @@
self.cluster_ptr = None
self.GULM_ptr = None
self.CMAN_ptr = None
+ self.TOTEM_ptr = None
self.clusternodes_ptr = None
self.failoverdomains_ptr = None
self.fencedevices_ptr = None
@@ -219,6 +235,8 @@
self.lock_type = GULM_TYPE
elif parent_node.nodeName == CMAN_PTR_STR:
self.CMAN_ptr = new_object
+ elif parent_node.nodeName == TOTEM_PTR_STR:
+ self.TOTEM_ptr = new_object
elif parent_node.nodeName == MCAST_STR:
self.usesMulticast = True
elif parent_node.nodeName == FENCE_XVMD_STR:
@@ -597,6 +615,17 @@
raise GeneralError('FATAL',"Couldn't find VM name %s in current list" % name)
+ def del_totem(self):
+ if self.TOTEM_ptr is not None:
+ self.cluster_ptr.removeChild(self.TOTEM_ptr)
+ self.TOTEM_ptr = None
+
+ def add_totem(self, obj):
+ self.del_totem()
+ if self.TOTEM_ptr is None:
+ self.cluster_ptr.addChild(obj)
+ self.TOTEM_ptr = obj
+
def hasFenceXVM(self):
return self.fence_xvmd_ptr is not None
@@ -796,6 +825,12 @@
def getGULMPtr(self):
return self.GULM_ptr
+ def getCMANPtr(self):
+ return self.CMAN_ptr
+
+ def getTotemPtr(self):
+ return self.TOTEM_ptr
+
def getLockServer(self, name):
children = self.GULM_ptr.getChildren()
for child in children:
@@ -839,6 +874,8 @@
if self.lock_type == DLM_TYPE:
#remove <cman>
self.cluster_ptr.removeChild(self.CMAN_ptr)
+ if self.TOTEM_ptr is not None:
+ self.del_totem()
self.CMAN_ptr = None
#add gulm tag
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/02/13 19:50:39 1.227.2.7
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/02/16 02:12:46 1.227.2.8
@@ -29,11 +29,13 @@
from FenceXVMd import FenceXVMd
from Script import Script
from Samba import Samba
+from LVM import LVM
from QuorumD import QuorumD
from Heuristic import Heuristic
from clusterOS import resolveOSType
from Fence import Fence
from Method import Method
+from Totem import Totem
from Device import Device
from FenceHandler import validateNewFenceDevice, FENCE_OPTS, validateFenceDevice, validate_fenceinstance
from GeneralError import GeneralError
@@ -1183,6 +1185,377 @@
luci_log.debug_verbose('unable to update general properties: %s' % str(e))
errors.append('Unable to update the cluster configuration.')
+ try:
+ cluster_version = form['cluster_version'].strip()
+ if cluster_version != 'rhel5':
+ raise Exception, 'not rhel5'
+ except:
+ if len(errors) > 0:
+ return (False, {'errors': errors})
+ return (True, {})
+
+# totem = model.getTotemPtr()
+# if totem is None:
+# cp = model.getClusterPtr()
+# totem = Totem()
+# cp.addChild(totem)
+ totem = Totem()
+
+ if form.has_key('secauth'):
+ totem.addAttribute('secauth', '1')
+ else:
+ totem.addAttribute('secauth', '0')
+
+ try:
+ rrp_mode = form['rrp_mode'].strip().lower()
+ if not rrp_mode:
+ raise KeyError, 'rrp_mode'
+ if rrp_mode != 'none' and rrp_mode != 'active' and 'rrp_mode' != 'passive':
+ raise Exception, '%s is an invalid value for redundant ring protocol mode' % rrp_mode
+ totem.addAttribute('rrp_mode', str(rrp_mode))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('rrp_mode')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ net_mtu = form['net_mtu'].strip()
+ if not net_mtu:
+ raise KeyError, 'net_mtu'
+ net_mtu = int(net_mtu)
+ if net_mtu < 1:
+ raise ValueError, '%d is an invalid value for network MTU' % net_mtu
+ totem.addAttribute('net_mtu', str(net_mtu))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('net_mtu')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ threads = form['threads'].strip()
+ if not threads:
+ raise KeyError, 'threads'
+ threads = int(threads)
+ if threads < 0:
+ raise ValueError, '%d is an invalid value for number of threads' % threads
+ totem.addAttribute('threads', str(threads))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('threads')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ vsftype = form['vsftype'].strip().lower()
+ if not vsftype:
+ raise KeyError, 'vsftype'
+ if vsftype != 'none' and vsftype != 'ykd':
+ raise ValueError, '%s is an invalid value for virtual synchrony type' % vsftype
+ totem.addAttribute('vsftype', str(vsftype))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('vsftype')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ token = form['token'].strip()
+ if not token:
+ raise KeyError, 'token'
+ token = int(token)
+ if token < 1:
+ raise ValueError, '%d is an invalid value for token timeout' % token
+ totem.addAttribute('token', str(token))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('token')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ token_retransmit = form['token_retransmit'].strip()
+ if not token_retransmit:
+ raise KeyError, 'token_retransmit'
+ token_retransmit = int(token_retransmit)
+ if token_retransmit < 1:
+ raise ValueError, '%d is an invalid value for token retransmit' % token_retransmit
+ totem.addAttribute('token_retransmit', str(token_retransmit))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('token_retransmit')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ hold = form['hold'].strip()
+ if not hold:
+ raise KeyError, 'hold'
+ hold = int(hold)
+ if hold < 1:
+ raise ValueError, '%d is not a valid value for hold token timeout' % hold
+ totem.addAttribute('hold', str(hold))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('hold')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ retransmits_before_loss = form['retransmits_before_loss'].strip()
+ if not retransmits_before_loss:
+ raise KeyError, 'retransmits_before_loss'
+ retransmits_before_loss = int(retransmits_before_loss)
+ if retransmits_before_loss < 1:
+ raise ValueError, '%d is an invalid value for number of retransmits before loss' % retransmits_before_loss
+ totem.addAttribute('retransmits_before_loss', str(retransmits_before_loss))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('retransmits_before_loss')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ join = form['join'].strip()
+ if not join:
+ raise KeyError, 'join'
+ join = int(join)
+ if join < 1:
+ raise ValueError, '%d is an invalid value for join timeout' % join
+ totem.addAttribute('join', str(join))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('join')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ send_join = form['send_join'].strip()
+ if not send_join:
+ raise KeyError, 'send_join'
+ send_join = int(send_join)
+ if send_join < 0:
+ raise ValueError, '%d is an invalid value for time to wait before sending a join message' % send_join
+ totem.addAttribute('send_join', str(send_join))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('send_join')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ consensus = form['consensus'].strip()
+ if not consensus:
+ raise KeyError, 'consensus'
+ consensus = int(consensus)
+ if consensus < 1:
+ raise ValueError, '%d is an invalid value for consensus timeout' % consensus
+ totem.addAttribute('consensus', str(consensus))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('consensus')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ merge = form['merge'].strip()
+ if not merge:
+ raise KeyError, 'merge'
+ merge = int(merge)
+ if merge < 1:
+ raise ValueError, '%d is an invalid value for merge detection timeout' % merge
+ totem.addAttribute('merge', str(merge))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('merge')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ downcheck = form['downcheck'].strip()
+ if not downcheck:
+ raise KeyError, 'downcheck'
+ downcheck = int(downcheck)
+ if downcheck < 1:
+ raise ValueError, '%d is an invalid value for interface down check timeout' % downcheck
+ totem.addAttribute('downcheck', str(downcheck))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('downcheck')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ fail_to_recv_const = form['fail_to_recv_const'].strip()
+ if not fail_to_recv_const:
+ raise KeyError, 'fail_to_recv_const'
+ fail_to_recv_const = int(fail_to_recv_const)
+ if fail_to_recv_const < 1:
+ raise ValueError, '%d is an invalid value for fail to receive constant' % fail_to_recv_const
+ totem.addAttribute('fail_to_recv_const', str(fail_to_recv_const))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('fail_to_recv_const')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ seqno_unchanged_const = form['seqno_unchanged_const'].strip()
+ if not seqno_unchanged_const:
+ raise KeyError, 'seqno_unchanged_const'
+ seqno_unchanged_const = int(seqno_unchanged_const)
+ if seqno_unchanged_const < 1:
+ raise ValueError, '%d is an invalid value for rotations with no multicast traffic before merge detection timeout started' % seqno_unchanged_const
+ totem.addAttribute('seqno_unchanged_const', str(seqno_unchanged_const))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('seqno_unchanged_const')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ heartbeat_failures_allowed = form['heartbeat_failures_allowed'].strip()
+ if not heartbeat_failures_allowed:
+ raise KeyError, 'heartbeat_failures_allowed'
+ heartbeat_failures_allowed = int(heartbeat_failures_allowed)
+ if heartbeat_failures_allowed < 0:
+ raise ValueError, '%d is an invalid value for number of heartbeat failures allowed' % heartbeat_failures_allowed
+ totem.addAttribute('heartbeat_failures_allowed', str(heartbeat_failures_allowed))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('heartbeat_failures_allowed')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ max_network_delay = form['max_network_delay'].strip()
+ if not max_network_delay:
+ raise KeyError, 'max_network_delay'
+ max_network_delay = int(max_network_delay)
+ if max_network_delay < 1:
+ raise ValueError, '%d is an invalid value for maximum network delay' % max_network_delay
+ totem.addAttribute('max_network_delay', str(max_network_delay))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('max_network_delay')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ window_size = form['window_size'].strip()
+ if not window_size:
+ raise KeyError, 'window_size'
+ window_size = int(window_size)
+ if window_size < 1:
+ raise ValueError, '%d is an invalid value for window size' % window_size
+ totem.addAttribute('window_size', str(window_size))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('window_size')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ max_messages = form['max_messages'].strip()
+ if not max_messages:
+ raise KeyError, 'max_messages'
+ max_messages = int(max_messages)
+ if max_messages < 1:
+ raise ValueError, '%d is an invalid value for maximum messages' % max_messages
+ totem.addAttribute('max_messages', str(max_messages))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('max_messages')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ rrp_problem_count_timeout = form['rrp_problem_count_timeout'].strip()
+ if not rrp_problem_count_timeout:
+ raise KeyError, 'rrp_problem_count_timeout'
+ rrp_problem_count_timeout = int(rrp_problem_count_timeout)
+ if rrp_problem_count_timeout < 1:
+ raise ValueError, '%d is an invalid value for RRP problem count timeout' % rrp_problem_count_timeout
+ totem.addAttribute('rrp_problem_count_timeout', str(rrp_problem_count_timeout))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('rrp_problem_count_timeout')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ rrp_problem_count_threshold = form['rrp_problem_count_threshold'].strip()
+ if not rrp_problem_count_threshold:
+ raise KeyError, 'rrp_problem_count_threshold'
+ rrp_problem_count_threshold = int(rrp_problem_count_threshold)
+ if rrp_problem_count_threshold < 1:
+ raise ValueError, '%d is an invalid value for RRP problem count threshold' % rrp_problem_count_threshold
+ totem.addAttribute('rrp_problem_count_threshold', str(rrp_problem_count_threshold))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('rrp_problem_count_threshold')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
+ try:
+ rrp_token_expired_timeout = form['rrp_token_expired_timeout'].strip()
+ if not rrp_token_expired_timeout:
+ raise KeyError, 'rrp_token_expired_timeout'
+ rrp_token_expired_timeout = int(rrp_token_expired_timeout)
+ if rrp_token_expired_timeout < 1:
+ raise ValueError, '%d is an invalid value for RRP token expired timeout' % rrp_token_expired_timeout
+ totem.addAttribute('rrp_token_expired_timeout', str(rrp_token_expired_timeout))
+ except KeyError, e:
+ try:
+ totem.removeAttribute('rrp_token_expired_timeout')
+ except:
+ pass
+ except Exception, e:
+ errors.append(str(e))
+
if len(errors) > 0:
return (False, {'errors': errors})
return (True, {})
@@ -2200,7 +2573,7 @@
try:
vm_path = request.form['vmpath'].strip()
if not vm_path:
- raise 'blank'
+ raise Exception, 'blank'
except Exception, e:
luci_log.debug_verbose('validateVM1: no vm path: %s' % str(e))
errors.append('No path to the virtual machine configuration file was given.')
@@ -6524,9 +6897,9 @@
try:
shutdown_wait = int(form['shutdown_wait'].strip())
- res.addAttribute('shutdown_wait', shutdown_wait)
+ res.addAttribute('shutdown_wait', str(shutdown_wait))
except KeyError, e:
- res.addAttribute('shutdown_wait', 0)
+ res.addAttribute('shutdown_wait', '0')
except Exception, e:
err = str(e)
errors.append(err)
@@ -6623,9 +6996,9 @@
try:
shutdown_wait = int(form['shutdown_wait'].strip())
- res.addAttribute('shutdown_wait', shutdown_wait)
+ res.addAttribute('shutdown_wait', str(shutdown_wait))
except KeyError, e:
- res.addAttribute('shutdown_wait', 0)
+ res.addAttribute('shutdown_wait', '0')
except Exception, e:
err = str(e)
errors.append(err)
@@ -6722,9 +7095,9 @@
try:
shutdown_wait = int(form['shutdown_wait'].strip())
- res.addAttribute('shutdown_wait', shutdown_wait)
+ res.addAttribute('shutdown_wait', str(shutdown_wait))
except KeyError, e:
- res.addAttribute('shutdown_wait', 0)
+ res.addAttribute('shutdown_wait', '0')
except Exception, e:
err = str(e)
errors.append(err)
@@ -6821,9 +7194,9 @@
try:
shutdown_wait = int(form['shutdown_wait'].strip())
- res.addAttribute('shutdown_wait', shutdown_wait)
+ res.addAttribute('shutdown_wait', str(shutdown_wait))
except KeyError, e:
- res.addAttribute('shutdown_wait', 0)
+ res.addAttribute('shutdown_wait', '0')
except Exception, e:
err = str(e)
errors.append(err)
@@ -6930,9 +7303,9 @@
try:
shutdown_wait = int(form['shutdown_wait'].strip())
- res.addAttribute('shutdown_wait', shutdown_wait)
+ res.addAttribute('shutdown_wait', str(shutdown_wait))
except KeyError, e:
- res.addAttribute('shutdown_wait', 0)
+ res.addAttribute('shutdown_wait', '0')
except Exception, e:
err = str(e)
errors.append(err)
@@ -6942,6 +7315,80 @@
return [None, None, errors]
return [res, model, None]
+def addLVM(request, form=None):
+ errors = list()
+
+ if form is None:
+ form = request.form
+
+ if not form:
+ luci_log.debug_verbose('addLVM0: form is missing')
+ return None
+
+ model = request.SESSION.get('model')
+ if not model:
+ luci_log.debug_verbose('addLVM1: model is missing')
+ return None
+
+ res = None
+ if form.has_key('edit'):
+ try:
+ oldname = form['oldname'].strip()
+ if not oldname:
+ raise Exception, 'oldname is blank.'
+ try:
+ res = getResourceForEdit(model, oldname)
+ except KeyError, e:
+ errors.append('No LVM resource named \"%s\" exists.' % oldname)
+ except Exception, e:
+ errors.append('No original name was found for this LVM resource.')
+ luci_log.debug_verbose('addLVM2: %s' % str(e))
+ else:
+ try:
+ res = LVM()
+ if not res:
+ raise Exception, 'could not create LVM object'
+ except Exception, e:
+ errors.append('An error occurred while creating a LVM resource.')
+ luci_log.debug_verbose('addLVM3: %s' % str(e))
+
+ if not res:
+ return [None, None, errors]
+
+ try:
+ name = form['resourceName'].strip()
+ if not name:
+ raise Exception, 'No name was given for this LVM resource.'
+ res.addAttribute('name', name)
+ except Exception, e:
+ err = str(e)
+ errors.append(err)
+ luci_log.debug_verbose('addLVM4: %s' % err)
+
+ try:
+ vg_name = form['vg_name'].strip()
+ if not vg_name:
+ raise KeyError, 'No volume group name was given.'
+ res.addAttribute('vg_name', vg_name)
+ except Exception, e:
+ err = str(e)
+ errors.append(err)
+ luci_log.debug_verbose('addLVM5: %s' % err)
+
+ try:
+ lv_name = form['lv_name'].strip()
+ if not lv_name:
+ raise KeyError, 'No logical volume name was given.'
+ res.addAttribute('lv_name', lv_name)
+ except Exception, e:
+ err = str(e)
+ errors.append(err)
+ luci_log.debug_verbose('addLVM6: %s' % err)
+
+ if len(errors) > 1:
+ return [None, None, errors]
+ return [res, model, None]
+
resourceAddHandler = {
'ip': addIp,
'fs': addFs,
@@ -6955,6 +7402,7 @@
'postgres-8': addPostgres8,
'apache': addApache,
'openldap': addOpenLDAP,
+ 'lvm': addLVM,
'mysql': addMySQL
}
More information about the Cluster-devel
mailing list