[pve-devel] [PATCH qemu-server 3/3] map vmid correctly for cloudinit on restore

Dominik Csapak d.csapak at proxmox.com
Wed Mar 27 11:15:46 CET 2019


one comment inline

On 3/26/19 3:10 PM, Mira Limbeck wrote:
> on restore the cloudinit disk is now changed to the correct vmid. in
> addition targetstorage is taken into account as well.
> 
> Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
> ---
>   PVE/QemuServer.pm | 23 ++++++++++++++++++++---
>   1 file changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index e60aa28..87252cf 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -6265,6 +6265,14 @@ sub restore_vma_archive {
>   		$storage_limits{$storeid} = $bwlimit;
>   
>   		$virtdev_hash->{$virtdev} = $devinfo->{$devname};
> +	    } elsif ($line =~ m/^(ide\d):\s*(\S*\/vm-\d+-cloudinit(.(qcow2|raw))?)\S+\s*$/) {

this should be more general since we also allow sata and scsi for cloud 
init disks

> +		my ($virtdev, $volid, $format) = ($1, $2, $4);
> +		my $d = {};
> +		$d->{volid} = $volid;
> +		$d->{format} = $format;
> +		$d->{size} = 4 * 1024 * 1024;
> +		$d->{storeid} = $opts->{storage} // PVE::Storage::parse_volume_id($volid);
> +		$virtdev_hash->{$virtdev} = $d;
>   	    }
>   	}
>   
> @@ -6321,6 +6329,7 @@ sub restore_vma_archive {
>   	my $map = {};
>   	foreach my $virtdev (sort keys %$virtdev_hash) {
>   	    my $d = $virtdev_hash->{$virtdev};
> +	    my $is_cloudinit = $d->{volid} ? $d->{volid} =~ m/vm-\d+-cloudinit/ : 0;
>   	    my $alloc_size = int(($d->{size} + 1024 - 1)/1024);
>   	    my $storeid = $d->{storeid};
>   	    my $scfg = PVE::Storage::storage_config($cfg, $storeid);
> @@ -6335,8 +6344,13 @@ sub restore_vma_archive {
>   	    my $supported = grep { $_ eq $d->{format} } @$validFormats;
>   	    $d->{format} = $defFormat if !$supported;
>   
> +	    my $name = undef;
> +	    if ($is_cloudinit) {
> +		$name = "vm-$vmid-cloudinit";
> +		$name .= ".qcow2" if $scfg->{path};
> +	    }
>   	    my $volid = PVE::Storage::vdisk_alloc($cfg, $storeid, $vmid,
> -						  $d->{format}, undef, $alloc_size);
> +						  $d->{format}, $name, $alloc_size);
>   	    print STDERR "new volume ID is '$volid'\n";
>   	    $d->{volid} = $volid;
>   	    my $path = PVE::Storage::path($cfg, $volid);
> @@ -6348,9 +6362,12 @@ sub restore_vma_archive {
>   		$write_zeros = 0;
>   	    }
>   
> -	    print $fifofh "${map_opts}format=$d->{format}:${write_zeros}:$d->{devname}=$path\n";
> +	    if (!$is_cloudinit) { # $d->{devname} undefined if it is cloudinit
> +		print $fifofh "${map_opts}format=$d->{format}:${write_zeros}:$d->{devname}=$path\n";
> +
> +		print "map '$d->{devname}' to '$path' (write zeros = ${write_zeros})\n";
> +	    }
>   
> -	    print "map '$d->{devname}' to '$path' (write zeros = ${write_zeros})\n";
>   	    $map->{$virtdev} = $volid;
>   	}
>   
> 





More information about the pve-devel mailing list