]> git.proxmox.com Git - qemu-server.git/commitdiff
migrate: keep VM paused after migration if it was before
authorFabian Ebner <f.ebner@proxmox.com>
Fri, 18 Mar 2022 07:51:23 +0000 (08:51 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 21 Apr 2022 06:57:11 +0000 (08:57 +0200)
Also cannot issue a guest agent command in that case.

Reported in the community forum:
https://forum.proxmox.com/threads/106618

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
PVE/QemuMigrate.pm

index 104e62ceb471d4448586fefb70cd68f0e2152262..891edfb2e0c1c35e0e2667dd39de0557abfc0652 100644 (file)
@@ -158,6 +158,8 @@ sub prepare {
                $self->{forcecpu} = PVE::QemuServer::CPUConfig::get_cpu_from_running_vm($pid);
            }
        }
+
+       $self->{vm_was_paused} = 1 if PVE::QemuServer::vm_is_paused($vmid);
     }
 
     my $loc_res = PVE::QemuServer::check_local_resources($conf, 1);
@@ -1146,31 +1148,37 @@ sub phase3_cleanup {
            }
        }
 
-       # config moved and nbd server stopped - now we can resume vm on target
-       if ($tunnel && $tunnel->{version} && $tunnel->{version} >= 1) {
-           eval {
-               PVE::Tunnel::write_tunnel($tunnel, 30, "resume $vmid");
-           };
-           if (my $err = $@) {
-               $self->log('err', $err);
-               $self->{errors} = 1;
-           }
-       } else {
-           my $cmd = [@{$self->{rem_ssh}}, 'qm', 'resume', $vmid, '--skiplock', '--nocheck'];
-           my $logf = sub {
-               my $line = shift;
-               $self->log('err', $line);
-           };
-           eval { PVE::Tools::run_command($cmd, outfunc => sub {}, errfunc => $logf); };
-           if (my $err = $@) {
-               $self->log('err', $err);
-               $self->{errors} = 1;
+       if (!$self->{vm_was_paused}) {
+           # config moved and nbd server stopped - now we can resume vm on target
+           if ($tunnel && $tunnel->{version} && $tunnel->{version} >= 1) {
+               eval {
+                   PVE::Tunnel::write_tunnel($tunnel, 30, "resume $vmid");
+               };
+               if (my $err = $@) {
+                   $self->log('err', $err);
+                   $self->{errors} = 1;
+               }
+           } else {
+               my $cmd = [@{$self->{rem_ssh}}, 'qm', 'resume', $vmid, '--skiplock', '--nocheck'];
+               my $logf = sub {
+                   my $line = shift;
+                   $self->log('err', $line);
+               };
+               eval { PVE::Tools::run_command($cmd, outfunc => sub {}, errfunc => $logf); };
+               if (my $err = $@) {
+                   $self->log('err', $err);
+                   $self->{errors} = 1;
+               }
            }
-       }
 
-       if ($self->{storage_migration} && PVE::QemuServer::parse_guest_agent($conf)->{fstrim_cloned_disks} && $self->{running}) {
-           my $cmd = [@{$self->{rem_ssh}}, 'qm', 'guest', 'cmd', $vmid, 'fstrim'];
-           eval{ PVE::Tools::run_command($cmd, outfunc => sub {}, errfunc => sub {}) };
+           if (
+               $self->{storage_migration}
+               && PVE::QemuServer::parse_guest_agent($conf)->{fstrim_cloned_disks}
+               && $self->{running}
+           ) {
+               my $cmd = [@{$self->{rem_ssh}}, 'qm', 'guest', 'cmd', $vmid, 'fstrim'];
+               eval{ PVE::Tools::run_command($cmd, outfunc => sub {}, errfunc => sub {}) };
+           }
        }
     }