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

Aaron Lauterer a.lauterer at proxmox.com
Thu Feb 27 11:01:13 CET 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>
---

v1 -> v2: implemented the suggestions from Fabian [0]

[0] https://pve.proxmox.com/pipermail/pve-devel/2020-January/041359.html

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

diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 00f4884..af728a8 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -1576,4 +1576,28 @@ sub get_replicatable_volumes {
     return $volhash;
 }
 
+sub get_backup_volumes {
+    my ($class, $conf) = @_;
+
+    my $ret_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 @$ret_volumes, $data;
+    };
+
+    PVE::LXC::Config->foreach_mountpoint($conf, $test_mountpoint);
+
+    return $ret_volumes;
+}
+
 1;
diff --git a/src/PVE/VZDump/LXC.pm b/src/PVE/VZDump/LXC.pm
index 7d6aefd..f36e6d8 100644
--- a/src/PVE/VZDump/LXC.pm
+++ b/src/PVE/VZDump/LXC.pm
@@ -120,24 +120,25 @@ sub prepare {
     $task->{rootgid} = $rootgid;
 
     my $volids = $task->{volids} = [];
-    PVE::LXC::Config->foreach_mountpoint($conf, sub {
-	my ($name, $data) = @_;
-	my $volid = $data->{volume};
-	my $mount = $data->{mp};
-	my $type = $data->{type};
-
-	return if !$volid || !$mount;
-
-	if (!PVE::LXC::Config->mountpoint_backup_enabled($name, $data)) {
-	    push @$exclude_dirs, $mount;
-	    $self->loginfo("excluding $type mount point $name ('$mount') from backup");
-	    return;
+
+    my $mountpoint_info = PVE::LXC::Config->get_backup_volumes($conf);
+
+    foreach my $mp (@{$mountpoint_info}) {
+	my $name = $mp->{key};
+	my $data = $mp->{data};
+
+	next if !$data->{volume} || !$data->{mp};
+
+	if (!$mp->{included}) {
+	    push @$exclude_dirs, $data->{mp};
+	    $self->loginfo("excluding $data->{type} mount point $name ('$data->{mp}') from backup");
+	    next;
 	}
 
+	$self->loginfo("including mount point $name ('$data->{mp}') in backup");
 	push @$disks, $data;
-	push @$volids, $volid
-	    if $type eq 'volume';
-    });
+	push @$volids, $data->{volume} if $mp->{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