Skip to content

Commit

Permalink
ceph-volume lvm.zap iterate over multiple lvs on a pv
Browse files Browse the repository at this point in the history
Signed-off-by: Alfredo Deza <adeza@redhat.com>
(cherry picked from commit 21d4f4a)
  • Loading branch information
Alfredo Deza authored and andrewschoen committed Aug 28, 2018
1 parent fab9bc4 commit 3bf267e
Showing 1 changed file with 28 additions and 25 deletions.
53 changes: 28 additions & 25 deletions src/ceph-volume/ceph_volume/devices/lvm/zap.py
Expand Up @@ -65,55 +65,58 @@ def zap(self, args):

# check if there was a pv created with the
# name of device
pv = api.get_pv(pv_name=device)
if pv:
pvs = api.PVolumes()
pvs.filter(pv_name=device)
for pv in pvs:
vg_name = pv.vg_name
lv = api.get_lv(vg_name=vg_name)

dmcrypt = False
dmcrypt_uuid = None
if lv:
if lv.tags.get('ceph.cluster_name') and lv.tags.get('ceph.osd_id'):
lv_path = "/var/lib/ceph/osd/{}-{}".format(lv.tags['ceph.cluster_name'], lv.tags['ceph.osd_id'])
else:
lv_path = lv.path
dmcrypt_uuid = lv.lv_uuid
dmcrypt = lv.encrypted
if system.path_is_mounted(lv_path):
mlogger.info("Unmounting %s", lv_path)
system.unmount(lv_path)
lv = api.get_lv(vg_name=vg_name, lv_uuid=pv.lv_uuid)

dmcrypt = False
dmcrypt_uuid = None
if lv:
if lv.tags.get('ceph.cluster_name') and lv.tags.get('ceph.osd_id'):
lv_path = "/var/lib/ceph/osd/{}-{}".format(lv.tags['ceph.cluster_name'], lv.tags['ceph.osd_id'])
else:
lv_path = lv.path
dmcrypt_uuid = lv.lv_uuid
dmcrypt = lv.encrypted
if system.path_is_mounted(lv_path):
mlogger.info("Unmounting %s", lv_path)
system.unmount(lv_path)
if dmcrypt and dmcrypt_uuid:
self.dmcrypt_close(dmcrypt_uuid)
else:
# we're most likely dealing with a partition here, check to
# see if it was encrypted
partuuid = disk.get_partuuid(device)
if encryption.status("/dev/mapper/{}".format(partuuid)):
dmcrypt_uuid = partuuid
dmcrypt = True
self.dmcrypt_close(dmcrypt_uuid)

if dmcrypt and dmcrypt_uuid:
dmcrypt_path = "/dev/mapper/{}".format(dmcrypt_uuid)
mlogger.info("Closing encrypted path %s", dmcrypt_path)
encryption.dmcrypt_close(dmcrypt_path)

if args.destroy and pv:
if args.destroy and pvs:
logger.info("Found a physical volume created from %s, will destroy all it's vgs and lvs", device)
vg_name = pv.vg_name
mlogger.info("Destroying volume group %s because --destroy was given", vg_name)
api.remove_vg(vg_name)
mlogger.info("Destroying physical volume %s because --destroy was given", device)
api.remove_pv(device)
elif args.destroy and not pv:
elif args.destroy and not pvs:
mlogger.info("Skipping --destroy because no associated physical volumes are found for %s", device)

wipefs(path)
zap_data(path)

if lv and not pv:
if lv and not pvs:
# remove all lvm metadata
lv.clear_tags()

terminal.success("Zapping successful for: %s" % path)

def dmcrypt_close(self, dmcrypt_uuid):
dmcrypt_path = "/dev/mapper/{}".format(dmcrypt_uuid)
mlogger.info("Closing encrypted path %s", dmcrypt_path)
encryption.dmcrypt_close(dmcrypt_path)

def main(self):
sub_command_help = dedent("""
Zaps the given logical volume, raw device or partition for reuse by ceph-volume.
Expand Down

0 comments on commit 3bf267e

Please sign in to comment.