[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