Пример #1
0
 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)
Пример #2
0
 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
Пример #3
0
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
Пример #4
0
def ensurePathExists(mdpath):
    if not os.path.exists(mdpath):
        vgname = mdpath.split('/')[2]
        lvmCache = lvmcache.LVMCache(vgname)
        lvmCache.activateNoRefcount(MDVOLUME_NAME)
Пример #5
0
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()