migration: test targetnode min version for cloudinit section

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
Alexandre Derumier 2022-06-22 13:51:59 +02:00 committed by Thomas Lamprecht
parent 31280b4b72
commit 9c88e85446
2 changed files with 32 additions and 0 deletions

View File

@ -122,6 +122,14 @@ sub prepare {
# test if VM exists
my $conf = $self->{vmconf} = PVE::QemuConfig->load_config($vmid);
my $version = PVE::QemuServer::Helpers::get_node_pvecfg_version($self->{node});
my $cloudinit_config = $conf->{cloudinit};
if (defined($cloudinit_config) && keys %$cloudinit_config &&
!PVE::QemuServer::Helpers::pvecfg_min_version($version, 7, 2, 5)) {
die "target node is too old and doesn't support new cloudinit section\n";
}
my $repl_conf = PVE::ReplicationConfig->new();
$self->{replication_jobcfg} = $repl_conf->find_local_replication_job($vmid, $self->{node});
$self->{is_replicated} = $repl_conf->check_for_existing_jobs($vmid, 1);

View File

@ -4,6 +4,7 @@ use strict;
use warnings;
use File::stat;
use JSON;
use PVE::INotify;
use PVE::ProcFSTools;
@ -161,4 +162,27 @@ sub config_aware_timeout {
return $timeout;
}
sub get_node_pvecfg_version {
my ($node) = @_;
my $nodes_version_info = PVE::Cluster::get_node_kv('version-info', $node);
return if !$nodes_version_info->{$node};
my $version_info = decode_json($nodes_version_info->{$node});
return $version_info->{version};
}
sub pvecfg_min_version {
my ($verstr, $major, $minor, $release) = @_;
return 0 if !$verstr;
if ($verstr =~ m/^(\d+)\.(\d+)-(\d+)/) {
return 1 if version_cmp($1, $major, $2, $minor, $3, $release) >= 0;
return 0;
}
die "internal error: cannot check version of invalid string '$verstr'";
}
1;