mirror of https://github.com/apache/cloudstack.git
CKS: Set default kubernetes cluster node version to the kubernetes cluster version on upgrade
* CKS: Set default kubernetes cluster node version to the kubernetes cluster version on upgrade * consolidate query * Fix upgrade logic --------- Co-authored-by: nvazquez <nicovazquez90@gmail.com>
This commit is contained in:
parent
2eae6a92c8
commit
1d6d5d2fa9
|
|
@ -27,7 +27,9 @@ import java.sql.Connection;
|
|||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
|
@ -76,6 +78,7 @@ public class Upgrade41810to41900 extends DbUpgradeAbstractImpl implements DbUpgr
|
|||
migrateBackupDates(conn);
|
||||
addIndexes(conn);
|
||||
addRemoverAccountIdForeignKeyToQuarantinedIps(conn);
|
||||
updateKubernetesClusterNodeVersions(conn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -264,4 +267,93 @@ public class Upgrade41810to41900 extends DbUpgradeAbstractImpl implements DbUpgr
|
|||
private void addRemoverAccountIdForeignKeyToQuarantinedIps(Connection conn) {
|
||||
DbUpgradeUtils.addForeignKey(conn, "quarantined_ips", "remover_account_id", "account", "id");
|
||||
}
|
||||
|
||||
private Map<Long, String> getKubernetesClusterIdsAndVersion(Connection conn) {
|
||||
String listKubernetesClusters = "SELECT c.id, v.semantic_version FROM `cloud`.`kubernetes_cluster` c JOIN `cloud`.`kubernetes_supported_version` v ON (c.kubernetes_version_id = v.id) WHERE c.removed is NULL;";
|
||||
Map<Long, String> clusterAndVersion = new HashMap<>();
|
||||
try {
|
||||
PreparedStatement pstmt = conn.prepareStatement(listKubernetesClusters);
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
clusterAndVersion.put(rs.getLong(1), rs.getString(2));
|
||||
}
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
} catch (SQLException e) {
|
||||
String errMsg = String.format("Failed to get all the kubernetes cluster ids due to: %s", e.getMessage());
|
||||
LOG.error(errMsg);
|
||||
throw new CloudRuntimeException(errMsg, e);
|
||||
}
|
||||
return clusterAndVersion;
|
||||
}
|
||||
|
||||
private List<Long> getKubernetesClusterVmMapIds(Connection conn, Long cksClusterId) {
|
||||
List<Long> kubernetesClusterVmIds = new ArrayList<>();
|
||||
String getKubernetesClustersVmMap = "SELECT id FROM `cloud`.`kubernetes_cluster_vm_map` WHERE cluster_id = %s;";
|
||||
try {
|
||||
PreparedStatement pstmt = conn.prepareStatement(String.format(getKubernetesClustersVmMap, cksClusterId));
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
kubernetesClusterVmIds.add(rs.getLong(1));
|
||||
}
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
} catch (SQLException e) {
|
||||
String errMsg = String.format("Failed to get the kubernetes cluster vm map IDs for kubernetes cluster with id: %s," +
|
||||
" due to: %s", cksClusterId, e.getMessage());
|
||||
LOG.error(errMsg, e);
|
||||
throw new CloudRuntimeException(errMsg, e);
|
||||
}
|
||||
return kubernetesClusterVmIds;
|
||||
}
|
||||
|
||||
private void updateKubernetesNodeVersion(Connection conn, List<Long> kubernetesClusterVmIds, Long cksClusterId, String cksVersion) {
|
||||
String updateKubernetesNodeVersion = "UPDATE `cloud`.`kubernetes_cluster_vm_map` set kubernetes_node_version = ? WHERE id = ?;";
|
||||
for (Long nodeVmId : kubernetesClusterVmIds) {
|
||||
try {
|
||||
PreparedStatement pstmt = conn.prepareStatement(updateKubernetesNodeVersion);
|
||||
pstmt.setString(1, cksVersion);
|
||||
pstmt.setLong(2, nodeVmId);
|
||||
pstmt.executeUpdate();
|
||||
pstmt.close();
|
||||
} catch (Exception e) {
|
||||
String errMsg = String.format("Failed to update the node version for kubernetes cluster nodes for the" +
|
||||
" kubernetes cluster with id: %s," +
|
||||
" due to: %s", cksClusterId, e.getMessage());
|
||||
LOG.error(errMsg, e);
|
||||
throw new CloudRuntimeException(errMsg, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateKubernetesNodeVersions(Connection conn, Map<Long, String> clusterAndVersion) {
|
||||
List<Long> kubernetesClusterVmIds;
|
||||
for (Map.Entry<Long, String> clusterVersionEntry : clusterAndVersion.entrySet()) {
|
||||
try {
|
||||
Long cksClusterId = clusterVersionEntry.getKey();
|
||||
String cksVersion = clusterVersionEntry.getValue();
|
||||
LOG.debug(String.format("Adding CKS version %s to existing CKS cluster %s nodes", cksVersion, cksClusterId));
|
||||
kubernetesClusterVmIds = getKubernetesClusterVmMapIds(conn, cksClusterId);
|
||||
updateKubernetesNodeVersion(conn, kubernetesClusterVmIds, cksClusterId, cksVersion);
|
||||
} catch (Exception e) {
|
||||
String errMsg = String.format("Failed to update the node version for kubernetes cluster nodes for the" +
|
||||
" kubernetes cluster with id: %s," +
|
||||
" due to: %s", clusterVersionEntry.getKey(), e.getMessage());
|
||||
LOG.error(errMsg, e);
|
||||
throw new CloudRuntimeException(errMsg, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateKubernetesClusterNodeVersions(Connection conn) {
|
||||
//get list of all non removed kubernetes clusters
|
||||
try {
|
||||
Map<Long, String> clusterAndVersion = getKubernetesClusterIdsAndVersion(conn);
|
||||
updateKubernetesNodeVersions(conn, clusterAndVersion);
|
||||
} catch (Exception e) {
|
||||
String errMsg = "Failed to update kubernetes cluster nodes version";
|
||||
LOG.error(errMsg);
|
||||
throw new CloudRuntimeException(errMsg, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue