From 4f5f7d46d28fd17e5acbf929e1356a517a52335f Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Tue, 9 Sep 2025 06:53:09 -0400 Subject: [PATCH] CKS: Validate network offering from network if provided rather than global setting (#11528) * CKS: Validate network offering from network if provided rather than global setting * update warning message --- .../cluster/KubernetesClusterManagerImpl.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java index d1babb547f8..9b3e487680d 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java @@ -367,18 +367,33 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne logTransitStateAndThrow(logLevel, message, null, null, ex); } - private boolean isKubernetesServiceNetworkOfferingConfigured(DataCenter zone) { + private boolean isKubernetesServiceNetworkOfferingConfigured(DataCenter zone, Long networkId) { // Check network offering String networkOfferingName = KubernetesClusterNetworkOffering.value(); - if (networkOfferingName == null || networkOfferingName.isEmpty()) { - logger.warn(String.format("Global setting %s is empty. Admin has not yet specified the network offering to be used for provisioning isolated network for the cluster", KubernetesClusterNetworkOffering.key())); + if (StringUtils.isEmpty(networkOfferingName) && networkId == null) { + logger.warn("Global setting: {} is empty. Admin has not yet specified the network offering to be used for provisioning isolated network for the cluster nor has a pre-created network been passed", KubernetesClusterNetworkOffering.key()); return false; } - NetworkOfferingVO networkOffering = networkOfferingDao.findByUniqueName(networkOfferingName); - if (networkOffering == null) { - logger.warn(String.format("Unable to find the network offering %s to be used for provisioning Kubernetes cluster", networkOfferingName)); - return false; + NetworkOfferingVO networkOffering = null; + if (networkId != null) { + NetworkVO network = networkDao.findById(networkId); + if (network == null) { + logger.warn("Unable to find the network with ID: {} passed for the Kubernetes cluster", networkId); + return false; + } + networkOffering = networkOfferingDao.findById(network.getNetworkOfferingId()); + if (networkOffering == null) { + logger.warn("Unable to find the network offering of the network: {} ({}) to be used for provisioning Kubernetes cluster", network.getName(), network.getUuid()); + return false; + } + } else if (StringUtils.isNotEmpty(networkOfferingName)) { + networkOffering = networkOfferingDao.findByUniqueName(networkOfferingName); + if (networkOffering == null) { + logger.warn("Unable to find the network offering: {} to be used for provisioning Kubernetes cluster", networkOfferingName); + return false; + } } + if (networkOffering.getState() == NetworkOffering.State.Disabled) { logger.warn("Network offering: {} is not enabled", networkOffering); return false; @@ -413,8 +428,8 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne return true; } - private boolean isKubernetesServiceConfigured(DataCenter zone) { - if (!isKubernetesServiceNetworkOfferingConfigured(zone)) { + private boolean isKubernetesServiceConfigured(DataCenter zone, Long networkId) { + if (!isKubernetesServiceNetworkOfferingConfigured(zone, networkId)) { return false; } return true; @@ -852,7 +867,7 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne DataCenter zone = validateAndGetZoneForKubernetesCreateParameters(zoneId, networkId); - if (!isKubernetesServiceConfigured(zone)) { + if (!isKubernetesServiceConfigured(zone, networkId)) { throw new CloudRuntimeException("Kubernetes service has not been configured properly to provision Kubernetes clusters"); }