[Cluster-devel] conga/luci/site/luci/Extensions LuciClusterInf ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Thu Jun 28 19:31:46 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-06-28 19:31:46
Modified files:
luci/site/luci/Extensions: LuciClusterInfo.py
cluster_adapters.py
Log message:
cleanup
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.258&r2=1.259
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/06/25 16:11:30 1.3
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/06/28 19:31:45 1.4
@@ -1544,7 +1544,7 @@
rc = getRicciAgent(self, clustername)
if not rc:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('GMFC0: unable to find a ricci agent for %s' % clustername)
+ luci_log.debug_verbose('GMFC0: no ricci agent for %s' % clustername)
return None
try:
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/06/27 08:14:13 1.258
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/06/28 19:31:45 1.259
@@ -25,7 +25,6 @@
from HelperFunctions import resolveOSType
from LuciSyslog import get_logger
from ResourceHandler import create_resource
-from system_adapters import validate_svc_update
from homebase_adapters import parseHostForm
from LuciClusterInfo import getClusterInfo, getModelBuilder, getModelForCluster
from LuciClusterActions import propagateClusterConfAsync
@@ -44,8 +43,7 @@
REDIRECT_SEC, LUCI_CLUSTER_BASE_URL
from FenceHandler import validateNewFenceDevice, \
- validateFenceDevice, validate_fenceinstance, \
- FD_VAL_FAIL, FD_VAL_SUCCESS
+ validateFenceDevice, validate_fenceinstance, FD_VAL_SUCCESS
from ricci_communicator import RicciCommunicator, RicciError, \
batch_status, extract_module_status
@@ -932,7 +930,7 @@
ret = propagateClusterConfAsync(self, model, rc=None,
action=action_type, pmsg=action_msg % service_name)
- if ret[0] is False:
+ if ret[0] is not True:
return ret
response = request.RESPONSE
@@ -1221,9 +1219,6 @@
version_num = int(form['cfgver'])
if version_num < old_ver:
raise ValueError, 'configuration version number must be %d or greater' % old_ver
- if version_num != old_ver:
- # we'll increment the cluster version before propagating it.
- version_num -= 1
except KeyError, e:
errors.append('No cluster configuration version was given')
except ValueError, e:
@@ -1422,131 +1417,84 @@
def validateConfigCluster(self, request):
errors = list()
messages = list()
- rc = None
+ fvar = GetReqVars(request, [ 'configtype', 'clustername', 'URL' ])
- try:
- model = LuciExtractCluModel(self, request)
- except Exception, e:
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
+ clustername = fvar['clustername']
+
+ model = LuciExtractCluModel(self, request, clustername)
+ if model is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC0a: no model, no cluster name')
+ luci_log.debug_verbose('VCC0: no model, no cluster name')
return (False, {'errors': ['No cluster model was found']})
- try:
- if not request.form.has_key('configtype'):
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC2: no configtype')
- raise Exception, 'no config type'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC2a: %r %s' % (e, str(e)))
- return (False, {'errors': [ 'No configuration type was submitted' ]})
+ if clustername is None:
+ clustername = model.getClusterName()
- if not configFormValidators.has_key(request.form['configtype']):
+ config_type = fvar['configtype']
+ if config_type is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC3: invalid config type: %s' \
- % request.form['configtype'])
- return (False, { 'errors': [ 'An invalid configuration type was submitted' ]})
+ luci_log.debug_verbose('VCC1: no config type')
+ return (False, {'errors': [ 'No configuration type was given' ]})
- try:
- cp = model.getClusterPtr()
- except:
+ if not configFormValidators.has_key(config_type):
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC3a: getClusterPtr failed')
- return (False, {'errors': ['No cluster model was found']})
+ luci_log.debug_verbose('VCC2: invalid config type: %s' \
+ % config_type)
+ return (False, { 'errors': [ 'An invalid configuration type "%s" was submitted' % config_type ]})
- config_validator = configFormValidators[request.form['configtype']]
+ config_validator = configFormValidators[config_type]
ret = config_validator(model, request.form)
retcode = ret[0]
- if 'errors' in ret[1]:
+ if ret[1].has_key('errors'):
errors.extend(ret[1]['errors'])
-
- if 'messages' in ret[1]:
+ if ret[1].has_key('messages'):
messages.extend(ret[1]['messages'])
- if retcode is True:
- try:
- config_ver = int(cp.getConfigVersion()) + 1
- # always increment the configuration version
- cp.setConfigVersion(str(config_ver))
- model.setModified(True)
- conf_str = model.exportModelAsString()
- if not conf_str:
- raise Exception, 'conf_str is none'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC4: export model as string failed: %r %s' % (e, str(e)))
- errors.append('Unable to store the new cluster configuration')
-
- try:
- clustername = model.getClusterName()
- if not clustername:
- raise Exception, 'cluster name from model.getClusterName() is blank'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC5: error: getClusterName: %r %s' \
- % (e, str(e)))
- errors.append('Unable to determine cluster name from model')
-
- if len(errors) > 0:
- return (retcode, {'errors': errors, 'messages': messages})
-
- if not rc:
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC6: unable to find a ricci agent for the %s cluster' % clustername)
- errors.append('Unable to contact a ricci agent for cluster %s' \
- % clustername)
-
- if rc:
- batch_id, result = rq.setClusterConf(rc, str(conf_str))
- if batch_id is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VCC7: setCluserConf: batchid or result is None')
- errors.append('Unable to propagate the new cluster configuration for %s' % clustername)
- else:
- try:
- set_node_flag(self, clustername, rc.hostname(), batch_id, CLUSTER_CONFIG, 'Updating cluster configuration')
- except:
- pass
+ if retcode is not True or len(errors) > 0:
+ return (False, {'errors': errors, 'messages': messages})
- if len(errors) < 1:
- messages.append('The cluster properties have been updated')
- else:
+ ret = propagateClusterConfAsync(self, model, None,
+ CLUSTER_CONFIG, 'Updating cluster configuration')
+ if ret[0] is not True:
+ if ret[1].has_key('errors'):
+ errors.extend(ret[1]['errors'])
return (retcode, {'errors': errors, 'messages': messages})
- response = request.RESPONSE
- response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
- % (request['URL'], CLUSTER_CONFIG, clustername))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
+ % (baseurl, CLUSTER_CONFIG, clustername))
def LuciExtractCluModel(self, request, cluster_name=None):
+ model = None
+ try:
+ model = request.SESSION.get('model')
+ model.getClusterName()
+ return model
+ except Exception, e:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('LECM0: %s: %r %s' \
+ % (cluster_name, e, str(e)))
+ model = None
+
if not cluster_name:
fvar = GetReqVars(request, [ 'clustername' ])
cluster_name = fvar['clustername']
if cluster_name is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('LECM0: no cluster name')
+ luci_log.debug_verbose('LECM1: no cluster name')
- model = None
- try:
- model = request.SESSION.get('model')
- if not model:
- model = None
- except Exception, e:
- model = None
+ if cluster_name is None:
+ return None
try:
model = getModelForCluster(self, cluster_name)
- if not model:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('LECM1: empty model')
- model = None
+ model.getClusterName()
+ return model
except Exception, e:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('LECM2: no model: %r %s' % (e, str(e)))
- model = None
- return model
+ return None
def validateFenceAdd(self, request):
errors = list()
@@ -1582,178 +1530,106 @@
def validateFenceEdit(self, request):
errors = list()
- messages = list()
- rc = None
- try:
- model = request.SESSION.get('model')
- if not model:
- raise Exception, 'model is none'
- except Exception, e:
- model = None
- try:
- cluname = request.form['clustername']
- except:
- try:
- cluname = request['clustername']
- except:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: no model, no cluster name')
- return (False, {'errors': ['No cluster model was found']})
-
- try:
- model = getModelForCluster(self, cluname)
- except:
- model = None
-
- if model is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: unable to get model from session')
- return (False, {'errors': ['No cluster model was found']})
+ fvar = GetReqVars(request, [ 'clustername', 'URL' ])
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
- form = None
- try:
- response = request.response
- form = request.form
- if not form:
- form = None
- raise Exception, 'no form was submitted'
- except:
- pass
+ clustername = fvar['clustername']
+ if clustername is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('VFE: No cluster name')
+ return (False, {'errors': ['No cluster name was given']})
- if form is None:
+ model = LuciExtractCluModel(self, request, clustername)
+ if model is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: no form was submitted')
- return (False, {'errors': ['No form was submitted']})
+ luci_log.debug_verbose('VFE: unable to get model from session')
+ return (False, {'errors': ['No cluster model was found']})
# This is a fence edit situation, so the model should already have an
# entry for this fence device.
#
# pass form and model to validation method, then save changes if it passes.
- error_code, retobj = validateFenceDevice(form, model)
- if error_code == FD_VAL_SUCCESS:
- try:
- conf_str = model.exportModelAsString()
- if not conf_str:
- raise Exception, 'conf_str is none'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: export model as string failed: %r %s' % (e, str(e)))
- errors.append('Unable to store the new cluster configuration')
-
- try:
- clustername = model.getClusterName()
- if not clustername:
- raise Exception, 'cluster name from model.getClusterName() is blank'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: error: getClusterName: %r %s' \
- % (e, str(e)))
- errors.append('Unable to determine cluster name from model')
+ error_code, retobj = validateFenceDevice(request.form, model)
+ if error_code != FD_VAL_SUCCESS:
+ errors.extend(retobj)
+ return (False, { 'errors': errors })
- if not rc:
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: unable to find a ricci agent for the %s cluster' % clustername)
- errors.append('Unable to contact a ricci agent for cluster %s' \
- % clustername)
-
- if rc:
- batch_id, result = rq.setClusterConf(rc, str(conf_str))
- if batch_id is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: setClusterConf: batchid or result is None')
- errors.append('Unable to propagate the new cluster configuration for %s' \
- % clustername)
- else:
- try:
- set_node_flag(self, clustername, rc.hostname(), batch_id,
- CLUSTER_CONFIG, 'Updating fence device "%s"' % retobj)
- except:
- pass
+ ret = propagateClusterConfAsync(self, model, None,
+ CLUSTER_CONFIG, 'Updating fence device "%s"' % retobj)
+ if ret[0] is not True:
+ return ret
- response.redirect('%s?pagetype=%s&clustername=%s&fencename=%s&busyfirst=true' % (request['URL'], FENCEDEV, clustername, retobj))
- else:
- errors.extend(retobj)
- return (False, {'errors': errors, 'messages': messages})
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&fencename=%s&busyfirst=true' % (baseurl, FENCEDEV, clustername, retobj))
def validateNodeFenceConfig(self, request):
errors = list()
+ fvar = GetReqVars(request,
+ [ 'fence_xml', 'fence_level', 'nodename', 'clustername', 'URL' ])
- try:
- form_xml = request['fence_xml'].strip()
- if not form_xml:
- raise KeyError, 'form_xml must not be blank'
- except Exception, e:
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
+
+ if fvar['fence_xml'] is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC0: no form_xml: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC0: no fence_xml for node %s' \
+ % fvar['nodename'])
return (False, {'errors': ['No fence data was supplied']})
- try:
- fence_level = int(request.form['fence_level'].strip())
- except Exception, e:
+ if fvar['fence_level'] is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC1: no fence level: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC1: no fence level for %s' \
+ % fvar['nodename'])
return (False, {'errors': ['No fence level was supplied']})
try:
- nodename = request['nodename']
- if not nodename:
- raise Exception, 'nodename is blank'
+ fence_level = int(fvar['fence_level'])
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC2: no nodename: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC2: invalid fence level: %s: %r %s' \
+ % (fvar['fence_level'], e, str(e)))
+ return (False, {'errors': ['"%s" is an invalid fence level' % fvar['fence_level'] ]})
+
+ nodename = fvar['nodename']
+ if nodename is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('vNFC3: no nodename: %r %s' % (e, str(e)))
return (False, {'errors': ['No node name was given']})
- try:
- clustername = request['clustername']
- if not clustername:
- raise Exception, 'clustername is blank'
- except Exception, e:
+ clustername = fvar['clustername']
+ if clustername is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC3: no clustername: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC4: no clustername: %r %s' % (e, str(e)))
return (False, {'errors': ['No cluster name was given']})
- try:
- model = request.SESSION.get('model')
- if not model:
- raise Exception, 'model is none'
- except Exception, e:
- model = None
- try:
- model = getModelForCluster(self, clustername)
- except:
- model = None
-
+ model = LuciExtractCluModel(self, request, clustername)
if model is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC4: unable to get model for cluster %s' % clustername)
+ luci_log.debug_verbose('vNFC6: unable to get model for cluster %s' \
+ % clustername)
return (False, {'errors': ['No cluster model was found']})
try:
- doc = minidom.parseString(form_xml)
+ doc = minidom.parseString(fvar['fence_xml'])
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC5: error: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC7: error: %r %s' % (e, str(e)))
return (False, {'errors': ['The fence data submitted is not properly formed']})
try:
node = model.retrieveNodeByName(nodename)
- except GeneralError, e:
+ except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC6: unable to find node name %s in current node list: %r %s' % (str(nodename), e, str(e)))
- return (False, {'errors': ['Unable to find the cluster node %s in the node list' % str(nodename) ]})
+ luci_log.debug_verbose('vNFC8: unable to find node name %s in current node list: %r %s' % (nodename, e, str(e)))
+ return (False, {'errors': ['Unable to find the cluster node %s in the node list' % nodename ]})
- fence_level_num = int(fence_level)
levels = node.getFenceLevels()
try:
- method_id = levels[fence_level_num - 1].getAttribute('name')
+ method_id = levels[fence_level - 1].getAttribute('name')
if not method_id:
raise Exception, 'No method ID'
fence_method = Method()
fence_method.addAttribute('name', str(method_id))
- levels[fence_level_num - 1] = fence_method
+ levels[fence_level - 1] = fence_method
except Exception, e:
method_id = fence_level
fence_method = Method()
@@ -1772,7 +1648,7 @@
node.getChildren()[0].removeChild(delete_target)
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC6a: %s: %r %s' \
+ luci_log.debug_verbose('vNFC9: %s: %r %s' \
% (method_id, e, str(e)))
return (False, {'errors': ['An error occurred while deleting fence method %s' % method_id ]})
else:
@@ -1794,7 +1670,7 @@
input_type = str(i.getAttribute('type'))
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC7: input type: %r %s' \
+ luci_log.debug_verbose('vNFC10: input type: %r %s' \
% (e, str(e)))
continue
@@ -1805,7 +1681,7 @@
dummy_form[str(i.getAttribute('name'))] = str(i.getAttribute('value'))
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC8: parsing XML: %r %s' \
+ luci_log.debug_verbose('vNFC11: parsing XML: %r %s' \
% (e, str(e)))
if len(dummy_form) < 1:
@@ -1816,7 +1692,7 @@
parent = dummy_form['parent_fencedev']
except:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC9: no parent for instance')
+ luci_log.debug_verbose('vNFC12: no parent for instance')
return (False, {'errors': [ 'Unable to determine what device the current instance uses' ]})
try:
@@ -1824,7 +1700,7 @@
del dummy_form['fence_instance']
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC10: no parent for instance')
+ luci_log.debug_verbose('vNFC13: no parent for instance')
return (False, {'errors': [ 'Unable to determine what device the current instance uses' ]})
else:
form_hash[form_id] = (dummy_form, list())
@@ -1839,7 +1715,7 @@
fence_form, instance_list = form_hash[i]
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC11: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('vNFC14: %r %s' % (e, str(e)))
continue
try:
@@ -1848,10 +1724,10 @@
raise Exception, 'fence type is blank'
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC12: %s: %r %s' % (i, e, str(e)))
+ luci_log.debug_verbose('vNFC15: %s: %r %s' % (i, e, str(e)))
fence_type = None
- if 'existing_device' in fence_form:
+ if fence_form.has_key('existing_device'):
try:
fencedev_name = fence_form['name']
if not fencedev_name.strip():
@@ -1866,7 +1742,7 @@
# All we care about is its name.
fencedev_unknown = True
else:
- if not 'sharable' in fence_form:
+ if not fence_form.has_key('sharable'):
# If it's a shared fence device that already exists, the
# user could not have edited it (without playing dirty
# games), so it's safe to pull the existing entry from
@@ -1900,7 +1776,7 @@
# If it's not shared, we need to create an instance form
# so the appropriate XML goes into the <method> block inside
# <node><fence>. All we need for that is the device name.
- if not 'sharable' in fence_form:
+ if not fence_form.has_key('sharable'):
if type == 'fence_manual':
instance_list.append({'name': fencedev_name, 'nodename': nodename })
else:
@@ -1939,215 +1815,100 @@
if len(errors) > 0:
return (False, {'errors': errors })
- try:
- model.setModified(True)
- conf = str(model.exportModelAsString())
- if not conf:
- raise Exception, 'model string is blank'
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC16: exported "%s"' % conf)
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC17: exportModelAsString failed: %r %s' \
- % (e, str(e)))
- return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
-
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC18: unable to find a ricci agent for cluster %s' % clustername)
- return (False, {'errors': ['Unable to find a ricci agent for the %s cluster' % clustername ]})
- ragent = rc.hostname()
-
- batch_number, result = rq.setClusterConf(rc, conf)
- if batch_number is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC19: missing batch and/or result')
- return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
+ ret = propagateClusterConfAsync(self, model, None, FENCEDEV_NODE_CONFIG,
+ 'Updating fence configuration for node "%s"' % fvar['nodename'])
+ if ret[1] is not True:
+ return ret
- try:
- set_node_flag(self, clustername, ragent, str(batch_number), FENCEDEV_NODE_CONFIG, "Updating fence configuration for node \'%s\'" % nodename)
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('vNFC20: failed to set flags: %r %s' \
- % (e, str(e)))
-
- response = request.RESPONSE
- response.redirect('%s?pagetype=%s&clustername=%s&nodename=%s&busyfirst=true' % (request['URL'], NODE, clustername, nodename))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&nodename=%s&busyfirst=true' % (baseurl, NODE, clustername, nodename))
def deleteFenceDevice(self, request):
errors = list()
- messages = list()
- rc = None
- try:
- model = request.SESSION.get('model')
- if not model:
- raise Exception, 'model is none'
- except Exception, e:
- model = None
- try:
- cluname = request.form['clustername']
- except:
- try:
- cluname = request['clustername']
- except:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: no model, no cluster name')
- return (False, {'errors': ['No cluster model was found']})
+ fvar = GetReqVars(request,
+ [ 'orig_name', 'nodename', 'clustername', 'URL' ])
- try:
- model = getModelForCluster(self, cluname)
- except:
- model = None
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
- if model is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: unable to get model from session')
- return (False, {'errors': ['No cluster model was found']})
+ nodename = fvar['nodename']
+ if nodename is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('VFE: no node name')
+ return (False, {'errors': ['No node name was given']})
- form = None
- try:
- response = request.RESPONSE
- form = request.form
- if not form:
- form = None
- raise Exception, 'no form was submitted'
- except:
- pass
+ clustername = fvar['clustername']
+ if clustername is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('VFE: no cluster name')
+ return (False, {'errors': ['No cluster name was given']})
- if form is None:
+ model = LuciExtractCluModel(self, request, clustername)
+ if model is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: no form was submitted')
- return (False, {'errors': ['No form was submitted']})
+ luci_log.debug_verbose('VFE: model, no cluster name')
+ return (False, {'errors': ['No cluster model was found']})
- #get name of fencedev
- try:
- fencedev_name = form['orig_name']
- fencedev_name = fencedev_name.strip()
- except KeyError, e:
- return (False, {'errors':['No device name in form submission']})
+ fencedev_name = fvar['orig_name']
+ if fencedev_name is None:
+ return (False, {'errors': ['No device name in form submission']})
fdev_to_delete = None
- #iterate thru list of current fencedevs and find one to be deleted
fdevs = model.getFenceDevices()
for fdev in fdevs:
if fdev.getName().strip() == fencedev_name:
fdev_to_delete = fdev
break
+
if fdev_to_delete is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFD: Could not find fence device name in model')
- return (False, {'errors':['Could not find fence device name in model']})
+ luci_log.debug_verbose('VFD: Could not find fence device "%s" in model' % fencedev_name)
+ return (False, {'errors': ['Could not find fence device "%s" in model' % fencedev_name ]})
- #get fencedev ptr
fdev_ptr = model.getFenceDevicePtr()
- #remove child
try:
fdev_ptr.removeChild(fdev_to_delete)
- error_code = FD_VAL_SUCCESS
- error_string = "Fence device %s successfully removed from configuration" % fencedev_name
except:
- error_code = FD_VAL_FAIL
- error_string = "Fence device %s could not be removed from configuration" % fencedev_name
+ errors.append('Fence device "%s" could not be removed from configuration' % fencedev_name)
+ return (False, { 'errors': errors })
try:
model.removeFenceInstancesForFenceDevice(fencedev_name)
- except:
+ except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFD: Could not remove fence instances for')
-
-
- if error_code == FD_VAL_SUCCESS:
- messages.append(error_string)
- try:
- model.setModified(True)
- conf_str = model.exportModelAsString()
- if not conf_str:
- raise Exception, 'conf_str is none'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFE: export model as string failed: %r %s' % (e, str(e)))
- errors.append('Unable to store the new cluster configuration')
-
- try:
- clustername = model.getClusterName()
- if not clustername:
- raise Exception, 'cluster name from model.getClusterName() is blank'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: error: getClusterName: %r %s' \
- % (e, str(e)))
- errors.append('Unable to determine cluster name from model')
-
- if not rc:
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: unable to find a ricci agent for the %s cluster' % clustername)
- errors.append('Unable to contact a ricci agent for cluster %s' \
- % clustername)
+ luci_log.debug_verbose('VFD: error removing %s: %r %s' \
+ % (fencedev_name, e, str(e)))
- if rc:
- batch_id, result = rq.setClusterConf(rc, str(conf_str))
- if batch_id is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VFA: setCluserConf: batchid or result is None')
- errors.append('Unable to propagate the new cluster configuration for %s' \
- % clustername)
- else:
- try:
- set_node_flag(self, clustername, rc.hostname(), batch_id,
- CLUSTER_CONFIG, 'Removing fence device "%s"' % fencedev_name)
- except:
- pass
+ ret = propagateClusterConfAsync(self, model, None, CLUSTER_CONFIG,
+ 'Removing fence device "%s"' % fencedev_name)
+ if ret[0] is not True:
+ return ret
- response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
- % (request['URL'], FENCEDEVS, clustername))
- return (True, {'errors': errors, 'messages': messages})
- else:
- errors.append(error_string)
- return (False, {'errors': errors, 'messages': messages})
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
+ % (baseurl, FENCEDEVS, clustername))
def validateDaemonProperties(self, request):
errors = list()
- form = None
- try:
- response = request.response
- form = request.form
- if not form:
- form = None
- raise Exception, 'no form was submitted'
- except:
- pass
+ fvar = GetReqVars(request,
+ [ 'orig_name', 'nodename', 'clustername', 'URL' ])
- if form is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VDP0: no form was submitted')
- return (False, {'errors': ['No form was submitted']})
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
- try:
- nodename = form['nodename'].strip()
- if not nodename:
- raise Exception, 'nodename is blank'
- except Exception, e:
- errors.append('Unable to determine the current node name')
+ clustername = fvar['clustername']
+ if clustername is None:
+ errors.append('Unable to determine the current cluster name')
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VDP1: no nodename: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('VDP2: no clustername')
- try:
- clustername = form['clustername'].strip()
- if not clustername:
- raise Exception, 'clustername is blank'
- except Exception, e:
- errors.append('Unable to determine the current cluster name')
+ nodename = fvar['nodename']
+ if nodename is None:
+ errors.append('Unable to determine the current node name')
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VDP2: no clustername: %r %s' % (e, str(e)))
+ luci_log.debug_verbose('VDP1: no nodename for %s' % clustername)
disable_list = list()
enable_list = list()
- for i in form.items():
+ for i in request.form.items():
try:
if i[0][:11] == '__daemon__:':
daemon_prop = i[1]
@@ -2159,13 +1920,14 @@
enable_list.append(daemon_prop[0])
except Exception, e:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('VDP3: error: %s' % str(i))
+ luci_log.debug_verbose('VDP3: error: %s: %r %s' \
+ % (str(i), e, str(e)))
if len(enable_list) < 1 and len(disable_list) < 1:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('VDP4: no changes made')
- response.redirect('%s?pagetype=%s&clustername=%s&nodename=%s' \
- % (request['URL'], NODE, clustername, nodename))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&nodename=%s' \
+ % (baseurl, NODE, clustername, nodename))
nodename_resolved = resolve_nodename(self, clustername, nodename)
try:
@@ -2193,26 +1955,34 @@
if len(disable_list) > 0:
status_msg = 'Updating node "%s" daemon properties: disabling "%s"' \
% (nodename_resolved, str(disable_list)[1:-1])
- set_node_flag(self, clustername, rc.hostname(), batch_id, CLUSTER_DAEMON, status_msg)
- except:
- pass
+ set_node_flag(self, clustername, rc.hostname(), batch_id,
+ CLUSTER_DAEMON, status_msg)
+ except Exception, e:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('VDP: %r %s' % (e, str(e)))
if len(errors) > 0:
return (False, {'errors': errors})
- response.redirect('%s?pagetype=%s&clustername=%s&nodename=%s&busyfirst=true' % (request['URL'], NODE, clustername, nodename))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&nodename=%s&busyfirst=true' % (baseurl, NODE, clustername, nodename))
def validateFdom(self, request):
errors = list()
+ fvar = GetReqVars(request, [ 'clustername', 'name', 'oldname', 'URL' ])
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
- try:
- model = request.SESSION.get('model')
- if not model:
- raise Exception, 'no model'
- except Exception, e:
+ clustername = fvar['clustername']
+ if clustername is None:
+ errors.append('Unable to determine this cluster\'s name')
+
+ name = fvar['name']
+ if name is None:
+ errors.append('No name was given for this failover domain')
+
+ model = LuciExtractCluModel(self, request, clustername)
+ if model is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateFdom0: no model: %r %s' \
- % (e, str(e)))
+ luci_log.debug_verbose('validateFdom0: no model: %r %s')
return (False, {'errors': [ 'Unable to retrieve cluster information' ]})
prioritized = False
@@ -2227,39 +1997,7 @@
except:
restricted = False
- clustername = None
- try:
- clustername = request.form['clustername'].strip()
- if not clustername:
- raise Exception, 'blank'
- except:
- try:
- clustername = model.getClusterName()
- if not clustername:
- raise Exception, 'blank'
- except:
- clustername = None
-
- if not clustername:
- errors.append('Unable to determine this cluster\'s name')
-
- try:
- name = request.form['name'].strip()
- if not name:
- raise Exception, 'blank'
- except Exception, e:
- errors.append('No name was given for this failover domain')
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateFdom0: %r %s' \
- % (e, str(e)))
-
- oldname = None
- try:
- oldname = request.form['oldname'].strip()
- if not oldname:
- raise Exception, 'blank'
- except:
- pass
+ oldname = fvar['oldname']
if oldname is None or oldname != name:
if model.getFailoverDomainByName(name) is not None:
@@ -2292,9 +2030,7 @@
else:
fdom.addAttribute('restricted', '0')
- cluster_nodes = map(lambda x: str(x.getName()), model.getNodes())
-
- for i in cluster_nodes:
+ for i in model.getNodeNames():
if request.form.has_key(i):
fdn = FailoverDomainNode()
fdn.addAttribute('name', i)
@@ -2313,8 +2049,6 @@
fdom_ptr = model.getFailoverDomainPtr()
if not oldname:
fdom_ptr.addChild(fdom)
- model.setModified(True)
- conf = str(model.exportModelAsString())
except Exception, e:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('validateFdom2: %r %s' % (e, str(e)))
@@ -2323,104 +2057,74 @@
if len(errors) > 0:
return (False, {'errors': errors })
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateFdom3: unable to find a ricci agent for cluster %s' % clustername)
- return (False, {'errors': ['Unable to find a ricci agent for the %s cluster' % clustername ]})
- ragent = rc.hostname()
-
- batch_number, result = rq.setClusterConf(rc, conf)
- if batch_number is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateFdom4: missing batch and/or result')
- return (False, {'errors': [ 'An error occurred while constructing the new cluster configuration' ]})
+ if oldname:
+ action = FDOM
+ status_msg = 'Updating failover domain "%s"' % oldname
+ else:
+ action = FDOM_ADD
+ status_msg = 'Creating failover domain "%s"' % name
- try:
- if oldname:
- set_node_flag(self, clustername, ragent, str(batch_number), FDOM, 'Updating failover domain "%s"' % oldname)
- else:
- set_node_flag(self, clustername, ragent, str(batch_number), FDOM_ADD, 'Creating failover domain "%s"' % name)
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateFdom5: failed to set flags: %r %s' \
- % (e, str(e)))
+ ret = propagateClusterConfAsync(self, model, None, action, status_msg)
+ if ret[0] is not True:
+ return ret
- response = request.RESPONSE
- response.redirect('%s?pagetype=%s&clustername=%s&fdomname=%s&busyfirst=true' \
- % (request['URL'], FDOM, clustername, name))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&fdomname=%s&busyfirst=true' % (baseurl, FDOM, clustername, name))
def validateVM(self, request):
errors = list()
- model = request.SESSION.get('model')
+ fvar = GetReqVars(request, [ 'clustername', 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'URL' ])
- try:
- vm_name = request.form['vmname'].strip()
- if not vm_name:
- raise Exception, 'blank'
- except Exception, e:
+ baseurl = fvar['URL'] or LUCI_CLUSTER_BASE_URL
+
+ clustername = fvar['clustername']
+ if clustername is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM0: no vm name: %r %s' \
- % (e, str(e)))
+ luci_log.debug_verbose('validateVM0: no cluster name was given')
+ return (False, {'errors': [ 'No cluster name was given' ]})
+
+ model = LuciExtractCluModel(self, request, clustername)
+ if model is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('validateVM0: no model')
+ return (False, {'errors': [ 'Unable to retrieve cluster information' ]})
+
+ vm_name = fvar['vmname']
+ if vm_name is None:
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('validateVM0: no vm name')
errors.append('No virtual machine name was given')
- try:
- vm_path = request.form['vmpath'].strip()
- if not vm_path:
- raise Exception, 'blank'
- except Exception, e:
+ vm_path = fvar['vmpath']
+ if vm_path is None:
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM1: no vm path: %r %s' \
- % (e, str(e)))
- errors.append('No path to the virtual machine configuration file was given')
+ luci_log.debug_verbose('validateVM1: no vm path')
+ errors.append('No path to the virtual machine configuration directory was given')
autostart = 1
- try:
- if request.form.has_key('autostart'):
- autostart = 1
- else:
- autostart = 0
- except:
+ if request.form.has_key('autostart'):
autostart = 1
+ else:
+ autostart = 0
exclusive = 0
- try:
- if request.form.has_key('exclusive'):
- exclusive = 1
- else:
- exclusive = 0
- except:
+ if request.form.has_key('exclusive'):
+ exclusive = 1
+ else:
exclusive = 0
- recovery = None
- try:
- recovery = request.form['recovery'].strip()
- if not recovery:
- recovery = None
- else:
- if recovery != 'restart' and recovery != 'relocate' and recovery != 'disable':
- errors.append('You entered an invalid recovery option: "%s" Valid options are "restart" "relocate" and "disable"')
- except:
- recovery = None
+ recovery = fvar['recovery']
+ if recovery is not None and recovery != 'restart' and recovery != 'relocate' and recovery != 'disable':
+ errors.append('You entered an invalid recovery option: "%s" Valid options are "restart" "relocate" and "disable"')
- fdom = None
- try:
- fdom = request.form['domain'].strip()
- if not fdom:
- raise Exception, 'blank'
- except:
- fdom = None
+ fdom = fvar['domain']
if len(errors) > 0:
return (False, {'errors': errors })
isNew = False
- try:
- old_name = request.form['oldname'].strip()
- if not old_name:
- raise KeyError, 'oldname'
- except KeyError, e:
+ old_name = fvar['oldname']
+ if old_name is None:
isNew = True
delete_vm = False
@@ -2469,55 +2173,22 @@
except:
pass
- try:
- model.setModified(True)
- stringbuf = str(model.exportModelAsString())
- if not stringbuf:
- raise Exception, 'model is blank'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM2: %r %s' % (e, str(e)))
- errors.append('Unable to update the cluster model')
-
- try:
- clustername = model.getClusterName()
- if not clustername:
- raise Exception, 'cluster name from model.getClusterName() is blank'
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM3: %r %s' % (e, str(e)))
- errors.append('Unable to determine the cluster name')
-
- if len(errors) > 0:
- return (False, {'errors': errors })
-
- rc = getRicciAgent(self, clustername)
- if not rc:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM4: no ricci for %s' % clustername)
- return (False, {'errors': ['Unable to contact a ricci agent for this cluster']})
-
- batch_number, result = rq.setClusterConf(rc, stringbuf)
- if batch_number is None or result is None:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM5: missing batch and/or result')
- return (False, {'errors': [ 'Error creating virtual machine %s' % vm_name ]})
+ if delete_vm is True:
+ action = VM_CONFIG
+ status_msg = 'Deleting virtual machine service "%s"' % vm_name
+ elif isNew is True:
+ action = VM_ADD
+ status_msg = 'Creating virtual machine service "%s"' % vm_name
+ else:
+ action = VM_CONFIG
+ status_msg = 'Configuring virtual machine service "%s"' % vm_name
- try:
- if delete_vm is True:
- set_node_flag(self, clustername, rc.hostname(), str(batch_number), VM_CONFIG, "Deleting virtual machine service \'%s\'" % vm_name)
- elif isNew is True:
- set_node_flag(self, clustername, rc.hostname(), str(batch_number), VM_ADD, "Creating virtual machine service \'%s\'" % vm_name)
- else:
- set_node_flag(self, clustername, rc.hostname(), str(batch_number), VM_CONFIG, "Configuring virtual machine service \'%s\'" % vm_name)
- except Exception, e:
- if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('validateVM6: failed to set flags: %r %s' \
- % (e, str(e)))
+ ret = propagateClusterConfAsync(self, model, None, action, status_msg)
+ if ret[0] is not True:
+ return ret
- response = request.RESPONSE
- response.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
- % (request['URL'], SERVICES, clustername))
+ request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&busyfirst=true' \
+ % (baseurl, SERVICES, clustername))
def process_cluster_conf_editor(self, req):
clustername = req['clustername']
@@ -3276,8 +2947,7 @@
baseurl = fvars['URL'] or LUCI_CLUSTER_BASE_URL
try:
- model = LuciExtractCluModel(self, req,
- cluster_name=fvars['clustername'])
+ model = LuciExtractCluModel(self, req, fvars['clustername'])
if not model:
raise Exception, 'no model'
except Exception, e:
More information about the Cluster-devel
mailing list