[pve-devel] [PATCH v2 qemu-server 2/3] fix #2100: ignore cloudinit drive on offline migration

Mira Limbeck m.limbeck at proxmox.com
Fri Mar 29 16:32:04 CET 2019


disk is not copied to the target node but still deleted on cleanup
(phase3_cleanup).

Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
Tested-by: Dominik Csapak <d.csapak at proxmox.com>
---
 PVE/QemuMigrate.pm | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index ee605d8..6bb19db 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -246,6 +246,7 @@ sub prepare {
 		if !$plugin->check_connection($sid, $scfg);
 	} else {
 	    # only activate if not shared
+	    next if ($volid =~ m/vm-\d+-cloudinit/);
 	    push @$need_activate, $volid;
 	}
     }
@@ -353,7 +354,13 @@ sub sync_disks {
 
 	    $local_volumes->{$volid}->{ref} = $attr->{referenced_in_config} ? 'config' : 'snapshot';
 
-	    die "local cdrom image\n" if $attr->{cdrom};
+	    if ($attr->{cdrom}) {
+		if ($volid =~ /vm-\d+-cloudinit/) {
+		    $local_volumes->{$volid}->{ref} = 'generated';
+		    return;
+		}
+		die "local cdrom image\n";
+	    }
 
 	    my ($path, $owner) = PVE::Storage::path($self->{storecfg}, $volid);
 
@@ -394,6 +401,8 @@ sub sync_disks {
 		$self->log('info', "found local disk '$vol' (in current VM config)\n");
 	    } elsif ($ref eq 'snapshot') {
 		$self->log('info', "found local disk '$vol' (referenced by snapshot(s))\n");
+	    } elsif ($ref eq 'generated') {
+		$self->log('info', "found generated disk '$vol' (in current VM config)\n");
 	    } else {
 		$self->log('info', "found local disk '$vol'\n");
 	    }
@@ -445,8 +454,13 @@ sub sync_disks {
 	foreach my $volid (keys %$local_volumes) {
 	    my ($sid, $volname) = PVE::Storage::parse_volume_id($volid);
 	    my $targetsid = $override_targetsid // $sid;
-	    if ($self->{running} && $local_volumes->{$volid}->{ref} eq 'config') {
+	    my $ref = $local_volumes->{$volid}->{ref};
+	    if ($self->{running} && $ref eq 'config') {
 		push @{$self->{online_local_volumes}}, $volid;
+	    } elsif ($ref eq 'generated') {
+		# skip all generated volumes but queue them for deletion in phase3_cleanup
+		push @{$self->{volumes}}, $volid;
+		next;
 	    } else {
 		next if $rep_volumes->{$volid};
 		push @{$self->{volumes}}, $volid;
-- 
2.11.0





More information about the pve-devel mailing list