From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 15 May 2007 21:42:35 -0000 Subject: [Cluster-devel] conga/luci/site/luci/Extensions FenceHandler.p ... Message-ID: <20070515214235.30773.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: EXPERIMENTAL Changes by: rmccabe at sourceware.org 2007-05-15 21:42:21 Modified files: luci/site/luci/Extensions: FenceHandler.py HelperFunctions.py LuciClusterActions.py LuciClusterInfo.py LuciDB.py LuciSyslog.py LuciZope.py PropsObject.py ResourceHandler.py RicciQueries.py StorageReport.py Variable.py cluster_adapters.py conga_constants.py conga_ssl.py conga_storage_constants.py homebase_adapters.py ricci_communicator.py ricci_defines.py storage_adapters.py system_adapters.py luci/site/luci/Extensions/ClusterModel: BaseResource.py Cluster.py ClusterNode.py FailoverDomainNode.py FailoverDomains.py FenceDevice.py ModelBuilder.py TagObject.py Added files: luci/site/luci/Extensions: LuciZopePerm.py Log message: More cleanup and refactor. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopePerm.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.18.2.1&r2=1.18.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.6.4.2&r2=1.6.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.11.4.1&r2=1.11.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.2.8.2&r2=1.2.8.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.23.2.2&r2=1.23.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/Variable.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.4.8.2&r2=1.4.8.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.255.2.4&r2=1.255.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.39.2.3&r2=1.39.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_ssl.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_storage_constants.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.8.8.1&r2=1.8.8.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.50.2.3&r2=1.50.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.25.2.3&r2=1.25.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_defines.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.8.1&r2=1.1.8.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/storage_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.9.4.2&r2=1.9.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/system_adapters.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.2.2.2&r2=1.2.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/BaseResource.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cluster.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomainNode.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomains.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/TagObject.py.diff?cvsroot=cluster&only_with_tag=EXPERIMENTAL&r1=1.1.2.2&r2=1.1.2.3 --- conga/luci/site/luci/Extensions/FenceHandler.py 2007/05/03 20:16:38 1.18.2.1 +++ conga/luci/site/luci/Extensions/FenceHandler.py 2007/05/15 21:42:21 1.18.2.2 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from ClusterModel.Device import Device FD_VAL_FAIL = 1 --- conga/luci/site/luci/Extensions/HelperFunctions.py 2007/05/04 19:10:24 1.6.4.2 +++ conga/luci/site/luci/Extensions/HelperFunctions.py 2007/05/15 21:42:21 1.6.4.3 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from ricci_communicator import RicciCommunicator import threading @@ -67,7 +74,7 @@ trusted = False ricci = ss[hostname] - if ricci != None: + if ricci is not None: OS = ricci.os() cluname = ricci.cluster_info()[0] cluali = ricci.cluster_info()[1] @@ -81,9 +88,9 @@ 'hostname' : hostname, 'OS' : OS, 'cluname' : cluname, - 'key_fp' : key_fp, - 'clualias' : cluali, - 'available' : ricci != None, + 'key_fp' : key_fp, + 'clualias' : cluali, + 'available' : ricci is not None, 'trusted' : trusted, 'authed' : authed } --- conga/luci/site/luci/Extensions/Attic/LuciClusterActions.py 2007/05/14 18:00:14 1.1.2.2 +++ conga/luci/site/luci/Extensions/Attic/LuciClusterActions.py 2007/05/15 21:42:21 1.1.2.3 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + import RicciQueries as rq from LuciDB import set_node_flag, getRicciAgent from LuciSyslog import get_logger --- conga/luci/site/luci/Extensions/Attic/LuciClusterInfo.py 2007/05/14 18:00:14 1.1.2.2 +++ conga/luci/site/luci/Extensions/Attic/LuciClusterInfo.py 2007/05/15 21:42:21 1.1.2.3 @@ -1,8 +1,16 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from ClusterModel.GeneralError import GeneralError import RicciQueries as rq from ricci_communicator import RicciCommunicator from FenceHandler import FENCE_OPTS from LuciSyslog import get_logger +from LuciDB import resolve_nodename from conga_constants import CLUNAME, CLUSTER_CONFIG, CLUSTER_DELETE, \ CLUSTER_PROCESS, CLUSTER_RESTART, CLUSTER_START, CLUSTER_STOP, \ @@ -13,7 +21,7 @@ PROP_FENCE_TAB, PROP_GENERAL_TAB, PROP_GULM_TAB, PROP_MCAST_TAB, \ PROP_QDISK_TAB, RESOURCE, RESOURCE_CONFIG, RESOURCE_REMOVE, \ SERVICE, SERVICE_DELETE, SERVICE_MIGRATE, SERVICE_RESTART, \ - SERVICE_START, SERVICE_STOP, VM_CONFIG + SERVICE_START, SERVICE_STOP, VM_CONFIG, LUCI_DEBUG_MODE luci_log = get_logger() @@ -226,7 +234,7 @@ rc_map['name'] = child.getName() #Note: Final version needs all resource attrs - if child.isRefObject() == True: + if child.isRefObject() is True: rc_map['ref_object'] = True rc_map['tag_name'] = child.getObj().TAG_NAME rc_map['type'] = child.getObj().getResourceType() @@ -369,7 +377,7 @@ try: if int(svc.getAttribute('exclusive')): - hmap['exclusive'] = 'true' + hmap['exclusive'] = 'true' else: hmap['exclusive'] = 'false' except: @@ -757,7 +765,7 @@ if (item['type'] == "node") and (item['name'] == nodename): found = True break - if found == False: + if found is False: luci_log.debug_verbose('getNodeInfo1: Unable to resolve node name in cluster status') return {} @@ -1018,7 +1026,7 @@ for item in nodes_used: if item['nodename'] == node.getName().strip(): found_duplicate = True - if found_duplicate == True: + if found_duplicate is True: continue baseurl = request['URL'] clustername = model.getClusterName() @@ -1117,7 +1125,7 @@ continue if fd is not None: - if fd.isShared() == False: #Not a shared dev...build struct and add + if fd.isShared() is False: #Not a shared dev...build struct and add fencedev = {} try: fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()] @@ -1192,13 +1200,13 @@ #level1 list is complete now, but it is still necessary to build shared1 for fd in fds: isUnique = True - if fd.isShared() == False: + if fd.isShared() is False: continue for fdev in level1: if fd.getName().strip() == fdev['name']: isUnique = False break - if isUnique == True: + if isUnique is True: shared_struct = {} shared_struct['name'] = fd.getName().strip() agentname = fd.getAgentType() @@ -1225,7 +1233,7 @@ fd = None #Set to None in case last time thru loop continue if fd is not None: - if fd.isShared() == False: #Not a shared dev...build struct and add + if fd.isShared() is False: #Not a shared dev...build struct and add fencedev = {} try: fencedev['prettyname'] = FENCE_OPTS[fd.getAgentType()] @@ -1300,13 +1308,13 @@ #level2 list is complete but like above, we need to build shared2 for fd in fds: isUnique = True - if fd.isShared() == False: + if fd.isShared() is False: continue for fdev in level2: if fd.getName().strip() == fdev['name']: isUnique = False break - if isUnique == True: + if isUnique is True: shared_struct = {} shared_struct['name'] = fd.getName().strip() agentname = fd.getAgentType() @@ -1324,7 +1332,8 @@ def getFencesInfo(self, model, request): fences_map = {} if not model: - luci_log.debug_verbose('getFencesInfo0: model is None') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getFencesInfo0: model is None') fences_map['fencedevs'] = list() return fences_map @@ -1339,7 +1348,7 @@ #create fencedev hashmap nodes_used = list() - if fd.isShared() == True: + if fd.isShared() is True: fencedev = {} attr_hash = fd.getAttributes() kees = attr_hash.keys() @@ -1369,7 +1378,7 @@ for item in nodes_used: if item['nodename'] == node.getName().strip(): found_duplicate = True - if found_duplicate == True: + if found_duplicate is True: continue node_hash = {} cur_nodename = node.getName().strip() @@ -1410,8 +1419,9 @@ try: vm = model.retrieveVMsByName(vmname) except: - luci_log.debug('An error occurred while attempting to get VM %s' \ - % vmname) + if LUCI_DEBUG_MODE is True: + luci_log.debug('An error occurred while attempting to get VM %s' \ + % vmname) return vm_map attrs = vm.getAttributes() @@ -1431,14 +1441,16 @@ try: cluname = request.form['clustername'] except: - luci_log.debug_verbose('getResourcesInfo missing cluster name') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getResourcesInfo missing cluster name') return resList #CALL LUCICLUSTERINFO return resList def getResourceInfo(model, request): if not model: - luci_log.debug_verbose('GRI0: no model object in session') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GRI0: no model object in session') return {} name = None @@ -1459,7 +1471,8 @@ pass if name is None: - luci_log.debug_verbose('getResourceInfo missing res name') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GRI1: missing res name') return {} try: @@ -1468,13 +1481,15 @@ try: cluname = request.form['clustername'] except: - luci_log.debug_verbose('getResourceInfo missing cluster name') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GRI2: missing cluster name') return {} try: baseurl = request['URL'] except: - luci_log.debug_verbose('getResourceInfo missing URL') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GRI3: missing URL') return {} #CALL @@ -1485,6 +1500,8 @@ def getClusterAlias(self, model): if not model: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GCA0: no model') return '' alias = model.getClusterAlias() if not alias: --- conga/luci/site/luci/Extensions/Attic/LuciDB.py 2007/05/14 18:00:14 1.1.2.5 +++ conga/luci/site/luci/Extensions/Attic/LuciDB.py 2007/05/15 21:42:21 1.1.2.6 @@ -1,7 +1,14 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from AccessControl import getSecurityManager import RicciQuery as rq from ricci_communicator import RicciCommunicator -from LuciZope import isAdmin +from LuciZopePerm import isAdmin from LuciSyslog import get_logger from conga_constants import CLUSTER_FOLDER_PATH, BATCH_ID, TASKTYPE, \ @@ -92,7 +99,7 @@ luci_log.debug_verbose(errmsg) raise Exception, errmsg -def noNodeStatussPresent(self, nodefolder, flagname, hostname): +def noNodeStatusPresent(self, nodefolder, flagname, hostname): try: items = nodefolder.objectItems('ManagedSystem') except Exception, e: @@ -125,7 +132,7 @@ batch_ret = rq.checkBatch(rc, item[1].getProperty(BATCH_ID)) finished = batch_ret[0] - if finished == True or finished == -1: + if finished is True or finished == -1: if finished == -1: if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('NNFP2: batch error: %s' \ @@ -585,32 +592,6 @@ luci_log.debug_verbose('delCluSystems2: %s' % err) return ''.join(error_list) -# In case we want to give access to non-admin users in the future - -def havePermCreateCluster(self): - return isAdmin(self) - -def havePermAddStorage(self): - return isAdmin(self) - -def havePermAddCluster(self): - return isAdmin(self) - -def havePermAddUser(self): - return isAdmin(self) - -def havePermDelUser(self): - return isAdmin(self) - -def havePermRemStorage(self): - return isAdmin(self) - -def havePermRemCluster(self): - return isAdmin(self) - -def havePermEditPerms(self): - return isAdmin(self) - def getSystems(self): storage = getStorage(self) clusters = getClusters(self) @@ -620,7 +601,7 @@ need_auth_hash = {} for i in storage: storageList.append(i[0]) - if testNodeStatus(i[1], CLUSTER_NODE_NEED_AUTH) != False: + if testNodeStatus(i[1], CLUSTER_NODE_NEED_AUTH) is not False: need_auth_hash[i[0]] = i[1] chash = {} @@ -628,7 +609,7 @@ csystems = getClusterSystems(self, i[0]) cslist = list() for c in csystems: - if testNodeStatus(c[1], CLUSTER_NODE_NEED_AUTH) != False: + if testNodeStatus(c[1], CLUSTER_NODE_NEED_AUTH) is not False: need_auth_hash[c[0]] = c[1] cslist.append(c[0]) chash[i[0]] = cslist @@ -658,7 +639,7 @@ return None if cluster_permission_check(self, cluster): - return cluster_nodes + return cluster_nodes return None def getClusters(self): @@ -669,8 +650,6 @@ luci_log.debug_verbose('GC0: %r' % e) return None - if isAdmin(self): - return clusters return check_clusters(self, clusters) def getStorage(self): --- conga/luci/site/luci/Extensions/LuciSyslog.py 2007/05/14 18:00:14 1.11.4.1 +++ conga/luci/site/luci/Extensions/LuciSyslog.py 2007/05/15 21:42:21 1.11.4.2 @@ -1,8 +1,16 @@ -from conga_constants import LUCI_DEBUG_MODE, LUCI_DEBUG_VERBOSITY +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from syslog import openlog, closelog, syslog, \ LOG_DAEMON, LOG_PID, LOG_NDELAY, LOG_INFO, \ LOG_WARNING, LOG_AUTH, LOG_DEBUG +from conga_constants import LUCI_DEBUG_MODE, LUCI_DEBUG_VERBOSITY + # Exception class for the LuciSyslog facility class LuciSyslogError(Exception): def __init__(self, msg): --- conga/luci/site/luci/Extensions/Attic/LuciZope.py 2007/05/14 18:00:14 1.1.2.3 +++ conga/luci/site/luci/Extensions/Attic/LuciZope.py 2007/05/15 21:42:21 1.1.2.4 @@ -1,11 +1,17 @@ -from AccessControl import getSecurityManager -from ricci_communicator import CERTS_DIR_PATH -from conga_constants import PLONE_ROOT -from LuciDB import allowed_systems +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. +from LuciZopePerm import userAuthenticated +from LuciDB import allowed_systems def siteIsSetup(self): import os + from ricci_communicator import CERTS_DIR_PATH + try: return os.path.isfile('%sprivkey.pem' % CERTS_DIR_PATH) and os.path.isfile('%scacert.pem' % CERTS_DIR_PATH) except: @@ -16,28 +22,6 @@ import re return re.sub(regex, replaceChar, arg) -def userAuthenticated(self): - try: - if (isAdmin(self) or getSecurityManager().getUser().has_role('Authenticated', self.restrictedTraverse(PLONE_ROOT))): - return True - except Exception, e: - pass - return False - -def isAdmin(self): - try: - return getSecurityManager().getUser().has_role('Owner', self.restrictedTraverse(PLONE_ROOT)) - except Exception, e: - pass - return False - -def userIsAdmin(self, userId): - try: - return self.portal_membership.getMemberById(userId).has_role('Owner', self.restrictedTraverse(PLONE_ROOT)) - except Exception, e: - pass - return False - # removes systems that user is not authorized access to def get_systems_statuses(self, systems, from_cache=False): from HelperFunctions import get_system_info @@ -46,7 +30,7 @@ session = self.REQUEST.SESSION if session.has_key(CACHED_INDEX): res = session[CACHED_INDEX] - if res != None: + if res is not None: session.set(CACHED_INDEX, None) if from_cache: return res @@ -73,12 +57,13 @@ value = request.cookies[cookie_prefix + var_name] session.set(var_name, value) - response.setCookie(cookie_prefix + var_name, value, + response.setCookie(cookie_prefix + var_name, value, expires='Tue, 30 Jun 2060 12:00:00 GMT') return value # returns (str(float), units) that fits best, # takes prefered units into account + def bytes_to_value_prefunits(self, bytes): from HelperFunctions import bytes_to_value_units, convert_bytes, get_units_multiplier --- conga/luci/site/luci/Extensions/PropsObject.py 2007/05/14 18:00:14 1.2.8.2 +++ conga/luci/site/luci/Extensions/PropsObject.py 2007/05/15 21:42:21 1.2.8.3 @@ -1,14 +1,20 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from Variable import parse_variable from ricci_defines import PROPS_TAG import xml import xml.dom - class PropsObject: - + def __init__(self): self.__vars = {} - + def add_prop(self, variable): self.__vars[variable.get_name()] = variable def get_prop(self, name): @@ -16,24 +22,24 @@ return self.__vars[name].get_value() else: return None - + def get_props(self): return self.__vars - + def export_xml(self, doc, parent_node): props = doc.createElement(str(PROPS_TAG)) parent_node.appendChild(props) for var in self.__vars: props.appendChild(self.__vars[var].export_xml(doc)) return props - + def import_xml(self, parent_node): props = None for node in parent_node.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == str(PROPS_TAG): props = node - if props == None: + if props is None: return self for node in props.childNodes: try: @@ -42,4 +48,4 @@ except: continue return self - + --- conga/luci/site/luci/Extensions/Attic/ResourceHandler.py 2007/05/14 18:00:14 1.1.2.2 +++ conga/luci/site/luci/Extensions/Attic/ResourceHandler.py 2007/05/15 21:42:21 1.1.2.3 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from ClusterModel.Ip import Ip from ClusterModel.Fs import Fs from ClusterModel.Clusterfs import Clusterfs @@ -687,7 +694,7 @@ if form.has_key('edit'): if not form.has_key('oldname'): raise Exception, [ 'Cannot find this resource\'s original name.' ] - + oldname = form['oldname'].strip() if not oldname: raise Exception, [ 'Cannot find this resource\'s original name.' ] --- conga/luci/site/luci/Extensions/Attic/RicciQueries.py 2007/05/14 18:00:14 1.1.2.2 +++ conga/luci/site/luci/Extensions/Attic/RicciQueries.py 2007/05/15 21:42:21 1.1.2.3 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from xml.dom import minidom from xml.dom.Node import ELEMENT_NODE from ricci_communicator import RicciCommunicator, extract_module_status @@ -54,7 +61,7 @@ upgrade_rpms, gulm): batch = list() - + batch.append('') batch.append('') batch.append('') @@ -80,7 +87,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -100,7 +107,7 @@ batch.append('') batch.append('') batch.append('') - + need_reboot = install_base or install_services or install_shared_storage or install_LVS if need_reboot: batch.append('') @@ -114,7 +121,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -131,7 +138,7 @@ batch.append('') batch.append('') batch.append('') - + if install_shared_storage: batch.append('') batch.append('') @@ -144,7 +151,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -168,7 +175,7 @@ batch = list() batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -195,7 +202,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -215,7 +222,7 @@ batch.append('') batch.append('') batch.append('') - + need_reboot = install_base or install_services or install_shared_storage or install_LVS if need_reboot: batch.append('') @@ -229,7 +236,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -264,7 +271,7 @@ batch.append('') batch.append('') batch.append('') - + if install_shared_storage: batch.append('') batch.append('') @@ -277,7 +284,7 @@ batch.append('') batch.append('') batch.append('') - + batch.append('') batch.append('') batch.append('') @@ -433,11 +440,11 @@ def nodeLeaveCluster(rc, cluster_shutdown=False, purge=False): cshutdown = 'false' - if cluster_shutdown == True: + if cluster_shutdown is True: cshutdown = 'true' purge_conf = 'true' - if purge == False: + if purge is False: purge_conf = 'false' batch_str = '' % (cshutdown, purge_conf) @@ -453,7 +460,7 @@ def nodeJoinCluster(rc, cluster_startup=False): cstartup = 'false' - if cluster_startup == True: + if cluster_startup is True: cstartup = 'true' batch_str = '' % cstartup @@ -462,7 +469,7 @@ return batchAttemptResult(ricci_xml) def startService(rc, servicename, preferrednode=None): - if preferrednode != None: + if preferrednode is not None: batch_str = '' % (servicename, preferrednode) else: batch_str = '' % servicename @@ -543,7 +550,7 @@ return doc batch_str = '' % (svc_func, servicename) - + ricci_xml = rc.batch_run(batch_str, async=False) if not ricci_xml or not ricci_xml.firstChild: elem.setAttribute('message', 'operation failed') --- conga/luci/site/luci/Extensions/StorageReport.py 2007/05/04 19:10:24 1.23.2.2 +++ conga/luci/site/luci/Extensions/StorageReport.py 2007/05/15 21:42:21 1.23.2.3 @@ -1,18 +1,30 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. import xml import xml.dom from xml.dom import minidom - from Variable import parse_variable, Variable, VariableList + from ricci_defines import * -from conga_storage_constants import * -from HelperFunctions import * -from LuciZope import bytes_to_value_prefunits, get_systems_statuses +from conga_storage_constants import ADD_SOURCES, get_fs_icon, \ + get_mapper_icons, get_pretty_fs_name, get_pretty_mapper_info, \ + get_pretty_prop_name, PAGETYPE, PT_MAPPER_ID, PT_MAPPER_TYPE, \ + PT_PATH, STONAME, STORAGE, VIEW_BD, VIEW_MAPPER -from ricci_communicator import get_ricci_communicator, batch_status, extract_module_status +from HelperFunctions import convert_bytes, \ + get_units_multiplier, bytes_to_value_units +from LuciZope import bytes_to_value_prefunits, get_systems_statuses + +from ricci_communicator import get_ricci_communicator, \ + batch_status, extract_module_status SESSION_STORAGE_XML_REPORT = 'storage_xml_report_dir' @@ -20,11 +32,11 @@ class StorageReport: - + def __init__(self, storage_xml_report): #self.__report = minidom.parseString(storage_xml_report).firstChild self.__report = storage_xml_report.cloneNode(True) - + self.__mappers = None self.__m_temps = None for node in self.__report.childNodes: @@ -36,16 +48,16 @@ self.__m_temps = var.get_value() except: pass - if self.__mappers == None or self.__m_temps == None: + if self.__mappers is None or self.__m_temps is None: raise Exception, 'invalid storage_xml_report' - + self.__mapp_dir = {} # holds mapper lists by mapper_type for mapp_node in self.__mappers: m_type = mapp_node.getAttribute('mapper_type') if not (m_type in self.__mapp_dir): self.__mapp_dir[m_type] = [] self.__mapp_dir[m_type].append(mapp_node.cloneNode(True)) - + self.__m_temps_dir = {} # holds mapper_template lists by mapper_type for temp_node in self.__m_temps: m_type = temp_node.getAttribute('mapper_type') @@ -53,15 +65,15 @@ self.__m_temps_dir[m_type] = [] self.__m_temps_dir[m_type].append(temp_node.cloneNode(True)) # - - - - - + + + + + def get_xml_report(self): return self.__report.cloneNode(True) - - + + def get_mappers(self, type=''): l = [] if type == '': @@ -72,8 +84,8 @@ for s in l: r.append(s.cloneNode(True)) return r - - + + def get_mappers_dir(self): r = {} for type in self.__mapp_dir: @@ -82,8 +94,8 @@ l.append(m.cloneNode(True)) r[type] = l return r - - + + def get_mapper(self, id): if id == '': raise Exception, 'empty mapper_id!!!' @@ -91,8 +103,8 @@ if m.getAttribute('mapper_id') == id: return m.cloneNode(True) return None - - + + def get_mapper_temps_dir(self): r = {} for type in self.__m_temps_dir: @@ -101,8 +113,8 @@ l.append(m.cloneNode(True)) r[type] = l return r - - + + def get_mapper_temps(self, type=''): l = [] if type == '': @@ -113,12 +125,12 @@ for s in l: r.append(s.cloneNode(True)) return r - - + + def get_targets(self, mapper): - if mapper == None: + if mapper is None: return [] - + targets_list = [] for node in mapper.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -129,12 +141,12 @@ if node.nodeName == BD_TYPE: targets_list.append(node.cloneNode(True)) return targets_list - - + + def get_new_targets(self, mapper): - if mapper == None: + if mapper is None: return [] - + targets_list = [] for node in mapper.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -145,12 +157,12 @@ if node.nodeName == BD_TEMPLATE: targets_list.append(node.cloneNode(True)) return targets_list - - + + def get_sources(self, mapper): - if mapper == None: + if mapper is None: return [] - + targets_list = [] for node in mapper.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -161,12 +173,12 @@ if node.nodeName == BD_TYPE: targets_list.append(node.cloneNode(True)) return targets_list - - + + def get_new_sources(self, mapper): - if mapper == None: + if mapper is None: return [] - + targets_list = [] for node in mapper.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -177,39 +189,38 @@ if node.nodeName == BD_TYPE: targets_list.append(node.cloneNode(True)) return targets_list - - + + def get_mapper_props(self, mapper): - if mapper == None: + if mapper is None: return None - + props = None for node in mapper.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == PROPS_TAG: props = node.cloneNode(True) - if props == None: + if props is None: raise Exception, 'mapper missing properties tag' return props - - + + def get_target(self, mapper_id, path): mapper = self.get_mapper(mapper_id) - if mapper == None: + if mapper is None: return None - + targets = self.get_targets(mapper) for t_xml in targets: if t_xml.getAttribute('path') == path: return t_xml.cloneNode(True) return None - - + def is_storage_report_cached(session, storagename): if session.has_key(SESSION_STORAGE_XML_REPORT): reports_dir = session[SESSION_STORAGE_XML_REPORT] if reports_dir.has_key(storagename): - if reports_dir[storagename] != None: + if reports_dir[storagename] is not None: return True return False @@ -221,12 +232,10 @@ session.set(SESSION_STORAGE_XML_REPORT, reports_dir) return - -def cache_storage_report(ricci_comm, - session): +def cache_storage_report(ricci_comm, session): try: rep = get_storage_report(ricci_comm, session) - if rep == None: + if rep is None: raise Exception, 'Unable to communicate with host (either system down or ricci not running on it)' else: return True @@ -240,32 +249,32 @@ session): #print 'get_storage_report()' #print ricci_comm, session - - if ricci_comm == None: + + if ricci_comm is None: return None - + storagename = ricci_comm.hostname() - + # setup cache, if not already set up if not session.has_key(SESSION_STORAGE_XML_REPORT): session.set(SESSION_STORAGE_XML_REPORT, {}) # return cached report if existing if session[SESSION_STORAGE_XML_REPORT].has_key(storagename): tmp_report = session[SESSION_STORAGE_XML_REPORT][storagename] - if tmp_report != None: + if tmp_report is not None: print 'using cached storage_xml_report' return StorageReport(tmp_report) - - + + # retrieve storage report using ricci print 'retrieving new storage_xml_report' - + #print ricci_comm.authenticated() #print ricci_comm.cluster_info() print ricci_comm.hostname() print ricci_comm.os() - - + + # request doc = minidom.Document() batch = doc.createElement('batch') @@ -278,7 +287,7 @@ batch.appendChild(module) module.appendChild(request) request.appendChild(function) - + # get report batch_r = ricci_comm.process_batch(batch) if batch_r.getAttribute('status') != '0': @@ -290,7 +299,7 @@ if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'module': module_r = node - if module_r == None: + if module_r is None: raise Exception, 'malformed response: missing in ' module_r_status = module_r.getAttribute('status') if module_r_status != '0': @@ -302,14 +311,14 @@ if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'response': resp_r = node - if resp_r == None: + if resp_r is None: raise Exception, 'malformed response: missing in ' fr_r = None for node in resp_r.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'function_response': fr_r = node - if fr_r == None: + if fr_r is None: raise Exception, 'malformed response: missing in ' succ_v = None err_code_v = None @@ -325,23 +334,23 @@ err_desc_v = var except: pass - if succ_v == None: + if succ_v is None: raise Exception, 'malformed response: missing "success" variable in ' - if succ_v.get_value() != True: + if succ_v.get_value() is not True: # error if err_code_v.get_value() == -1: raise Exception, 'Generic error on host:\n\n%s' % err_desc_v.get_value() else: raise Exception, 'Host responded: %s' % err_desc_v.get_value() - + #xml_report = fr_r.toxml() xml_report = fr_r - + # cache xml_report reports_dir = session[SESSION_STORAGE_XML_REPORT] reports_dir[storagename] = xml_report session.set(SESSION_STORAGE_XML_REPORT, reports_dir) - + return StorageReport(xml_report) @@ -357,13 +366,13 @@ def get_bd_data(self, storage_report, mapper_id, path): - if storage_report == None or mapper_id == None: + if storage_report is None or mapper_id is None: return None - + mapper = get_mapper_data(self, storage_report, mapper_id) - if mapper == None: + if mapper is None: return None - + for t in mapper['targets']: if t['path'] == path: return t @@ -394,7 +403,7 @@ ret_dir[mapp_type] = {} ret_dir[mapp_type]['mappers'] = [] ret_dir[mapp_type]['mapper_template'] = get_mapper_template_data(self, storage_report, mapp_type) - + # pretty stuff for mapp_type in ret_dir: info = ret_dir[mapp_type] @@ -408,23 +417,23 @@ info['pretty_targets_name'] = info_source['pretty_targets_name'] info['pretty_source_name'] = info_source['pretty_source_name'] info['pretty_sources_name'] = info_source['pretty_sources_name'] - + return ret_dir def get_mapper_data(self, storage_report, mapper_id): - if self == None or storage_report == None or mapper_id == None: + if self is None or storage_report is None or mapper_id is None: return None - + session = self.REQUEST.SESSION - + mapper = storage_report.get_mapper(mapper_id) - if mapper == None: + if mapper is None: return None - + removable, props = get_props_data_internal(session, mapper) - + new_targets = [] for t_xml in storage_report.get_new_targets(mapper): new_targets.append(get_bd_data_internal(session, t_xml, mapper)) @@ -437,7 +446,7 @@ sources = [] for s_xml in storage_report.get_sources(mapper): sources.append(get_bd_data_internal(session, s_xml, mapper)) - + type = mapper.getAttribute('mapper_type') pretty_type, pretty_target_name, pretty_source_name = get_pretty_mapper_info(type) pretty_name = mapper_id.replace('%s:' % type, '').replace('/dev/', '') @@ -445,7 +454,7 @@ pretty_sources_name = '%ss' % pretty_source_name icon_name, dummy1, dummy2 = get_mapper_icons(type) color = 'black' - + mapper_ret = {} mapper_ret['pretty_type'] = pretty_type mapper_ret['pretty_name'] = pretty_name @@ -464,9 +473,9 @@ mapper_ret['icon'] = icon_name mapper_ret['color'] = color mapper_ret['xml'] = mapper.cloneNode(True) - + assemble_all_targets(mapper_ret) - + actions = [] if removable: action = {'name' : 'Remove', @@ -474,7 +483,7 @@ 'link' : ''} actions.append(action) if type == MAPPER_VG_TYPE or type == MAPPER_MDRAID_TYPE or type == MAPPER_ATARAID_TYPE or type == MAPPER_MULTIPATH_TYPE: - action = {'name' : 'Add %s' % mapper_ret['pretty_sources_name'], + action = {'name' : 'Add %s' % mapper_ret['pretty_sources_name'], 'msg' : '', 'link' : './?%s=%s&%s=%s&%s=%s' % (PAGETYPE, ADD_SOURCES, PT_MAPPER_ID, mapper_ret['mapper_id'], PT_MAPPER_TYPE, mapper_ret['mapper_type'])} actions.append(action) @@ -482,7 +491,7 @@ for nt in mapper_ret['new_targets']: if nt['props']['snapshot']['value'] == 'false': if nt['new']: - action = {'name' : 'New %s' % mapper_ret['pretty_target_name'], + action = {'name' : 'New %s' % mapper_ret['pretty_target_name'], 'msg' : '', 'link' : './?%s=%s&%s=%s&%s=%s&%s=%s' \ % (PAGETYPE, VIEW_BD, @@ -492,10 +501,10 @@ actions.append(action) break mapper_ret['actions'] = actions - + if type == MAPPER_VG_TYPE: link_snapshots(mapper_ret) - + # cylinders work properly for VGs only, for now mapper_ret['graphical_view'] = type != MAPPER_PT_TYPE if mapper_ret['graphical_view']: @@ -504,9 +513,9 @@ else: mapper_ret['mappings-view_css_classnames'] = {'graphical_view' : 'invisible', 'textual_view' : 'visible'} - + mapper_ret['need_apply_button'] = mutable_props(mapper_ret['props']) - + return mapper_ret @@ -517,7 +526,7 @@ orig_name = snap['props']['snapshot_origin']['value'] snap['description'] = '%s, %s\'s Snapshot' \ % (snap['description'], orig_name) - + # find origin for t in mapper['targets']: if t['pretty_name'] == orig_name: @@ -532,7 +541,7 @@ def assemble_all_targets(mapper_data): mdata = mapper_data targets_all = [] - + if mdata['mapper_type'] == MAPPER_VG_TYPE: for t in mdata['targets']: targets_all.append(t) @@ -563,9 +572,9 @@ for t in mdata['new_targets']: if t['props']['partition_type']['value'] != 'extended': targets_all.append(t) - + # TODO: place logical into extended - + # sort partitions sorted = [] while len(targets_all) != 0: @@ -588,26 +597,26 @@ targets_all.append(t) for t in mdata['new_targets']: targets_all.append(t) - + mdata['targets_all'] = targets_all - + def get_mapper_template_data(self, storage_report, mapper_type): - if self == None or storage_report == None or mapper_type == None: + if self is None or storage_report is None or mapper_type is None: return None - + session = self.REQUEST.SESSION - + mapper_id = '' - + templ_xml_list = storage_report.get_mapper_temps(mapper_type) mapper = None if len(templ_xml_list) != 0: mapper = templ_xml_list[0] - if mapper == None: + if mapper is None: return None - + removable, props = get_props_data_internal(session, mapper) - + new_targets = [] for t_xml in storage_report.get_new_targets(mapper): new_targets.append(get_bd_data_internal(session, t_xml, mapper)) @@ -620,7 +629,7 @@ sources = [] for s_xml in storage_report.get_sources(mapper): sources.append(get_bd_data_internal(session, s_xml, mapper)) - + type = mapper.getAttribute('mapper_type') pretty_type, pretty_target_name, pretty_source_name = get_pretty_mapper_info(type) pretty_name = mapper_id.replace('%s:' % type, '').replace('/dev/', '') @@ -628,7 +637,7 @@ pretty_sources_name = '%ss' % pretty_source_name icon_name, dummy1, dummy2 = get_mapper_icons(type) color = 'black' - + min_sources = '0' max_sources = '0' new_props = {} @@ -640,7 +649,7 @@ else: new_props[name] = props[name] props = new_props - + mapper_ret = {} mapper_ret['pretty_type'] = pretty_type mapper_ret['pretty_name'] = pretty_name @@ -662,9 +671,9 @@ mapper_ret['icon'] = icon_name mapper_ret['color'] = color mapper_ret['xml'] = mapper.cloneNode(True) - + mapper_ret['actions'] = [] - + mapper_ret['need_apply_button'] = True return mapper_ret @@ -680,13 +689,13 @@ #return 'size has to be within limits' #return request #return 'OK' - + object_type = request['object_type'] mapper_id = request['mapper_id'] - + props = None content_props = None - + if object_type == 'bd' or object_type == 'bd_template': path = request[PT_PATH] bd_data = get_bd_data(self, storage_report, mapper_id, path) @@ -721,22 +730,22 @@ if sources_num == 0 or sources_num > len(data['new_sources']): return 'BAD: Invalid number of %s selected' % data['pretty_sources_name'] - if props != None: + if props is not None: res = check_props(self, props, request) - if res[0] == False: + if res[0] is False: return '%s %s' % (res[1], res[2]) - - if content_props != None: + + if content_props is not None: res = check_props(self, content_props, request) - if res[0] == False: + if res[0] is False: return '%s %s' % (res[1], res[2]) - + return 'OK' def check_props(self, props, request): valid = True var_name = '' msg = 'no message - BUG :(' - + for prop_name in props: if prop_name in request: prop = props[prop_name] @@ -806,7 +815,7 @@ var_name = prop_name valid = False break - + return [valid, var_name, msg] @@ -814,11 +823,11 @@ def apply(self, ricci, storage_report, request): if validate(self, storage_report, request) != 'OK': raise Exception, 'Internal error: input not validated!!!' - + session = request.SESSION - + storagename = request['storagename'] - + object_type = request['object_type'] mapper_id = request[PT_MAPPER_ID] mapper_type = request[PT_MAPPER_TYPE] @@ -826,14 +835,14 @@ path = '' if request.has_key(PT_PATH): path = request[PT_PATH] - - + + batch_id = '' - + if object_type == 'bd': bd_data = get_bd_data(self, storage_report, mapper_id, path) bd_xml = bd_data['xml'].cloneNode(True) - + if action_type == 'Remove': doc = minidom.Document() batch = doc.createElement("batch") @@ -845,15 +854,15 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'remove_bd') f_call.appendChild(Variable('bd', bd_xml.cloneNode(True)).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - + + elif action_type == 'Apply': # BD props props_xml = None @@ -888,7 +897,7 @@ node.setAttribute('value', str(val)) else: node.setAttribute('value', request[var_name]) - + # content content_data_list = get_content_data_internal(session, bd_xml) current_content_id = content_data_list[0]['id'] @@ -899,7 +908,7 @@ if c_data['id'] == selected_content_id: selected_content_data = c_data selected_content = c_data['xml'].cloneNode(True) - + # update selected_content props props_xml = None for node in selected_content.childNodes: @@ -934,7 +943,7 @@ node.setAttribute('value', str(val)) else: node.setAttribute('value', request[req_name]) - + if current_content_id == selected_content_id: # no change of content # replace content_xml @@ -966,21 +975,21 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'modify_bd') f_call.appendChild(Variable('bd', bd_xml).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - + + elif object_type == 'bd_template': path = request[PT_PATH] bd_data = get_bd_data(self, storage_report, mapper_id, path) bd_xml = bd_data['xml'].cloneNode(True) #return bd_xml.toprettyxml() - + if action_type == 'Apply': # Create # BD props props_xml = None @@ -1015,7 +1024,7 @@ node.setAttribute('value', str(val)) else: node.setAttribute('value', request[var_name]) - + if path != 'new_snapshot': # content content_data_list = get_content_data_internal(session, bd_xml) @@ -1027,7 +1036,7 @@ if c_data['id'] == selected_content_id: selected_content_data = c_data selected_content = c_data['xml'].cloneNode(True) - + # update selected_content props props_xml = None for node in selected_content.childNodes: @@ -1062,7 +1071,7 @@ node.setAttribute('value', str(val)) else: node.setAttribute('value', request[req_name]) - + if current_content_id == selected_content_id: # no change of content # replace content_xml @@ -1094,21 +1103,21 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'create_bd') f_call.appendChild(Variable('bd', bd_xml).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - - + + + elif object_type == 'mapper': mapper_data = get_mapper_data(self, storage_report, mapper_id) mapper_xml = mapper_data['xml'].cloneNode(True) #return mapper_xml.toprettyxml() - + if action_type == 'Remove': doc = minidom.Document() batch = doc.createElement("batch") @@ -1120,15 +1129,15 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'remove_mapper') f_call.appendChild(Variable('mapper', mapper_xml).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - + + elif action_type == 'Apply': # props props_xml = None @@ -1174,21 +1183,21 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'modify_mapper') f_call.appendChild(Variable('mapper', mapper_xml).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - + + elif object_type == 'mapper_template': mapper_data = get_mapper_template_data(self, storage_report, mapper_type) mapper_xml = mapper_data['xml'].cloneNode(True) #return mapper_xml.toprettyxml() - + if action_type == 'Apply': # props props_xml = None @@ -1223,7 +1232,7 @@ node.setAttribute('value', str(val)) else: node.setAttribute('value', request[var_name]) - + # find sources for v in request.keys(): if v.find('source_bd_') == 0: @@ -1246,23 +1255,23 @@ f_call = doc.createElement("function_call") f_call.setAttribute('name', 'create_mapper') f_call.appendChild(Variable('mapper', mapper_xml.cloneNode(True)).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - - - + + + + elif object_type == 'add_sources': mapper_data = get_mapper_data(self, storage_report, mapper_id) mapper_xml = mapper_data['xml'].cloneNode(True) new_sources = [] #return mapper_xml.toprettyxml() - + if action_type == 'Apply': # find sources for v in request.keys(): @@ -1286,15 +1295,15 @@ f_call.appendChild(Variable('mapper_id', mapper_id).export_xml(doc)) f_call.appendChild(Variable('mapper_state_ind', mapper_xml.getAttribute('state_ind')).export_xml(doc)) f_call.appendChild(VariableList('bds', new_sources, [], VARIABLE_TYPE_LIST_XML).export_xml(doc)) - + req.appendChild(f_call) module.appendChild(req) batch.appendChild(module) - + res = ricci.process_batch(batch, True) batch_id = res.getAttribute('batch_id') - - + + if batch_id == '': raise Exception, 'unsupported function' else: @@ -1302,17 +1311,17 @@ return batch_id -def get_storage_batch_result(self, - storagename, - ricci, - index_html_URL, +def get_storage_batch_result(self, + storagename, + ricci, + index_html_URL, batch_id): error = True # ricci reported failure or no ricci completed = False # no batch, or batch done (defined if no error) url = index_html_URL # redirect URL msg = 'Unknown error occured' - - if ricci == None: + + if ricci is None: # ricci down error = True url = url @@ -1327,7 +1336,7 @@ error = True url = url msg = 'Ricci on %s responded with error. No detailed info available.' % storagename - elif batch == None: + elif batch is None: # no such batch error = False completed = True @@ -1431,7 +1440,7 @@ url = '%s?%s=%s&%s=%s' \ % (index_html_URL, STONAME, storagename, PAGETYPE, STORAGE) msg = err_msg - + return {'error' : error, 'completed' : completed, 'redirect_url' : url, @@ -1445,29 +1454,29 @@ -def get_commit_redirect(main_url, - storagename, +def get_commit_redirect(main_url, + storagename, batch_xml): module_r = None for node in batch_xml.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'module': module_r = node - if module_r == None: + if module_r is None: raise Exception, 'missing in ' resp_r = None for node in module_r.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == RESPONSE_TAG: resp_r = node - if resp_r == None: + if resp_r is None: raise Exception, 'missing in ' fr_r = None for node in resp_r.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == FUNC_RESP_TAG: fr_r = node - if fr_r == None: + if fr_r is None: raise Exception, 'missing in ' vars = {} for node in fr_r.childNodes: @@ -1476,8 +1485,8 @@ vars[var.get_name()] = var except: pass - - + + mapper_id = '' mapper_type = '' bd_path = '' @@ -1499,7 +1508,7 @@ url_list.append('&%s=%s' % (PT_MAPPER_ID, mapper_id)) if bd_path != '': url_list.append('&%s=%s' % (PT_PATH, bd_path)) - + if mapper_type == '': url_list.append('&%s=%s' % (PAGETYPE, STORAGE)) elif bd_path != '': @@ -1512,19 +1521,19 @@ def get_bd_data_internal(session, bd_xml, mapper_xml): data = {} - + removable, props = get_props_data_internal(session, bd_xml) - + path = bd_xml.getAttribute('path') mapper_type = bd_xml.getAttribute('mapper_type') mapper_id = bd_xml.getAttribute('mapper_id') contents = get_content_data_internal(session, bd_xml) - + pretty_mapper_type, pretty_type, dummy2 = get_pretty_mapper_info(mapper_type) pretty_name = path.replace('/dev/','') dummy1, icon_name, dummy2 = get_mapper_icons(mapper_type) color = 'black' - + size_in_units, units = bytes_to_value_units(props['size']['value']) description = None @@ -1542,7 +1551,7 @@ if description is None: description = '%s %s' % (size_in_units, units) - + if bd_xml.nodeName == BD_TEMPLATE: if mapper_type == MAPPER_PT_TYPE: path = 'unused_segment_%s_%s' \ @@ -1560,7 +1569,7 @@ contents = [] path = 'new_snapshot' pretty_name = '' - + data['pretty_mapper_type'] = pretty_mapper_type data['pretty_type'] = pretty_type data['pretty_name'] = pretty_name @@ -1574,7 +1583,7 @@ data['icon'] = icon_name data['color'] = color data['xml'] = bd_xml.cloneNode(True) - + actions = [] if removable: action = {'name' : 'Remove', @@ -1593,12 +1602,12 @@ if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == BD_TEMPLATE: snap_lv = get_bd_data_internal(session, node, mapper_xml) - if snap_lv != None: + if snap_lv is not None: if snap_lv['props']['snapshot']['value'] == 'true': origs = snap_lv['props']['snapshot_origin']['value'] if pretty_name in origs: action = {'name' : 'Take Snapshot', - 'msg' : '', + 'msg' : '', 'link' : './?%s=%s&%s=%s&%s=%s&%s=%s' \ % (PAGETYPE, VIEW_BD, \ PT_MAPPER_ID, data['mapper_id'], \ @@ -1606,9 +1615,9 @@ PT_PATH, snap_lv['path'])} actions.append(action) data['actions'] = actions - + need_apply_butt = mutable_props(data['props']) - if need_apply_butt == False: + if need_apply_butt is False: if len(data['contents']) > 1: need_apply_butt = True elif len(data['contents']) == 1: @@ -1616,15 +1625,15 @@ else: need_apply_butt = False data['need_apply_button'] = need_apply_butt - + return data def get_props_data_internal(session, xml_tag): data = {} removable = False - - + + props_xml = None for node in xml_tag.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -1641,13 +1650,13 @@ mutable = var.getAttribute('mutable') == 'true' type = var.getAttribute('type') value = var.getAttribute('value') - + d_units = '' if name in ['size', 'extent_size', 'block_size', 'size_free', 'partition_begin']: d_units = 'bytes' if 'percent' in name: d_units = '%' - + validation_data = {} if type == VARIABLE_TYPE_INT: d_type = 'int' @@ -1699,15 +1708,15 @@ else: d_type = 'label' d_value = value - + if not mutable and d_type != 'label' and d_type != 'hidden': d_type = 'label' d_value = str(value) - + hidden = False if type == 'hidden' or name in ['partition_begin', 'snapshot']: hidden = True - + if name == 'removable': removable = value == 'true' elif name == 'path': @@ -1720,7 +1729,7 @@ 'units' : d_units, 'validation' : validation_data, 'hidden' : hidden} - + return (removable, data) @@ -1749,7 +1758,7 @@ uuids.append(prop) else: rest.append(prop) - + ordered = [] for prop in names: ordered.append(prop) @@ -1783,9 +1792,9 @@ if node.nodeName == CONTENT_TYPE: c_xml = node break - if c_xml == None: + if c_xml is None: return {} - + a_xmls = [] for node in c_xml.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: @@ -1796,7 +1805,7 @@ if node.nodeName == "content_template": a_xmls.append(node) break - + current = {} removable, props = get_props_data_internal(session, c_xml) current['props'] = props @@ -1804,7 +1813,7 @@ current['name'] = name current['id'] = id current['xml'] = c_xml.cloneNode(True) - + data = [current] for a_xml in a_xmls: available = {} @@ -1814,9 +1823,9 @@ available['name'] = name available['id'] = id available['xml'] = a_xml.cloneNode(True) - + data.append(available) - + for d in data: old_props = d['props'] new_props = {} @@ -1827,7 +1836,7 @@ d['props'] = new_props d['props_ordered'] = get_ordered_props(new_props) d['is_source'] = False - + # content's color and icon color = 'black' icon_name = '' @@ -1849,10 +1858,10 @@ pass elif type == 'hidden': pass - + d['color'] = color d['icon'] = icon_name - + return data @@ -1892,7 +1901,7 @@ name = 'Extended Partition' else: name = "Unknown type" - + return name, id @@ -1916,12 +1925,12 @@ nonclu_list = clusters[cluname] else: cl = {'name' : cluname, - 'alias' : clusters[cluname][0]['clualias'], + 'alias' : clusters[cluname][0]['clualias'], 'nodes' : clusters[cluname]} clu_list.append(cl) - + ret = [nonclu_list, clu_list, bad_list] - + return ret @@ -1932,18 +1941,18 @@ length): # highlights high_list = {} - + # upper cyl upper_cyl = {'offset' : 0, 'cyls' : [], 'highs' : [], 'js' : [], - 'color' : 'blue', - 'color_css' : '#0192db', + 'color' : 'blue', + 'color_css' : '#0192db', 'description': mapper_data['pretty_targets_name']} if mapper_data['mapper_type'] == MAPPER_PT_TYPE: upper_cyl['description'] = 'Physical %s' % upper_cyl['description'] - + offset = 0 for t in mapper_data['targets_all']: if t['mapper_type'] == MAPPER_PT_TYPE: @@ -1964,34 +1973,34 @@ data['color_css'] = 'black' upper_cyl['cyls'].append(data) offset = end - + # scale ranges for d in upper_cyl['cyls']: d['beg'] = d['beg'] * length / offset d['end'] = d['end'] * length / offset - 1 - + # build highlights for d in upper_cyl['cyls']: h_id = '%s_selected' % d['id'] beg = d['beg'] end = d['end'] - upper_cyl['highs'].append({'beg' : beg, - 'end' : end, + upper_cyl['highs'].append({'beg' : beg, + 'end' : end, 'id' : h_id, 'type' : 'select'}) upper_cyl['js'].append([d['id'], [beg, end], d['bd']['pretty_name']]) high_list[d['id']] = [h_id] - + # snapshots bd = d['bd'] if bd['mapper_type'] == MAPPER_VG_TYPE and not bd['new']: if 'origin' in bd: # snapshot snap_id = '%s_snapshot' % bd['path'] - upper_cyl['highs'].append({'beg' : beg, - 'end' : end, + upper_cyl['highs'].append({'beg' : beg, + 'end' : end, 'id' : snap_id, 'type' : 'snapshot'}) orig = bd['origin'] @@ -1999,26 +2008,26 @@ high_list[d['id']].append(snap_id) if 'snapshots' in bd: # origin - upper_cyl['highs'].append({'beg' : beg, - 'end' : end, + upper_cyl['highs'].append({'beg' : beg, + 'end' : end, 'id' : '%s_origin' % bd['path'], 'type' : 'snapshot-origin'}) for snap in bd['snapshots']: high_list[d['id']].append('%s_snapshot', snap['path']) - - - + + + upper_cyl['js'] = str(upper_cyl['js']).replace('L,', ',').replace('L]', ']').replace('u\'', '\'').replace('L]', ']') - + # lower cylinder lower_cyl = {'offset' : 0, 'cyls' : [], 'highs' : [], 'js' : [], - 'color' : 'red', - 'color_css' : '#a43737', + 'color' : 'red', + 'color_css' : '#a43737', 'description': mapper_data['pretty_sources_name']} - + offset = 0 for t in mapper_data['sources']: data = {} @@ -2032,14 +2041,14 @@ data['color_css'] = '#a43737' lower_cyl['cyls'].append(data) offset = end - + if mapper_data['mapper_type'] == MAPPER_PT_TYPE: lower_cyl['description'] = 'Logical %s' % mapper_data['pretty_targets_name'] lower_cyl['cyls'] = [] lower_cyl['color'] = 'blue' lower_cyl['color_css'] = '#0192db' lower_cyl['offset'] = 9999999999999999999999999 - + offset = 0 for t in mapper_data['targets_all']: if t['props']['partition_type']['value'] != 'logical': @@ -2058,8 +2067,8 @@ data['color_css'] = '#0192db' lower_cyl['cyls'].append(data) offset = end - - + + # scale ranges length_in_bytes = 0 for t in mapper_data['sources']: @@ -2069,16 +2078,16 @@ for d in lower_cyl['cyls']: d['beg'] = int(d['beg'] * ppb) d['end'] = int(d['end'] * ppb - 1) - - - + + + # build highlights for d in lower_cyl['cyls']: h_id = '%s_selected' % d['id'] beg = d['beg'] end = d['end'] - lower_cyl['highs'].append({'beg' : beg, - 'end' : end, + lower_cyl['highs'].append({'beg' : beg, + 'end' : end, 'id' : h_id, 'type' : 'select'}) lower_cyl['js'].append([d['id'], @@ -2086,20 +2095,20 @@ d['bd']['pretty_name']]) high_list[d['id']] = [h_id] lower_cyl['js'] = str(lower_cyl['js']).replace('L,', ',').replace('L]', ']').replace('u\'', '\'').replace('L]', ']') - + # transform list of highlights high_list_js = [[mapper_data['mapper_id'], []]] for id in high_list: high_list_js.append([id, high_list[id]]) high_list_js = str(high_list_js).replace('L,', ',').replace('L]', ']').replace('u\'', '\'').replace('L]', ']') - + # put everything together ret = {} ret['mapper'] = mapper_data ret['upper_cyl'] = upper_cyl ret['lower_cyl'] = lower_cyl ret['js'] = high_list_js - + return ret --- conga/luci/site/luci/Extensions/Variable.py 2007/05/04 19:10:24 1.4.8.2 +++ conga/luci/site/luci/Extensions/Variable.py 2007/05/15 21:42:21 1.4.8.3 @@ -1,13 +1,24 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + import xml.dom -from ricci_defines import VARIABLE_TAG, VARIABLE_TYPE_BOOL, VARIABLE_TYPE_FLOAT, VARIABLE_TYPE_INT, VARIABLE_TYPE_INT_SEL, VARIABLE_TYPE_LISTENTRY, VARIABLE_TYPE_LIST_INT, VARIABLE_TYPE_LIST_STR, VARIABLE_TYPE_LIST_XML, VARIABLE_TYPE_STRING, VARIABLE_TYPE_STRING_SEL, VARIABLE_TYPE_XML +from ricci_defines import VARIABLE_TAG, VARIABLE_TYPE_BOOL, \ + VARIABLE_TYPE_FLOAT, VARIABLE_TYPE_INT, VARIABLE_TYPE_INT_SEL, \ + VARIABLE_TYPE_LISTENTRY, VARIABLE_TYPE_LIST_INT, \ + VARIABLE_TYPE_LIST_STR, VARIABLE_TYPE_LIST_XML, VARIABLE_TYPE_STRING, \ + VARIABLE_TYPE_STRING_SEL, VARIABLE_TYPE_XML def parse_variable(node): if node.nodeType != xml.dom.Node.ELEMENT_NODE: raise Exception, 'not a variable' if node.nodeName != str(VARIABLE_TAG): raise Exception, 'not a variable' - + attrs_dir = {} attrs = node.attributes for attrName in attrs.keys(): @@ -18,12 +29,12 @@ raise Exception, 'incomplete variable' if (attrs_dir['type'] != VARIABLE_TYPE_LIST_INT and attrs_dir['type'] != VARIABLE_TYPE_LIST_STR and attrs_dir['type'] != VARIABLE_TYPE_LIST_XML and attrs_dir['type'] != VARIABLE_TYPE_XML) and ('value' not in attrs_dir): raise Exception, 'incomplete variable' - + mods = {} for mod in attrs_dir: if mod not in ['name', 'value', 'type']: mods[mod] = attrs_dir[mod] - + value = '' if attrs_dir['type'] == VARIABLE_TYPE_LIST_STR: value = [] @@ -38,7 +49,7 @@ v = attrValue else: continue - if v == None: + if v is None: raise Exception, 'invalid listentry' value.append(v) return VariableList(attrs_dir['name'], value, mods, VARIABLE_TYPE_LIST_STR) @@ -71,7 +82,7 @@ value = (attrs_dir['value'] == 'true') else: raise Exception, 'invalid variable' - + return Variable(attrs_dir['name'], value, mods) @@ -84,7 +95,7 @@ def get_name(self): return self.__name - + def get_value(self): return self.__value @@ -92,15 +103,15 @@ if self.__is_bool(value): self.__type = VARIABLE_TYPE_BOOL self.__value = value - + elif self.__is_int(value): self.__type = VARIABLE_TYPE_INT self.__value = int(value) - + elif self.__is_float(value): self.__type = VARIABLE_TYPE_FLOAT self.__value = float(value) - + elif self.__is_list(value): raise Exception, "lists not implemented" if self.__is_int(value[0]): @@ -114,11 +125,11 @@ elif self.__is_xml(value): self.__type = VARIABLE_TYPE_XML self.__value = value - + else: self.__value = str(value) self.__type = VARIABLE_TYPE_STRING - + def type(self): if 'valid_values' in self.__mods: if self.__type == VARIABLE_TYPE_INT: @@ -126,13 +137,13 @@ elif self.__type == VARIABLE_TYPE_STRING: return VARIABLE_TYPE_STRING_SEL return self.__type - + def get_modifiers(self): return self.__mods def set_modifier(self, mod_name, mod_value): self.__mods[mod_name] = mod_value return - + def export_xml(self, doc): elem = doc.createElement(VARIABLE_TAG) elem.setAttribute('name', self.__name) @@ -178,10 +189,10 @@ return VARIABLE_TYPE_XML else: return VARIABLE_TYPE_STRING - - - - + + + + def __is_xml(self, value): try: value.toxml() @@ -220,8 +231,8 @@ except: pass return False - - + + class VariableList(Variable): def __init__(self, name, value, mods, list_type): Variable.__init__(name, value, mods=mods) @@ -233,29 +244,29 @@ self.__mods = mods self.__type = list_type self.__value = value - + def get_name(self): return self.__name - + def get_value(self): return self.__value def set_value(self, value): raise Exception, 'VariableList.set_value() not implemented' - + def type(self): return self.__type - + def get_modifiers(self): return self.__mods def set_modifier(self, mod_name, mod_value): self.__mods[mod_name] = mod_value return - + def export_xml(self, doc): elem = doc.createElement(VARIABLE_TAG) elem.setAttribute('name', self.__name) elem.setAttribute('type', self.type()) - + l = self.get_value() for x in l: if self.type() == VARIABLE_TYPE_LIST_XML: --- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/05/14 18:00:14 1.255.2.4 +++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/05/15 21:42:21 1.255.2.5 @@ -1,5 +1,11 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from xml.dom import minidom -import AccessControl from ClusterModel.ModelBuilder import ModelBuilder from ClusterModel.FailoverDomain import FailoverDomain @@ -22,12 +28,11 @@ from ResourceHandler import create_resource from system_adapters import validate_svc_update from homebase_adapters import parseHostForm -from LuciZope import userAuthenticated from LuciClusterInfo import getClusterInfo from conga_constants import * -from FenceHandler import validateNewFenceDevice, FENCE_OPTS, \ +from FenceHandler import validateNewFenceDevice, \ validateFenceDevice, validate_fenceinstance, \ FD_VAL_FAIL, FD_VAL_SUCCESS @@ -35,10 +40,11 @@ batch_status, extract_module_status from LuciDB import manageCluster, createClusterSystems, \ - havePermCreateCluster, setNodeStatus, getStorageNode, \ + setNodeStatus, getStorageNode, noNodeStatusPresent, \ getClusterNode, delCluster, buildClusterCreateFlags, \ - noNodeStatussPresent, resolve_nodename, set_node_flag, \ - getRicciAgent + resolve_nodename, set_node_flag, getRicciAgent + +from LuciZopePerm import havePermCreateCluster luci_log = get_logger() @@ -577,12 +583,12 @@ while True: batch_ret = rq.checkBatch(cluster_ricci, batch_number) code = batch_ret[0] - if code == True: + if code is True: break if code == -1: errors.append(batch_ret[1]) raise Exception, str(batch_ret[1]) - if code == False: + if code is False: time.sleep(0.5) except Exception, e: incomplete = True @@ -888,7 +894,7 @@ except Exception, e: luci_log.debug_verbose('VRA1: no model: %s' % str(e)) return None - + errors = list() try: res = create_resource(res_type, request.form, model) @@ -935,7 +941,7 @@ errors.append('An invalid multicast selection was made') return (False, {'errors': errors}) - if mcast_manual == True: + if mcast_manual is True: try: addr_str = form['mcast_address'].strip() socket.inet_pton(socket.AF_INET, addr_str) @@ -951,7 +957,7 @@ else: addr_str = None - if (addr_str is None and mcast_manual != True) or (mcast_manual == True and addr_str == model.getMcastAddr()): + if (addr_str is None and mcast_manual is not True) or (mcast_manual is True and addr_str == model.getMcastAddr()): errors.append('No multicast configuration changes were made') return (False, {'errors': errors}) @@ -1930,7 +1936,7 @@ if fdev.getName().strip() == fencedev_name: fdev_to_delete = fdev break - if fdev_to_delete == None: + if fdev_to_delete is None: luci_log.debug_verbose('VFD: Could not find fence device name in model') return (False, {'errors':['Could not find fence device name in model']}) @@ -2647,7 +2653,7 @@ else: svadd['currentItem'] = False - if model.getIsVirtualized() == True: + if model.getIsVirtualized() is True: vmadd = {} vmadd['Title'] = "Add a Virtual Service" vmadd['cfg_type'] = "vmadd" @@ -2724,7 +2730,7 @@ kids = list() kids.append(svadd) - if model.getIsVirtualized() == True: + if model.getIsVirtualized() is True: kids.append(vmadd) kids.append(svcfg) sv['children'] = kids @@ -3161,7 +3167,7 @@ if nodename is None: luci_log.debug_verbose('serviceMigrate1: no target node name') return None - + cluname = None try: cluname = req['clustername'] @@ -3335,14 +3341,14 @@ return None objname = '%s____flag' % nodename_resolved - fnpresent = noNodeStatussPresent(self, nodefolder, objname, nodename_resolved) + fnpresent = noNodeStatusPresent(self, nodefolder, objname, nodename_resolved) if fnpresent is None: luci_log.debug('NL1: An error occurred while checking flags for %s' \ % nodename_resolved) return None - if fnpresent == False: + if fnpresent is False: luci_log.debug('NL2: flags are still present for %s -- bailing out' \ % nodename_resolved) return None @@ -4004,7 +4010,7 @@ if batch_xml is None: # The job is done and gone from queue - if redirect_message == False: + if redirect_message is False: # We have not displayed this message yet node_report['desc'] = REDIRECT_MSG node_report['iserror'] = True @@ -4139,7 +4145,7 @@ finished = batch_res[0] err_msg = batch_res[1] - if finished == True or finished == -1: + if finished is True or finished == -1: if finished == -1: flag_msg = err_msg else: @@ -4173,7 +4179,7 @@ part2 = tmpstr ###FIXME - The above assumes that the 'busyfirst' query var is at the ###end of the URL... - busy_map['refreshurl'] = '5; url=%s?%s' % (part1, part2) + busy_map['refreshurl'] = '5; url=%s?%s' % (part1, part2) req['specialpagetype'] = '1' else: try: @@ -4482,7 +4488,7 @@ cc_xml = minidom.parseString(cc) except: pass - if cc_xml == None: + if cc_xml is None: msg_list.append('FAILED\n') msg_list.append('Fix the error and try again:\n') else: @@ -4523,4 +4529,4 @@ model = req.SESSION.get('model') cc = model.exportModelAsString() - return {'msg': ''.join(msg_list), 'cluster_conf': cc} + return { 'msg': ''.join(msg_list), 'cluster_conf': cc } --- conga/luci/site/luci/Extensions/conga_constants.py 2007/05/14 16:02:11 1.39.2.3 +++ conga/luci/site/luci/Extensions/conga_constants.py 2007/05/15 21:42:21 1.39.2.4 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + # Cluster area page types CLUSTERLIST = '3' CLUSTERS = '4' @@ -131,7 +138,7 @@ PRE_CFG = 'Reboot stage successful, but configuration for the cluster is not yet distributed.' PRE_JOIN = 'Packages are installed and configuration has been distributed, but the node has not yet joined the cluster.' -POSSIBLE_REBOOT_MESSAGE = 'This node is not currently responding and is probably rebooting as planned. This state should persist for 5 minutes or so...' +POSSIBLE_REBOOT_MESSAGE = 'This node is not currently responding and is probably rebooting as planned. This state could persist for 5 minutes or so...' REDIRECT_MSG = ' -- You will be redirected in 5 seconds.' --- conga/luci/site/luci/Extensions/conga_ssl.py 2007/05/04 19:10:24 1.2.4.1 +++ conga/luci/site/luci/Extensions/conga_ssl.py 2007/05/15 21:42:21 1.2.4.2 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + import sys sys.path.append('/usr/lib/luci/ssl') sys.path.append('/usr/lib64/luci/ssl') @@ -9,7 +16,7 @@ # timeouts are in seconds (int) class SSLSocket: - + def __init__(self, hostname, port, @@ -25,10 +32,10 @@ if self.__id != -1: conga_ssl_lib.disconnect(self.__id) self.__id = -1 - + def peer_fingerprint(self): return conga_ssl_lib.peer_fingerprint(self.__id) - + def trusted(self): return conga_ssl_lib.trusted(self.__id) == 1 def trust(self): @@ -37,7 +44,7 @@ return conga_ssl_lib.trust(self.__id, self.__hostname) == 1 def untrust(self): return conga_ssl_lib.untrust(self.__id) == 1 - + def send(self, msg, timeout): conga_ssl_lib.send(self.__id, msg, timeout) def recv(self, timeout): --- conga/luci/site/luci/Extensions/conga_storage_constants.py 2007/05/03 20:16:38 1.8.8.1 +++ conga/luci/site/luci/Extensions/conga_storage_constants.py 2007/05/15 21:42:21 1.8.8.2 @@ -1,4 +1,13 @@ -from ricci_defines import MAPPER_ATARAID_TYPE, MAPPER_CRYPTO_TYPE, MAPPER_iSCSI_TYPE, MAPPER_MDRAID_TYPE, MAPPER_MULTIPATH_TYPE, MAPPER_PT_TYPE, MAPPER_SYS_TYPE, MAPPER_VG_TYPE +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + +from ricci_defines import MAPPER_ATARAID_TYPE, MAPPER_CRYPTO_TYPE, \ + MAPPER_iSCSI_TYPE, MAPPER_MDRAID_TYPE, MAPPER_MULTIPATH_TYPE, \ + MAPPER_PT_TYPE, MAPPER_SYS_TYPE, MAPPER_VG_TYPE ## request vars ## @@ -66,12 +75,12 @@ 'extents_used' : "Used Extents", 'failed' : "Failed", 'format' : "Format", - 'fstab' : "List in /etc/fstab", - 'fstabpoint' : "/etc/fstab Mountpoint", - 'gfs_fsname' : "Unique GFS Name", + 'fstab' : "List in /etc/fstab", + 'fstabpoint' : "/etc/fstab Mountpoint", + 'gfs_fsname' : "Unique GFS Name", 'has_journal' : "Journaling Enabled - ext3", - 'journals_num' : "Number Of Journals", - 'journal_size' : "Journal Size", + 'journals_num' : "Number Of Journals", + 'journal_size' : "Journal Size", 'label' : "Label", 'level' : "Level", 'locking_protocol' : "Locking Protocol", @@ -84,7 +93,7 @@ 'model' : "Model", 'mount' : "Mount", 'mountable' : "Mountable", - 'mountpoint' : "Mountpoint", + 'mountpoint' : "Mountpoint", 'num_devices' : "Number of Devices", 'num_spares' : "Number of Spares", 'partition_begin' : "Partition Begin", --- conga/luci/site/luci/Extensions/homebase_adapters.py 2007/05/14 18:00:14 1.50.2.3 +++ conga/luci/site/luci/Extensions/homebase_adapters.py 2007/05/15 21:42:21 1.50.2.4 @@ -1,15 +1,24 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from conga_constants import PLONE_ROOT, CLUSTER_NODE_NEED_AUTH, \ - STORAGE_FOLDER_PATH, CLUSTER_FOLDER_PATH + STORAGE_FOLDER_PATH, CLUSTER_FOLDER_PATH, LUCI_DEBUG_MODE from RicciQueries import getClusterConf from LuciSyslog import get_logger from HelperFunctions import resolveOSType -from LuciDB import delCluster, clearNodeStatus, delSystem, getClusterNode, \ - getClusters, getStorage, getStorageNode, \ - havePermAddCluster, havePermAddUser, havePermDelUser, \ - havePermEditPerms, havePermRemCluster, havePermRemStorage, \ - havePermAddStorage, manageCluster +from LuciDB import delCluster, clearNodeStatus, delSystem, \ + getClusterNode, getClusters, getStorage, getStorageNode, \ + manageCluster + +from LuciZopePerm import havePermAddCluster, havePermRemCluster, \ + havePermAddUser, havePermDelUser, havePermEditPerms, \ + havePermRemStorage, havePermAddStorage from ricci_communicator import RicciCommunicator @@ -59,7 +68,7 @@ if not request.form.has_key('deluserId'): return (False, { 'errors': [ 'No User ID given' ] }) - + userId = request.form['deluserId'] try: @@ -67,27 +76,32 @@ if not user: raise Exception, 'user %s does not exist' % userId except Exception, e: - luci_log.debug_verbose('VDU0: %s: %r' % (userId, e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VDU0: %s: %r' % (userId, e)) return (False, {'errors': [ 'No such user: "%s"' % userId ] }) for i in getClusters(self): try: i[1].manage_delLocalRoles([ userId ]) except Exception, e: - luci_log.debug_verbose('VDU1: %s %s: %r' % (userId, i[0], e)) - errors.append('Error deleting roles from cluster "%s" for user "%s"' % (i[0], userId)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VDU1: %s %s: %r' % (userId, i[0], e)) + errors.append('Error deleting roles from cluster "%s" for user "%s"' \ + % (i[0], userId)) for i in getStorage(self): try: i[1].manage_delLocalRoles([ userId ]) except Exception, e: - luci_log.debug_verbose('VDU2: %s: %r' % (userId, i[0], e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VDU2: %s: %r' % (userId, i[0], e)) errors.append('Error deleting roles from storage system "%s" for user "%s"' % (i[0], userId)) try: self.acl_users.userFolderDelUsers([ userId ]) except Exception, e: - luci_log.debug_verbose('VDU3: %s %r' % (userId, e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VDU3: %s %r' % (userId, e)) errors.append('Unable to delete user "%s"' % userId) return (False, {'errors': errors }) @@ -118,7 +132,8 @@ try: self.portal_registration.addMember(user, passwd, properties = { 'username': user, 'password': passwd, 'confirm': passwd, 'roles': [ 'Member' ], 'domains': [], 'email': '%s at conga.example.com' % user }) except Exception, e: - luci_log.debug_verbose('VAU0: %s: %r' % (user, e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAU0: %s: %r' % (user, e)) return (False, { 'errors': [ 'Unable to add new user "%s"' % user ] }) if not self.portal_membership.getMemberById(user): @@ -144,7 +159,8 @@ raise Exception, 'no node was given' cur_host = sysData[0] except Exception, e: - luci_log.debug_verbose('vACI0: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI0: %r' % e) return (False, { 'errors': [ 'You must provide the address of at least one node in the cluster you wish to add.' ]}) cur_entry = { 'host': cur_host } @@ -154,7 +170,8 @@ cur_pass = sysData[1] cur_entry['passwd'] = cur_pass except: - luci_log.debug_verbose('vACI1: %s no password given') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI1: %s no password given' % cur_host) request.SESSION.set('add_cluster_initial', cur_entry) return (False, { 'errors': [ 'No password was given for %s' % cur_host ] }) @@ -194,10 +211,10 @@ else: cur_entry['fp'] = cur_fp[1] except Exception, e: - luci_log.debug_verbose('vACI2: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI2: %s: %r' % (cur_host, e)) request.SESSION.set('add_cluster_initial', cur_entry) - return (False, { 'errors': [ 'Unable to establish a connection to the ricci agent on %s: %s' \ - % (cur_host, str(e)) ] }) + return (False, { 'errors': [ 'Unable to establish a connection to the ricci agent on %s: %s' % (cur_host, str(e)) ] }) if not check_certs or cur_host_trusted: try: @@ -213,7 +230,8 @@ return (False, { 'errors': [ errmsg ] }) rc.trust() except Exception, e: - luci_log.debug_verbose('vACI3: %s %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI3: %s %r' % (cur_host, e)) request.SESSION.set('add_cluster_initial', cur_entry) return (False, { 'errors': [ 'Unable to establish trust for host %s' % (cur_host, str(e)) ] }) elif check_certs: @@ -241,7 +259,8 @@ raise Exception, 'rc is None' cur_entry['trusted'] = rc.trusted() except Exception, e: - luci_log.debug_verbose('vACI4: %s %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI4: %s %r' % (cur_host, e)) request.SESSION.set('add_cluster_initial', cur_entry) return (False, { 'errors': [ 'Unable to connect to the ricci agent on %s' % cur_host ] }) @@ -252,8 +271,8 @@ if not rc.authed(): raise Exception, 'authentication failed' except Exception, e: - errmsg = 'Unable to authenticate to the ricci agent on %s: %s' % (cur_host, str(e)) - luci_log.debug_verbose('vACI5: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI5: %s: %r' % (cur_host, e)) request.SESSION.set('add_cluster_initial', cur_entry) return (False, { 'errors': [ 'Unable to authenticate to the ricci agent on "%s"' % cur_host ] }) @@ -280,8 +299,9 @@ cluster_name = cluster_info[0] cluster_os = resolveOSType(rc.os()) - luci_log.debug_verbose('vACI5a: cluster os is %s (%s)' \ - % (cluster_os, rc.os())) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('vACI5a: cluster os is %s (%s)' \ + % (cluster_os, rc.os())) try: cluster_conf = getClusterConf(rc) @@ -347,7 +367,8 @@ try: num_storage = int(request.form['numStorage'].strip()) except Exception, e: - luci_log.debug_verbose('PHF1: numStorage field missing: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('PHF1: numStorage field missing: %r' % e) errors.append('The number of systems entered could not be determined.') trust_shown = False @@ -431,8 +452,8 @@ except: pass errors.append('Unable to retrieve the SSL fingerprint for node %s: %s' % (cur_host, str(e))) - luci_log.debug_verbose('PHF2: %s: %s' \ - % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('PHF2: %s: %r' % (cur_host, e)) else: try: rc = RicciCommunicator(cur_host, enforce_trust=False) @@ -456,9 +477,10 @@ del cur_system['trusted'] rc.untrust() except: - pass + pass errors.append('Unable to add the key for node %s to the trusted keys list.' % cur_host) - luci_log.debug_verbose('PHF3: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('PHF3: %s: %r' % (cur_host, e)) system_list[cur_host] = cur_system i += 1 @@ -476,13 +498,15 @@ try: cluster_name = request.form['clusterName'].strip() except: - luci_log.debug_verbose('VAC0: no cluster name') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC0: no cluster name') errors.append('No cluster name was given.') try: cluster_os = request.form['cluster_os'].strip() except: - luci_log.debug_verbose('VAC1: no cluster os') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC1: no cluster os') errors.append('Unable to determine the version of cluster %s.' % cluster_name) check_certs = request.form.has_key('check_certs') @@ -523,8 +547,8 @@ % (cur_host, str(e))) incomplete = True cur_system['errors'] = True - luci_log.debug_verbose('VAC2: %s: %s' \ - % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC2: %s: %r' % (cur_host, e)) continue try: @@ -536,7 +560,8 @@ % (cur_host, str(e))) incomplete = True cur_system['errors'] = True - luci_log.debug_verbose('VAC3: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC3: %s: %r' % (cur_host, e)) continue cluster_info = rc.cluster_info() @@ -559,16 +584,19 @@ try: rc.unauth() except Exception, e: - luci_log.debug_verbose('VAC4: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC4: %s: %r' % (cur_host, e)) errors.append(err_msg) - luci_log.debug_verbose('VAC5: %s' % err_msg) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC5: %s' % err_msg) continue cur_os = resolveOSType(rc.os()) if cur_os != cluster_os: - luci_log.debug_verbose('VAC5a: "%s" / "%s" -> "%s"' \ - % (cluster_os, rc.os(), cur_os)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC5a: "%s" / "%s" -> "%s"' \ + % (cluster_os, rc.os(), cur_os)) incomplete = True cur_system['errors'] = True @@ -576,13 +604,15 @@ try: rc.unauth() except Exception, e: - luci_log.debug_verbose('VAC6: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC6: %s: %r' % (cur_host, e)) err_msg = 'Node %s reports its cluster version is %s and we expect %s' \ % (cur_host, cur_os, cluster_os) errors.append(err_msg) - luci_log.debug_verbose('VAC7: %s' % err_msg) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC7: %s' % err_msg) continue else: incomplete = True @@ -594,10 +624,9 @@ err_msg = manageCluster(self, cluster_name, system_list, cluster_os) if err_msg: incomplete = True - errors.append('An error occurred while creating the database objects for cluster %s: %s' \ - % (cluster_name, err_msg)) - luci_log.debug_verbose('VAC7: error adding cluster DB objects for %s: %s' \ - % (cluster_name, err_msg)) + errors.append('An error occurred while creating the database objects for cluster %s: %s' % (cluster_name, err_msg)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VAC7: error adding cluster DB objects for %s: %s' % (cluster_name, err_msg)) else: messages.append('Cluster %s is now managed by Luci' % cluster_name) incomplete = False @@ -608,7 +637,7 @@ return_code = False else: return_code = True - + return (return_code, {'errors': errors, 'messages': messages }) def validateAddSystem(self, request): @@ -658,7 +687,8 @@ try: request.SESSION.set('add_systems', add_systems) except Exception, e: - luci_log.debug_verbose('validateSA2: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('validateSA2: %r' % e) return_code = False else: try: @@ -687,7 +717,8 @@ raise Exception, 'no user' user_id = user.getUserId() except Exception, e: - luci_log.debug_verbose('VP1: no user "%s": %r' % (username, e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VP1: no user "%s": %r' % (username, e)) errors.append('An invalid user "%s" was given' % username) if len(errors) > 0: @@ -707,7 +738,8 @@ i[1].manage_delLocalRoles([ user_id ]) messages.append('Removed permission for user "%s" for cluster "%s"' % (user_id, i[0])) except Exception, e: - luci_log.debug_verbose('VP2: %s %s: %r' % (user_id, i[0], e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VP2: %s %s: %r' % (user_id, i[0], e)) errors.append('Failed to remove permission for user "%s" for cluster "%s"' % (user_id, i[0])) else: for i in clusters: @@ -719,7 +751,8 @@ i[1].manage_setLocalRoles(user_id, roles) messages.append('Added permission for user "%s" for cluster "%s"' % (user_id, i[0])) except Exception, e: - luci_log.debug_verbose('VP3: %s %s %r' % (user_id, i[0], e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VP3: %s %s %r' % (user_id, i[0], e)) errors.append('Failed to add permission for user "%s" for cluster "%s"' % (user_id, i[0])) else: try: @@ -734,7 +767,8 @@ messages.append('Removed permission for user "%s" for cluster "%s"' % (user_id, i[0])) except Exception, e: - luci_log.debug_verbose('VP4: %s %s %r' % (user_id, i[0], e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VP4: %s %s %r' % (user_id, i[0], e)) errors.append('Failed to remove permission for user "%s" for cluster "%s"' % (user_id, i[0])) @@ -814,7 +848,8 @@ if not rc: raise Exception, 'connection failed' except Exception, e: - luci_log.debug_verbose('validateAuth0: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('validateAuth0: %s: %r' % (cur_host, e)) errors.append('Unable to communicate with the ricci agent on %s: %s' \ % (cur_host, str(e))) incomplete = True @@ -842,7 +877,8 @@ pass except Exception, e: errors.append('Unable to authenticate to %s: %s' % (cur_host, str(e))) - luci_log.debug_verbose('validateAuth1: %s: %s' % (cur_host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('validateAuth1: %s: %r' % (cur_host, e)) incomplete = True cur_system['error'] = True @@ -856,7 +892,8 @@ try: request.SESSION.set('auth_systems', system_list) except Exception, e: - luci_log.debug_verbose('validateAuthenticate2: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('validateAuthenticate2: %r' % e) else: try: request.SESSION.delete('auth_systems') @@ -1086,7 +1123,8 @@ def createSystem(self, host, passwd): try: dummy = self.restrictedTraverse('%s%s' % (STORAGE_FOLDER_PATH, host)).objectItems() - luci_log.debug_verbose('CS0: %s already exists' % host) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS0: %s already exists' % host) return 'Storage system %s is already managed' % host except: pass @@ -1096,28 +1134,32 @@ if rc is None: raise Exception, 'rc is None' except Exception, e: - luci_log.debug_verbose('CS1: %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS1: %s: %s' % (host, e)) return 'Unable to establish a secure connection to the ricci agent on %s: %s' % (host, str(e)) try: if not rc.authed(): rc.auth(passwd) except Exception, e: - luci_log.debug_verbose('CS2: %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS2: %s: %s' % (host, e)) return 'Unable to communicate with the ricci agent on %s for authentication' % host try: i = rc.authed() except Exception, e: - luci_log.debug_verbose('CS3 %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS3 %s: %r' % (host, e)) return 'Unable to authenticate to the ricci agent on %s' % host - if i != True: + if i is not True: return 'Authentication for storage system %s failed' % host try: dummy = self.restrictedTraverse('%s%s' % (STORAGE_FOLDER_PATH, host)).objectItems() - luci_log.debug_verbose('CS4 %s already exists' % host) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS4 %s already exists' % host) return 'Storage system %s is already managed' % host except: pass @@ -1125,21 +1167,24 @@ try: ssystem = self.restrictedTraverse(STORAGE_FOLDER_PATH) except Exception, e: - luci_log.debug_verbose('CS5 %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS5 %s: %r' % (host, e)) return 'Unable to create storage system %s: %s' % host try: ssystem.manage_addFolder(host, '__luci__:system') newSystem = self.restrictedTraverse('%s%s' % (STORAGE_FOLDER_PATH, host)) except Exception, e: - luci_log.debug_verbose('CS6 %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS6 %s: %r' % (host, e)) return 'Unable to create DB entry for storage system %s' % host try: newSystem.manage_acquiredPermissions([]) newSystem.manage_role('View', ['Access contents information', 'View']) except Exception, e: - luci_log.debug_verbose('CS7 %s: %s' % (host, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('CS7 %s: %r' % (host, e)) return 'Unable to set permissions on storage system %s' % host return None @@ -1157,11 +1202,13 @@ members.sort() user = members[0].getUserName() except Exception, e: - luci_log.debug_verbose('getDefaultUser0: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getDefaultUser0: %r' % e) user = None if not user: - luci_log.debug_verbose('getDefaultUser1: user is none') + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getDefaultUser1: user is none') return user def getUserPerms(self): @@ -1174,7 +1221,8 @@ raise Exception, 'no portal members exist' members.sort() except Exception, e: - luci_log.debug_verbose('getUserPerms0: %s' % str(e)) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getUserPerms0: %r' % e) return {} for i in members: @@ -1188,22 +1236,25 @@ clusters = self.restrictedTraverse('%s/systems/cluster/objectItems' % PLONE_ROOT)('Folder') storage = self.restrictedTraverse('%s/systems/storage/objectItems' % PLONE_ROOT)('Folder') except Exception, e: - luci_log.debug_verbose('getUserPerms1: user %s: %s' % (userName, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getUserPerms1: user %s: %r' % (userName, e)) continue for c in clusters: try: perms[userName]['cluster'][c[0]] = i.has_role('View', c[1]) except Exception, e: - luci_log.debug_verbose('getUserPerms2: user %s, obj %s: %s' \ - % (userName, c[0], str(e))) - + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getUserPerms2: user %s, obj %s: %r' \ + % (userName, c[0], e)) + for s in storage: try: perms[userName]['storage'][s[0]] = i.has_role('View', s[1]) except Exception, e: - luci_log.debug_verbose('getUserPerms2: user %s, obj %s: %s' \ - % (userName, s[0], str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('getUserPerms2: user %s, obj %s: %r' \ + % (userName, s[0], e)) return perms def getClusterConfNodes(conf_dom): --- conga/luci/site/luci/Extensions/ricci_communicator.py 2007/05/14 18:00:14 1.25.2.3 +++ conga/luci/site/luci/Extensions/ricci_communicator.py 2007/05/15 21:42:21 1.25.2.4 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + import xml import xml.dom from xml.dom import minidom @@ -15,15 +22,15 @@ def __init__(self, hostname, enforce_trust=True, port=11111): self.__hostname = hostname self.__port = port - + self.__timeout_init = 4 self.__timeout_auth = 4 self.__timeout_short = 6 self.__timeout_long = 600 - + self.__privkey_file = '%sprivkey.pem' % CERTS_DIR_PATH self.__cert_file = '%scacert.pem' % CERTS_DIR_PATH - + try: self.ss = SSLSocket(self.__hostname, self.__port, @@ -37,7 +44,7 @@ except: raise RicciError, 'Error setting up SSL for connection to %s' \ % self.__hostname - + # receive ricci header hello = self.__receive(self.__timeout_init) try: @@ -46,14 +53,14 @@ % (self.__hostname, hello.toxml())) except: pass - + self.__authed = hello.firstChild.getAttribute('authenticated') == 'true' self.__cluname = hello.firstChild.getAttribute('clustername') self.__clualias = hello.firstChild.getAttribute('clusteralias') self.__reported_hostname = hello.firstChild.getAttribute('hostname') self.__os = hello.firstChild.getAttribute('os') self.__dom0 = hello.firstChild.getAttribute('xen_host') == 'true' - + def hostname(self): if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:hostname: [auth %d] hostname = %s' \ @@ -110,7 +117,7 @@ luci_log.debug_verbose('RC:auth0: already authenticated to %s' \ % self.__hostname) return True - + # send request doc = minidom.Document() ricci = doc.createElement("ricci") @@ -119,7 +126,7 @@ ricci.setAttribute("password", password) doc.appendChild(ricci) self.__send(doc, self.__timeout_auth) - + # receive response resp = self.__receive(self.__timeout_auth) self.__authed = resp.firstChild.getAttribute('authenticated') == 'true' @@ -133,7 +140,7 @@ self.__dom0 = resp.firstChild.getAttribute('xen_host') == 'true' except: pass - + if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:auth1: auth call returning %d' \ % self.__authed) @@ -183,7 +190,7 @@ if not self.authed(): raise RicciError, 'not authenticated to host %s' % self.__hostname - + # construct request doc = minidom.Document() ricci = doc.createElement("ricci") @@ -197,7 +204,7 @@ ricci.setAttribute("async", async_str) doc.appendChild(ricci) ricci.appendChild(batch_xml.cloneNode(True)) - + # send request try: self.__send(doc, self.__timeout_short) @@ -208,7 +215,7 @@ % (self.__hostname, str(e)) except: raise RicciError, 'Error sending XML to host %s' % self.__hostname - + # receive response doc = self.__receive(self.__timeout_long) if LUCI_DEBUG_MODE is True: @@ -217,26 +224,26 @@ % (self.__hostname, doc.toxml())) except: pass - + if doc.firstChild.getAttribute('success') != '0': if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:PB3: batch command failed') raise RicciError, 'The last ricci command to host %s failed' \ % self.__hostname - + batch_node = None for node in doc.firstChild.childNodes: if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'batch': batch_node = node.cloneNode(True) - if batch_node == None: + if batch_node is None: if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:PB4: batch node missing ') raise RicciError, 'missing in ricci response from "%s"' \ % self.__hostname return batch_node - + def batch_run(self, batch_str, async=True): try: batch_xml_str = '%s' \ @@ -271,7 +278,7 @@ if not self.authed(): raise RicciError, 'Not authenticated to host %s' % self.__hostname - + # construct request doc = minidom.Document() ricci = doc.createElement("ricci") @@ -279,11 +286,11 @@ ricci.setAttribute("function", "batch_report") ricci.setAttribute("batch_id", str(batch_id)) doc.appendChild(ricci) - + # send request self.__send(doc, self.__timeout_short) - - + + # receive response doc = self.__receive(self.__timeout_short) if doc.firstChild.getAttribute('success') == '12': @@ -295,7 +302,7 @@ if node.nodeType == xml.dom.Node.ELEMENT_NODE: if node.nodeName == 'batch': batch_node = node.cloneNode(True) - if batch_node == None: + if batch_node is None: raise RicciError, 'Missing in ricci\'s response from host %s' % self.__hostname return batch_node @@ -308,10 +315,10 @@ if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:send0: Error sending XML "%s" to %s: %s' % (buff, self.__hostname, str(e))) raise RicciError, 'write error while sending XML to host %s' \ - % self.__hostname + % self.__hostname except: raise RicciError, 'write error while sending XML to host %s' \ - % self.__hostname + % self.__hostname if LUCI_DEBUG_MODE is True: try: luci_log.debug_verbose('RC:send1: Sent XML "%s" to host %s' \ @@ -319,7 +326,7 @@ except: pass return - + def __receive(self, timeout): doc = None xml_in = '' @@ -340,7 +347,7 @@ % (xml_in, self.__hostname)) try: - if doc == None: + if doc is None: doc = minidom.parseString(xml_in) except Exception, e: if LUCI_DEBUG_MODE is True: @@ -351,8 +358,8 @@ if not doc or not doc.firstChild: raise RicciError, 'Error an empty response was received from host %s' % self.__hostname - - try: + + try: if doc.firstChild.nodeName != 'ricci': if LUCI_DEBUG_MODE is True: luci_log.debug_verbose('RC:recv3: Expecting "ricci" got XML "%s" from %s' % (xml_in, self.__hostname)) @@ -361,11 +368,11 @@ raise RicciError, 'Invalid XML ricci response from host %s' \ % self.__hostname return doc - + def get_ricci_communicator(self, hostname, allowed_systems): if not self.access_to_host_allowed(hostname, allowed_systems): return None - + try: return RicciCommunicator(hostname) except Exception, e: @@ -395,13 +402,13 @@ # check the status of batch # returns (int num, int total) # * total: -# total number of modules in batch +# total number of modules in batch # * num: -# if num == total: +# if num == total: # all modules in the batch completed successfuly -# if num > 0: +# if num > 0: # last seq. number of module that successfuly finished -# if num < 0: +# if num < 0: # module (-num) failed (next module won't be processed) def batch_status(batch_xml): @@ -438,20 +445,20 @@ # extract error_code from module's response # * module_num: -# 1-based seq. number of module to process +# 1-based seq. number of module to process # # returns (int error_code, string error_msg) # * error_code: each module defines own error codes, which are >0 -# -101 - in progress -# -102 - scheduled -# -103 - removed from schedule -# -104 - failed to execute module -# -# >-3 - module executed. Following codes are defined: -# -2 - API error -# -1 - undefined error occured (msg not necesarily very informative) -# 0 - no error (msg is empty string) -# >0 - predefined error has occured +# -101 - in progress +# -102 - scheduled +# -103 - removed from schedule +# -104 - failed to execute module +# +# >-3 - module executed. Following codes are defined: +# -2 - API error +# -1 - undefined error occured (msg not necesarily very informative) +# 0 - no error (msg is empty string) +# >0 - predefined error has occured # (check respective API, msg will be fully descriptive) # * error_msg: error message @@ -481,7 +488,7 @@ if node_j.nodeType == xml.dom.Node.ELEMENT_NODE: if node_j.nodeName == 'function_response': code = -11111111 - msg = 'BUG' + msg = 'BUG' for var in node_j.childNodes: if var.nodeType == xml.dom.Node.ELEMENT_NODE: if var.nodeName == 'var': @@ -492,7 +499,7 @@ elif var.getAttribute('name') == 'error_description': msg = var.getAttribute('value') return code, msg - + elif status == '1': return -102, 'module scheduled for execution' elif status == '2': @@ -501,5 +508,5 @@ return -104, 'failed to locate/execute module' elif status == '5': return -103, 'module removed from schedule' - + raise RicciError, 'no %dth module in the batch, or malformed response' % module_num --- conga/luci/site/luci/Extensions/ricci_defines.py 2007/05/03 20:16:38 1.1.8.1 +++ conga/luci/site/luci/Extensions/ricci_defines.py 2007/05/15 21:42:21 1.1.8.2 @@ -1,3 +1,10 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + REQUEST_TAG = 'request' RESPONSE_TAG = 'response' --- conga/luci/site/luci/Extensions/storage_adapters.py 2007/05/04 19:10:24 1.9.4.2 +++ conga/luci/site/luci/Extensions/storage_adapters.py 2007/05/15 21:42:21 1.9.4.3 @@ -1,29 +1,22 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + +from conga_storage_constants import ADD_SOURCES, CLUNAME, CLUSTER_STORAGE, \ + CREATE_MAPPER, get_pretty_mapper_info, PAGETYPE, PT_MAPPER_ID, \ + PT_MAPPER_TYPE, PT_PATH, STONAME, STORAGE, STORAGESYS, \ + VIEW_BD, VIEW_BDS, VIEW_MAPPER, VIEW_MAPPERS -#from ZPublisher import HTTPRequest - -import xml -import xml.dom -from xml.dom import minidom - -from conga_storage_constants import * -from ricci_defines import * -from Variable import parse_variable +from ricci_defines import MAPPER_SYS_TYPE, MAPPER_VG_TYPE, SYSTEM_PREFIX, VG_PREFIX from LuciZope import get_systems_statuses - - -#Policy for showing the cluster chooser menu: -#1) If there are no clusters in the ManagedClusterSystems -#folder, then only the admin user may see this menu, and -#the configure option should not be displayed. -#2)If there are clusters in the ManagedClusterSystems, -#then only display chooser if the current user has -#permissions on at least one. If the user is admin, show ALL clusters - def createStorageChooser(self, request, systems): dummynode = {} - - #First, see if a storage system is chosen, then + + #First, see if a storage system is chosen, then #check that the current user can access that system stoname = None try: @@ -40,7 +33,7 @@ pagetype = request[PAGETYPE] except KeyError, e: pagetype = "0" - + sdata = {} sdata['Title'] = "System List" sdata['cfg_type'] = "storages" @@ -54,8 +47,8 @@ sdata['show_children'] = True else: sdata['show_children'] = False - - + + syslist = list() if sdata['show_children']: #display_clusters = True @@ -78,7 +71,7 @@ data, syslist) sdata['children'] = syslist - + mylist = list() mylist.append(sdata) #mylist.append(sadd) @@ -114,14 +107,14 @@ kids) ssys['children'] = kids else: - if system_data['authed'] == False: + if system_data['authed'] is False: return ssys['Title'] = system_data['hostname'] ssys['cfg_type'] = "storage" ssys['absolute_url'] = '%s?%s=%s&%s=%s' \ % (url, PAGETYPE, STORAGE, STONAME, system_data['hostname']) ssys['Description'] = "Configure storage on %s" % system_data['hostname'] - + if pagetype == STORAGE: if stoname == system_data['hostname']: ssys['currentItem'] = True @@ -135,7 +128,7 @@ def create_mapper_subitem(storage_report, request, mapper_list, mapper_templ_list): - + try: pagetype_req = request[PAGETYPE] except KeyError, e: @@ -157,25 +150,25 @@ except KeyError, e: url = "." hostname = request[STONAME] - - + + mapper_type = None if len(mapper_list) != 0: mapper_type = mapper_list[0].getAttribute('mapper_type') if len(mapper_templ_list) != 0: mapper_type = mapper_templ_list[0].getAttribute('mapper_type') - if mapper_type == None: + if mapper_type is None: return None - - + + buff, dummy1, dummy2 = get_pretty_mapper_info(mapper_type) pretty_names = '%ss' % buff pretty_names_desc = 'Manage %ss' % buff pretty_name_desc = 'Manage %s' % buff pretty_new_name = 'New %s' % buff pretty_new_name_desc = 'Create New %s' % buff - - + + srs_p = {} srs_p['Title'] = pretty_names srs_p['cfg_type'] = "nodes" @@ -190,9 +183,9 @@ srs_p['currentItem'] = True else: srs_p['currentItem'] = False - + srs_list = [] - + # new mapper if len(mapper_templ_list) != 0: sr = {} @@ -202,36 +195,36 @@ % (url, PAGETYPE, CREATE_MAPPER, STONAME, hostname, PT_MAPPER_TYPE, mapper_type) sr['Description'] = pretty_new_name_desc sr['show_children'] = False - + if pagetype_req == CREATE_MAPPER and mapper_type_req == mapper_type: sr['currentItem'] = True else: sr['currentItem'] = False - + srs_list.append(sr) - + # existing mappers for sr_xml in mapper_list: sr_id = sr_xml.getAttribute('mapper_id') srname = sr_id.replace('%s:' % mapper_type, '').replace('/dev/', '') - + if srname == '' and mapper_type == MAPPER_VG_TYPE and sr_id == VG_PREFIX: #srname = 'Uninitialized PVs' continue - + sr = {} sr['Title'] = srname sr['cfg_type'] = "nodes" sr['absolute_url'] = '%s?%s=%s&%s=%s&%s=%s&%s=%s' \ % (url, PAGETYPE, VIEW_MAPPER, STONAME, hostname, PT_MAPPER_TYPE, mapper_type, PT_MAPPER_ID, sr_id) sr['Description'] = pretty_name_desc - + if (pagetype_req == VIEW_MAPPER or pagetype_req == ADD_SOURCES or pagetype_req == VIEW_BD) and mapper_id_req == sr_id: sr['currentItem'] = True else: sr['currentItem'] = False sr['show_children'] = False - + # targets tgts_list = [] for tgt_xml in storage_report.get_targets(sr_xml): @@ -246,16 +239,16 @@ % (url, PAGETYPE, VIEW_BD, STONAME, hostname, PT_MAPPER_TYPE, mapper_type, PT_MAPPER_ID, sr_id, PT_PATH, tg_path) tg['Description'] = tgname tg['show_children'] = False - + if pagetype_req == VIEW_BD and path_req == tg_path: tg['currentItem'] = True else: tg['currentItem'] = False tgts_list.append(tg) - + sr['children'] = tgts_list srs_list.append(sr) - + if len(srs_list) != 0: srs_p['children'] = srs_list return srs_p @@ -266,9 +259,9 @@ def createStorageConfigTree(self, request, storage_report): dummynode = {} - if storage_report == None: + if storage_report is None: return dummynode - + try: pagetype = request[PAGETYPE] except KeyError, e: @@ -290,12 +283,12 @@ except KeyError, e: url = "." hostname = request[STONAME] - - + + ### Hard Drives ### - + hds_pretty_name, hd_pretty_name, dummy = get_pretty_mapper_info(MAPPER_SYS_TYPE) - + hds_p = {} hds_p['Title'] = hds_pretty_name hds_p['cfg_type'] = "nodes" @@ -310,14 +303,14 @@ hds_p['currentItem'] = True else: hds_p['currentItem'] = False - + targets_list = storage_report.get_targets(storage_report.get_mapper(SYSTEM_PREFIX)) - + hds_list = [] for target in targets_list: sys_id = target.getAttribute('mapper_id') hd_path = target.getAttribute('path') - + hd = {} hd['Title'] = hd_path.replace('/dev/', '') hd['cfg_type'] = "nodes" @@ -325,22 +318,22 @@ % (url, PAGETYPE, VIEW_BD, STONAME, hostname, PT_MAPPER_TYPE, MAPPER_SYS_TYPE, PT_MAPPER_ID, sys_id, PT_PATH, hd_path) hd['Description'] = 'Manage %s' % hd_pretty_name hd['show_children'] = False - + if pagetype == VIEW_BD and mapper_id == sys_id and path == hd_path: hd['currentItem'] = True else: hd['currentItem'] = False - + hds_list.append(hd) - + hds_p['children'] = hds_list - - - + + + ## mappers ## - + main_kids = [hds_p] - + mappers_dir = storage_report.get_mappers_dir() mapper_templs_dir = storage_report.get_mapper_temps_dir() glo_dir = {} @@ -351,12 +344,12 @@ glo_dir[cur_type] = [[], mapper_templs_dir[cur_type]] else: glo_dir[cur_type][1] = mapper_templs_dir[cur_type] - + for cur_type in glo_dir: if cur_type == MAPPER_SYS_TYPE: continue item = create_mapper_subitem(storage_report, request, glo_dir[cur_type][0], glo_dir[cur_type][1]) - if item == None: + if item is None: continue else: main_kids.append(item) @@ -372,4 +365,4 @@ baseurl = request['URL'] except KeyError, e: baseurl = "." - return '%s?%s=%s&%s=%s' % (baseurl, PAGETYPE, str(STORAGE), STONAME, hostname) + return '%s?%s=%s&%s=%s' % (baseurl, PAGETYPE, str(STORAGE), STONAME, hostname) --- conga/luci/site/luci/Extensions/system_adapters.py 2007/05/14 18:00:14 1.2.2.2 +++ conga/luci/site/luci/Extensions/system_adapters.py 2007/05/15 21:42:21 1.2.2.3 @@ -1,6 +1,14 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of version 2 of the +# GNU General Public License as published by the +# Free Software Foundation. + from ricci_communicator import RicciCommunicator from RicciQueries import list_services, updateServices, svc_manage from LuciSyslog import get_logger +from conga_constants import LUCI_DEBUG_MODE from xml.dom import minidom luci_log = get_logger() @@ -11,7 +19,8 @@ if not rc: raise Exception, 'None' except Exception, e: - luci_log.debug_verbose('GSSL0: %s: %s' % (hostname, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('GSSL0: %s: %r' % (hostname, e)) return [] service_list = list_services(rc) @@ -74,7 +83,8 @@ if not rc: raise Exception, 'unknown error' except Exception, e: - luci_log.debug_verbose('VSU0: %s: %s' % (hostname, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VSU0: %s: %r' % (hostname, e)) return (False, {'errors': [ 'Unable to connect to the ricci agent on %s: %s' % (hostname, str(e)) ]}) sys_svc_list = list() @@ -86,7 +96,8 @@ sys_svc_hash[svc_name] = i sys_svc_list.append(svc_name) except Exception, e: - luci_log.debug_verbose('VSU1: %s: %s' % (hostname, str(e))) + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VSU1: %s: %r' % (hostname, e)) return (False, {'errors': [ 'Unable to retrieve the list of services from %s' % hostname ]}) try: @@ -136,6 +147,8 @@ raise Exception, 'none' ret = svc_manage(rc, hostname, servicename, op) except Exception, e: + if LUCI_DEBUG_MODE is True: + luci_log.debug_verbose('VMS0: %r' % e) result.setAttribute('message', str(e)) ret.appendChild(result) else: --- conga/luci/site/luci/Extensions/ClusterModel/Attic/BaseResource.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/BaseResource.py 2007/05/15 21:42:21 1.1.2.3 @@ -21,4 +21,3 @@ def isDenyAll(self): return self.deny_all_children - --- conga/luci/site/luci/Extensions/ClusterModel/Attic/Cluster.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/Cluster.py 2007/05/15 21:42:21 1.1.2.3 @@ -39,7 +39,7 @@ for kid in kids: if kid.getTagName().strip() == "quorumd": return True - + return False def getQuorumdPtr(self): @@ -47,11 +47,11 @@ for kid in kids: if kid.getTagName().strip() == "quorumd": return kid - + return None def generateXML(self, doc, parent=None): - if self.is_cfg_version_dirty == False: + if self.is_cfg_version_dirty is False: self.incrementConfigVersion() else: self.is_cfg_version_dirty = False @@ -59,11 +59,11 @@ def getNameAlias(self): return self.getAlias() - + def getAlias(self): # returns None if no alias set alias = self.getAttribute("alias") - if alias == None: + if alias is None: alias = self.getName() self.addAttribute('alias', alias) return alias --- conga/luci/site/luci/Extensions/ClusterModel/Attic/ClusterNode.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/ClusterNode.py 2007/05/15 21:42:21 1.1.2.3 @@ -35,14 +35,14 @@ def getInterface(self): nd = self.getMulticastNode() - if nd == None: + if nd is None: return None else: return nd.getAttribute("interface") def setInterface(self, ifc): nd = self.getMulticastNode() - if nd == None: + if nd is None: return else: nd.addAttribute("interface", ifc) --- conga/luci/site/luci/Extensions/ClusterModel/Attic/FailoverDomainNode.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/FailoverDomainNode.py 2007/05/15 21:42:21 1.1.2.3 @@ -20,16 +20,16 @@ if self.priority_level > 1: self.priority_level = self.priority_level - 1 self.addAttribute("priority", str(self.priority_level)) - + def lowerPriorityLevel(self): self.priority_level = self.priority_level + 1 self.addAttribute("priority", str(self.priority_level)) def getPriorityLevel(self): return self.priority_level - + def setPriorityLevel(self, level): - self.priority_level = level + self.priority_level = level self.addAttribute("priority", str(self.priority_level)) def addAttribute(self, name, value): --- conga/luci/site/luci/Extensions/ClusterModel/Attic/FailoverDomains.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/FailoverDomains.py 2007/05/15 21:42:21 1.1.2.3 @@ -8,7 +8,7 @@ from TagObject import TagObject TAG_NAME = "failoverdomains" - + class FailoverDomains(TagObject): def __init__(self): TagObject.__init__(self) --- conga/luci/site/luci/Extensions/ClusterModel/Attic/FenceDevice.py 2007/05/15 18:58:55 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/FenceDevice.py 2007/05/15 21:42:21 1.1.2.3 @@ -34,7 +34,7 @@ agent = self.getAgentType() if agent == "fence_drac": #2 variants of drac... mname = self.getAttribute("modulename") - if mname == None or mname == "": + if not mname: return False else: return True --- conga/luci/site/luci/Extensions/ClusterModel/Attic/ModelBuilder.py 2007/05/15 18:58:55 1.1.2.3 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/ModelBuilder.py 2007/05/15 21:42:21 1.1.2.4 @@ -88,7 +88,7 @@ 'quorumd': QuorumD, 'heuristic': Heuristic, 'script': Script, - 'nfsexport': NFSExport, + 'nfsexport': NFSExport, 'nfsclient': NFSClient, 'SAPInstance': SAPInstance, 'SABDatabase': SAPDatabase, @@ -138,12 +138,12 @@ self.fence_xvmd_ptr = None self.unusual_items = list() self.isVirtualized = False - if mcast_addr == None: + if mcast_addr is None: self.usesMulticast = False else: self.usesMulticast = True - if domm != None: + if domm is not None: self.parent = domm self.object_tree = self.buildModel(None) self.check_empty_ptrs() @@ -154,7 +154,7 @@ self.check_for_multicast() self.check_for_nodeids() else: - if filename == None: + if filename is None: if lock_type == DLM_TYPE: self.lock_type = DLM_TYPE self.object_tree = self.buildDLMModelTemplate() @@ -178,7 +178,7 @@ def buildModel(self, parent_node, parent_object=None): - if parent_node == None: + if parent_node is None: parent_node = self.parent new_object = None @@ -204,7 +204,7 @@ self.unusual_items.append((parent_object, new_object)) for item in parent_node.childNodes: result_object = self.buildModel(item, new_object) - if result_object != None: + if result_object is not None: new_object.addChild(result_object) return None @@ -245,7 +245,7 @@ for item in parent_node.childNodes: result_object = self.buildModel(item, new_object) - if result_object != None: + if result_object is not None: new_object.addChild(result_object) return (new_object) @@ -267,7 +267,7 @@ self.CMAN_ptr = cman obj_tree.addChild(cman) - if self.usesMulticast == True: + if self.usesMulticast is True: mcast = Multicast() mcast.addAttribute("addr", self.mcast_address) cman.addChild(mcast) @@ -291,7 +291,7 @@ self.isModified = False return obj_tree - + def buildGULMModelTemplate(self): obj_tree = Cluster() self.cluster_ptr = obj_tree @@ -326,7 +326,7 @@ self.isModified = False return obj_tree - + ##Because fence devices are declared in a separate XML section ##in conf file, agent types for fence instances must be done in @@ -337,7 +337,7 @@ agent_hash = {} for fd in fds: agent = fd.getAttribute("agent") - if agent != None: + if agent is not None: agent_hash[fd.getName()] = agent nodes = self.getNodes() @@ -349,33 +349,33 @@ child.setAgentType(agent_hash[child.getName()]) ##This method builds RefObject containers for appropriate - ##entities after the object tree is built. + ##entities after the object tree is built. def resolve_references(self): reset_list_sentinel = True - while(reset_list_sentinel == True): + while(reset_list_sentinel is True): reset_list_sentinel = False resource_children = self.resourcemanager_ptr.getChildren() for r_child in resource_children: if r_child.getTagName() == SERVICE: reset_list_sentinel = self.find_references(r_child) - if reset_list_sentinel == True: + if reset_list_sentinel is True: break - + def find_references(self, entity, parent=None): result = False - if (entity.getAttribute("ref") != None) and (entity.isRefObject() == False): + if (entity.getAttribute("ref") is not None) and (entity.isRefObject() is False): result = self.transform_reference(entity, parent) return result - + children = entity.getChildren() if len(children) > 0: for child in children: result = self.find_references(child, entity) - if result == True: + if result is True: return result - + return result - + def transform_reference(self, entity, parent): result = False #This entity has a "ref" attr...need to walk through resources list @@ -399,11 +399,11 @@ rf.addChild(kid) result = True break - - if result == False: + + if result is False: return result - - if parent == None: #Must be a service + + if parent is None: #Must be a service self.resourcemanager_ptr.addChild(rf) self.resourcemanager_ptr.removeChild(entity) return True @@ -413,9 +413,9 @@ return True def exportModelAsString(self): - if self.perform_final_check() == False: # failed + if self.perform_final_check() is False: # failed return None - + #check for dual power fences self.dual_power_fence_check() self.restore_unusual_items() @@ -437,7 +437,7 @@ self.resolve_fence_instance_types() self.purgePCDuplicates() self.resolve_references() - self.check_for_multicast() + self.check_for_multicast() finally: pass @@ -457,15 +457,15 @@ if kid == item[1]: duplicate = True break - if duplicate == True: + if duplicate is True: continue else: - item[0].addChild(item[1]) + item[0].addChild(item[1]) def check_for_nodeids(self): nodes = self.getNodes() for node in nodes: - if node.getAttribute('nodeid') == None: + if node.getAttribute('nodeid') is None: new_id = self.getUniqueNodeID() node.addAttribute('nodeid', new_id) @@ -475,39 +475,39 @@ dex_list = list() for nd_idx in range (1, (total_nodes + 3)): dex_list.append(str(nd_idx)) - + for dex in dex_list: found = False for node in nodes: ndid = node.getAttribute('nodeid') - if ndid != None: + if ndid is not None: if ndid == dex: found = True break else: continue - - if found == True: + + if found is True: continue else: return dex - + def setIsVirtualized(self, isVirtualized): - if isVirtualized == None: + if isVirtualized is None: self.isVirtualized = False else: self.isVirtualized = isVirtualized def getIsVirtualized(self): return self.isVirtualized - + def getNodes(self): - #Find the clusternodes obj and return get_children + #Find the clusternodes obj and return get_children return self.clusternodes_ptr.getChildren() def addNode(self, clusternode): self.clusternodes_ptr.addChild(clusternode) - if self.usesMulticast == True: + if self.usesMulticast is True: mcast = Multicast() mcast.addAttribute("addr", self.mcast_address) mcast.addAttribute("interface", "eth0") #eth0 is the default @@ -525,7 +525,7 @@ found_one = True - while found_one == True: + while found_one is True: found_one = False fdoms = self.getFailoverDomains() for fdom in fdoms: @@ -538,7 +538,7 @@ lock_type = self.getLockType() if lock_type == GULM_TYPE: - if self.isNodeLockserver(clusternode.getName()) == True: + if self.isNodeLockserver(clusternode.getName()) is True: self.removeLockserver(clusternode) self.isModified = True @@ -595,7 +595,7 @@ self.fence_xvmd_ptr = None def getFenceDevices(self): - if self.fencedevices_ptr == None: + if self.fencedevices_ptr is None: return list() else: return self.fencedevices_ptr.getChildren() @@ -604,7 +604,7 @@ return self.fencedevices_ptr def getFailoverDomains(self): - if self.failoverdomains_ptr == None: + if self.failoverdomains_ptr is None: return list() else: return self.failoverdomains_ptr.getChildren() @@ -639,7 +639,7 @@ newnode = FailoverDomainNode() if len(kids) != 0: #Use an existing node as a baseline... attrs = kids[0].getAttributes() - kees = attrs.keys() + kees = attrs.keys() for k in kees: newnode.addAttribute(k, attrs[k]) newnode.addAttribute("name", node) @@ -656,9 +656,9 @@ if fdom.getName().encode('ascii', 'ignore') == fd: kids = fdom.getChildren() for kid in kids: - if kid.getName().encode('ascii', 'ignore') == node: + if kid.getName().encode('ascii', 'ignore') == node: fdom.removeChild(kid) - return + return return @@ -666,13 +666,13 @@ return self.usesMulticast def check_for_multicast(self): - if self.usesMulticast == True: + if self.usesMulticast is True: #set mcast address children = self.CMAN_ptr.getChildren() for child in children: if child.getTagName() == MCAST_STR: addr = child.getAttribute("addr") - if addr != None: + if addr is not None: self.mcast_address = addr return else: #What a mess! a multicast tag, but no addr attribute @@ -689,34 +689,34 @@ return self.quorumd_ptr def check_empty_ptrs(self): - if self.resourcemanager_ptr == None: + if self.resourcemanager_ptr is None: rm = Rm() self.cluster_ptr.addChild(rm) self.resourcemanager_ptr = rm - if self.failoverdomains_ptr == None: + if self.failoverdomains_ptr is None: fdoms = FailoverDomains() self.resourcemanager_ptr.addChild(fdoms) self.failoverdomains_ptr = fdoms - if self.fencedevices_ptr == None: + if self.fencedevices_ptr is None: fds = FenceDevices() self.cluster_ptr.addChild(fds) self.fencedevices_ptr = fds - - if self.resources_ptr == None: + + if self.resources_ptr is None: rcs = Resources() self.resourcemanager_ptr.addChild(rcs) self.resources_ptr = rcs - + if self.GULM_ptr is None and self.fence_daemon_ptr is None: fdp = FenceDaemon() self.cluster_ptr.addChild(fdp) self.fence_daemon_ptr = fdp - + def getServices(self): rg_list = list() - if self.resourcemanager_ptr != None: + if self.resourcemanager_ptr is not None: kids = self.resourcemanager_ptr.getChildren() for kid in kids: if kid.getTagName() == SERVICE: @@ -731,34 +731,34 @@ return service return None - + def getVMs(self): rg_list = list() - if self.resourcemanager_ptr != None: + if self.resourcemanager_ptr is not None: kids = self.resourcemanager_ptr.getChildren() for kid in kids: if kid.getTagName() == VM: rg_list.append(kid) return rg_list - + def deleteService(self, service): - if self.resourcemanager_ptr != None: + if self.resourcemanager_ptr is not None: kids = self.resourcemanager_ptr.getChildren() for kid in kids: if kid.getName() == service: self.resourcemanager_ptr.removeChild(kid) break - + def getResources(self): - if self.resources_ptr != None: + if self.resources_ptr is not None: return self.resources_ptr.getChildren() else: return list() def getResourcesPtr(self): return self.resources_ptr - + def getResourceManagerPtr(self): return self.resourcemanager_ptr @@ -773,7 +773,7 @@ def getClusterNodesPtr(self): return self.clusternodes_ptr - + def getClusterPtr(self): return self.cluster_ptr @@ -811,7 +811,7 @@ def isNodeLockserver(self, name): gptr = self.getGULMPtr() - if gptr == None: #Obviously not GULM + if gptr is None: #Obviously not GULM return False children = gptr.getChildren() for child in children: @@ -822,7 +822,7 @@ def removeLockserver(self, clusternode): gptr = self.getGULMPtr() - if gptr == None: #Obviously not GULM + if gptr is None: #Obviously not GULM return children = gptr.getChildren() for child in children: @@ -851,9 +851,9 @@ #remove votes attr from each node nodes = self.getNodes() for node in nodes: - if self.usesMulticast == True: + if self.usesMulticast is True: mnode = node.getMulticastNode() - if mnode != None: + if mnode is not None: node.removeChild(mnode) node.removeAttribute('votes') @@ -870,7 +870,7 @@ ls.addAttribute('name', node.getName()) self.GULM_ptr.addChild(ls) break - + #set modified self.isModified = True @@ -903,9 +903,9 @@ self.isModified = True def swap_multicast_state(self, address=None): - if self.usesMulticast == True: + if self.usesMulticast is True: #First, eliminate tag - if self.CMAN_ptr != None: + if self.CMAN_ptr is not None: children = self.CMAN_ptr.getChildren() if len(children) > 0: for child in children: @@ -913,7 +913,7 @@ self.CMAN_ptr.removeChild(child) break found_one = True - while found_one == True: + while found_one is True: found_one = False nodes = self.clusternodes_ptr.getChildren() for node in nodes: @@ -923,16 +923,16 @@ node.removeChild(node_child) found_one = True break - if found_one == True: + if found_one is True: break - self.usesMulticast = False + self.usesMulticast = False self.mcast_address = None self.isModified = True - + else: - if self.CMAN_ptr != None: + if self.CMAN_ptr is not None: mcast = Multicast() mcast.addAttribute("addr", address) self.CMAN_ptr.addChild(mcast) @@ -946,7 +946,7 @@ if node_child.getTagName() == MCAST_STR: has_one = True break - if has_one == False: + if has_one is False: mcast = Multicast() mcast.addAttribute("addr", address) mcast.addAttribute("interface", "eth0") @@ -955,8 +955,8 @@ self.mcast_address = address self.usesMulticast = True self.isModified = True - - + + def check_fence_daemon(self): if self.GULM_ptr is None and self.fence_daemon_ptr is None: @@ -970,7 +970,7 @@ return self.isModified def setModified(self, modified=None): - if modified == None: + if modified is None: self.isModified = True else: self.isModified = modified @@ -1008,7 +1008,7 @@ if fence.getName() == name: kill_list.append(fence) for victim in kill_list: - level.removeChild(victim) + level.removeChild(victim) def removeReferences(self, tagobj): self.__removeReferences(tagobj, self.cluster_ptr) @@ -1019,7 +1019,7 @@ level.removeChild(t) continue self.__removeReferences(tagobj, t) - + def updateReferences(self): self.__updateReferences(self.cluster_ptr) def __updateReferences(self, level): @@ -1027,14 +1027,14 @@ if t.isRefObject(): t.setRef(t.getObj().getName()) self.__updateReferences(t) - + def perform_final_check(self): - if self.check_gulm_count() == False: + if self.check_gulm_count() is False: return False self.check_two_node() #add more checks - + return True def check_gulm_count(self): @@ -1045,11 +1045,11 @@ return True def check_two_node(self): - if self.getLockType() == DLM_TYPE and self.quorumd_ptr == None: + if self.getLockType() == DLM_TYPE and self.quorumd_ptr is None: clusternodes_count = len(self.clusternodes_ptr.getChildren()) #Make certain that there is a cman tag in the file #If missing, it will not hurt to add it here - if self.CMAN_ptr == None: + if self.CMAN_ptr is None: cman = Cman() self.cluster_ptr.addChild(cman) self.CMAN_ptr = cman @@ -1059,7 +1059,7 @@ else: if self.CMAN_ptr.getAttribute('expected_votes') in ('0', '1'): self.CMAN_ptr.removeAttribute('expected_votes') - self.CMAN_ptr.removeAttribute('two_node') + self.CMAN_ptr.removeAttribute('two_node') def dual_power_fence_check(self): #if 2 or more power controllers reside in the same fence level, @@ -1078,7 +1078,7 @@ kids = level.getChildren() l = list() for kid in kids: - if kid.isPowerController() == True: + if kid.isPowerController() is True: l.append(kid) if len(l) > 1: #Means we found multiple PCs in the same level for fence in l: @@ -1093,10 +1093,10 @@ d.addAttribute(k, attrs[k]) d.addAttribute("option", "on") level.addChild(d) - + def purgePCDuplicates(self): found_one = True - while found_one == True: + while found_one is True: found_one = False nodes = self.getNodes() for node in nodes: @@ -1105,20 +1105,18 @@ kids = level.getChildren() for kid in kids: #kids are actual fence instance objects res = kid.getAttribute("option") - if res != None: + if res is not None: if res == "off": kid.removeAttribute("option") else: level.removeChild(kid) found_one = True break - if found_one == True: + if found_one is True: break - + def searchObjectTree(self, tagtype): objlist = list() self.object_tree.searchTree(objlist, tagtype) return objlist - - --- conga/luci/site/luci/Extensions/ClusterModel/Attic/TagObject.py 2007/05/15 18:58:56 1.1.2.2 +++ conga/luci/site/luci/Extensions/ClusterModel/Attic/TagObject.py 2007/05/15 21:42:21 1.1.2.3 @@ -11,7 +11,7 @@ def __init__(self, tagname=None): self.attr_hash = {} self.children = list() - if tagname == None: + if tagname is None: self.TAG_NAME = TAG_NAME else: self.TAG_NAME = tagname @@ -39,7 +39,7 @@ #print "TAGNAME is %s" % TAG_NAME #print "self.TAGNAME is %s" % self.TAG_NAME tag = doc.createElement(self.TAG_NAME) - if parent != None: + if parent is not None: parent.appendChild(tag) else: doc.appendChild(tag) @@ -48,7 +48,7 @@ #parent.appendChild(tag) if len(self.children) > 0: for child in self.children: - if child == None: + if child is None: continue child.generateXML(doc, tag) @@ -86,6 +86,6 @@ objlist.append(self) if len(self.children) > 0: for child in self.children: - if child == None: + if child is None: continue child.searchTree(objlist, tagtype)