[pve-devel] [PATCH manager] fix #1043: prevent ceph destroypool when in use

Dominik Csapak d.csapak at proxmox.com
Thu Jun 30 11:46:02 CEST 2016


also introduces a force parameter to this call
if force is true, the call destroys the ceph pool
even when it is use

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 PVE/API2/Ceph.pm | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
index 58e5b35..29b57c7 100644
--- a/PVE/API2/Ceph.pm
+++ b/PVE/API2/Ceph.pm
@@ -1321,6 +1321,12 @@ __PACKAGE__->register_method ({
 		description => "The name of the pool. It must be unique.",
 		type => 'string',
 	    },
+	    force => {
+		description => "If true, destroys pool even if in use",
+		type => 'boolean',
+		optional => 1,
+		default => 0,
+	    }
 	},
     },
     returns => { type => 'null' },
@@ -1329,6 +1335,22 @@ __PACKAGE__->register_method ({
 
 	PVE::CephTools::check_ceph_inited();
 
+	# if not forced, destroy ceph pool only when no
+	# vm disks are on it anymore
+	if (!$param->{force}) {
+	    my $storagecfg = PVE::Storage::config();
+	    foreach my $storageid (keys %{$storagecfg->{ids}}) {
+		my $storage = $storagecfg->{ids}->{$storageid};
+		next if $storage->{type} ne 'rbd';
+		next if $storage->{pool} ne $param->{name};
+
+		# check if any vm disks are on the pool
+		my $res = PVE::Storage::vdisk_list($storagecfg, $storageid);
+		die "ceph pool '$param->{name}' still in use by storage '$storageid'\n"
+		    if @{$res->{$storageid}} != 0;
+	    }
+	}
+
 	my $rados = PVE::RADOS->new();
 	# fixme: '--yes-i-really-really-mean-it'
 	$rados->mon_command({ 
-- 
2.1.4





More information about the pve-devel mailing list