[pve-devel] [PATCH container] fix #1786: check for shared storage on clone

Wolfgang Bumiller w.bumiller at proxmox.com
Tue May 29 09:00:32 CEST 2018


Refuse to clone a container to a remote node when using
local storage.

Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
 src/PVE/API2/LXC.pm | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
index bce5fa3..f1bcdc4 100644
--- a/src/PVE/API2/LXC.pm
+++ b/src/PVE/API2/LXC.pm
@@ -1326,6 +1326,7 @@ __PACKAGE__->register_method({
 		die "unable to create CT $newid: config file already exists\n"
 		    if -f $conffile;
 
+		my $sharedvm = 1;
 		foreach my $opt (keys %$src_conf) {
 		    next if $opt =~ m/^unused\d+$/;
 
@@ -1342,6 +1343,10 @@ __PACKAGE__->register_method({
 			    my ($sid, $volname) = PVE::Storage::parse_volume_id($volid);
 			    $sid = $storage if defined($storage);
 			    my $scfg = PVE::Storage::storage_config($storecfg, $sid);
+			    if (!$scfg->{shared}) {
+				$sharedvm = 0;
+				warn "found non-shared volume: $volid\n" if $target;
+			    }
 
 			    $rpcenv->check($authuser, "/storage/$sid", ['Datastore.AllocateSpace']);
 
@@ -1373,6 +1378,8 @@ __PACKAGE__->register_method({
 			$newconf->{$opt} = $value;
 		    }
 		}
+		die "can't clone CT to node '$target' (CT uses local storage)\n"
+		    if $target && !$sharedvm;
 
 		# Replace the 'disk' lock with a 'create' lock.
 		$newconf->{lock} = 'create';
-- 
2.11.0





More information about the pve-devel mailing list