]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuMigrate.pm
remove $vmid param from print_drive
[qemu-server.git] / PVE / QemuMigrate.pm
index bc83816ac95a7053e699e6ff588bcf2e14de9202..27c5b7af7b42bd0979aec9dc5797d7b508c1070d 100644 (file)
@@ -11,6 +11,8 @@ use PVE::Tools;
 use PVE::Cluster;
 use PVE::Storage;
 use PVE::QemuServer;
+use PVE::QemuServer::Machine;
+use PVE::QemuServer::Monitor qw(mon_cmd);
 use Time::HiRes qw( usleep );
 use PVE::RPCEnvironment;
 use PVE::ReplicationConfig;
@@ -215,7 +217,7 @@ sub prepare {
        die "can't migrate running VM without --online\n" if !$online;
        $running = $pid;
 
-       $self->{forcemachine} = PVE::QemuServer::qemu_machine_pxe($vmid, $conf);
+       $self->{forcemachine} = PVE::QemuServer::Machine::qemu_machine_pxe($vmid, $conf);
 
     }
     my $loc_res = PVE::QemuServer::check_local_resources($conf, 1);
@@ -424,8 +426,7 @@ sub sync_disks {
            my ($sid, $volname) = PVE::Storage::parse_volume_id($volid);
            my $scfg =  PVE::Storage::storage_config($self->{storecfg}, $sid);
 
-           my $migratable = ($scfg->{type} eq 'dir') || ($scfg->{type} eq 'zfspool') ||
-               ($scfg->{type} eq 'lvmthin') || ($scfg->{type} eq 'lvm');
+           my $migratable = $scfg->{type} =~ /^(?:dir|zfspool|lvmthin|lvm)$/;
 
            die "can't migrate '$volid' - storage type '$scfg->{type}' not supported\n"
                if !$migratable;
@@ -436,21 +437,18 @@ sub sync_disks {
            }
        }
 
-       my $rep_volumes;
-
-       $self->log('info', "copying disk images");
-
        my $rep_cfg = PVE::ReplicationConfig->new();
-
        if (my $jobcfg = $rep_cfg->find_local_replication_job($vmid, $self->{node})) {
            die "can't live migrate VM with replicated volumes\n" if $self->{running};
+           $self->log('info', "replicating disk images");
            my $start_time = time();
-           my $logfunc = sub { my ($msg) = @_;  $self->log('info', $msg); };
-           $rep_volumes = PVE::Replication::run_replication(
+           my $logfunc = sub { $self->log('info', shift) };
+           $self->{replicated_volumes} = PVE::Replication::run_replication(
               'PVE::QemuConfig', $jobcfg, $start_time, $start_time, $logfunc);
-           $self->{replicated_volumes} = $rep_volumes;
        }
 
+       $self->log('info', "copying local disk images") if scalar(%$local_volumes);
+
        foreach my $volid (keys %$local_volumes) {
            my ($sid, $volname) = PVE::Storage::parse_volume_id($volid);
            my $targetsid = $override_targetsid // $sid;
@@ -458,11 +456,12 @@ sub sync_disks {
            if ($self->{running} && $ref eq 'config') {
                push @{$self->{online_local_volumes}}, $volid;
            } elsif ($ref eq 'generated') {
+               die "can't live migrate VM with local cloudinit disk. use a shared storage instead\n" if $self->{running};
                # skip all generated volumes but queue them for deletion in phase3_cleanup
                push @{$self->{volumes}}, $volid;
                next;
            } else {
-               next if $rep_volumes->{$volid};
+               next if $self->{replicated_volumes}->{$volid};
                push @{$self->{volumes}}, $volid;
                my $opts = $self->{opts};
                my $insecure = $opts->{migration_type} eq 'insecure';
@@ -550,7 +549,7 @@ sub phase2 {
 
     my $spice_ticket;
     if (PVE::QemuServer::vga_conf_has_spice($conf->{vga})) {
-       my $res = PVE::QemuServer::vm_mon_cmd($vmid, 'query-spice');
+       my $res = mon_cmd($vmid, 'query-spice');
        $spice_ticket = $res->{ticket};
     }
 
@@ -705,7 +704,7 @@ sub phase2 {
     $migrate_speed *= 1024;
     $self->log('info', "migrate_set_speed: $migrate_speed");
     eval {
-        PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate_set_speed", value => int($migrate_speed));
+       mon_cmd($vmid, "migrate_set_speed", value => int($migrate_speed));
     };
     $self->log('info', "migrate_set_speed error: $@") if $@;
 
@@ -714,7 +713,7 @@ sub phase2 {
     if (defined($migrate_downtime)) {
        $self->log('info', "migrate_set_downtime: $migrate_downtime");
        eval {
-           PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate_set_downtime", value => int($migrate_downtime*100)/100);
+           mon_cmd($vmid, "migrate_set_downtime", value => int($migrate_downtime*100)/100);
        };
        $self->log('info', "migrate_set_downtime error: $@") if $@;
     }
@@ -732,7 +731,7 @@ sub phase2 {
 
     $self->log('info', "set cachesize: $cachesize");
     eval {
-       PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate-set-cache-size", value => int($cachesize));
+       mon_cmd($vmid, "migrate-set-cache-size", value => int($cachesize));
     };
     $self->log('info', "migrate-set-cache-size error: $@") if $@;
 
@@ -748,8 +747,8 @@ sub phase2 {
        $self->log('info', "spice client_migrate_info");
 
        eval {
-           PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "client_migrate_info", protocol => 'spice',
-                                               hostname => $proxyticket, 'tls-port' => $spice_port,
+           mon_cmd($vmid, "client_migrate_info", protocol => 'spice',
+                                               hostname => $proxyticket, 'port' => 0, 'tls-port' => $spice_port,
                                                'cert-subject' => $subject);
        };
        $self->log('info', "client_migrate_info error: $@") if $@;
@@ -758,7 +757,7 @@ sub phase2 {
 
     $self->log('info', "start migrate command to $ruri");
     eval {
-        PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate", uri => $ruri);
+       mon_cmd($vmid, "migrate", uri => $ruri);
     };
     my $merr = $@;
     $self->log('info', "migrate uri => $ruri failed: $merr") if $merr;
@@ -776,7 +775,7 @@ sub phase2 {
        usleep($usleep);
        my $stat;
        eval {
-           $stat = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-migrate");
+           $stat = mon_cmd($vmid, "query-migrate");
        };
        if (my $err = $@) {
            $err_count++;
@@ -845,7 +844,7 @@ sub phase2 {
                    $migrate_downtime *= 2;
                    $self->log('info', "migrate_set_downtime: $migrate_downtime");
                    eval {
-                       PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate_set_downtime", value => int($migrate_downtime*100)/100);
+                       mon_cmd($vmid, "migrate_set_downtime", value => int($migrate_downtime*100)/100);
                    };
                    $self->log('info', "migrate_set_downtime error: $@") if $@;
                }
@@ -872,7 +871,7 @@ sub phase2_cleanup {
 
     $self->log('info', "migrate_cancel");
     eval {
-       PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate_cancel");
+       mon_cmd($vmid, "migrate_cancel");
     };
     $self->log('info', "migrate_cancel error: $@") if $@;
 
@@ -947,11 +946,11 @@ sub phase3_cleanup {
        if (my $err = $@) {
            eval { PVE::QemuServer::qemu_blockjobs_cancel($vmid, $self->{storage_migration_jobs}) };
            eval { PVE::QemuMigrate::cleanup_remotedisks($self) };
-           die "Failed to completed storage migration\n";
+           die "Failed to complete storage migration: $err\n";
        } else {
            foreach my $target_drive (keys %{$self->{target_drive}}) {
                my $drive = PVE::QemuServer::parse_drive($target_drive, $self->{target_drive}->{$target_drive}->{volid});
-               $conf->{$target_drive} = PVE::QemuServer::print_drive($vmid, $drive);
+               $conf->{$target_drive} = PVE::QemuServer::print_drive($drive);
                PVE::QemuConfig->write_config($vmid, $conf);
            }
        }
@@ -1023,7 +1022,7 @@ sub phase3_cleanup {
        if (PVE::QemuServer::vga_conf_has_spice($conf->{vga}) && $self->{running}) {
            $self->log('info', "Waiting for spice server migration");
            while (1) {
-               my $res = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, 'query-spice');
+               my $res = mon_cmd($vmid, 'query-spice');
                last if int($res->{'migrated'}) == 1;
                last if $timer > 50;
                $timer ++;