[pve-devel] [PATCH v5 container 2/2] vzdump: move include logic for mountpoints to method

Aaron Lauterer a.lauterer at proxmox.com
Wed May 6 11:57:24 CEST 2020


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.lauterer at proxmox.com>
---

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 34f657a..dc50a5d 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 $data = {};
+	my ($included, $reason) = $class->mountpoint_backup_enabled($key, $volume);
+
+	$data->{key} = $key;
+	$data->{included} = $included;
+	$data->{reason} = $reason;
+	$data->{data} = $volume;
+
+	push @$return_volumes, $data;
+    };
+
+    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 2d003d0..7f97a00 100644
--- a/src/PVE/VZDump/LXC.pm
+++ b/src/PVE/VZDump/LXC.pm
@@ -120,18 +120,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;
@@ -140,10 +146,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





More information about the pve-devel mailing list