From: Dominik Csapak <d.csapak@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
Aaron Lauterer <a.lauterer@proxmox.com>
Subject: Re: [pve-devel] [PATCH v3 manager 1/2] api: ceph: add ceph/cfg path, deprecate ceph/config and ceph/configdb
Date: Mon, 20 Mar 2023 14:35:10 +0100 [thread overview]
Message-ID: <9951c9d4-acfd-8143-531e-7c28296269ea@proxmox.com> (raw)
In-Reply-To: <20230320105055.797165-2-a.lauterer@proxmox.com>
one super small nit inline, rest LGTM
On 3/20/23 11:50, Aaron Lauterer wrote:
> Consolidating the different config paths lets us add more as needed
> without polluting our API with too many 'configxxx' endpoints.
>
> The config and configdb paths are renamed under the ceph/cfg path:
> * config -> raw (returns the ceph.conf file as is)
> * configdb -> db (returns the ceph config db contents)
>
> The old paths are still available and need to be dropped at some point.
>
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
> changes since v2:
> * removed unused import of PVE::Cluster
> * removed unused imports from PVE::Tools, only 'file_get_contents' is
> needed
>
> PVE/API2/Ceph.pm | 15 ++++--
> PVE/API2/Ceph/Cfg.pm | 115 +++++++++++++++++++++++++++++++++++++++++
> PVE/API2/Ceph/Makefile | 1 +
> 3 files changed, 128 insertions(+), 3 deletions(-)
> create mode 100644 PVE/API2/Ceph/Cfg.pm
>
> diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
> index 786a1870..3e3dd399 100644
> --- a/PVE/API2/Ceph.pm
> +++ b/PVE/API2/Ceph.pm
> @@ -18,6 +18,7 @@ use PVE::RPCEnvironment;
> use PVE::Storage;
> use PVE::Tools qw(run_command file_get_contents file_set_contents extract_param);
>
> +use PVE::API2::Ceph::Cfg;
> use PVE::API2::Ceph::OSD;
> use PVE::API2::Ceph::FS;
> use PVE::API2::Ceph::MDS;
> @@ -30,6 +31,11 @@ use base qw(PVE::RESTHandler);
>
> my $pve_osd_default_journal_size = 1024*5;
>
> +__PACKAGE__->register_method ({
> + subclass => "PVE::API2::Ceph::Cfg",
> + path => 'cfg',
> +});
> +
> __PACKAGE__->register_method ({
> subclass => "PVE::API2::Ceph::OSD",
> path => 'osd',
> @@ -88,6 +94,7 @@ __PACKAGE__->register_method ({
>
> my $result = [
> { name => 'cmd-safety' },
> + { name => 'cfg' },
> { name => 'config' },
> { name => 'configdb' },
> { name => 'crush' },
> @@ -109,6 +116,8 @@ __PACKAGE__->register_method ({
> return $result;
> }});
>
> +
> +# TODO: deprecrated, remove with PVE 8
> __PACKAGE__->register_method ({
> name => 'config',
> path => 'config',
> @@ -117,7 +126,7 @@ __PACKAGE__->register_method ({
> permissions => {
> check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1],
> },
> - description => "Get the Ceph configuration file.",
> + description => "Get the Ceph configuration file. Deprecated, please use `/nodes/{node}/ceph/cfg/raw.",
> parameters => {
> additionalProperties => 0,
> properties => {
> @@ -135,6 +144,7 @@ __PACKAGE__->register_method ({
>
> }});
>
> +# TODO: deprecrated, remove with PVE 8
> __PACKAGE__->register_method ({
> name => 'configdb',
> path => 'configdb',
> @@ -144,7 +154,7 @@ __PACKAGE__->register_method ({
> permissions => {
> check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1],
> },
> - description => "Get the Ceph configuration database.",
> + description => "Get the Ceph configuration database. Deprecated, please use `/nodes/{node}/ceph/cfg/db.",
> parameters => {
> additionalProperties => 0,
> properties => {
> @@ -179,7 +189,6 @@ __PACKAGE__->register_method ({
> return $res;
> }});
>
> -
> __PACKAGE__->register_method ({
> name => 'init',
> path => 'init',
> diff --git a/PVE/API2/Ceph/Cfg.pm b/PVE/API2/Ceph/Cfg.pm
> new file mode 100644
> index 00000000..f3c2589d
> --- /dev/null
> +++ b/PVE/API2/Ceph/Cfg.pm
> @@ -0,0 +1,115 @@
> +package PVE::API2::Ceph::Cfg;
> +
> +use strict;
> +use warnings;
> +
> +use PVE::Ceph::Tools;
> +use PVE::JSONSchema qw(get_standard_option);
> +use PVE::RADOS;
> +use PVE::Tools qw(file_get_contents);
> +
> +use base qw(PVE::RESTHandler);
> +
> +__PACKAGE__->register_method ({
> + name => 'index',
> + path => '',
> + method => 'GET',
> + description => "Directory index.",
> + permissions => { user => 'all' },
> + permissions => {
> + check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1],
> + },
nit: double 'permissions' property, also from where you copied it^^
could be fixed up too
also, we don't do it on other index calls either, but maybe we want
to start adding a "proxyto => 'node'" for index api calls too, so that
the api user sees the correct index for the node he retrieves?
does not really matter for this now, as we'd want to that either
for all or none anyway
> (+ parameters => {
> + additionalProperties => 0,
> + properties => {
> + node => get_standard_option('pve-node'),
> + },
> + },
> + returns => {
> + type => 'array',
> + items => {
> + type => "object",
> + properties => {},
> + },
> + links => [ { rel => 'child', href => "{name}" } ],
> + },
> + code => sub {
> + my ($param) = @_;
> +
> + my $result = [
> + { name => 'raw' },
> + { name => 'db' },
> + ];
> +
> + return $result;
> + }});
> +
> +__PACKAGE__->register_method ({
> + name => 'raw',
> + path => 'raw',
> + method => 'GET',
> + proxyto => 'node',
> + permissions => {
> + check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1],
> + },
> + description => "Get the Ceph configuration file.",
> + parameters => {
> + additionalProperties => 0,
> + properties => {
> + node => get_standard_option('pve-node'),
> + },
> + },
> + returns => { type => 'string' },
> + code => sub {
> + my ($param) = @_;
> +
> + PVE::Ceph::Tools::check_ceph_inited();
> +
> + my $path = PVE::Ceph::Tools::get_config('pve_ceph_cfgpath');
> + return file_get_contents($path);
> +
> + }});
> +
> +__PACKAGE__->register_method ({
> + name => 'db',
> + path => 'db',
> + method => 'GET',
> + proxyto => 'node',
> + protected => 1,
> + permissions => {
> + check => ['perm', '/', [ 'Sys.Audit', 'Datastore.Audit' ], any => 1],
> + },
> + description => "Get the Ceph configuration database.",
> + parameters => {
> + additionalProperties => 0,
> + properties => {
> + node => get_standard_option('pve-node'),
> + },
> + },
> + returns => {
> + type => 'array',
> + items => {
> + type => 'object',
> + properties => {
> + section => { type => "string", },
> + name => { type => "string", },
> + value => { type => "string", },
> + level => { type => "string", },
> + 'can_update_at_runtime' => { type => "boolean", },
> + mask => { type => "string" },
> + },
> + },
> + },
> + code => sub {
> + my ($param) = @_;
> +
> + PVE::Ceph::Tools::check_ceph_inited();
> +
> + my $rados = PVE::RADOS->new();
> + my $res = $rados->mon_command( { prefix => 'config dump', format => 'json' });
> + foreach my $entry (@$res) {
> + $entry->{can_update_at_runtime} = $entry->{can_update_at_runtime}? 1 : 0; # JSON::true/false -> 1/0
> + }
> +
> + return $res;
> + }});
> diff --git a/PVE/API2/Ceph/Makefile b/PVE/API2/Ceph/Makefile
> index 45daafda..be7b6926 100644
> --- a/PVE/API2/Ceph/Makefile
> +++ b/PVE/API2/Ceph/Makefile
> @@ -1,6 +1,7 @@
> include ../../../defines.mk
>
> PERLSOURCE= \
> + Cfg.pm \
> MGR.pm \
> MON.pm \
> OSD.pm \
next prev parent reply other threads:[~2023-03-20 13:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-20 10:50 [pve-devel] [PATCH v3 manager 0/2] rework ceph cfg api Aaron Lauterer
2023-03-20 10:50 ` [pve-devel] [PATCH v3 manager 1/2] api: ceph: add ceph/cfg path, deprecate ceph/config and ceph/configdb Aaron Lauterer
2023-03-20 13:35 ` Dominik Csapak [this message]
2023-03-20 10:50 ` [pve-devel] [PATCH v3 manager 2/2] ui: ceph config: use new ceph/cfg/ API endpoints Aaron Lauterer
2023-03-20 13:36 ` [pve-devel] [PATCH v3 manager 0/2] rework ceph cfg api Dominik Csapak
2023-03-20 14:52 ` [pve-devel] applied-series: " Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9951c9d4-acfd-8143-531e-7c28296269ea@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=a.lauterer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox