[pve-devel] [PATCH manager 1/2] ceph: split out pool set into own method
Alwin Antreich
a.antreich at proxmox.com
Wed Oct 14 16:03:51 CEST 2020
to reduce code duplication and make it easier to add more options for
pool commands.
Signed-off-by: Alwin Antreich <a.antreich at proxmox.com>
---
PVE/API2/Ceph.pm | 17 +++++++----
PVE/Ceph/Tools.pm | 74 +++++++++++++++++++++++++----------------------
2 files changed, 52 insertions(+), 39 deletions(-)
diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
index d7e5892c..48d0484f 100644
--- a/PVE/API2/Ceph.pm
+++ b/PVE/API2/Ceph.pm
@@ -751,14 +751,21 @@ __PACKAGE__->register_method ({
if !PVE::JSONSchema::parse_storage_id($pool);
}
- my $pg_num = $param->{pg_num} || 128;
- my $size = $param->{size} || 3;
- my $min_size = $param->{min_size} || 2;
- my $application = $param->{application} // 'rbd';
+ my $ceph_param = \%$param;
+ for my $item ('add_storages', 'name', 'node') {
+ # not ceph parameters
+ delete $ceph_param->{$item};
+ }
+
+ # pool defaults
+ $ceph_param->{pg_num} //= 128;
+ $ceph_param->{size} //= 3;
+ $ceph_param->{min_size} //= 2;
+ $ceph_param->{application} //= 'rbd';
my $worker = sub {
- PVE::Ceph::Tools::create_pool($pool, $param);
+ PVE::Ceph::Tools::create_pool($pool, $ceph_param);
if ($param->{add_storages}) {
my $err;
diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
index 2d8a4c1d..cc4238c9 100644
--- a/PVE/Ceph/Tools.pm
+++ b/PVE/Ceph/Tools.pm
@@ -202,6 +202,45 @@ sub check_ceph_enabled {
return 1;
}
+sub set_pool {
+ my ($pool, $param) = @_;
+
+ foreach my $setting (keys %$param) {
+ my $value = $param->{$setting};
+
+ my $command;
+ if ($setting eq 'application') {
+ $command = {
+ prefix => "osd pool application enable",
+ pool => "$pool",
+ app => "$value",
+ };
+ } else {
+ $command = {
+ prefix => "osd pool set",
+ pool => "$pool",
+ var => "$setting",
+ val => "$value",
+ format => 'plain',
+ };
+ }
+
+ my $rados = PVE::RADOS->new();
+ eval { $rados->mon_command($command); };
+ if ($@) {
+ print "$@";
+ } else {
+ delete $param->{$setting};
+ }
+ }
+
+ if ((keys %$param) > 0) {
+ my @missing = join(', ', keys %$param );
+ die "Could not set: @missing\n";
+ }
+
+}
+
sub create_pool {
my ($pool, $param, $rados) = @_;
@@ -210,9 +249,6 @@ sub create_pool {
}
my $pg_num = $param->{pg_num} || 128;
- my $size = $param->{size} || 3;
- my $min_size = $param->{min_size} || 2;
- my $application = $param->{application} // 'rbd';
$rados->mon_command({
prefix => "osd pool create",
@@ -221,37 +257,7 @@ sub create_pool {
format => 'plain',
});
- $rados->mon_command({
- prefix => "osd pool set",
- pool => $pool,
- var => 'min_size',
- val => "$min_size",
- format => 'plain',
- });
-
- $rados->mon_command({
- prefix => "osd pool set",
- pool => $pool,
- var => 'size',
- val => "$size",
- format => 'plain',
- });
-
- if (defined($param->{crush_rule})) {
- $rados->mon_command({
- prefix => "osd pool set",
- pool => $pool,
- var => 'crush_rule',
- val => $param->{crush_rule},
- format => 'plain',
- });
- }
-
- $rados->mon_command({
- prefix => "osd pool application enable",
- pool => $pool,
- app => $application,
- });
+ set_pool($pool, $param);
}
--
2.27.0
More information about the pve-devel
mailing list