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 UTF8SMTPS id 4991C62E92 for ; Tue, 24 Nov 2020 14:53:25 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with UTF8SMTP id 41036DE34 for ; Tue, 24 Nov 2020 14:53:25 +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 UTF8SMTPS id 18E43DE27 for ; Tue, 24 Nov 2020 14:53:24 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with UTF8SMTP id D5460406E4; Tue, 24 Nov 2020 14:53:23 +0100 (CET) To: Proxmox VE development discussion , Alwin Antreich References: <20201124105811.1416723-1-a.antreich@proxmox.com> <20201124105811.1416723-3-a.antreich@proxmox.com> From: Dominik Csapak Message-ID: <89693b11-7a27-9242-7076-5404d3b21212@proxmox.com> Date: Tue, 24 Nov 2020 14:53:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Thunderbird/84.0 MIME-Version: 1.0 In-Reply-To: <20201124105811.1416723-3-a.antreich@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.319 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment NICE_REPLY_A -0.001 Looks like a legit reply (A) 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. [pools.pm] Subject: Re: [pve-devel] [PATCH manager v2 2/8] 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, 24 Nov 2020 13:53:25 -0000 comments inline On 11/24/20 11:58 AM, Alwin Antreich wrote: > Information of a single pool can be queried. > > Signed-off-by: Alwin Antreich > --- > PVE/API2/Ceph/POOLS.pm | 113 +++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 108 insertions(+), 5 deletions(-) > > diff --git a/PVE/API2/Ceph/POOLS.pm b/PVE/API2/Ceph/POOLS.pm > index 744f2bce..19fc1b7e 100644 > --- a/PVE/API2/Ceph/POOLS.pm > +++ b/PVE/API2/Ceph/POOLS.pm > @@ -18,11 +18,6 @@ use base qw(PVE::RESTHandler); > 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', > - }, why do you take that info here out? on every instance where you use the ceph_pool_common_options you add it again apart from the one return values (where you could remove it conditionally, like with 'nodefault') > size => { > description => 'Number of replicas per object', > title => 'Size', > @@ -218,6 +213,11 @@ __PACKAGE__->register_method ({ > additionalProperties => 0, > properties => { > node => get_standard_option('pve-node'), > + name => { > + title => 'Name', > + description => "The name of the pool. It must be unique.", > + type => 'string', > + }, > add_storages => { > description => "Configure VM and CT storage using the new pool.", > type => 'boolean', > @@ -374,6 +374,11 @@ __PACKAGE__->register_method ({ > additionalProperties => 0, > properties => { > node => get_standard_option('pve-node'), > + name => { > + title => 'Name', > + description => "The name of the pool. It must be unique.", > + type => 'string', > + }, > %{ $ceph_pool_common_options->('nodefault') }, > }, > }, > @@ -401,4 +406,102 @@ __PACKAGE__->register_method ({ > }}); > > > +__PACKAGE__->register_method ({ > + name => 'getpool', > + path => '{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", }); > + my @application = keys %$apps; > + $data->{application} = $application[0]; why only the first application? can there be more than one? > + } > + > + return $data; > + }}); > + > + > 1; >