def testMigration(self):
     import comoonics.cdsl.migration
     from comoonics.cdsl.ComCdslRepository import ComoonicsCdslRepository
     from comoonics import XmlTools
     from comoonics.cdsl import stripleadingsep
     fromsource = os.path.join(baseSetup.testpath, "cdsl4.xml")
     cwd = Path()
     cwd.pushd(baseSetup.tmppath)
     repository = comoonics.cdsl.migration.migrate(
         None,
         ComoonicsCdslRepository.version,
         fromresource=fromsource,
         root=baseSetup.tmppath,
         mountpoint="repo8",
         ignoreerrors=True)
     oldelement = XmlTools.parseXMLFile(fromsource)
     wanttocdsls = oldelement.documentElement.getElementsByTagName("cdsl")
     for i in range(len(wanttocdsls)):
         wanttocdsl = wanttocdsls[i]
         src = stripleadingsep(wanttocdsl.getAttribute("src"))
         iscdsl = repository.getCdsl(src)
         self.assertTrue(wanttocdsl.getAttribute("timestamp") == iscdsl.getAttribute("timestamp") and \
                         wanttocdsl.getAttribute("type") == iscdsl.getAttribute("type"), \
                         "Cdsl %s has different timestamp or type after migration" %iscdsl)
     os.remove(
         os.path.join(repository.root, repository.getMountpoint(),
                      repository.resource))
     cwd.popd()
 def __init__(self, *args, **kwds):
     from comoonics import XmlTools
     super(RedhatClusterSystemInformation, self).__init__(*args, **kwds)
     self.features.append("redhatcluster")
     if not kwds and not args:
         self.cluster_conf = XmlTools.parseXMLFile(self.REDHAT_CLUSTER_CONF)
         self.type = SystemTypes.CLUSTER
         self.name = self.getClusterName()
     else:
         self.__dict__.update(dict(kwds))
         self.type = SystemTypes.CLUSTER
 def __init__(self, *args, **kwds):
     from comoonics import XmlTools
     super(RedhatClusterSystemInformation, self).__init__(*args, **kwds)
     self.features.append("redhatcluster")
     if not kwds and not args:
         self.cluster_conf=XmlTools.parseXMLFile(self.REDHAT_CLUSTER_CONF)
         self.type=SystemTypes.CLUSTER
         self.name=self.getClusterName()
     else:
         self.__dict__.update(dict(kwds))
         self.type=SystemTypes.CLUSTER
def getXPathFromXMLFile(xpath, filename):
    try:
        from comoonics import XmlTools
        document = XmlTools.parseXMLFile(filename)
        return XmlTools.evaluateXPath(xpath, document.documentElement)
    except ImportError:
        import xml.dom.minidom
        from xml.xpath import Evaluate
        import os
        filep = os.fdopen(os.open(filename, os.O_RDONLY))
        doc = xml.dom.minidom.parse(filep)
        return Evaluate(xpath, doc.documentElement)
def getXPathFromXMLFile(xpath, filename):
    try:
        from comoonics import XmlTools
        document=XmlTools.parseXMLFile(filename)
        return XmlTools.evaluateXPath(xpath, document.documentElement)
    except ImportError:
        import xml.dom.minidom
        from xml.xpath import Evaluate
        import os
        filep = os.fdopen(os.open(filename, os.O_RDONLY))
        doc=xml.dom.minidom.parse(filep)
        return Evaluate(xpath, doc.documentElement)
Пример #6
0
    def migrate(self, fromversion, toversion, **kwds):
        from comoonics.cdsl.ComCdsl import ComoonicsCdsl
        import os.path
        from comoonics import XmlTools
        root = kwds.get("root", "/")
        mountpoint = kwds.get("mountpoint", "")
        toresource = kwds.get("toresource",
                              ComoonicsCdslRepository.default_resources[0])
        fromresource = kwds.get("fromresource",
                                ComoonicsCdslRepository.default_resources[1])

        if os.path.exists(fromresource):
            fromdoc = XmlTools.parseXMLFile(fromresource, False)
            fromelement = fromdoc.documentElement
            if fromelement.tagName != ComoonicsCdslRepository.cdsls_element:
                raise ConfigfileFormatException(
                    "Config file \"%s\"does not start with an cdsls element. Wrong format."
                    % fromresource)

            defaults = fromelement.getElementsByTagName("defaults")
            if defaults:
                defaults = defaults[0]

            defaultkeys = self.getDefaultKeys(defaults)
            defaultkeys["root"] = root
            defaultkeys["mountpoint"] = mountpoint
            defaultkeys["resource"] = toresource
            self.logger.debug("defaults: %s" % defaultkeys)
            torepository = ComoonicsCdslRepository(**defaultkeys)
            cdsls = fromelement.getElementsByTagName("cdsl")
            if cdsls and len(cdsls) > 0:
                for i in range(len(cdsls)):
                    nodes = []
                    nodeselement = cdsls[i].getElementsByTagName("nodes")
                    if nodeselement:
                        nodeselement = nodeselement[0]
                        noderefs = nodeselement.getElementsByTagName("noderef")
                        if noderefs and len(noderefs) > 0:
                            for j in range(len(noderefs)):
                                nodes.append(noderefs[j].getAttribute("ref"))
                    cdsl = ComoonicsCdsl(cdsls[i].getAttribute("src"),
                                         cdsls[i].getAttribute("type"),
                                         torepository, None, nodes,
                                         cdsls[i].getAttribute("timestamp"),
                                         kwds.get("ignoreerrors", True))
                    torepository.commit(cdsl)
            return torepository
        else:
            raise IOError(
                2, "Could not find cdsl inventory file %s in %s" %
                (fromresource, os.getcwd()))
Пример #7
0
 def read(self, filename):
     """ This method reads the file and initializes all internal structures for handling as ConfigParser. """
     if isinstance(filename, basestring):
         self.doc=XmlTools.parseXMLFile(filename, self.validate)
         try:
             if self.doc.documentElement.tagName == self.LOGGING_TAGNAME:
                 _baseelement=self.doc.documentElement
             else:
                 _baseelement=self.doc.documentElement.getElementsByTagName(self.LOGGING_TAGNAME)[0]
         except:
             mylogger.exception("No Logging configuration found in file %s" %(filename))
             raise NoLoggingConfigFound, "No Logging configuration found in file %s" %(filename)
     elif isinstance(filename, Node):
         _baseelement=filename
     else:
         raise IncompatibleConfigFileType(type(filename))
     self._read(_baseelement, filename)
 def migrate(self, fromversion, toversion, **kwds):
     from comoonics.cdsl.ComCdslRepository import ComoonicsCdslRepository
     from comoonics.cdsl.ComCdsl import ComoonicsCdsl
     import os.path
     from comoonics import XmlTools
     root=kwds.get("root", "/")
     mountpoint=kwds.get("mountpoint", "")
     toresource=kwds.get("toresource", ComoonicsCdslRepository.default_resources[0])
     fromresource=kwds.get("fromresource", ComoonicsCdslRepository.default_resources[1])
     
     if os.path.exists(fromresource):
         fromdoc=XmlTools.parseXMLFile(fromresource, False)
         fromelement=fromdoc.documentElement
         if fromelement.tagName != ComoonicsCdslRepository.cdsls_element:
             raise ConfigfileFormatException("Config file \"%s\"does not start with an cdsls element. Wrong format." %fromresource)
         
         defaults=fromelement.getElementsByTagName("defaults")
         if defaults:
             defaults=defaults[0]
         
         defaultkeys=self.getDefaultKeys(defaults)
         defaultkeys["root"]=root
         defaultkeys["mountpoint"]=mountpoint
         defaultkeys["resource"]=toresource
         self.logger.debug("defaults: %s" %defaultkeys)
         torepository=ComoonicsCdslRepository(**defaultkeys)
         cdsls=fromelement.getElementsByTagName("cdsl")
         if cdsls and len(cdsls)>0:
             for i in range(len(cdsls)):
                 nodes=[]
                 nodeselement=cdsls[i].getElementsByTagName("nodes")
                 if nodeselement:
                     nodeselement=nodeselement[0]
                     noderefs=nodeselement.getElementsByTagName("noderef")
                     if noderefs and len(noderefs) > 0:
                         for j in range(len(noderefs)):
                             nodes.append(noderefs[j].getAttribute("ref"))
                 cdsl=ComoonicsCdsl(cdsls[i].getAttribute("src"), cdsls[i].getAttribute("type"), torepository, None, nodes, cdsls[i].getAttribute("timestamp"), kwds.get("ignoreerrors", True))
                 torepository.commit(cdsl)
         return torepository
     else:
         raise IOError(2, "Could not find cdsl inventory file %s in %s" %(fromresource, os.getcwd()))
 def testMigration(self):
     import comoonics.cdsl.migration
     from comoonics.cdsl.ComCdslRepository import ComoonicsCdslRepository
     from comoonics import XmlTools
     from comoonics.cdsl import stripleadingsep
     fromsource=os.path.join(baseSetup.testpath, "cdsl4.xml")
     cwd=Path()
     cwd.pushd(baseSetup.tmppath)
     repository=comoonics.cdsl.migration.migrate(None, ComoonicsCdslRepository.version, fromresource=fromsource, root=baseSetup.tmppath, mountpoint="repo8", ignoreerrors=True)
     oldelement=XmlTools.parseXMLFile(fromsource)
     wanttocdsls=oldelement.documentElement.getElementsByTagName("cdsl")
     for i in range(len(wanttocdsls)):
         wanttocdsl=wanttocdsls[i]
         src=stripleadingsep(wanttocdsl.getAttribute("src"))
         iscdsl=repository.getCdsl(src)
         self.assertTrue(wanttocdsl.getAttribute("timestamp") == iscdsl.getAttribute("timestamp") and \
                         wanttocdsl.getAttribute("type") == iscdsl.getAttribute("type"), \
                         "Cdsl %s has different timestamp or type after migration" %iscdsl)
     os.remove(os.path.join(repository.root, repository.getMountpoint(), repository.resource))
     cwd.popd()
def fromXML(options, xmlfile):
    from comoonics import XmlTools
    import xml.dom
    if options.xml=="-":
        logger.debug("Parsing document from stdin")
        doc = XmlTools.parseXMLFP(sys.stdin, options.xmlvalidate)
    elif os.path.isfile(options.xml):
        logger.debug("Parsing document %s " % options.xml)
        doc = XmlTools.parseXMLFile(options.xml, options.xmlvalidate)

    if options.clusterconf:
        from xml import xpath
        if options.nodename != None or options.nodename != "":
            (rc, options.nodename)=ComSystem.execLocalStatusOutput("cman_tool status | grep 'Node name:'")
            logger.debug("options.nodename: %s" %options.nodename)
            options.nodename=options.nodename.split(" ")[2]
            _xmlnodepath='/cluster/clusternodes/clusternode[@name="%s"]/com_info/fenceackserver' %(options.nodename)
            logger.debug("Nodename: %s, path: %s" %(options.nodename, _xmlnodepath))
            node=xpath.Evaluate(_xmlnodepath, doc)[0]
    elif options.xmlnodepath and options.xmlnodepath != "":
        from xml import xpath
        logger.debug("Path2Config: %s" %options.xmlnodepath)
        node=xpath.Evaluate(options.xmlnodepath, doc)[0]
    else:
        node=doc.documentElement

    if node.hasAttribute("port"): options.port=node.getAttribute("port")
    if node.hasAttribute("user"): options.user=node.getAttribute("user")
    if node.hasAttribute("passwd"): options.password=node.getAttribute("passwd")
    if node.hasAttribute("bind"): options.bind=node.getAttribute("bind")
    sslnodes=node.getElementsByTagName("ssl")
    if sslnodes:
        options.ssl=True
        if node.hasAttribute("keyfile"): options.ssl_keyfile=node.getAttribute("keyfile")
        if node.hasAttribute("certfile"): options.ssl_certfile=node.getAttribute("certfile")
        if node.hasAttribute("verifyfile"): options.ssl_verifyfile=node.getAttribute("verifyfile")

    return