[pve-devel] [PATCH qemu-server v2 03/15] fix #5284: api: clone_vm: assert content type support for target storage

Daniel Kral d.kral at proxmox.com
Tue Feb 11 17:08:02 CET 2025


Asserts whether the target storage supports storing VM images before
cloning a VM and its volumes to the target storage.

Without the check in place, a VMs volumes can be cloned to a storage,
which does not support VM images, but won't be able to start since any
attached volume must be stored on a supported storage.

Signed-off-by: Daniel Kral <d.kral at proxmox.com>
---
changes since v1:
- new! (was fixed without special notice in rfc)

 PVE/API2/Qemu.pm | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 52234afd..370036b8 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -3851,13 +3851,15 @@ __PACKAGE__->register_method({
 	    my $storecfg = PVE::Storage::config();
 
 	    if ($storage) {
-		# check if storage is enabled on local node
-		PVE::Storage::storage_check_enabled($storecfg, $storage);
+		# check if storage is enabled on local node and supports vm images
+		my $scfg = PVE::Storage::storage_check_enabled($storecfg, $storage);
+		raise_param_exc({ storage => "storage '$storage' does not support vm images" })
+		    if !$scfg->{content}->{images};
+
 		if ($target) {
 		    # check if storage is available on target node
 		    PVE::Storage::storage_check_enabled($storecfg, $storage, $target);
 		    # clone only works if target storage is shared
-		    my $scfg = PVE::Storage::storage_config($storecfg, $storage);
 		    die "can't clone to non-shared storage '$storage'\n"
 			if !$scfg->{shared};
 		}
-- 
2.39.5





More information about the pve-devel mailing list