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.laute...@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], + }, + 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@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel