]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/PBSClient.pm
bump version to 8.2.1
[pve-common.git] / src / PVE / PBSClient.pm
index 4b5b485255e7a0836f19017606b456d0decf11ca..e63af03dfaa26f09a1f8735513eebd1f356665f8 100644 (file)
@@ -242,11 +242,13 @@ sub autogen_encryption_key {
     return file_get_contents($encfile);
 };
 
-# Snapshot or group parameters can be either just a string and will then refer to the root
-# namespace, or a tuple of `[namespace, snapshot]`.
-my sub split_namespaced_parameter : prototype($) {
-    my ($snapshot) = @_;
-    return (undef, $snapshot) if !ref($snapshot);
+# TODO remove support for namespaced parameters. Needs Breaks for pmg-api and libpve-storage-perl.
+# Deprecated! The namespace should be passed in as part of the config in new().
+# Snapshot or group parameters can be either just a string and will then default to the namespace
+# that's part of the initial configuration in new(), or a tuple of `[namespace, snapshot]`.
+my sub split_namespaced_parameter : prototype($$) {
+    my ($self, $snapshot) = @_;
+    return ($self->{scfg}->{namespace}, $snapshot) if !ref($snapshot);
 
     (my $namespace, $snapshot) = @$snapshot;
     return ($namespace, $snapshot);
@@ -258,7 +260,9 @@ sub get_snapshots {
 
     my $namespace;
     if (defined($group)) {
-       ($namespace, $group) = split_namespaced_parameter($group);
+       ($namespace, $group) = split_namespaced_parameter($self, $group);
+    } else {
+       $namespace = $self->{scfg}->{namespace};
     }
 
     my $param = [];
@@ -270,7 +274,7 @@ sub get_snapshots {
 # create a new PXAR backup of a FS directory tree - doesn't cross FS boundary
 # by default.
 sub backup_fs_tree {
-    my ($self, $root, $id, $pxarname, $cmd_opts, $namespace) = @_;
+    my ($self, $root, $id, $pxarname, $cmd_opts) = @_;
 
     die "backup-id not provided\n" if !defined($id);
     die "backup root dir not provided\n" if !defined($root);
@@ -284,7 +288,7 @@ sub backup_fs_tree {
 
     $cmd_opts //= {};
 
-    $cmd_opts->{namespace} = $namespace if defined($namespace);
+    $cmd_opts->{namespace} = $self->{scfg}->{namespace} if defined($self->{scfg}->{namespace});
 
     return run_raw_client_cmd($self, 'backup', $param, %$cmd_opts);
 };
@@ -296,7 +300,7 @@ sub restore_pxar {
     die "archive name not provided\n" if !defined($pxarname);
     die "restore-target not provided\n" if !defined($target);
 
-    (my $namespace, $snapshot) = split_namespaced_parameter($snapshot);
+    (my $namespace, $snapshot) = split_namespaced_parameter($self, $snapshot);
 
     my $param = [
        "$snapshot",
@@ -316,7 +320,7 @@ sub forget_snapshot {
 
     die "snapshot not provided\n" if !defined($snapshot);
 
-    (my $namespace, $snapshot) = split_namespaced_parameter($snapshot);
+    (my $namespace, $snapshot) = split_namespaced_parameter($self, $snapshot);
 
     return run_client_cmd($self, 'forget', ["$snapshot"], 1, undef, $namespace)
 };
@@ -326,7 +330,7 @@ sub prune_group {
 
     die "group not provided\n" if !defined($group);
 
-    (my $namespace, $group) = split_namespaced_parameter($group);
+    (my $namespace, $group) = split_namespaced_parameter($self, $group);
 
     # do nothing if no keep options specified for remote
     return [] if scalar(keys %$prune_opts) == 0;
@@ -371,14 +375,19 @@ sub status {
 };
 
 sub file_restore_list {
-    my ($self, $snapshot, $filepath, $base64) = @_;
+    my ($self, $snapshot, $filepath, $base64, $extra_params) = @_;
+
+    (my $namespace, $snapshot) = split_namespaced_parameter($self, $snapshot);
+    my $cmd = [ $snapshot, $filepath, "--base64", $base64 ? 1 : 0];
 
-    (my $namespace, $snapshot) = split_namespaced_parameter($snapshot);
+    if (my $timeout = $extra_params->{timeout}) {
+       push $cmd->@*, '--timeout', $timeout;
+    }
 
     return run_client_cmd(
        $self,
        "list",
-       [ $snapshot, $filepath, "--base64", $base64 ? 1 : 0 ],
+       $cmd,
        0,
        "proxmox-file-restore",
        $namespace,
@@ -407,9 +416,9 @@ sub file_restore_extract_prepare {
 
 # this blocks while data is transfered, call this from a background worker
 sub file_restore_extract {
-    my ($self, $output_file, $snapshot, $filepath, $base64) = @_;
+    my ($self, $output_file, $snapshot, $filepath, $base64, $tar) = @_;
 
-    (my $namespace, $snapshot) = split_namespaced_parameter($snapshot);
+    (my $namespace, $snapshot) = split_namespaced_parameter($self, $snapshot);
 
     my $ret = eval {
        local $SIG{ALRM} = sub { die "got timeout\n" };
@@ -421,10 +430,15 @@ sub file_restore_extract {
        my $fn = fileno($fh);
        my $errfunc = sub { print $_[0], "\n"; };
 
+       my $cmd = [ $snapshot, $filepath, "-", "--base64", $base64 ? 1 : 0];
+       if ($tar) {
+           push @$cmd, '--format', 'tar', '--zstd', 1;
+       }
+
        return run_raw_client_cmd(
            $self,
             "extract",
-           [ $snapshot, $filepath, "-", "--base64", $base64 ? 1 : 0 ],
+           $cmd,
            binary => "proxmox-file-restore",
            namespace => $namespace,
            errfunc => $errfunc,