]> git.proxmox.com Git - pve-cluster.git/commitdiff
join API version: factor out checks and add info to outputs
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 25 Mar 2020 16:31:31 +0000 (17:31 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 25 Mar 2020 16:31:31 +0000 (17:31 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
data/PVE/API2/ClusterConfig.pm
data/PVE/CLI/pvecm.pm
data/PVE/Cluster/Setup.pm

index 205252fa06e52ffac39f6a901913aa1eed247202..7a4bce07169c15cfe982ea34f2c238ad6ee4abf7 100644 (file)
@@ -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();
 
index f205b8d38c04d3750252569176088d4bbbb4e89c..4b52dee814d207d048e1fffa4203b8a1d13da1ff 100755 (executable)
@@ -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];
index 72289c006424528a8c4456243c9ce03e382d55d5..1f064775af3cc4b2ac12a59d7d8abb7283f4b998 100644 (file)
@@ -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});