[pve-devel] [PATCH manager v2 4/7] ceph: mon destroy: refactor removal assertions

Dominik Csapak d.csapak at proxmox.com
Wed Jun 19 13:45:51 CEST 2019


Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* add mondir to parameters (was missing)
* replaced post if with normal if
* replaced '-d || die' with 'die if ! -d'

 PVE/API2/Ceph/MON.pm | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
index 2d61142e..928667f4 100644
--- a/PVE/API2/Ceph/MON.pm
+++ b/PVE/API2/Ceph/MON.pm
@@ -73,6 +73,19 @@ my $assert_mon_prerequisites = sub {
     }
 };
 
+my $assert_mon_can_remove = sub {
+    my ($monhash, $monlist, $monid, $mondir) = @_;
+
+    if (!(defined($monhash->{"mon.$monid"}) ||
+	  grep { $_->{name} && $_->{name} eq $monid } @$monlist))
+    {
+	die "no such monitor id '$monid'\n"
+    }
+
+    die "monitor filesystem '$mondir' does not exist on this node\n" if ! -d $mondir;
+    die "can't remove last monitor\n" if scalar(@$monlist) <= 1;
+};
+
 __PACKAGE__->register_method ({
     name => 'listmon',
     path => '',
@@ -306,16 +319,12 @@ __PACKAGE__->register_method ({
 	my $rados = PVE::RADOS->new();
 	my $monstat = $rados->mon_command({ prefix => 'mon_status' });
 	my $monlist = $monstat->{monmap}->{mons};
-
-	die "no such monitor id '$monid'\n"
-	    if !defined($cfg->{$monsection});
+	my $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, $rados);
 
 	my $ccname = PVE::Ceph::Tools::get_config('ccname');
-
 	my $mondir =  "/var/lib/ceph/mon/$ccname-$monid";
-	-d $mondir || die "monitor filesystem '$mondir' does not exist on this node\n";
 
-	die "can't remove last monitor\n" if scalar(@$monlist) <= 1;
+	$assert_mon_can_remove->($monhash, $monlist, $monid, $mondir);
 
 	my $worker = sub {
 	    my $upid = shift;
-- 
2.11.0





More information about the pve-devel mailing list