예제 #1
0
파일: lvm.py 프로젝트: xin49/vdsm
def changeLVTags(vg, lv, delTags=(), addTags=()):
    log.info("Change LV tags (vg=%s, lv=%s, delTags=%s, addTags=%s)", vg, lv,
             delTags, addTags)
    lvname = '%s/%s' % (vg, lv)
    delTags = set(delTags)
    addTags = set(addTags)
    if delTags.intersection(addTags):
        raise se.LogicalVolumeReplaceTagError(
            "Cannot add and delete the same tag lv: `%s` tags: `%s`" %
            (lvname, ", ".join(delTags.intersection(addTags))))

    cmd = ['lvchange']
    cmd.extend(LVM_NOBACKUP)

    for tag in delTags:
        cmd.extend(("--deltag", tag))

    for tag in addTags:
        cmd.extend(('--addtag', tag))

    cmd.append(lvname)

    rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, )))
    _lvminfo._invalidatelvs(vg, lv)
    if rc != 0:
        raise se.LogicalVolumeReplaceTagError(
            'lv: `%s` add: `%s` del: `%s` (%s)' %
            (lvname, ", ".join(addTags), ", ".join(delTags), err[-1]))
예제 #2
0
def replaceLVTag(vg, lv, deltag, addtag):
    """
    Removes and add tags atomically.
    """
    lvname = "%s/%s" % (vg, lv)
    cmd = (("lvchange", ) + LVM_NOBACKUP + ("--deltag", deltag) +
           ("--addtag", addtag) + (lvname, ))
    rc, out, err = _lvminfo.cmd(cmd, _lvminfo._getVGDevs((vg, )))
    _lvminfo._invalidatelvs(vg, lv)
    if rc != 0:
        raise se.LogicalVolumeReplaceTagError("%s/%s" % (vg, lv),
                                              "%s,%s" % (deltag, addtag))
예제 #3
0
    def changeLVTags(self, vg, lv, delTags=(), addTags=()):
        try:
            lv_md = self.lvmd[(vg, lv)]
        except KeyError:
            raise se.LogicalVolumeReplaceTagError("LV %s does not exist",
                                                  "%s/%s" % (vg, lv))

        # Adding an existing tag or removing a nonexistent tag are ignored
        tags = set(lv_md['tags'])
        tags |= set(addTags)
        tags -= set(delTags)
        lv_md['tags'] = tuple(tags)
예제 #4
0
    def changeLVsTags(self, vg, lvs, delTags=(), addTags=()):
        lv_mds = []
        for lv in lvs:
            try:
                lv_mds.append(self.lvmd[(vg, lv)])
            except KeyError:
                raise se.LogicalVolumeReplaceTagError("cmd", 1, ["out"],
                                                      ["err"])

        for lv_md in lv_mds:
            # Adding an existing tag or removing a nonexistent tag are ignored
            tags = set(lv_md['tags'])
            tags |= set(addTags)
            tags -= set(delTags)
            lv_md['tags'] = tuple(tags)