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 ESMTPS id 98685696B1 for ; Thu, 11 Mar 2021 10:22:44 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8ED5F256F4 for ; Thu, 11 Mar 2021 10:22:14 +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 ESMTPS id 667A1256DB for ; Thu, 11 Mar 2021 10:22:13 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 2B24C41BDF for ; Thu, 11 Mar 2021 10:22:13 +0100 (CET) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Thu, 11 Mar 2021 10:22:06 +0100 Message-Id: <20210311092208.27221-2-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311092208.27221-1-f.ebner@proxmox.com> References: <20210311092208.27221-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.002 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment 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 Subject: [pve-devel] [PATCH v3 manager 2/4] api: vzdump: add call to get currently configured vzdump defaults 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: Thu, 11 Mar 2021 09:22:44 -0000 on a given node (and storage). Signed-off-by: Fabian Ebner --- New in v3 PVE/API2/VZDump.pm | 89 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/PVE/API2/VZDump.pm b/PVE/API2/VZDump.pm index 44376106..109e178b 100644 --- a/PVE/API2/VZDump.pm +++ b/PVE/API2/VZDump.pm @@ -146,6 +146,95 @@ __PACKAGE__->register_method ({ return $rpcenv->fork_worker('vzdump', $taskid, $user, $worker); }}); +__PACKAGE__->register_method ({ + name => 'defaults', + path => 'defaults', + method => 'GET', + description => "Get the currently configured vzdump defaults.", + permissions => { + description => "The user needs 'Datastore.Audit' or " . + "'Datastore.AllocateSpace' permissions for the specified storage " . + "(or default storage if none specified). Some properties are only " . + "returned when the user has 'Sys.Audit' permissions for the node.", + user => 'all', + }, + proxyto => 'node', + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + storage => get_standard_option('pve-storage-id', { optional => 1 }), + }, + }, + returns => { + type => 'object', + additionalProperties => 0, + properties => PVE::VZDump::Common::json_config_properties(), + }, + code => sub { + my ($param) = @_; + + my $node = extract_param($param, 'node'); + my $storage = extract_param($param, 'storage'); + + my $rpcenv = PVE::RPCEnvironment::get(); + my $authuser = $rpcenv->get_user(); + + my $res = PVE::VZDump::read_vzdump_defaults(); + + $res->{storage} = $storage if defined($storage); + + if (!defined($res->{dumpdir}) && !defined($res->{storage})) { + $res->{storage} = 'local'; + } + + if (defined($res->{storage})) { + $rpcenv->check_any( + $authuser, + "/storage/$res->{storage}", + ['Datastore.Audit', 'Datastore.AllocateSpace'], + ); + + my $info = PVE::VZDump::storage_info($res->{storage}); + foreach my $key (qw(dumpdir prune-backups)) { + $res->{$key} = $info->{$key} if defined($info->{$key}); + } + } + + if (defined($res->{'prune-backups'})) { + $res->{'prune-backups'} = PVE::JSONSchema::print_property_string( + $res->{'prune-backups'}, + 'prune-backups', + ); + } + + $res->{mailto} = join(",", @{$res->{mailto}}) + if defined($res->{mailto}); + + $res->{'exclude-path'} = join(",", @{$res->{'exclude-path'}}) + if defined($res->{'exclude-path'}); + + # normal backup users don't need to know these + if (!$rpcenv->check($authuser, "/nodes/$node", ['Sys.Audit'], 1)) { + delete $res->{mailto}; + delete $res->{tmpdir}; + delete $res->{dumpdir}; + delete $res->{script}; + delete $res->{bwlimit}; + delete $res->{ionice}; + } + + my $pool = $res->{pool}; + if (defined($pool) && + !$rpcenv->check($authuser, "/pool/$pool", ['Pool.Allocate'], 1)) { + delete $res->{pool}; + } + + delete $res->{size}; # deprecated, to be dropped with PVE 7.0 + + return $res; + }}); + __PACKAGE__->register_method ({ name => 'extractconfig', path => 'extractconfig', -- 2.20.1