From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <f.ebner@proxmox.com>
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 6A45D70DE9
 for <pve-devel@lists.proxmox.com>; Tue,  6 Apr 2021 12:41:58 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
 by firstgate.proxmox.com (Proxmox) with ESMTP id 57E552C620
 for <pve-devel@lists.proxmox.com>; Tue,  6 Apr 2021 12:41:58 +0200 (CEST)
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 1ABFF2C606
 for <pve-devel@lists.proxmox.com>; Tue,  6 Apr 2021 12:41:57 +0200 (CEST)
Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1])
 by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D12B641F1F
 for <pve-devel@lists.proxmox.com>; Tue,  6 Apr 2021 12:41:56 +0200 (CEST)
From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Tue,  6 Apr 2021 12:41:50 +0200
Message-Id: <20210406104152.11014-1-f.ebner@proxmox.com>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.007 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 v4 manager 1/3] 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 <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
X-List-Received-Date: Tue, 06 Apr 2021 10:41:58 -0000

on a given node (and storage).

There is no datacenter/storage fallback for the bandwidth limit, so the default
can just be returned as is. While the bandwidth limit is a root-only option when
executing the backup, it still makes sense to return it for all users, so they
can see what's going to be used.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---

Changes from v3:
    * incorporated Thomas's feedback:
        * style fixes
        * return bwlimit for all users

 PVE/API2/VZDump.pm | 87 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/PVE/API2/VZDump.pm b/PVE/API2/VZDump.pm
index 44376106..b205bf8d 100644
--- a/PVE/API2/VZDump.pm
+++ b/PVE/API2/VZDump.pm
@@ -146,6 +146,93 @@ __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});
+	    for 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->{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