def __new__(cls, *args, **kwds):
     """
     Decides by type of given clustermetainfo which 
     instance of clusterrepository (general, redhat 
     or comoonics) has to be created.
     args = (element,doc,options)
     """
     if len(args) >= 1 and isinstance(args[0], basestring):
         doc=comoonics.XmlTools.parseXMLFile(args[0])
         if len(comoonics.XmlTools.evaluateXPath(ComoonicsClusterRepository.getDefaultComoonicsXPath(), doc.documentElement)) > 0:
             cls = ComoonicsClusterRepository
         elif len(comoonics.XmlTools.evaluateXPath(RedHatClusterRepository.getDefaultClusterNodeXPath(), doc.documentElement)) > 0:
             cls = RedHatClusterRepository
     if len(args) >= 2:
         if (args[0] != None):                
             if comoonics.XmlTools.evaluateXPath(ComoonicsClusterRepository.getDefaultComoonicsXPath(""), args[0]) or len(args[2]) == 0:
                 cls = ComoonicsClusterRepository
             elif comoonics.XmlTools.evaluateXPath(RedHatClusterRepository.getDefaultClusterNodeXPath(), args[0]):
                 cls = RedHatClusterRepository
                 
         elif type(args[2]) == dict:
             if searchDict(args[2],"osr"):
                 cls = ComoonicsClusterRepository
             elif searchDict(args[2],RedHatClusterRepository.element_clusternode):
                 cls = RedHatClusterRepository
             
     return object.__new__(cls) #, *args, **kwds)
Ejemplo n.º 2
0
    def __new__(cls, *args, **kwds):
        """
        Decides by type of given clustermetainfo which 
        instance of clusterrepository (general, redhat 
        or comoonics) has to be created.
        args = (element,doc,options)
        """
        if len(args) >= 1 and isinstance(args[0], basestring):
            doc = comoonics.XmlTools.parseXMLFile(args[0])
            if len(
                    comoonics.XmlTools.evaluateXPath(
                        ComoonicsClusterRepository.getDefaultComoonicsXPath(),
                        doc.documentElement)) > 0:
                cls = ComoonicsClusterRepository
            elif len(
                    comoonics.XmlTools.evaluateXPath(
                        RedHatClusterRepository.getDefaultClusterNodeXPath(),
                        doc.documentElement)) > 0:
                cls = RedHatClusterRepository
        if len(args) >= 2:
            if (args[0] != None):
                if comoonics.XmlTools.evaluateXPath(
                        ComoonicsClusterRepository.getDefaultComoonicsXPath(
                            ""), args[0]) or len(args[2]) == 0:
                    cls = ComoonicsClusterRepository
                elif comoonics.XmlTools.evaluateXPath(
                        RedHatClusterRepository.getDefaultClusterNodeXPath(),
                        args[0]):
                    cls = RedHatClusterRepository

            elif type(args[2]) == dict:
                if searchDict(args[2], "osr"):
                    cls = ComoonicsClusterRepository
                elif searchDict(args[2],
                                RedHatClusterRepository.element_clusternode):
                    cls = RedHatClusterRepository

        return object.__new__(cls)  #, *args, **kwds)
Ejemplo n.º 3
0
def getClusterRepository(*args, **kwds):
    """
    Factory method to autocreate a fitting cluster repository.
    The following call semantics are supported:
    getClusterRepository() => SimpleComoonicsClusterRepository
    getClusterRepository(filename) => ComoonicsClusterRepository
    getClusterRepository(docelement, doc, options) => ComoonicsClusterRepository
    getClusterRepository(filename=filename) => ComoonicsClusterRepository
    getClusterRepository(clusterconf=filename) => ComoonicsClusterRepository
    getClusterRepository(maxnodeid=maxnodeid) => SimpleClusterRepository
    Parses the given filename as configuration to the given cluster or already accept a parsed configuration. 
    Right now only xml.dom.Node representation of the cluster configuration is supported.
    @param filename:   representation of the path to the cluster configuration. If it is a xml file it will be parsed. 
                       If not an exception is thrown.
    @type  filename:   L{String} 
    @param docelement: the already parse configuration as dom document.
    @type  docelement: L{xml.dom.Element}
    @param doc:        the document itself.
    @type  doc:        L{xml.dom.Docuement}
    @param options:    options see ClusterRepository constructor.
    @type  options:    L{dict}
    @return:           The best fitting clusterconfiguration repository class instance
    @rtype:            L{ComoonicsClusterRepository}, L{RedHatClusterRepository}, ..
    """
    from comoonics.XmlTools import evaluateXPath
    from comoonics.DictTools import searchDict
    import ComClusterRepository
#    from comoonics.cluster.ComClusterRepository import SimpleComoonicsClusterRepository, ComoonicsClusterRepository, RedHatClusterRepository
    repositoryclass=ComClusterRepository.SimpleComoonicsClusterRepository
    
    clusterconf=None
    if (args and len(args) >= 1 and isinstance(args[0], basestring)) or (kwds and (kwds.has_key("clusterconf") or kwds.has_key("filename"))):
        if args and len(args) >= 1 and isinstance(args[0], basestring):
            clusterconf=args[0]
        elif kwds.has_key("clusterconf"):
            clusterconf=kwds.get("clusterconf")
            del kwds["clusterconf"]
        elif kwds.has_key("filename"):
            clusterconf=kwds.get("filename")
            del kwds["filename"]
    
    if clusterconf and os.path.isfile(clusterconf):
        doc=parseClusterConf(clusterconf)
        newargs=[doc.documentElement,doc]
        newargs.extend(args[1:])
        args=newargs
        if len(evaluateXPath(ComClusterRepository.ComoonicsClusterRepository.getDefaultComoonicsXPath(), doc.documentElement)) > 0:
            repositoryclass = ComClusterRepository.ComoonicsClusterRepository
        elif len(evaluateXPath(ComClusterRepository.RedHatClusterRepository.getDefaultClusterNodeXPath(), doc.documentElement)) > 0:
            repositoryclass = ComClusterRepository.RedHatClusterRepository
    elif len(args) >= 2 or kwds.has_key("element"):
        if args and args[0]:
            element=args[0]
        else:
            element=kwds.get("element", None)
        if (element != None):
            if args and len(args)>=3:
                options=args[2]
            else:
                options=kwds.get("options", {})       
            if evaluateXPath(ComClusterRepository.ComoonicsClusterRepository.getDefaultComoonicsXPath(""), element) or not options:
                repositoryclass = ComClusterRepository.ComoonicsClusterRepository
            elif evaluateXPath(ComClusterRepository.RedHatClusterRepository.getDefaultClusterNodeXPath(), element):
                repositoryclass = ComClusterRepository.RedHatClusterRepository
                
        elif type(args[2]) == dict:
            if searchDict(args[2],"osr"):
                repositoryclass = ComClusterRepository.ComoonicsClusterRepository
            elif searchDict(args[2],ComClusterRepository.RedHatClusterRepository.element_clusternode):
                repositoryclass = ComClusterRepository.RedHatClusterRepository
            
    return repositoryclass(*args, **kwds) #, *args, **kwds)