Move the logic which mountpoints are included in the backup job to its
own method and adapt the VZDump code accordingly. This makes it possible
to develop other features around backup jobs.

Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com>
---
v5 -> v6: create hash with volume data directly in push call instead of
adding a new variable beforehand

v4->v5:
* use new `foreach_volume`
* change $ret_volumes to $return_volumes
* in PVE::VZDump::LXC change variables to better names and and use
  dedicated variables instead of hash when used more than once

 src/PVE/LXC/Config.pm | 24 ++++++++++++++++++++++++
 src/PVE/VZDump/LXC.pm | 25 ++++++++++++++++---------
 2 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 9fab175..a27b3e0 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -1549,4 +1549,28 @@ sub get_replicatable_volumes {
     return $volhash;
 }
 
+sub get_backup_volumes {
+    my ($class, $conf) = @_;
+
+    my $return_volumes = [];
+
+    my $test_mountpoint = sub {
+       my ($key, $volume) = @_;
+
+       my ($included, $reason) = $class->mountpoint_backup_enabled($key, 
$volume);
+
+
+       push @$return_volumes, {
+           key => $key,
+           included => $included,
+           reason => $reason,
+           data => $volume,
+       };
+    };
+
+    PVE::LXC::Config->foreach_volume($conf, $test_mountpoint);
+
+    return $return_volumes;
+}
+
 1;
diff --git a/src/PVE/VZDump/LXC.pm b/src/PVE/VZDump/LXC.pm
index 0dc60c4..0aeacfb 100644
--- a/src/PVE/VZDump/LXC.pm
+++ b/src/PVE/VZDump/LXC.pm
@@ -118,18 +118,24 @@ sub prepare {
     $task->{rootgid} = $rootgid;
 
     my $volids = $task->{volids} = [];
-    PVE::LXC::Config->foreach_volume($conf, sub {
-       my ($name, $data) = @_;
-       my $volid = $data->{volume};
+
+    my $backup_volumes = PVE::LXC::Config->get_backup_volumes($conf);
+
+    foreach my $current_volume (@{$backup_volumes}) {
+       my $name = $current_volume->{key};
+       my $included = $current_volume->{included};
+       my $data = $current_volume->{data};
+
+       my $volume = $data->{volume};
        my $mount = $data->{mp};
        my $type = $data->{type};
 
-       return if !$volid || !$mount;
+       next if !$volume || !$mount;
 
-       if (!PVE::LXC::Config->mountpoint_backup_enabled($name, $data)) {
+       if (!$included) {
            push @$exclude_dirs, $mount;
            $self->loginfo("excluding $type mount point $name ('$mount') from 
backup");
-           return;
+           next;
        }
 
        $data->{name} = $name;
@@ -138,10 +144,11 @@ sub prepare {
        if ($conf->{template} && !defined($data->{ro})) {
            $data->{ro} = 1;
        }
+
+       $self->loginfo("including mount point $name ('$mount') in backup");
        push @$disks, $data;
-       push @$volids, $volid
-           if $type eq 'volume';
-    });
+       push @$volids, $volume if $included;
+    }
 
     if ($mode eq 'snapshot') {
        if (!PVE::LXC::Config->has_feature('snapshot', $conf, $storage_cfg, 
undef, undef, 1)) {
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to