From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id DFF4562A37 for ; Tue, 27 Oct 2020 17:47:53 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D38D819218 for ; Tue, 27 Oct 2020 17:47:23 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 1064E191FE for ; Tue, 27 Oct 2020 17:47:22 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id CE01045F6F for ; Tue, 27 Oct 2020 17:47:21 +0100 (CET) From: Alwin Antreich To: pve-devel@lists.proxmox.com Date: Tue, 27 Oct 2020 17:47:14 +0100 Message-Id: <20201027164717.2001054-1-a.antreich@proxmox.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.012 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [ceph.pm] Subject: [pve-devel] [PATCH manager 1/4] ceph: add get api call for single pool X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Oct 2020 16:47:53 -0000 Information of a single pool can be queried. Signed-off-by: Alwin Antreich --- PVE/API2/Ceph.pm | 105 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm index c3a3091d..e44714f6 100644 --- a/PVE/API2/Ceph.pm +++ b/PVE/API2/Ceph.pm @@ -679,11 +679,13 @@ my $ceph_pool_common_options = sub { my ($nodefault) = shift; my $options = { name => { + title => 'Name', description => "The name of the pool. It must be unique.", type => 'string', }, size => { description => 'Number of replicas per object', + title => 'Size', type => 'integer', default => 3, optional => 1, @@ -692,6 +694,7 @@ my $ceph_pool_common_options = sub { }, min_size => { description => 'Minimum number of replicas per object', + title => 'Min Size', type => 'integer', default => 2, optional => 1, @@ -700,6 +703,7 @@ my $ceph_pool_common_options = sub { }, pg_num => { description => "Number of placement groups.", + title => 'PG Num', type => 'integer', default => 128, optional => 1, @@ -708,11 +712,13 @@ my $ceph_pool_common_options = sub { }, crush_rule => { description => "The rule to use for mapping object placement in the cluster.", + title => 'Crush Rule Name', type => 'string', optional => 1, }, application => { description => "The application of the pool.", + title => 'Application', default => 'rbd', type => 'string', enum => ['rbd', 'cephfs', 'rgw'], @@ -720,6 +726,7 @@ my $ceph_pool_common_options = sub { }, pg_autoscale_mode => { description => "The automatic PG scaling mode of the pool.", + title => 'PG Autoscale Mode', type => 'string', enum => ['on', 'off', 'warn'], default => 'warn', @@ -734,6 +741,7 @@ my $ceph_pool_common_options = sub { }; +# FIXME: use pools/{pool_name} with PVE 7.0 __PACKAGE__->register_method ({ name => 'createpool', path => 'pools', @@ -997,6 +1005,103 @@ __PACKAGE__->register_method ({ }}); +__PACKAGE__->register_method ({ + name => 'getpool', + path => 'pools/{name}', + method => 'GET', + description => "List pool settings.", + proxyto => 'node', + protected => 1, + permissions => { + check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1], + }, + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + name => { + description => "The name of the pool. It must be unique.", + type => 'string', + }, + verbose => { + type => 'boolean', + default => 0, + optional => 1, + description => "If enabled, will display additional data". + "(eg. statistics).", + }, + }, + }, + returns => { + type => "object", + properties => { + id => { type => 'integer', title => 'ID' }, + pgp_num => { type => 'integer', title => 'PGP num' }, + noscrub => { type => 'boolean', title => 'noscrub' }, + 'nodeep-scrub' => { type => 'boolean', title => 'nodeep-scrub' }, + nodelete => { type => 'boolean', title => 'nodelete' }, + nopgchange => { type => 'boolean', title => 'nopgchange' }, + nosizechange => { type => 'boolean', title => 'nosizechange' }, + write_fadvise_dontneed => { type => 'boolean', title => 'write_fadvise_dontneed' }, + hashpspool => { type => 'boolean', title => 'hashpspool' }, + use_gmt_hitset => { type => 'boolean', title => 'use_gmt_hitset' }, + fast_read => { type => 'boolean', title => 'Fast Read' }, + statistics => { type => 'object', title => 'Statistics', optional => 1 }, + %{ $ceph_pool_common_options->() }, + }, + }, + code => sub { + my ($param) = @_; + + PVE::Ceph::Tools::check_ceph_inited(); + + my $verbose = $param->{verbose}; + my $pool = $param->{name}; + + my $rados = PVE::RADOS->new(); + my $res = $rados->mon_command({ + prefix => 'osd pool get', + pool => "$pool", + var => 'all', + }); + + my $data = { + id => $res->{pool_id}, + size => $res->{size}, + min_size => $res->{min_size}, + pg_num => $res->{pg_num}, + pgp_num => $res->{pgp_num}, + crush_rule => $res->{crush_rule}, + pg_autoscale_mode => $res->{pg_autoscale_mode}, + noscrub => "$res->{noscrub}", + 'nodeep-scrub' => "$res->{'nodeep-scrub'}", + nodelete => "$res->{nodelete}", + nopgchange => "$res->{nopgchange}", + nosizechange => "$res->{nosizechange}", + write_fadvise_dontneed => "$res->{write_fadvise_dontneed}", + hashpspool => "$res->{hashpspool}", + use_gmt_hitset => "$res->{use_gmt_hitset}", + fast_read => "$res->{fast_read}", + }; + + if ($verbose) { + my $stats; + my $res = $rados->mon_command({ prefix => 'df' }); + + foreach my $d (@{$res->{pools}}) { + next if !$d->{stats}; + next if !defined($d->{name}) && !$d->{name} ne "$pool"; + $data->{statistics} = $d->{stats}; + } + + my $apps = $rados->mon_command({ prefix => "osd pool application get", pool => "$pool", }); + $data->{application} = @{ keys %$apps }[0]; + } + + return $data; + }}); + + __PACKAGE__->register_method ({ name => 'setpool', path => 'pools/{name}', -- 2.27.0