]> git.proxmox.com Git - pmg-api.git/commitdiff
Backup: split backup creation and creating tar
authorStoiko Ivanov <s.ivanov@proxmox.com>
Wed, 28 Oct 2020 18:54:20 +0000 (19:54 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 30 Oct 2020 06:09:40 +0000 (07:09 +0100)
In preparation for integrating PMG with PBS split the current creation of
a PMG backup into 2 methods:
* create all files in a backup in a target directory
* create a tarball from a backup in a temporary directory

use the changed method in the backup API call.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
src/PMG/API2/Backup.pm
src/PMG/Backup.pm

index 0bfcfc9f97a58bbf1a5ebd6ef576b082f7556657..08c06b5a9de36f6c6f1322281afa4dcacc9f8fa9 100644 (file)
@@ -131,7 +131,7 @@ __PACKAGE__->register_method ({
 
            print "starting backup to: $filename\n";
 
-           PMG::Backup::pmg_backup($filename, $param->{statistic});
+           PMG::Backup::pmg_backup_pack($filename, $param->{statistic});
 
            print "backup finished\n";
 
index 025bac290d729ea33721b90d7f34e7b27410dd3a..40c41f34b4be883733e5d0ea7a80731b660df557 100644 (file)
@@ -133,10 +133,11 @@ sub dumpstatdb {
 }
 
 sub pmg_backup {
-    my ($filename, $include_statistics) = @_;
+    my ($dirname, $include_statistics) = @_;
+
+    die "No backupdir provided!\n" if !defined($dirname);
 
     my $time = time;
-    my $dirname = "/tmp/proxbackup_$$.$time";
     my $dbfn = "Proxmox_ruledb.sql";
     my $statfn = "Proxmox_statdb.sql";
     my $tarfn = "config_backup.tar";
@@ -145,12 +146,7 @@ sub pmg_backup {
 
     eval {
 
-       my $targetdir = dirname($filename);
-       mkdir $targetdir; # try to create target dir
-       -d $targetdir ||
-           die "unable to access target directory '$targetdir'\n";
-
-       # create a temporary directory
+       # create backup directory
        mkdir $dirname;
 
        # dump the database first
@@ -197,7 +193,34 @@ sub pmg_backup {
        system("cd $dirname; md5sum $tarfn $dbfn $extradb $verfn> $sigfn") == 0 ||
            die "unable to create backup signature: ERROR";
 
-       system("rm -f $filename; tar czf $filename -C $dirname $verfn $sigfn $dbfn $extradb $tarfn") == 0 ||
+    };
+    my $err = $@;
+
+    if ($err) {
+       die $err;
+    }
+}
+
+sub pmg_backup_pack {
+    my ($filename, $include_statistics) = @_;
+
+    my $time = time;
+    my $dirname = "/tmp/proxbackup_$$.$time";
+
+    eval {
+
+       my $targetdir = dirname($filename);
+       mkdir $targetdir; # try to create target dir
+       -d $targetdir ||
+           die "unable to access target directory '$targetdir'\n";
+
+       rmtree $dirname;
+       # create backup directory
+       mkdir $dirname;
+
+       pmg_backup($dirname, $include_statistics);
+
+       system("rm -f $filename; tar czf $filename --strip-components=1 -C $dirname .") == 0 ||
            die "unable to create backup archive: ERROR";
     };
     my $err = $@;