mirror of
https://git.proxmox.com/git/pve-common
synced 2025-07-20 02:50:37 +00:00
use the pvecm mtunnel command to get remote migration ip
Ask the pvecm mtunnel command (was earlier in qm) if the remote side has an IP configured in a given migration_network denoted by a CIDR. If such a IP is available reset the nodeip and rem_ssh variables and check if we can connect to the other side with ssh public key authentication. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
77b2b96ffc
commit
35f8fae2c8
@ -82,6 +82,28 @@ sub cmd_logerr {
|
||||
return &$run_command_quiet_full($self, $cmd, 1, %param);
|
||||
}
|
||||
|
||||
sub get_remote_migration_ip {
|
||||
my ($self) = @_;
|
||||
|
||||
my $ip;
|
||||
|
||||
my $cmd = [@{$self->{rem_ssh}}, 'pvecm', 'mtunnel', '--get_migration_ip'];
|
||||
|
||||
push @$cmd, '--migration_network', $self->{opts}->{migration_network}
|
||||
if defined($self->{opts}->{migration_network});
|
||||
|
||||
PVE::Tools::run_command($cmd, outfunc => sub {
|
||||
my $line = shift;
|
||||
|
||||
# use non-restrictive regex for ip, its already checked by the remote side
|
||||
if ($line =~ m/^ip: '(\S+)'$/) {
|
||||
$ip = $1;
|
||||
}
|
||||
});
|
||||
|
||||
return $ip;
|
||||
}
|
||||
|
||||
my $eval_int = sub {
|
||||
my ($self, $func, @param) = @_;
|
||||
|
||||
@ -146,6 +168,26 @@ sub migrate {
|
||||
&$eval_int($self, sub { $self->{running} = $self->prepare($self->{vmid}); });
|
||||
die $@ if $@;
|
||||
|
||||
# get dedicated migration address from remote node, if set.
|
||||
# as a side effect this checks also if the other node can be accessed
|
||||
# through ssh and that it has quorum
|
||||
my $remote_migration_ip = $self->get_remote_migration_ip();
|
||||
|
||||
if (defined($remote_migration_ip)) {
|
||||
$nodeip = $remote_migration_ip;
|
||||
$self->{nodeip} = $remote_migration_ip;
|
||||
$self->{rem_ssh} = [ @ssh_cmd, "root\@$nodeip" ];
|
||||
|
||||
$self->log('info', "use dedicated network address for sending " .
|
||||
"migration traffic ($self->{nodeip})");
|
||||
|
||||
# test if we can connect to new IP
|
||||
my $cmd = [ @{$self->{rem_ssh}}, '/bin/true' ];
|
||||
eval { $self->cmd_quiet($cmd); };
|
||||
die "Can't connect to destination address ($self->{nodeip}) using " .
|
||||
"public key authentication\n" if $@;
|
||||
}
|
||||
|
||||
&$eval_int($self, sub { $self->phase1($self->{vmid}); });
|
||||
my $err = $@;
|
||||
if ($err) {
|
||||
|
Loading…
Reference in New Issue
Block a user