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