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)
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()))
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