]> git.proxmox.com Git - qemu-server.git/commitdiff
vzdump: add master key support
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 28 May 2021 12:09:53 +0000 (14:09 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 2 Jun 2021 14:49:00 +0000 (16:49 +0200)
running outdated VMs without master key support will generate a warning
but proceed with a backup without encrypted key upload.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
PVE/VZDump/QemuServer.pm

index efa60e6b521964a5becb31f5d7dd737839d641dd..44b705faf5274f55eeb61dfe143e93e23734a603 100644 (file)
@@ -440,6 +440,7 @@ sub archive_pbs {
     my $repo = PVE::PBSClient::get_repository($scfg);
     my $password = PVE::Storage::PBSPlugin::pbs_get_password($scfg, $opts->{storage});
     my $keyfile = PVE::Storage::PBSPlugin::pbs_encryption_key_file_name($scfg, $opts->{storage});
+    my $master_keyfile = PVE::Storage::PBSPlugin::pbs_master_pubkey_file_name($scfg, $opts->{storage});
 
     my $diskcount = scalar(@{$task->{disks}});
     # proxmox-backup-client can only handle raw files and block devs
@@ -494,6 +495,12 @@ sub archive_pbs {
            }
        }
 
+       if (!defined($qemu_support->{"pbs-masterkey"}) && -e $master_keyfile) {
+           $self->loginfo("WARNING: backup target is configured with master key, but running QEMU version does not support master keys.");
+           $self->loginfo("Please make sure you've installed the latest version and the VM has been restarted to use master key feature.");
+           $master_keyfile = undef; # skip rest of master key handling below
+       }
+
        my $fs_frozen = $self->qga_fs_freeze($task, $vmid);
 
        my $params = {
@@ -512,7 +519,13 @@ sub archive_pbs {
            $self->loginfo("enabling encryption");
            $params->{keyfile} = $keyfile;
            $params->{encrypt} = JSON::true;
+           if (defined($master_keyfile) && -e $master_keyfile) {
+               $self->loginfo("enabling master key feature");
+               $params->{"master-keyfile"} = $master_keyfile;
+           }
        } else {
+           $self->loginfo("WARNING: backup target is configured with master key, but this backup is not encrypted - master key settings will be ignored!")
+               if defined($master_keyfile) && -e $master_keyfile;
            $params->{encrypt} = JSON::false;
        }