[pve-devel] [PATCH] copy_vm : add optional storage parameter

Alexandre Derumier aderumier at odiso.com
Tue Apr 30 07:08:27 CEST 2013


Optionnal target storage for full copy

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/API2/Qemu.pm |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 8a15abc..0fe0045 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -60,7 +60,7 @@ my $check_storage_access = sub {
 };
 
 my $check_storage_access_copy = sub {
-   my ($rpcenv, $authuser, $storecfg, $conf) = @_;
+   my ($rpcenv, $authuser, $storecfg, $conf, $storage) = @_;
 
    PVE::QemuServer::foreach_drive($conf, sub {
 	my ($ds, $drive) = @_;
@@ -80,6 +80,7 @@ my $check_storage_access_copy = sub {
 	} else {
 	    my ($sid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
 	    die "unable to copy arbitrary files\n" if !$sid;
+	    $sid = $storage if $storage;
 	    $rpcenv->check($authuser, "/storage/$sid", ['Datastore.AllocateSpace']);
 	}
     });
@@ -1806,6 +1807,10 @@ __PACKAGE__->register_method({
 		type => 'string', format => 'pve-poolid',
 		description => "Add the new VM to the specified pool.",
 	    },
+	    storage => get_standard_option('pve-storage-id', {
+		description => "Target storage for full copy.",
+		optional => 1,
+	    }),
 	    full => {
 		optional => 1,
 		type => 'boolean',
@@ -1838,6 +1843,8 @@ __PACKAGE__->register_method({
 	    $rpcenv->check_pool_exist($pool);
 	}
 
+	my $storage = extract_param($param, 'storage');
+
 	my $storecfg = PVE::Storage::config();
 
 	PVE::Cluster::check_cfs_quorum();
@@ -1857,7 +1864,7 @@ __PACKAGE__->register_method({
 
 	    die "Copy running VM $vmid not implemented\n" if $running;
 
-	    &$check_storage_access_copy($rpcenv, $authuser, $storecfg, $conf);
+	    &$check_storage_access_copy($rpcenv, $authuser, $storecfg, $conf, $storage);
 
 	    # fixme: snapshots??
 
@@ -1917,6 +1924,7 @@ __PACKAGE__->register_method({
 				$newvolid = PVE::Storage::vdisk_clone($storecfg,  $drive->{file}, $newid);
 			    } else {
 				my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file});
+				$storeid = $storage if $storage;
 				my $defformat = PVE::Storage::storage_default_format($storecfg, $storeid);
 				my $fmt = $drive->{format} || $defformat;
 
-- 
1.7.10.4



More information about the pve-devel mailing list