all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH storage v4] fix #4272: btrfs: add rename feature
@ 2024-07-05 13:10 Maximiliano Sandoval
  2024-07-08 12:09 ` Aaron Lauterer
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Maximiliano Sandoval @ 2024-07-05 13:10 UTC (permalink / raw)
  To: pve-devel

Adds the ability to change the owner of a guest image.

Btrfs does not need special commands to rename a subvolume and this can
be achieved the same as in Storage/plugin.pm's rename_volume taking
special care of how the directory structure used by Btrfs.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
Differences from v3:
 - add qcow2 and vmdk support for rename
 - remove unused $ppath variable

Differences from v2:
 - use indices instead of assigning to undef 5 times

Differences from v1:
 - avoid assigning unused values of returned list to variables

 src/PVE/Storage/BTRFSPlugin.pm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/PVE/Storage/BTRFSPlugin.pm b/src/PVE/Storage/BTRFSPlugin.pm
index 42815cb..385ac30 100644
--- a/src/PVE/Storage/BTRFSPlugin.pm
+++ b/src/PVE/Storage/BTRFSPlugin.pm
@@ -618,6 +618,9 @@ sub volume_has_feature {
 	    base => { qcow2 => 1, raw => 1, vmdk => 1 },
 	    current => { qcow2 => 1, raw => 1, vmdk => 1 },
 	},
+	rename => {
+	    current => { qcow2 => 1, raw => 1, vmdk => 1 },
+	},
     };
 
     my ($vtype, $name, $vmid, $basename, $basevmid, $isBase, $format) = $class->parse_volname($volname);
@@ -930,4 +933,34 @@ sub volume_import {
     return "$storeid:$volname";
 }
 
+sub rename_volume {
+    my ($class, $scfg, $storeid, $source_volname, $target_vmid, $target_volname) = @_;
+    die "no path found\n" if !$scfg->{path};
+
+    my $format = ($class->parse_volname($source_volname))[6];
+
+    if ($format ne 'raw' && $format ne 'subvol') {
+       return $class->SUPER::rename_volume($scfg, $storeid, $source_volname, $target_vmid, $target_volname);
+    }
+
+    $target_volname = $class->find_free_diskname($storeid, $scfg, $target_vmid, $format, 1)
+	if !$target_volname;
+    $target_volname = "$target_vmid/$target_volname";
+
+    my $basedir = $class->get_subdir($scfg, 'images');
+
+    mkpath "${basedir}/${target_vmid}";
+    my $source_dir = raw_name_to_dir($source_volname);
+    my $target_dir = raw_name_to_dir($target_volname);
+
+    my $old_path = "${basedir}/${source_dir}";
+    my $new_path = "${basedir}/${target_dir}";
+
+    die "target volume '${target_volname}' already exists\n" if -e $new_path;
+    rename $old_path, $new_path ||
+	die "rename '$old_path' to '$new_path' failed - $!\n";
+
+    return "${storeid}:$target_volname";
+}
+
 1
-- 
2.39.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-09-06 17:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-05 13:10 [pve-devel] [PATCH storage v4] fix #4272: btrfs: add rename feature Maximiliano Sandoval
2024-07-08 12:09 ` Aaron Lauterer
2024-08-19  9:22 ` Maximiliano Sandoval
2024-09-02 14:00   ` Maximiliano Sandoval
2024-09-06 17:05 ` [pve-devel] applied: " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal