[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