fix existing cloudinit volume not available for file_size_info

file_size_info can't find the file if it is not available, e.g.,
RBD storage with KRBD or LVM where the volume was not yet activated,
returns then 0, which we interpret as the disk not existing, thus
call vdisk_alloc which errors as the disk, in fact, really already exists.

With this patch we call activate_volume before trying
file_size_info, so if the volume exists we get it available and else
we can really create it.
If the disk does not exist and is created with vdisk_alloc we still
require an additional call to activate_volume for the new disk.

Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Mira Limbeck 2019-05-15 12:53:24 +02:00 committed by Thomas Lamprecht
parent 96f00fd866
commit 9680b09d64

View File

@ -32,6 +32,10 @@ sub commit_cloudinit_disk {
my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
my $format = PVE::QemuServer::qemu_img_format($scfg, $volname);
# required before file_size_info for ceph + krbd as it gets mapped too late otherwise
my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
eval { $plugin->activate_volume($storeid, $scfg, $volname) };
my $size = eval { PVE::Storage::file_size_info($iso_path) };
if ($size <= 0) {
$volname =~ m/(vm-$vmid-cloudinit(.\Q$format\E)?)/;
@ -39,10 +43,9 @@ sub commit_cloudinit_disk {
$size = 4 * 1024;
PVE::Storage::vdisk_alloc($storecfg, $storeid, $vmid, $format, $name, $size);
$size *= 1024; # vdisk alloc takes KB, qemu-img dd's osize takes byte
$plugin->activate_volume($storeid, $scfg, $volname);
}
my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
$plugin->activate_volume($storeid, $scfg, $volname);
eval {
run_command([['genisoimage', '-R', '-V', $label, $path],