]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuMigrate.pm
migration: add missing use statements
[qemu-server.git] / PVE / QemuMigrate.pm
index f41c61f71f3c997d874f653005890a432daa0436..33d5b2d1057a8455397344a95276cc1eaa8e8103 100644 (file)
@@ -7,14 +7,17 @@ use IO::File;
 use IPC::Open2;
 use Time::HiRes qw( usleep );
 
+use PVE::AccessControl;
 use PVE::Cluster;
 use PVE::Format qw(render_bytes);
 use PVE::GuestHelpers qw(safe_boolean_ne safe_string_ne);
 use PVE::INotify;
+use PVE::JSONSchema;
 use PVE::RPCEnvironment;
 use PVE::Replication;
 use PVE::ReplicationConfig;
 use PVE::ReplicationState;
+use PVE::Storage::Plugin;
 use PVE::Storage;
 use PVE::StorageTunnel;
 use PVE::Tools;
@@ -224,7 +227,9 @@ sub prepare {
            }
        }
 
-       $self->{vm_was_paused} = 1 if PVE::QemuServer::vm_is_paused($vmid);
+       # Do not treat a suspended VM as paused, as it might wake up
+       # during migration and remain paused after migration finishes.
+       $self->{vm_was_paused} = 1 if PVE::QemuServer::vm_is_paused($vmid, 0);
     }
 
     my ($loc_res, $mapped_res, $missing_mappings_by_node) = PVE::QemuServer::check_local_resources($conf, 1);
@@ -253,6 +258,11 @@ sub prepare {
        }
     }
 
+    my $vga = PVE::QemuServer::parse_vga($conf->{vga});
+    if ($running && $vga->{'clipboard'} && $vga->{'clipboard'} eq 'vnc') {
+       die "VMs with 'clipboard' set to 'vnc' are not live migratable!\n";
+    }
+
     my $vollist = PVE::QemuServer::get_vm_volumes($conf);
 
     my $storages = {};
@@ -1448,6 +1458,8 @@ sub phase3_cleanup {
 
     my $tunnel = $self->{tunnel};
 
+    my $sourcevollist = PVE::QemuServer::get_vm_volumes($conf);
+
     if ($self->{volume_map} && !$self->{opts}->{remote}) {
        my $target_drives = $self->{target_drive};
 
@@ -1475,7 +1487,13 @@ sub phase3_cleanup {
            $self->log('info', "stopping NBD storage migration server on target.");
            # stop nbd server on remote vm - requirement for resume since 2.9
            if ($tunnel && $tunnel->{version} && $tunnel->{version} >= 2) {
-               PVE::Tunnel::write_tunnel($tunnel, 30, 'nbdstop');
+               eval {
+                   PVE::Tunnel::write_tunnel($tunnel, 30, 'nbdstop');
+               };
+               if (my $err = $@) {
+                   $self->log('err', $err);
+                   $self->{errors} = 1;
+               }
            } else {
                my $cmd = [@{$self->{rem_ssh}}, 'qm', 'nbdstop', $vmid];
 
@@ -1573,8 +1591,7 @@ sub phase3_cleanup {
 
     # always deactivate volumes - avoid lvm LVs to be active on several nodes
     eval {
-       my $vollist = PVE::QemuServer::get_vm_volumes($conf);
-       PVE::Storage::deactivate_volumes($self->{storecfg}, $vollist);
+       PVE::Storage::deactivate_volumes($self->{storecfg}, $sourcevollist);
     };
     if (my $err = $@) {
        $self->log('err', $err);