def deactivateVDIs(self, sr, vdis): if self.srTypes[sr] in ["ext", "nfs"]: return lvmCache = lvmcache.LVMCache("%s%s" % (self.VG_PREFIX, sr)) for (vdi, lvName) in vdis: self.logger.log("Deactivating %s" % lvName, 4) lvmCache.deactivate("lvm-" + sr, vdi, lvName, False)
def activateChain(self, sr, vdi, parentOnly = True): """Activate the LV of the VHD 'vdi' and also all its VHD parents. Return the list of all the LV's that were activated""" if self.srTypes[sr] in ["ext", "nfs"]: return activated = [] gotParent = False lvName = self.getFileVDI(sr, vdi) path = self.getPathVDI(sr, vdi) lvmCache = lvmcache.LVMCache("%s%s" % (self.VG_PREFIX, sr)) while True: activated.append((vdi, lvName)) self.logger.log("Activating %s" % lvName, 4) lvmCache.activate("lvm-" + sr, vdi, lvName, False) # sometimes on the slave the device is still not created after # lvchange -ay. We do a forceful refresh here just in case #cmd = "lvchange --refresh -ay %s" % path #tutil.execCmd(cmd, 0, self.logger, LOG_LEVEL_SUB) if parentOnly and gotParent: break path = self._getVHDParentNoCheck(sr, path) if not path: break lvName = path.split('/')[-1].replace("--", "-") vdi = lvName.split("-", 1)[-1] self.logger.log("VHD parent = %s" % vdi, 4) gotParent = True return activated
def _runTests(vgName): """Unit testing""" print "Running unit tests..." if not vgName: print "Error: missing VG name param" return 1 if not lvutil._checkVG(vgName): print "Error: VG %s not found" % vgName return 1 j = Journaler(lvmcache.LVMCache(vgName)) if j.get("clone", "1"): print "get non-existing failed" return 1 j.create("clone", "1", "a") val = j.get("clone", "1") if val != "a": print "create-get failed" return 1 j.remove("clone", "1") if j.get("clone", "1"): print "remove failed" return 1 j.create("modify", "X", "831_3") j.create("modify", "Z", "831_4") j.create("modify", "Y", "53_0") val = j.get("modify", "X") if val != "831_3": print "create underscore_val failed" return 1 val = j.get("modify", "Y") if val != "53_0": print "create multiple id's failed" return 1 entries = j.getAll("modify") if not entries.get("X") or not entries.get("Y") or \ entries["X"] != "831_3" or entries["Y"] != "53_0": print "getAll failed: %s" % entries return 1 j.remove("modify", "X") val = j.getAll("modify") if val.get("X") or not val.get("Y") or val["Y"] != "53_0": print "remove(X) failed" return 1 j.remove("modify", "Y") j.remove("modify", "Z") if j.get("modify", "Y"): print "remove(Y) failed" return 1 if j.get("modify", "Z"): print "remove(Z) failed" return 1 print "All tests passed" return 0
def ensurePathExists(mdpath): if not os.path.exists(mdpath): vgname = mdpath.split('/')[2] lvmCache = lvmcache.LVMCache(vgname) lvmCache.activateNoRefcount(MDVOLUME_NAME)
def srlist_toxml(VGs, prefix, includeMetadata=False): dom = xml.dom.minidom.Document() element = dom.createElement("SRlist") dom.appendChild(element) for val in VGs: entry = dom.createElement('SR') element.appendChild(entry) subentry = dom.createElement("UUID") entry.appendChild(subentry) textnode = dom.createTextNode(val) subentry.appendChild(textnode) subentry = dom.createElement("Devlist") entry.appendChild(subentry) textnode = dom.createTextNode(VGs[val]) subentry.appendChild(textnode) subentry = dom.createElement("size") entry.appendChild(subentry) size = str(_getVGstats(prefix + val)['physical_size']) textnode = dom.createTextNode(size) subentry.appendChild(textnode) if includeMetadata: metadataVDI = None # add SR name_label mdpath = os.path.join(VG_LOCATION, VG_PREFIX + val) mdpath = os.path.join(mdpath, MDVOLUME_NAME) try: mgtVolActivated = False if not os.path.exists(mdpath): # probe happens out of band with attach so this volume # may not have been activated at this point lvmCache = lvmcache.LVMCache(VG_PREFIX + val) lvmCache.activateNoRefcount(MDVOLUME_NAME) mgtVolActivated = True sr_metadata = \ srmetadata.LVMMetadataHandler(mdpath, \ False).getMetadata()[0] subentry = dom.createElement("name_label") entry.appendChild(subentry) textnode = dom.createTextNode( sr_metadata[srmetadata.NAME_LABEL_TAG]) subentry.appendChild(textnode) # add SR description subentry = dom.createElement("name_description") entry.appendChild(subentry) textnode = dom.createTextNode( sr_metadata[srmetadata.NAME_DESCRIPTION_TAG]) subentry.appendChild(textnode) # add metadata VDI UUID metadataVDI = srmetadata.LVMMetadataHandler(mdpath, \ False).findMetadataVDI() subentry = dom.createElement("pool_metadata_detected") entry.appendChild(subentry) if metadataVDI is not None: subentry.appendChild(dom.createTextNode("true")) else: subentry.appendChild(dom.createTextNode("false")) finally: if mgtVolActivated: # deactivate only if we activated it lvmCache.deactivateNoRefcount(MDVOLUME_NAME) return dom.toprettyxml()