qm migrate <vmid> <targetremotenode> --migration_type external [--targetstorage monpoolceph_vm] --online
Allow to migrate to an external cluster node. --targetstorage is optionnal, if not defined it's used same storagename than source --- PVE/API2/Qemu.pm | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 52f4a5f..64eaa0e 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -3046,7 +3046,7 @@ __PACKAGE__->register_method({ }, migration_type => { type => 'string', - enum => ['secure', 'insecure'], + enum => ['secure', 'insecure', 'external'], description => "Migration traffic is encrypted using an SSH tunnel by default. On secure, completely private networks this can be disabled to increase performance.", optional => 1, }, @@ -3085,7 +3085,7 @@ __PACKAGE__->register_method({ PVE::Cluster::check_cfs_quorum(); - PVE::Cluster::check_node_exists($target); + PVE::Cluster::check_node_exists($target) if $param->{migration_type} ne 'external'; my $targetip = PVE::Cluster::remote_node_ip($target); @@ -3094,6 +3094,13 @@ __PACKAGE__->register_method({ raise_param_exc({ targetstorage => "Live storage migration can only be done online." }) if !$param->{online} && $param->{targetstorage}; + raise_param_exc({ migration_type => "external migration can only be done online." }) + if !$param->{online} && $param->{migration_type} eq 'external'; + + raise_param_exc({ migration_type => "HA must be disable for external migration." }) + if PVE::HA::Config::vm_is_ha_managed($vmid) && $param->{migration_type} eq 'external'; + + raise_param_exc({ force => "Only root may use this option." }) if $param->{force} && $authuser ne 'root@pam'; @@ -3114,17 +3121,22 @@ __PACKAGE__->register_method({ if (PVE::QemuServer::check_running($vmid)) { die "cant migrate running VM without --online\n" if !$param->{online}; + } else { + die "vm need to be online for external migration" if $param->{migration_type} eq 'external'; } 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->{migration_type} ne 'external') { + + 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') { + if (PVE::HA::Config::vm_is_ha_managed($vmid) && $rpcenv->{type} ne 'ha' && $param->{migration_type} ne 'external') { my $hacmd = sub { my $upid = shift; -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel