This is an automated email from the ASF dual-hosted git repository. pearl11594 pushed a commit to branch fix-netOff-check-cks in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit c67f78ce1927db31c1de486c0d19aa6ee8e0f790 Author: Pearl Dsilva <pearl1...@gmail.com> AuthorDate: Thu Aug 28 16:07:27 2025 -0400 CKS: Validate network offering from network if provided rather than global setting --- .../cluster/KubernetesClusterManagerImpl.java | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 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..09241894ec8 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,16 +367,26 @@ 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); + 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()); + } else if (StringUtils.isNotEmpty(networkOfferingName)) { + 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)); + logger.warn("Unable to find the network offering: {} to be used for provisioning Kubernetes cluster", networkOfferingName); return false; } if (networkOffering.getState() == NetworkOffering.State.Disabled) { @@ -413,8 +423,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 +862,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"); }