[pve-devel] [PATCH qemu-server 3/3] api: create: implement extracting disks when needed for import-from
Fiona Ebner
f.ebner at proxmox.com
Thu Apr 18 12:01:57 CEST 2024
Am 18.04.24 um 11:58 schrieb Dominik Csapak:
> On 4/18/24 11:55, Fiona Ebner wrote:
>>
>>
>> Am 18.04.24 um 11:48 schrieb Dominik Csapak:
>>> On 4/18/24 11:41, Fiona Ebner wrote:
>>>> Am 16.04.24 um 15:19 schrieb Dominik Csapak:
>>>>> @@ -391,6 +392,13 @@ my sub create_disks : prototype($$$$$$$$$$) {
>>>>> $needs_creation = $live_import;
>>>>> + if (PVE::Storage::copy_needs_extraction($source)) { #
>>>>> needs extraction beforehand
>>>>> + print "extracting $source\n";
>>>>> + $source =
>>>>> PVE::Storage::extract_disk_from_import_file($source, $vmid);
>>>>> + print "finished extracting to $source\n";
>>>>> + push @$delete_sources, $source;
>>>>> + }
>>>>> +
>>>>
>>>> This breaks import from an absolute path: copy_needs_extraction()
>>>> expects to be called with a PVE-managed volid, so the above should be
>>>> moved into the if below.
>>>
>>> true, that will be fixed in the next iteration since we then get a
>>> pve managed volid back after extraction
>>> (see my answer to the cover letter)
>>>
>>
>> Sorry, I don't understand. The breakage is for import from an absolute
>> path, because copy_needs_extraction() cannot be called on an absolute
>> path. Why does it matter whether extraction returns a managed volid or
>> not?
>>
>
> sorry i was a step further along in my mind ^^
>
> the reason i put it here was that we got an absolute path back, which
> would have been complicated when i'd have put it in the branch
>
> so with my next patch i'll return a volid again and we can safely put
> it there as you suggested
>
Ah, I see :)
>>>>
>>>>> if (PVE::Storage::parse_volume_id($source, 1)) { #
>>>>> PVE-managed volume
>>>>> if ($live_import && $ds ne 'efidisk0') {
>>>>> my $path = PVE::Storage::path($storecfg, $source)
>>>>> @@ -514,13 +522,14 @@ my sub create_disks : prototype($$$$$$$$$$) {
>>>>> eval { PVE::Storage::vdisk_free($storecfg, $volid); };
>>>>> warn $@ if $@;
>>>>> }
>>>>> +
>>>>> PVE::QemuServer::Helpers::cleanup_extracted_images($delete_sources);
>>>>> die $err;
>>>>> }
>>>>> # don't return empty import mappings
>>>>> $live_import_mapping = undef if !%$live_import_mapping;
>>>>> - return ($vollist, $res, $live_import_mapping);
>>>>> + return ($vollist, $res, $live_import_mapping, $delete_sources);
>>>>> };
>>>>> my $check_cpu_model_access = sub {
>>>>
>>>> The second caller of create_disks(), i.e. when updating an existing VM,
>>>> is not updated to handle $delete_sources. (You can also do a disk
>>>> import-from from an OVA for an existing VM).
>>>>
>>>> When I tested that my suspicion is correct I didn't notice initially
>>>> that the temporary dirs were hidden, should we really make them so hard
>>>> to find?
>>>
>>> see my recent answer to the cover letter, this shouldn't be an issue
>>> when
>>> we put the extracted image into a valid image path on the storage
>>>
>>
>> But we should still attempt cleanup and not just ignore the
>> $delete_sources for the second caller.
>
> of course we have to clean up for the other case, i just meant
> accidentally left over images can be more easily found and deleted
>
> sorry for the confusion!
>
Sorry for not understanding ;) I see what you mean now, thanks for the
explanations!
More information about the pve-devel
mailing list