From: Alexandre Derumier via pve-devel <pve-devel@lists.proxmox.com>
To: pve-devel@lists.proxmox.com
Cc: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
Subject: [pve-devel] [PATCH pve-storage 08/13] storage: add rename_snapshot method
Date: Wed, 9 Jul 2025 18:21:57 +0200 [thread overview]
Message-ID: <mailman.1235.1752078171.395.pve-devel@lists.proxmox.com> (raw)
In-Reply-To: <20250709162202.2952597-1-alexandre.derumier@groupe-cyllene.com>
[-- Attachment #1: Type: message/rfc822, Size: 8545 bytes --]
From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH pve-storage 08/13] storage: add rename_snapshot method
Date: Wed, 9 Jul 2025 18:21:57 +0200
Message-ID: <20250709162202.2952597-13-alexandre.derumier@groupe-cyllene.com>
Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
ApiChangeLog | 3 +++
src/PVE/Storage.pm | 25 +++++++++++++++++++++++++
src/PVE/Storage/BTRFSPlugin.pm | 6 ++++++
src/PVE/Storage/ESXiPlugin.pm | 6 ++++++
src/PVE/Storage/LVMPlugin.pm | 6 ++++++
src/PVE/Storage/LvmThinPlugin.pm | 6 ++++++
src/PVE/Storage/Plugin.pm | 16 ++++++++++++++++
src/PVE/Storage/RBDPlugin.pm | 6 ++++++
src/PVE/Storage/ZFSPoolPlugin.pm | 6 ++++++
9 files changed, 80 insertions(+)
diff --git a/ApiChangeLog b/ApiChangeLog
index 2a01e3f..12eef1f 100644
--- a/ApiChangeLog
+++ b/ApiChangeLog
@@ -26,6 +26,9 @@ Future changes should be documented in here.
The parameter *can* be used if some extra actions need to be done at the storage
layer when the snapshot has already be done at qemu level when the vm is running.
+* Introduce rename_snapshot() plugin method
+ This method allow to rename a vm disk snapshot name to a different snapshot name.
+
## Version 11:
* Allow declaring storage features via plugin data
diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm
index 7f2da80..e0b79fa 100755
--- a/src/PVE/Storage.pm
+++ b/src/PVE/Storage.pm
@@ -2345,6 +2345,31 @@ sub rename_volume {
);
}
+sub rename_snapshot {
+ my ($cfg, $volid, $source_snap, $target_snap) = @_;
+
+ die "no volid provided\n" if !$volid;
+ die "no source or target snap provided\n" if !$source_snap && !$target_snap;
+
+ my ($storeid, $volname) = parse_volume_id($volid);
+
+ activate_storage($cfg, $storeid);
+
+ my $scfg = storage_config($cfg, $storeid);
+ my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
+
+ return $plugin->cluster_lock_storage(
+ $storeid,
+ $scfg->{shared},
+ undef,
+ sub {
+ return $plugin->rename_snapshot(
+ $scfg, $storeid, $volname, $source_snap, $target_snap,
+ );
+ },
+ );
+}
+
# Various io-heavy operations require io/bandwidth limits which can be
# configured on multiple levels: The global defaults in datacenter.cfg, and
# per-storage overrides. When we want to do a restore from storage A to storage
diff --git a/src/PVE/Storage/BTRFSPlugin.pm b/src/PVE/Storage/BTRFSPlugin.pm
index 8c79ea4..26eef2b 100644
--- a/src/PVE/Storage/BTRFSPlugin.pm
+++ b/src/PVE/Storage/BTRFSPlugin.pm
@@ -995,6 +995,12 @@ sub rename_volume {
return "${storeid}:$target_volname";
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not supported for $class";
+}
+
sub get_import_metadata {
return PVE::Storage::DirPlugin::get_import_metadata(@_);
}
diff --git a/src/PVE/Storage/ESXiPlugin.pm b/src/PVE/Storage/ESXiPlugin.pm
index e655d7b..66ef289 100644
--- a/src/PVE/Storage/ESXiPlugin.pm
+++ b/src/PVE/Storage/ESXiPlugin.pm
@@ -497,6 +497,12 @@ sub rename_volume {
die "renaming volumes is not supported for $class\n";
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not supported for $class";
+}
+
sub volume_export_formats {
my ($class, $scfg, $storeid, $volname, $snapshot, $base_snapshot, $with_snapshots) = @_;
diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
index 72eb0cd..2441e59 100644
--- a/src/PVE/Storage/LVMPlugin.pm
+++ b/src/PVE/Storage/LVMPlugin.pm
@@ -855,4 +855,10 @@ sub rename_volume {
return "${storeid}:${target_volname}";
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not implemented for $class";
+}
+
1;
diff --git a/src/PVE/Storage/LvmThinPlugin.pm b/src/PVE/Storage/LvmThinPlugin.pm
index e5df0b4..6bc76c9 100644
--- a/src/PVE/Storage/LvmThinPlugin.pm
+++ b/src/PVE/Storage/LvmThinPlugin.pm
@@ -468,4 +468,10 @@ sub volume_import_write {
);
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not supported for $class";
+}
+
1;
diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm
index da26c0c..6b2dc32 100644
--- a/src/PVE/Storage/Plugin.pm
+++ b/src/PVE/Storage/Plugin.pm
@@ -2046,6 +2046,22 @@ sub rename_volume {
return "${storeid}:${base}${target_vmid}/${target_volname}";
}
+=pod
+
+=head3 rename_snapshot
+
+ $plugin->rename_snapshot($scfg, $storeid, $volname, $source_snap, $target_snap)
+
+Rename a volume source snapshot C<$source_snap> to a target snapshot C<$target_snap>.
+
+=cut
+
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not implemented for $class";
+}
+
my sub blockdev_options_nbd_tcp {
my ($host, $port, $export) = @_;
diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm
index 38d61e9..ee33006 100644
--- a/src/PVE/Storage/RBDPlugin.pm
+++ b/src/PVE/Storage/RBDPlugin.pm
@@ -1055,4 +1055,10 @@ sub rename_volume {
return "${storeid}:${base_name}${target_volname}";
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not implemented for $class";
+}
+
1;
diff --git a/src/PVE/Storage/ZFSPoolPlugin.pm b/src/PVE/Storage/ZFSPoolPlugin.pm
index 9cdfa68..28d4795 100644
--- a/src/PVE/Storage/ZFSPoolPlugin.pm
+++ b/src/PVE/Storage/ZFSPoolPlugin.pm
@@ -895,4 +895,10 @@ sub rename_volume {
return "${storeid}:${base_name}${target_volname}";
}
+sub rename_snapshot {
+ my ($class, $scfg, $storeid, $volname, $source_snap, $target_snap) = @_;
+
+ die "rename_snapshot is not supported for $class";
+}
+
1;
--
2.39.5
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-07-09 16:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250709162202.2952597-1-alexandre.derumier@groupe-cyllene.com>
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 01/13] plugin: add qemu_img_create Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH qemu-server 1/4] qemu_img convert : add external snapshot support Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH qemu-server 2/4] blockdev: add backing_chain support Alexandre Derumier via pve-devel
2025-07-15 9:02 ` Wolfgang Bumiller
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 02/13] plugin: add qemu_img_create_qcow2_backed Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 03/13] plugin: add qemu_img_info Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH qemu-server 3/4] qcow2: add external snapshot support Alexandre Derumier via pve-devel
2025-07-15 13:21 ` Wolfgang Bumiller
2025-07-15 14:21 ` DERUMIER, Alexandre via pve-devel
2025-07-15 14:31 ` Wolfgang Bumiller
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 04/13] plugin: add qemu_img_measure Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH qemu-server 4/4] tests: fix efi vm-disk-100-0.raw -> vm-100-disk-0.raw Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 05/13] plugin: add qemu_img_resize Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 06/13] rbd && zfs : create_base : remove $running param from volume_snapshot Alexandre Derumier via pve-devel
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 07/13] storage: volume_snapshot: add $running param Alexandre Derumier via pve-devel
2025-07-09 16:21 ` Alexandre Derumier via pve-devel [this message]
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 09/13] storage: add volume_support_qemu_snapshot Alexandre Derumier via pve-devel
2025-07-15 11:33 ` Wolfgang Bumiller
2025-07-15 13:59 ` DERUMIER, Alexandre via pve-devel
[not found] ` <4756bd155509ba20a3a6bf16191f1a539ee5b23e.camel@groupe-cyllene.com>
2025-07-15 14:49 ` Wolfgang Bumiller
2025-07-15 15:38 ` DERUMIER, Alexandre via pve-devel
2025-07-16 10:21 ` Wolfgang Bumiller
2025-07-09 16:21 ` [pve-devel] [PATCH pve-storage 10/13] plugin: fix volname parsing Alexandre Derumier via pve-devel
2025-07-09 16:22 ` [pve-devel] [PATCH pve-storage 11/13] qcow2: add external snapshot support Alexandre Derumier via pve-devel
2025-07-09 16:22 ` [pve-devel] [PATCH pve-storage 12/13] lvmplugin: add qcow2 snapshot Alexandre Derumier via pve-devel
2025-07-09 16:22 ` [pve-devel] [PATCH pve-storage 13/13] tests: add lvmplugin test Alexandre Derumier via pve-devel
2025-07-16 15:15 ` [pve-devel] [PATCH-SERIES v8 pve-storage/qemu-server] add external qcow2 snapshot support Thomas Lamprecht
2025-07-17 8:01 ` DERUMIER, Alexandre via pve-devel
2025-07-17 14:49 ` Tiago Sousa via pve-devel
[not found] ` <1fddff1a-b806-475a-ac75-1dd0107d1013@eurotux.com>
2025-07-17 15:08 ` DERUMIER, Alexandre via pve-devel
[not found] ` <47b76678f969ba97926c85af4bf8e50c9dda161d.camel@groupe-cyllene.com>
2025-07-17 15:42 ` Tiago Sousa via pve-devel
[not found] ` <58c2db18-c2c2-4c91-9521-bdb42a302e93@eurotux.com>
2025-07-17 15:53 ` DERUMIER, Alexandre via pve-devel
2025-07-17 16:05 ` DERUMIER, Alexandre via pve-devel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mailman.1235.1752078171.395.pve-devel@lists.proxmox.com \
--to=pve-devel@lists.proxmox.com \
--cc=alexandre.derumier@groupe-cyllene.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox