[pve-devel] [PATCH qemu-server 2/4] migrate: add remote parameter

Fabian Grünbichler f.gruenbichler at proxmox.com
Fri Mar 6 11:20:33 CET 2020


Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
 PVE/API2/Qemu.pm | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 24f0dfd..a3592ed 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -35,6 +35,7 @@ use PVE::API2::Qemu::Agent;
 use PVE::VZDump::Plugin;
 use PVE::DataCenterConfig;
 use PVE::SSHInfo;
+use PVE::RemoteConfig;
 
 BEGIN {
     if (!$ENV{PVE_GENERATING_DOCS}) {
@@ -3297,6 +3298,10 @@ __PACKAGE__->register_method({
 		description => "Target node.",
 		completion =>  \&PVE::Cluster::complete_migration_target,
             }),
+	    remote => {
+		type => 'string',
+		optional => 1,
+	    },
 	    online => {
 		type => 'boolean',
 		description => "Use online/live migration if VM is running. Ignored if VM is stopped.",
@@ -3354,9 +3359,17 @@ __PACKAGE__->register_method({
 
 	PVE::Cluster::check_cfs_quorum();
 
-	PVE::Cluster::check_node_exists($target);
+	my $targetip;
+
+	if ($param->{remote}) {
+	    my $remote_config = PVE::RemoteConfig->new();
+	    my (undef, $conn_args) = $remote_config->get_remote_info($param->{remote}, $target);
+	    $targetip = $conn_args->{host};
+	} else {
+	    PVE::Cluster::check_node_exists($target);
 
-	my $targetip = PVE::Cluster::remote_node_ip($target);
+	    $targetip = PVE::Cluster::remote_node_ip($target);
+	}
 
 	my $vmid = extract_param($param, 'vmid');
 
@@ -3389,14 +3402,18 @@ __PACKAGE__->register_method({
 
 	my $storecfg = PVE::Storage::config();
 
-	if( $param->{targetstorage}) {
-	    PVE::Storage::storage_check_node($storecfg, $param->{targetstorage}, $target);
-        } else {
-	    PVE::QemuServer::check_storage_availability($storecfg, $conf, $target);
+	if (!$param->{remote}) {
+	    if($param->{targetstorage}) {
+		PVE::Storage::storage_check_node($storecfg, $param->{targetstorage}, $target);
+            } else {
+		PVE::QemuServer::check_storage_availability($storecfg, $conf, $target);
+	    }
 	}
 
 	if (PVE::HA::Config::vm_is_ha_managed($vmid) && $rpcenv->{type} ne 'ha') {
 
+	    raise_param_exc({ remote => "Remote migration not supported for HA-managed VMs." });
+
 	    my $hacmd = sub {
 		my $upid = shift;
 
-- 
2.20.1





More information about the pve-devel mailing list