[pve-devel] [PATCH v2 manager 1/5] api: ceph: add ceph/cfg path, deprecate ceph/config and ceph/configdb
Fabian Grünbichler
f.gruenbichler at proxmox.com
Mon Mar 20 09:35:44 CET 2023
On March 16, 2023 2:48 pm, 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 at proxmox.com>
other than the nit below, patches 1 & 2:
Acked-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
Reviewed-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
>
> changes since v1:
> * add this commit to rework the API
>
> PVE/API2/Ceph.pm | 15 ++++--
> PVE/API2/Ceph/Cfg.pm | 116 +++++++++++++++++++++++++++++++++++++++++
> PVE/API2/Ceph/Makefile | 1 +
> 3 files changed, 129 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..a00ef19c
> --- /dev/null
> +++ b/PVE/API2/Ceph/Cfg.pm
> @@ -0,0 +1,116 @@
> +package PVE::API2::Ceph::Cfg;
> +
> +use strict;
> +use warnings;
> +
> +use PVE::Ceph::Tools;
> +use PVE::Cluster qw(cfs_read_file cfs_write_file);
nit: not used by this patch, but only by later ones
maybe also a good time to evalute whether ceph.conf should be read via
cfs_read_file or file_get_contents, there seems to be some disagreement in this
series ;)
> +use PVE::JSONSchema qw(get_standard_option);
> +use PVE::RADOS;
> +use PVE::Tools qw(run_command file_get_contents file_set_contents extract_param);
> +
> +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],
> + },
> + 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 \
> --
> 2.30.2
>
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
>
More information about the pve-devel
mailing list