diff --git a/PVE/Storage.pm b/PVE/Storage.pm index a46550c..fcfc6af 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -39,11 +39,11 @@ use PVE::Storage::DRBDPlugin; use PVE::Storage::PBSPlugin; # Storage API version. Icrement it on changes in storage API interface. -use constant APIVER => 3; +use constant APIVER => 4; # Age is the number of versions we're backward compatible with. # This is like having 'current=APIVER' and age='APIAGE' in libtool, # see https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html -use constant APIAGE => 2; +use constant APIAGE => 3; # load standard plugins PVE::Storage::DirPlugin->register(); @@ -286,13 +286,13 @@ sub volume_snapshot_delete { } sub volume_has_feature { - my ($cfg, $feature, $volid, $snap, $running) = @_; + my ($cfg, $feature, $volid, $snap, $running, $opts) = @_; my ($storeid, $volname) = parse_volume_id($volid, 1); if ($storeid) { my $scfg = storage_config($cfg, $storeid); my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); - return $plugin->volume_has_feature($scfg, $feature, $storeid, $volname, $snap, $running); + return $plugin->volume_has_feature($scfg, $feature, $storeid, $volname, $snap, $running, $opts); } elsif ($volid =~ m|^(/.+)$| && -e $volid) { return undef; } else { diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index 2232261..8c0dae1 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -828,7 +828,7 @@ sub storage_can_replicate { } sub volume_has_feature { - my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_; + my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running, $opts) = @_; my $features = { snapshot => { current => { qcow2 => 1}, snap => { qcow2 => 1} }, @@ -841,6 +841,11 @@ sub volume_has_feature { current => {qcow2 => 1, raw => 1, vmdk => 1} }, }; + # clone_image creates a qcow2 volume + return 0 if $feature eq 'clone' && + defined($opts->{valid_target_formats}) && + !(grep { $_ eq 'qcow2' } @{$opts->{valid_target_formats}}); + my ($vtype, $name, $vmid, $basename, $basevmid, $isBase, $format) = $class->parse_volname($volname);