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 d1babb547f85..9b3e487680d4 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 @@ private void logAndThrow(final Level logLevel, final String message, final Excep 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 @@ private boolean isKubernetesServiceNetworkOfferingConfigured(DataCenter zone) { 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 @@ private void validateManagedKubernetesClusterCreateParameters(final CreateKubern 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"); }