From a478385334323071b5cfa4d546eef5b0ef43dce7 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 31 May 2015 19:42:45 +0200 Subject: [PATCH] ceph-disk: always check zap is applied on a full device zap only makes sense on a full device and this is verified for ceph-disk prepare --zap-disk but not for ceph-disk zap Unify the two and add a test to check that it fails as expected when trying to zap a directory. http://tracker.ceph.com/issues/11272 Fixes: #11272 Signed-off-by: Loic Dachary (cherry picked from commit 8e1bcf21f090fc98ac9b495d76614e3012f5872a) Conflicts: src/test/ceph-disk.sh : trivial resolution --- src/ceph-disk | 8 ++++---- src/test/ceph-disk.sh | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ceph-disk b/src/ceph-disk index 61a28fdf00f22..4a485201a4fe5 100755 --- a/src/ceph-disk +++ b/src/ceph-disk @@ -1039,6 +1039,9 @@ def zap(dev): """ Destroy the partition table and content of a given disk. """ + dmode = os.stat(dev).st_mode + if not stat.S_ISBLK(dmode) or is_partition(dev): + raise Error('not full block device; cannot zap', dev) try: LOG.debug('Zapping partition table on %s', dev) @@ -1501,10 +1504,7 @@ def main_prepare(args): verify_not_in_use(args.journal, False) if args.zap_disk is not None: - if stat.S_ISBLK(dmode) and not is_partition(args.data): - zap(args.data) - else: - raise Error('not full block device; cannot zap', args.data) + zap(args.data) if args.cluster_uuid is None: args.cluster_uuid = get_fsid(cluster=args.cluster) diff --git a/src/test/ceph-disk.sh b/src/test/ceph-disk.sh index d265a573a09dd..8f36a584e8302 100755 --- a/src/test/ceph-disk.sh +++ b/src/test/ceph-disk.sh @@ -167,6 +167,15 @@ function test_no_path() { ( unset PATH ; test_activate_dir ) || return 1 } +function test_zap() { + local osd_data=$DIR/dir + $mkdir -p $osd_data + + ./ceph-disk $CEPH_DISK_ARGS zap $osd_data 2>&1 | grep 'not full block device' || return 1 + + $rm -fr $osd_data +} + # ceph-disk prepare returns immediately on success if the magic file # exists in the --osd-data directory. function test_activate_dir_magic() { @@ -470,6 +479,7 @@ function run() { default_actions+="test_activate_dir_magic " default_actions+="test_activate_dir " default_actions+="test_keyring_path " + default_actions+="test_zap " local actions=${@:-$default_actions} for action in $actions ; do setup -- 2.39.5