Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com> --- data/PVE/API2/ClusterConfig.pm | 7 +------ data/PVE/CLI/pvecm.pm | 7 +------ data/PVE/Cluster/Setup.pm | 30 ++++++++++++++++++++++-------- 3 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/data/PVE/API2/ClusterConfig.pm b/data/PVE/API2/ClusterConfig.pm index 205252f..7a4bce0 100644 --- a/data/PVE/API2/ClusterConfig.pm +++ b/data/PVE/API2/ClusterConfig.pm @@ -263,12 +263,7 @@ __PACKAGE__->register_method ({ my ($param) = @_; $param->{apiversion} //= 0; - if ($param->{apiversion} < (PVE::Cluster::Setup::JOIN_API_VERSION - - PVE::Cluster::Setup::JOIN_API_AGE_AS_CLUSTER)) { - die "unsupported old API version on joining node ($param->{apiversion}," - . " cluster node has " . PVE::Cluster::Setup::JOIN_API_VERSION - . "), please upgrade before joining\n"; - } + PVE::Cluster::Setup::assert_node_can_join_our_version($param->{apiversion}); PVE::Cluster::check_cfs_quorum(); diff --git a/data/PVE/CLI/pvecm.pm b/data/PVE/CLI/pvecm.pm index f205b8d..4b52dee 100755 --- a/data/PVE/CLI/pvecm.pm +++ b/data/PVE/CLI/pvecm.pm @@ -397,12 +397,7 @@ __PACKAGE__->register_method ({ chomp $remote_apiver; }, 'noerr' => 1); - if ($remote_apiver < (PVE::Cluster::Setup::JOIN_API_VERSION - - PVE::Cluster::Setup::JOIN_API_AGE_AS_JOINEE)) { - die "error: incompatible join API version on cluster ($remote_apiver," - . " local has " . PVE::Cluster::Setup::JOIN_API_VERSION . "). Make" - . " sure all nodes are up-to-date.\n"; - } + PVE::Cluster::Setup::assert_we_can_join_cluster_version($remote_apiver); $cmd = ['ssh', $host, '-o', 'BatchMode=yes', 'pvecm', 'addnode', $nodename, '--force', 1]; diff --git a/data/PVE/Cluster/Setup.pm b/data/PVE/Cluster/Setup.pm index 72289c0..1f06477 100644 --- a/data/PVE/Cluster/Setup.pm +++ b/data/PVE/Cluster/Setup.pm @@ -20,13 +20,31 @@ use PVE::Network; use PVE::Tools; use PVE::Certificate; -# Only relevant for pre-join checks, after join happened versions can differ +# relevant for joining or getting joined checks, after that versions in cluster can differ use constant JOIN_API_VERSION => 1; -# (APIVER-this) is oldest version a new node in addnode can have to be accepted +# (APIVER-this) is oldest version a new node in addnode can have and still be accepted use constant JOIN_API_AGE_AS_CLUSTER => 1; # (APIVER-this) is oldest version a cluster node can have to still try joining use constant JOIN_API_AGE_AS_JOINEE => 1; +sub assert_we_can_join_cluster_version { + my ($version) = @_; + my $min_version = JOIN_API_VERSION - JOIN_API_AGE_AS_JOINEE; + return if $version >= $min_version; + die "error: incompatible join API version on cluster ($version), local node" + ." has ". JOIN_API_VERSION ." and supports >= $min_version. Make sure" + ."all cluster nodes are up-to-date.\n"; +} + +sub assert_node_can_join_our_version { + my ($version) = @_; + my $min_version = JOIN_API_VERSION - JOIN_API_AGE_AS_CLUSTER; + return if $version >= $min_version; + die "error: unsupported old API version on joining node ($version), cluster" + ." node has ". JOIN_API_VERSION ." and supports >= $min_version. Please" + ." upgrade node before joining\n"; +} + my $pmxcfs_base_dir = PVE::Cluster::base_dir(); my $pmxcfs_auth_dir = PVE::Cluster::auth_dir(); @@ -684,13 +702,9 @@ sub join { # login raises an exception on failure, so if we get here we're good print "Login succeeded.\n"; - # check cluster join API version + print "check cluster join API version\n"; my $apiver = eval { $conn->get("/cluster/config/apiversion") } // 0; - - if ($apiver < (JOIN_API_VERSION - JOIN_API_AGE_AS_JOINEE)) { - die "error: incompatible join API version on cluster ($apiver, local has " - . JOIN_API_VERSION . "). Make sure all nodes are up-to-date.\n"; - } + assert_we_can_join_cluster_version($apiver); my $args = {}; $args->{force} = $param->{force} if defined($param->{force}); -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel