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
Пример #3
0
 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))
Пример #5
0
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'
Пример #6
0
    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
Пример #9
0
    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)
Пример #10
0
 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))
Пример #11
0
 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