diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtil.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtil.java index 00625f6e076d..b360bb696a8d 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtil.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtil.java @@ -348,9 +348,10 @@ public static boolean clusterNodeVersionMatches(final String version, Pair clusterVersionMatchesAndValue = clusterNodeVersionMatches(result, version); if (Boolean.TRUE.equals(clusterVersionMatchesAndValue.first())) { KubernetesClusterVmMapVO vmMapVO = vmMapDao.getClusterMapFromVmId(vmId); - String newNodeVersion = clusterVersionMatchesAndValue.second(); - LOGGER.debug(String.format("Updating node %s Kubernetes version to %s", hostName, newNodeVersion)); - vmMapVO.setNodeVersion(newNodeVersion); + // Record the version in the form a new node gets, not the command output, which ends with a + // newline and may hold more than the version + LOGGER.debug(String.format("Updating node %s Kubernetes version to %s", hostName, version)); + vmMapVO.setNodeVersion(version); vmMapDao.update(vmMapVO.getId(), vmMapVO); return true; } diff --git a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java index 329f9b0e42ad..8e2f0f8c1a20 100644 --- a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java +++ b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java @@ -16,10 +16,17 @@ // under the License. package com.cloud.kubernetes.cluster.utils; +import java.io.File; + +import com.cloud.kubernetes.cluster.KubernetesClusterVmMapVO; +import com.cloud.kubernetes.cluster.dao.KubernetesClusterVmMapDao; import com.cloud.utils.Pair; +import com.cloud.utils.ssh.SshHelper; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) @@ -52,4 +59,23 @@ public void testClusterNodeVersionMatches() { executeThrowAndTestVersionMatch(); } + + @Test + public void testClusterNodeVersionMatchesRecordsVersion() { + KubernetesClusterVmMapDao vmMapDao = Mockito.mock(KubernetesClusterVmMapDao.class); + KubernetesClusterVmMapVO vmMapVO = new KubernetesClusterVmMapVO(1L, 2L, false); + vmMapVO.setNodeVersion("1.24.0"); + Mockito.when(vmMapDao.getClusterMapFromVmId(2L)).thenReturn(vmMapVO); + try (MockedStatic sshHelper = Mockito.mockStatic(SshHelper.class)) { + sshHelper.when(() -> SshHelper.sshExecute(Mockito.anyString(), Mockito.anyInt(), Mockito.anyString(), Mockito.any(), + Mockito.any(), Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt())) + .thenReturn(new Pair<>(true, "v1.25.1\n")); + + Assert.assertTrue(KubernetesClusterUtil.clusterNodeVersionMatches("1.25.1", "10.1.1.1", 2222, "cloud", + new File("id_rsa"), "node-1", System.currentTimeMillis() + 60000, 1, 2L, vmMapDao)); + } + // in the same form as for a new node, not the kubectl output + Assert.assertEquals("1.25.1", vmMapVO.getNodeVersion()); + Mockito.verify(vmMapDao).update(vmMapVO.getId(), vmMapVO); + } }