On March 18, 2020 2:02 pm, Fabian Ebner wrote: > Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> > --- > > For VMs this already happens. > > When adding volumes to templates no such conversion to > base images happens yet (affects both VM/LXC). Because > templates are more-or-less supposed to be read-only it > probably makes sense to disallow adding volumes altogether. > Or should we bother and do conversion instead? > > When a volume with linked clones is moved with 'delete source' > then the volume will be copied over and the source volume does > not get deleted, but the source volume disappears from the config. > With the second patch it gets added as an unused volume instead. > > src/PVE/API2/LXC.pm | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm > index a5aa5fc..9eb52dc 100644 > --- a/src/PVE/API2/LXC.pm > +++ b/src/PVE/API2/LXC.pm > @@ -468,6 +468,13 @@ __PACKAGE__->register_method({ > return $rpcenv->fork_worker($workername, $vmid, $authuser, $realcmd); > }}); > > +sub assert_storeid_supports_templates { > + my ($scfg, $sid) = @_; > + > + die "Warning: Directory storage '$sid' does not support container > templates!\n" > + if $scfg->{ids}->{$sid}->{path}; > +} > +
so this lead me down quite a rabbit hole back to https://bugzilla.proxmox.com/show_bug.cgi?id=1778 I think the original fix that lead to this "dir storages don't support CT templates" was wrong - what we should do is error out early on attempts to do a linked clone of a volume on a directory storage (as that would create a qcow2 image, which containers don't support). having a template on directory storage is perfectly fine - you just can only do full clones, since .raw does not support anything else. could you take a look at how involved cleaning this up would be? > sub check_storage_supports_templates { > my ($conf) = @_; > > @@ -477,8 +484,7 @@ sub check_storage_supports_templates { > my ($ms, $mp) = @_; > > my ($sid) = PVE::Storage::parse_volume_id($mp->{volume}, 0); > - die "Warning: Directory storage '$sid' does not support container > templates!\n" > - if $scfg->{ids}->{$sid}->{path}; > + assert_storeid_supports_templates($scfg, $sid); > }); > }; > return $@ > @@ -1805,6 +1811,8 @@ __PACKAGE__->register_method({ > > my ($mpdata, $old_volid); > > + my $storage_cfg = PVE::Storage::config(); > + > PVE::LXC::Config->lock_config($vmid, sub { > my $conf = PVE::LXC::Config->load_config($vmid); > PVE::LXC::Config->check_lock($conf); > @@ -1823,6 +1831,8 @@ __PACKAGE__->register_method({ > die "you can't move a volume with snapshots and delete the source\n" > if $param->{delete} && > PVE::LXC::Config->is_volume_in_use_by_snapshots($conf, $old_volid); > > + assert_storeid_supports_templates($storage_cfg, $storage) if > PVE::LXC::Config->is_template($conf); > + > PVE::Tools::assert_if_modified($param->{digest}, $conf->{digest}); > > PVE::LXC::Config->set_lock($vmid, $lockname); > @@ -1833,7 +1843,6 @@ __PACKAGE__->register_method({ > PVE::Cluster::log_msg('info', $authuser, "move volume CT $vmid: > move --volume $mpkey --storage $storage"); > > my $conf = PVE::LXC::Config->load_config($vmid); > - my $storage_cfg = PVE::Storage::config(); > > my $new_volid; > > @@ -1843,7 +1852,13 @@ __PACKAGE__->register_method({ > my $source_storage = > PVE::Storage::parse_volume_id($old_volid); > my $movelimit = PVE::Storage::get_bandwidth_limit('move', > [$source_storage, $storage], $bwlimit); > $new_volid = PVE::LXC::copy_volume($mpdata, $vmid, > $storage, $storage_cfg, $conf, undef, $movelimit); > - $mpdata->{volume} = $new_volid; > + if (PVE::LXC::Config->is_template($conf)) { > + PVE::Storage::activate_volumes($storage_cfg, > [$new_volid]); > + my $template_volid = > PVE::Storage::vdisk_create_base($storage_cfg, $new_volid); > + $mpdata->{volume} = $template_volid; > + } else { > + $mpdata->{volume} = $new_volid; > + } > > PVE::LXC::Config->lock_config($vmid, sub { > my $digest = $conf->{digest}; > -- > 2.20.1 > > > _______________________________________________ > pve-devel mailing list > pve-devel@pve.proxmox.com > https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel