]> git.proxmox.com Git - pve-manager.git/commitdiff
ceph: move create/destroy pool to CephTools
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 23 Nov 2018 11:01:37 +0000 (12:01 +0100)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 23 Nov 2018 12:33:12 +0000 (13:33 +0100)
We will reuse this in the future, e.g., when creating a data and
metadata pool for CephFS.

Allow to pass a $rados object (to reuse it, as initializing is not
that cheap) but also create it if it's undefined, fro convenience.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/API2/Ceph.pm
PVE/CephTools.pm

index 9aac454b62c60272169a09ba33c310a97c86b7a3..c288906cb1b0f7f496b2169d3903b4fa1f5786fb 100644 (file)
@@ -1677,45 +1677,7 @@ __PACKAGE__->register_method ({
 
        my $worker = sub {
 
-           my $rados = PVE::RADOS->new();
-           $rados->mon_command({
-               prefix => "osd pool create",
-               pool => $pool,
-               pg_num => int($pg_num),
-               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,
-           });
+           PVE::CephTools::create_pool($pool, $param);
 
            if ($param->{add_storages}) {
                my $err;
@@ -1915,15 +1877,7 @@ __PACKAGE__->register_method ({
                }
            }
 
-           my $rados = PVE::RADOS->new();
-           # fixme: '--yes-i-really-really-mean-it'
-           $rados->mon_command({
-               prefix => "osd pool delete",
-               pool => $pool,
-               pool2 => $pool,
-               sure => '--yes-i-really-really-mean-it',
-               format => 'plain',
-           });
+           PVE::CephTools::destroy_pool($pool);
 
            if ($param->{remove_storages}) {
                my $err;
index 600243ca4551427d10622c5f6bef2fc231c53540..8a9afa84ef90d46c3356f174d3b612edf3692ca0 100644 (file)
@@ -7,6 +7,7 @@ use File::Path;
 use IO::File;
 
 use PVE::Tools qw(run_command dir_glob_foreach);
+use PVE::RADOS;
 
 my $ccname = 'ceph'; # ceph cluster name
 my $ceph_cfgdir = "/etc/ceph";
@@ -183,6 +184,76 @@ sub write_ceph_config {
     PVE::Tools::file_set_contents($pve_ceph_cfgpath, $out);
 }
 
+sub create_pool {
+    my ($pool, $param, $rados) = @_;
+
+    if (!defined($rados)) {
+       $rados = PVE::RADOS->new();
+    }
+
+    my $pg_num = $param->{pg_num} || 64;
+    my $size = $param->{size} || 3;
+    my $min_size = $param->{min_size} || 2;
+    my $application = $param->{application} // 'rbd';
+
+    $rados->mon_command({
+       prefix => "osd pool create",
+       pool => $pool,
+       pg_num => int($pg_num),
+       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,
+    });
+
+}
+
+sub destroy_pool {
+    my ($pool, $rados) = @_;
+
+    if (!defined($rados)) {
+       $rados = PVE::RADOS->new();
+    }
+
+    # fixme: '--yes-i-really-really-mean-it'
+    $rados->mon_command({
+       prefix => "osd pool delete",
+       pool => $pool,
+       pool2 => $pool,
+       sure => '--yes-i-really-really-mean-it',
+       format => 'plain',
+    });
+}
+
 sub setup_pve_symlinks {
     # fail if we find a real file instead of a link
     if (-f $ceph_cfgpath) {