[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