]> git.proxmox.com Git - qemu-server.git/commitdiff
qm mtunnel/migrate: add resume VMID command
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 4 Aug 2017 12:54:04 +0000 (14:54 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 7 Aug 2017 07:23:56 +0000 (09:23 +0200)
and reformat the legacy SSH variant for readability.

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

index b70bb200c9461961201fc257d4fb31ee483affff..5dce10fa163863c47c91351adb0e18d91aa2dc31 100755 (executable)
@@ -280,6 +280,18 @@ __PACKAGE__->register_method ({
            if ($line =~ /^quit$/) {
                $tunnel_write->("OK");
                last;
+           } elsif ($line =~ /^resume (\d+)$/) {
+               my $vmid = $1;
+               if (PVE::QemuServer::check_running($vmid, 1)) {
+                   eval { PVE::QemuServer::vm_resume($vmid, 1, 1); };
+                   if ($@) {
+                       $tunnel_write->("ERR: resume failed - $@");
+                   } else {
+                       $tunnel_write->("OK");
+                   }
+               } else {
+                   $tunnel_write->("ERR: resume failed - VM $vmid not running");
+               }
            }
        }
 
index 43a3911984d7a303ad5e98ddebc4735a16869e4a..75935e0e2b78154d10493919a99c6ee92dd24050 100644 (file)
@@ -906,6 +906,8 @@ sub phase3_cleanup {
     my $conf = $self->{vmconf};
     return if $self->{phase2errors};
 
+    my $tunnel = $self->{tunnel};
+
     if ($self->{storage_migration}) {
        # finish block-job
        eval { PVE::QemuServer::qemu_drive_mirror_monitor($vmid, undef, $self->{storage_migration_jobs}); };
@@ -951,17 +953,27 @@ sub phase3_cleanup {
                $self->{errors} = 1;
            }
        }
+
        # config moved and nbd server stopped - now we can resume vm on target
-       my $cmd = [@{$self->{rem_ssh}}, 'qm', 'resume', $vmid, '--skiplock', '--nocheck'];
-       eval{ PVE::Tools::run_command($cmd, outfunc => sub {}, 
-               errfunc => sub {
-                   my $line = shift;
-                   $self->log('err', $line);
-               });
-       };
-       if (my $err = $@) {
-           $self->log('err', $err);
-           $self->{errors} = 1;
+       if ($tunnel && $tunnel->{version} && $tunnel->{version} >= 1) {
+           eval {
+               $self->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;
+           }
        }
     }