def getFailoverdomainPrefNode(self, failoverdomain): """ @param failoverdomain: failoverdomain @type failoverdomain: string @return: Name of node which is prefered in failovercase of given failoverdomain @rtype: string """ #no defaultvalue specified because every dailoverdomain needs to have one or more failoverdomainnodes and priority is a needed attribute _tmp1 = self.getFailoverdomainNodes(failoverdomain) #search for lowest priority minprio = "0" for i in range(len(_tmp1)): _xpath=xpathjoin(RedHatClusterRepository.getDefaultClusterFailoverDomain(failoverdomain), RedHatClusterRepository.element_failoverdomainnode+"[@"+RedHatClusterRepository.attribute_failoverdomainnode_name+"=\""+_tmp1[i]+"\"]", "@"+RedHatClusterRepository.attribute_failoverdomainnode_priority) self.log.debug("query lowest priority of failoverdomainnodes belonging to %s : %s" %(failoverdomain,_xpath)) _tmp2 = self.queryValue(_xpath)[0] if (minprio == "0") or (_tmp2 < minprio): minprio = _tmp2 #get node with lowest priority try: _xpath=xpathjoin(RedHatClusterRepository.getDefaultClusterFailoverDomain(failoverdomain), RedHatClusterRepository.element_failoverdomainnode+"[@"+RedHatClusterRepository.attribute_failoverdomainnode_priority+"=\""+str(minprio)+"\"]", "@"+RedHatClusterRepository.attribute_failoverdomainnode_name) self.log.debug("get failoverprefdomainnode from failoverdomain %s: %s" %(failoverdomain, _xpath)) return self.queryValue(_xpath)[0] except IndexError: raise NameError("Cannot find prefered failoverdomainnode for domain %s." %failoverdomain)
def query(self, param, *params, **keys): if self.non_statics.get(param, None) != None and self.helper: return self.helper.queryStatusElement(query=xpathjoin(self.xpath_clustat, self.element_nodes, self.element_node+'['+self.attribute_node_name+'="'+self.getName()+'"]', self.non_statics.get(param))) elif self.helper: return self.helper.queryStatusElement(query=os.path.join(self.clustat_pathroot %self.getName(), "@"+param)) else: return None
def __init__(self, clusterRepository): """ Set used clusterRepository @param clusterRepository: clusterRepository to use @type clusterRepository: L{RedhatClusterRepository} """ super(RedHatClusterInfo, self).__init__(clusterRepository) from helper import RedHatClusterHelper, HelperNotSupportedError try: self.helper=RedHatClusterHelper() except HelperNotSupportedError: self.helper=None self.addNonStatic("name", xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_clustat_cluster, "@"+RedHatClusterRepository.attribute_clustat_cluster_name)) # self.addNonStatic(RedhatClusterInfo, "id") self.addNonStatic("generation", xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_clustat_cluster, "@"+RedHatClusterRepository.attribute_clustat_cluster_generation)) self.addNonStatic("quorum_quorate", xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_quorum, "@"+RedHatClusterRepository.attribute_quorum_quorate)) self.addNonStatic("quorum_groupmember", xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_quorum, "@"+RedHatClusterRepository.attribute_quorum_groupmember))
class RedHatClusterNode(ClusterNode): """ Extends the generall ClusterNode class by adding special queries for this cluster type. """ clustat_pathroot=xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_clustat_nodes, RedHatClusterRepository.element_clustat_node+'[@'+RedHatClusterRepository.attribute_clustat_node_name+'="%s"]') def __init__(self, element, doc=None): super(RedHatClusterNode, self).__init__(element, doc) from helper import RedHatClusterHelper, HelperNotSupportedError try: self.helper=RedHatClusterHelper() except HelperNotSupportedError: self.helper=None self.addNonStatic("state") self.addNonStatic("local") self.addNonStatic("estranged") self.addNonStatic("rgmanager") self.addNonStatic("rgmanager_master") self.addNonStatic("qdisk") def query(self, param, *params, **keys): if self.non_statics.get(param, None) != None and self.helper: return self.helper.queryStatusElement(query=xpathjoin(self.xpath_clustat, self.element_nodes, self.element_node+'['+self.attribute_node_name+'="'+self.getName()+'"]', self.non_statics.get(param))) elif self.helper: return self.helper.queryStatusElement(query=os.path.join(self.clustat_pathroot %self.getName(), "@"+param)) else: return None def getName(self): """ @return: nodename @rtype: string """ return self.getAttribute(RedHatClusterRepository.attribute_clusternode_name) def getId(self): """ @return: nodeid @rtype: int """ return self.getAttribute(RedHatClusterRepository.attribute_clusternode_nodeid, "") def getVotes(self): """ @return: votes for quorum @rtype: int """ return self.getAttribute(RedHatClusterRepository.attribute_clusternode_votes, "1") def isActive(self): """ @return: True if clusternode is active """ return self.state==None or self.state=='1'
def getFailoverdomainPrefNode(self, failoverdomain): """ @param failoverdomain: failoverdomain @type failoverdomain: string @return: Name of node which is prefered in failovercase of given failoverdomain @rtype: string """ #no defaultvalue specified because every dailoverdomain needs to have one or more failoverdomainnodes and priority is a needed attribute _tmp1 = self.getFailoverdomainNodes(failoverdomain) #search for lowest priority minprio = "0" for i in range(len(_tmp1)): _xpath = xpathjoin( RedHatClusterRepository.getDefaultClusterFailoverDomain( failoverdomain), RedHatClusterRepository.element_failoverdomainnode + "[@" + RedHatClusterRepository.attribute_failoverdomainnode_name + "=\"" + _tmp1[i] + "\"]", "@" + RedHatClusterRepository.attribute_failoverdomainnode_priority) self.log.debug( "query lowest priority of failoverdomainnodes belonging to %s : %s" % (failoverdomain, _xpath)) _tmp2 = self.queryValue(_xpath)[0] if (minprio == "0") or (_tmp2 < minprio): minprio = _tmp2 #get node with lowest priority try: _xpath = xpathjoin( RedHatClusterRepository.getDefaultClusterFailoverDomain( failoverdomain), RedHatClusterRepository.element_failoverdomainnode + "[@" + RedHatClusterRepository.attribute_failoverdomainnode_priority + "=\"" + str(minprio) + "\"]", "@" + RedHatClusterRepository.attribute_failoverdomainnode_name) self.log.debug( "get failoverprefdomainnode from failoverdomain %s: %s" % (failoverdomain, _xpath)) return self.queryValue(_xpath)[0] except IndexError: raise NameError( "Cannot find prefered failoverdomainnode for domain %s." % failoverdomain)
def query(self, param, *params, **keys): if keys and keys.has_key("pathroot"): _pathroot=keys["pathroot"] elif params and len(params)>=1: _pathroot=params[0] else: _pathroot=RedHatClusterRepository.getDefaultClustatXPath() result="" if xpathsplit(_pathroot)[0] == RedHatClusterRepository.element_clustat and self.helper: if self.non_statics.get(param, None) != None: result=self.helper.queryStatusElement(query= xpathjoin(_pathroot, self.non_statics.get(param))) else: result=self.helper.queryStatusElement(query= xpathjoin(_pathroot, "@"+param)) else: result=self.queryValue(param) if isinstance(result, basestring): return result else: ":".join(result)
def getFailoverdomainNodes(self, failoverdomain): """ @param failoverdomain: failoverdomain @type failoverdomain: string @return: Names of nodes which belong to the given failoverdomain @rtype: string """ #no defaultvalue specified because every dailoverdomain needs to have one or more failoverdomainnodes _xpath=xpathjoin(RedHatClusterRepository.getDefaultClusterFailoverDomain(failoverdomain), RedHatClusterRepository.element_failoverdomainnode, "@"+RedHatClusterRepository.attribute_failoverdomainnode_name) self.log.debug("get failoverdomainnodes from failoverdomain %s: %s" %(failoverdomain,_xpath)) _tmp1 = self.queryValue(_xpath) return _tmp1
def query(self, param, *params, **keys): if keys and keys.has_key("pathroot"): _pathroot = keys["pathroot"] elif params and len(params) >= 1: _pathroot = params[0] else: _pathroot = RedHatClusterRepository.getDefaultClustatXPath() result = "" if xpathsplit(_pathroot)[ 0] == RedHatClusterRepository.element_clustat and self.helper: if self.non_statics.get(param, None) != None: result = self.helper.queryStatusElement( query=xpathjoin(_pathroot, self.non_statics.get(param))) else: result = self.helper.queryStatusElement( query=xpathjoin(_pathroot, "@" + param)) else: result = self.queryValue(param) if isinstance(result, basestring): return result else: ":".join(result)
def __init__(self, clusterRepository): """ Set used clusterRepository @param clusterRepository: clusterRepository to use @type clusterRepository: L{RedhatClusterRepository} """ super(RedHatClusterInfo, self).__init__(clusterRepository) from helper import RedHatClusterHelper, HelperNotSupportedError try: self.helper = RedHatClusterHelper() except HelperNotSupportedError: self.helper = None self.addNonStatic( "name", xpathjoin( RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_clustat_cluster, "@" + RedHatClusterRepository.attribute_clustat_cluster_name)) # self.addNonStatic(RedhatClusterInfo, "id") self.addNonStatic( "generation", xpathjoin( RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_clustat_cluster, "@" + RedHatClusterRepository.attribute_clustat_cluster_generation)) self.addNonStatic( "quorum_quorate", xpathjoin(RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_quorum, "@" + RedHatClusterRepository.attribute_quorum_quorate)) self.addNonStatic( "quorum_groupmember", xpathjoin( RedHatClusterRepository.getDefaultClustatXPath(), RedHatClusterRepository.element_quorum, "@" + RedHatClusterRepository.attribute_quorum_groupmember))
def getFailoverdomainNodes(self, failoverdomain): """ @param failoverdomain: failoverdomain @type failoverdomain: string @return: Names of nodes which belong to the given failoverdomain @rtype: string """ #no defaultvalue specified because every dailoverdomain needs to have one or more failoverdomainnodes _xpath = xpathjoin( RedHatClusterRepository.getDefaultClusterFailoverDomain( failoverdomain), RedHatClusterRepository.element_failoverdomainnode, "@" + RedHatClusterRepository.attribute_failoverdomainnode_name) self.log.debug("get failoverdomainnodes from failoverdomain %s: %s" % (failoverdomain, _xpath)) _tmp1 = self.queryValue(_xpath) return _tmp1