[pve-devel] [PATCH qemu-server 1/2] clone: use better default for parameter 'full'

Dietmar Maurer dietmar at proxmox.com
Fri Mar 16 11:05:55 CET 2018


template => linked clone
normal VM => full clone

Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---
 PVE/API2/Qemu.pm | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index b1c6896..300e347 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -2476,12 +2476,10 @@ __PACKAGE__->register_method({
             }),
 	    storage => get_standard_option('pve-storage-id', {
 		description => "Target storage for full clone.",
-		requires => 'full',
 		optional => 1,
 	    }),
 	    'format' => {
-		description => "Target format for file storage.",
-		requires => 'full',
+		description => "Target format for file storage. Only valid for full clone.",
 		type => 'string',
 		optional => 1,
 	        enum => [ 'raw', 'qcow2', 'vmdk'],
@@ -2489,9 +2487,8 @@ __PACKAGE__->register_method({
 	    full => {
 		optional => 1,
 	        type => 'boolean',
-	        description => "Create a full copy of all disk. This is always done when " .
+	        description => "Create a full copy of all disks. This is always done when " .
 		    "you clone a normal VM. For VM templates, we try to create a linked clone by default.",
-		default => 0,
 	    },
 	    target => get_standard_option('pve-node', {
 		description => "Target node. Only allowed if the original VM is on shared storage.",
@@ -2572,6 +2569,17 @@ __PACKAGE__->register_method({
 	    die "snapshot '$snapname' does not exist\n"
 		if $snapname && !defined( $conf->{snapshots}->{$snapname});
 
+	    my $full = extract_param($param, 'full');
+	    if (!defined($full)) {
+		$full = !PVE::QemuConfig->is_template($conf);
+	    }
+
+	    die "parameter 'storage' not allowed for linked clones\n"
+		if defined($storage) && !$full;
+
+	    die "parameter 'format' not allowed for linked clones\n"
+		if defined($format) && !$full;
+
 	    my $oldconf = $snapname ? $conf->{snapshots}->{$snapname} : $conf;
 
 	    my $sharedvm = &$check_storage_access_clone($rpcenv, $authuser, $storecfg, $oldconf, $storage);
@@ -2610,7 +2618,7 @@ __PACKAGE__->register_method({
 		    if (PVE::QemuServer::drive_is_cdrom($drive, 1)) {
 			$newconf->{$opt} = $value; # simply copy configuration
 		    } else {
-			if ($param->{full} || PVE::QemuServer::drive_is_cloudinit($drive)) {
+			if ($full || PVE::QemuServer::drive_is_cloudinit($drive)) {
 			    die "Full clone feature is not supported for drive '$opt'\n"
 				if !PVE::Storage::volume_has_feature($storecfg, 'copy', $drive->{file}, $snapname, $running);
 			    $fullclone->{$opt} = 1;
-- 
2.11.0



More information about the pve-devel mailing list