]> git.proxmox.com Git - qemu-server.git/commitdiff
vzdump: move include logic for volumes to method
authorAaron Lauterer <a.lauterer@proxmox.com>
Mon, 22 Jun 2020 14:34:36 +0000 (16:34 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 24 Jun 2020 08:56:57 +0000 (10:56 +0200)
Move the logic which volumes 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@proxmox.com>
PVE/QemuConfig.pm
PVE/VZDump/QemuServer.pm

index 240fc0696b42147f5660a4587e8722b9acc3e68f..7f350b1e0eab535d2e2204afa6470e5fe4423102 100644 (file)
@@ -165,6 +165,38 @@ sub get_replicatable_volumes {
     return $volhash;
 }
 
+sub get_backup_volumes {
+    my ($class, $conf) = @_;
+
+    my $return_volumes = [];
+
+    my $test_volume = sub {
+       my ($key, $drive) = @_;
+
+       return if PVE::QemuServer::drive_is_cdrom($drive);
+
+       my $included = $drive->{backup} // 1;
+       my $reason = "backup=";
+       $reason .= defined($drive->{backup}) ? 'no' : 'yes';
+
+       if ($key =~ m/^efidisk/ && (!defined($conf->{bios}) || $conf->{bios} ne 'ovmf')) {
+           $included = 0;
+           $reason = "efidisk but no OMVF BIOS";
+       }
+
+       push @$return_volumes, {
+           key => $key,
+           included => $included,
+           reason => $reason,
+           volume_config => $drive,
+       };
+    };
+
+    PVE::QemuConfig->foreach_volume($conf, $test_volume);
+
+    return $return_volumes;
+}
+
 sub __snapshot_save_vmstate {
     my ($class, $vmid, $conf, $snapname, $storecfg, $statestorage, $suspend) = @_;
 
index 91df4552122efa51ff9f794f95604cf974bdbe0e..7174112c6bce60695e986eee41ac23ca7ca6ebe2 100644 (file)
@@ -69,37 +69,34 @@ sub prepare {
 
     my $vollist = [];
     my $drivehash = {};
-    PVE::QemuConfig->foreach_volume($conf, sub {
-       my ($ds, $drive) = @_;
+    my $backup_volumes = PVE::QemuConfig->get_backup_volumes($conf);
 
-       return if PVE::QemuServer::drive_is_cdrom($drive);
+    foreach my $volume (@{$backup_volumes}) {
+       my $name = $volume->{key};
+       my $volume_config= $volume->{volume_config};
+       my $volid = $volume_config->{file};
 
-       my $volid = $drive->{file};
-
-       if (defined($drive->{backup}) && !$drive->{backup}) {
-           $self->loginfo("exclude disk '$ds' '$volid' (backup=no)");
-           return;
-       } elsif ($self->{vm_was_running} && $drive->{iothread}) {
+       if (!$volume->{included}) {
+           $self->loginfo("exclude disk '$name' '$volid' ($volume->{reason})");
+           next;
+       } elsif ($self->{vm_was_running} && $volume_config->{iothread}) {
            if (!PVE::QemuServer::Machine::runs_at_least_qemu_version($vmid, 4, 0, 1)) {
-               die "disk '$ds' '$volid' (iothread=on) can't use backup feature with running QEMU " .
+               die "disk '$name' '$volid' (iothread=on) can't use backup feature with running QEMU " .
                    "version < 4.0.1! Either set backup=no for this drive or upgrade QEMU and restart VM\n";
            }
-       } elsif ($ds =~ m/^efidisk/ && (!defined($conf->{bios}) || $conf->{bios} ne 'ovmf')) {
-           $self->loginfo("excluding '$ds' (efidisks can only be backed up when BIOS is set to 'ovmf')");
-           return;
        } else {
-           my $log = "include disk '$ds' '$volid'";
-          if (defined $drive->{size}) {
-               my $readable_size = PVE::JSONSchema::format_size($drive->{size});
+           my $log = "include disk '$name' '$volid'";
+           if (defined(my $size = $volume_config->{size})) {
+               my $readable_size = PVE::JSONSchema::format_size($size);
                $log .= " $readable_size";
-          }
+           }
            $self->loginfo($log);
        }
 
        my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
        push @$vollist, $volid if $storeid;
-       $drivehash->{$ds} = $drive;
-    });
+       $drivehash->{$name} = $volume->{volume_config};
+    }
 
     PVE::Storage::activate_volumes($self->{storecfg}, $vollist);