+++ /dev/null
-import argparse
-import logging
-
-from textwrap import dedent
-
-from ceph_volume import decorators, terminal, process
-from ceph_volume.api import lvm as api
-
-logger = logging.getLogger(__name__)
-
-
-def wipefs(path):
- """
- Removes the filesystem from an lv or partition.
- """
- process.run([
- 'wipefs',
- '--all',
- path
- ])
-
-
-def zap_data(path):
- """
- Clears all data from the given path. Path should be
- an absolute path to an lv or partition.
-
- 10M of data is written to the path to make sure that
- there is no trace left of any previous Filesystem.
- """
- process.run([
- 'dd',
- 'if=/dev/zero',
- 'of={path}'.format(path=path),
- 'bs=1M',
- 'count=10',
- ])
-
-
-class Zap(object):
-
- help = 'Removes all data and filesystems from a logical volume or partition.'
-
- def __init__(self, argv):
- self.argv = argv
-
- @decorators.needs_root
- def zap(self, args):
- device = args.device
- lv = api.get_lv_from_argument(device)
- if lv:
- # we are zapping a logical volume
- path = lv.lv_path
- else:
- # we are zapping a partition
- #TODO: ensure device is a partition
- path = device
-
- logger.info("Zapping: %s", path)
- terminal.write("Zapping: %s" % path)
-
- wipefs(path)
- zap_data(path)
-
- if lv:
- # remove all lvm metadata
- lv.clear_tags()
-
- terminal.success("Zapping successful for: %s" % path)
-
- def main(self):
- sub_command_help = dedent("""
- Zaps the given logical volume or partition. If given a path to a logical
- volume it must be in the format of vg/lv. Any filesystems present
- on the given lv or partition will be removed and all data will be purged.
-
- However, the lv or partition will be kept intact.
-
- Example calls for supported scenarios:
-
- Zapping a logical volume:
-
- ceph-volume lvm zap {vg name/lv name}
-
- Zapping a partition:
-
- ceph-volume lvm zap /dev/sdc1
-
- """)
- parser = argparse.ArgumentParser(
- prog='ceph-volume lvm zap',
- formatter_class=argparse.RawDescriptionHelpFormatter,
- description=sub_command_help,
- )
-
- parser.add_argument(
- 'device',
- metavar='DEVICE',
- nargs='?',
- help='Path to an lv (as vg/lv) or to a partition like /dev/sda1'
- )
- if len(self.argv) == 0:
- print(sub_command_help)
- return
- args = parser.parse_args(self.argv)
- self.zap(args)