[pve-devel] [PATCH v2 storage 1/4] volume_has_feature: be aware that qcow2 does not work for lxc

Fabian Ebner f.ebner at proxmox.com
Mon Mar 23 09:01:22 CET 2020


On 19.03.20 16:53, Fabian Grünbichler wrote:
> On March 19, 2020 1:37 pm, Fabian Ebner wrote:
>> Relevant for the 'clone' feature, because Plugin.pm's clone_image
>> always produces qcow2. Also fixed style for neighboring if/else block.
>>
>> Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
>> ---
>>
>> Previous discussion: https://pve.proxmox.com/pipermail/pve-devel/2020-March/042472.html
>>
>> Changes from v1:
>>      * As Fabian G. pointed out, templates are not impossible
>>        on directory based storages, but linked cloning (currently)
>>        is. So fix the storage backend and get rid of the wrong checks.
>>
>> This solution doesn't need an API change. It does need
>> PVE::Cluster which is used by list_images already.
> 
> I really don't like this - hence my comment on v1. I also did not like
> it for list_images ;) pve-storage should not be concerned with which
> guests support which formats.
> 
> if we don't want to extend has_feature with a target_format for
> copy/clone, then I'd rather we work around this in pve-container. it's a
> single call site there anyway.
> 

Ok, I hadn't caught your last reply before sending out this patch.

There's actually two places that would need an extra check in LXC:
1. In clone_vm in PVE/API2/LXC.pm
2. In the has_feature function in PVE/LXC/Config.pm
(AFAIU clone_vm doesn't use has_feature, since it does other things 
while iterating the mount points)

I'm thinking about adding an $opts parameter to volume_has_feature and 
using the option valid_target_formats (as a list of acceptable formats 
for the target of the clone operation) as you suggested.

>>
>>   PVE/Storage/Plugin.pm | 14 ++++++++++----
>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
>> index 2232261..8baa410 100644
>> --- a/PVE/Storage/Plugin.pm
>> +++ b/PVE/Storage/Plugin.pm
>> @@ -844,13 +844,19 @@ sub volume_has_feature {
>>       my ($vtype, $name, $vmid, $basename, $basevmid, $isBase, $format) =
>>   	$class->parse_volname($volname);
>>   
>> +    my $vmlist = PVE::Cluster::get_vmlist();
>> +    my $vminfo = $vmlist->{ids}->{$vmid};
>> +
>>       my $key = undef;
>> -    if($snapname){
>> -        $key = 'snap';
>> -    }else{
>> -        $key =  $isBase ? 'base' : 'current';
>> +    if ($snapname) {
>> +	$key = 'snap';
>> +    } else {
>> +	$key = $isBase ? 'base' : 'current';
>>       }
>>   
>> +    # clone_images produces a qcow2 image
>> +    return 0 if defined($vminfo) && $vminfo->{type} eq 'lxc' && $feature eq 'clone';
>> +
>>       return 1 if defined($features->{$feature}->{$key}->{$format});
>>   
>>       return undef;
>> -- 
>> 2.20.1
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel at pve.proxmox.com
>> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>>
>>
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 




More information about the pve-devel mailing list