diff --git a/src/main/java/net/geant/nmaas/externalservices/kubernetes/entities/KClusterDeployment.java b/src/main/java/net/geant/nmaas/externalservices/kubernetes/entities/KClusterDeployment.java index a3599570413da6bca307c3f1f6773cccc220c04e..7db61dcff250a2f4621faccd33d1ef9e1e9633ff 100644 --- a/src/main/java/net/geant/nmaas/externalservices/kubernetes/entities/KClusterDeployment.java +++ b/src/main/java/net/geant/nmaas/externalservices/kubernetes/entities/KClusterDeployment.java @@ -12,6 +12,10 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import net.geant.nmaas.orchestration.entities.DomainTechDetails; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; @Entity @Table(name = "k_cluster_deployment") diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java index b4668e77e24b3174555110a00f1175ec6229f886..752b3fa953a33644b32bc0756e8dbd0ba1929288 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java @@ -98,26 +98,19 @@ public class KubernetesManager implements ContainerOrchestrator { } catch (IllegalArgumentException iae) { throw new NmServiceRequestVerificationException(iae.getMessage()); } - - KubernetesNmServiceInfo serviceInfo; + //todo + + KubernetesNmServiceInfo serviceInfo = new KubernetesNmServiceInfo( + deploymentId, + appDeployment.getDeploymentName(), + appDeployment.getDomain(), + appDeployment.getDescriptiveDeploymentId() + ); //verify cluster if(remoteClusterManager.clusterExist(appDeployment.getRemoteClusterId())) { - serviceInfo = new KubernetesNmServiceInfo( - deploymentId, - appDeployment.getDeploymentName(), - appDeployment.getDomain(), - appDeployment.getDescriptiveDeploymentId(), - remoteClusterManager.getCluster(appDeployment.getRemoteClusterId())); - } else { - serviceInfo = new KubernetesNmServiceInfo( - deploymentId, - appDeployment.getDeploymentName(), - appDeployment.getDomain(), - appDeployment.getDescriptiveDeploymentId() - ); + serviceInfo.setRemoteCluster(remoteClusterManager.getCluster(appDeployment.getRemoteClusterId())); } - serviceInfo.setKubernetesTemplate(KubernetesTemplate.copy(appDeploymentSpec.getKubernetesTemplate())); serviceInfo.setStorageVolumes(generateTemplateStorageVolumes(appDeploymentSpec.getStorageVolumes())); serviceInfo.setAccessMethods(generateTemplateAccessMethods(appDeploymentSpec.getAccessMethods())); diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommand.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommand.java index fb2e4bd9fba8103546069873fc73cebef49ce47f..0aaf87e860233474089ba70039fbce2394495cdd 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommand.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommand.java @@ -16,7 +16,7 @@ public abstract class HelmCommand implements Command { protected static final String HELM_VERSION_2 = "v2"; protected static final String HELM_VERSION_3 = "v3"; - protected static final String KUBECONFIG = "--kubeconfig"; + protected static final String OPTION_KUBECONFIG = "--kubeconfig"; protected String command; diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java index 1cd6308aeb12415273517fef12184f3a2122415f..5419effb43ab57463fd89c96edb50d578694d7b7 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java @@ -7,6 +7,7 @@ import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManag import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterNamespaceService; import net.geant.nmaas.externalservices.kubernetes.entities.IngressCertificateConfigOption; import net.geant.nmaas.externalservices.kubernetes.entities.IngressResourceConfigOption; +import net.geant.nmaas.externalservices.kubernetes.entities.KCluster; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceLifecycleManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KubernetesRepositoryManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesNmServiceInfo; @@ -82,20 +83,34 @@ public class HelmKServiceManager implements KServiceLifecycleManager { private Map<String, String> createArgumentsMap(KubernetesNmServiceInfo serviceInfo) { Map<String, String> arguments = new HashMap<>(); - if (deploymentManager.getForceDedicatedWorkers()) { - arguments.put(HELM_INSTALL_OPTION_DEDICATED_WORKERS, serviceInfo.getDomain()); - } + Set<ServiceStorageVolume> serviceStorageVolumes = serviceInfo.getStorageVolumes(); if (!serviceStorageVolumes.isEmpty()) { arguments.putAll(getPersistenceVariables(serviceStorageVolumes, deploymentManager.getStorageClass(serviceInfo.getDomain()), serviceInfo.getDescriptiveDeploymentId().getValue())); } - Set<ServiceAccessMethod> externalAccessMethods = serviceExternalAccessMethods(serviceInfo.getAccessMethods()); - if (!externalAccessMethods.isEmpty()) { - arguments.putAll(getIngressVariables(ingressManager.getResourceConfigOption(), externalAccessMethods, serviceInfo.getDomain())); + + if(serviceInfo.getRemoteCluster() == null) { + if (deploymentManager.getForceDedicatedWorkers()) { + arguments.put(HELM_INSTALL_OPTION_DEDICATED_WORKERS, serviceInfo.getDomain()); + } + Set<ServiceAccessMethod> externalAccessMethods = serviceExternalAccessMethods(serviceInfo.getAccessMethods()); + if (!externalAccessMethods.isEmpty()) { + arguments.putAll(getIngressVariables(ingressManager.getResourceConfigOption(), externalAccessMethods, serviceInfo.getDomain())); + } + } else { + if (serviceInfo.getRemoteCluster().getDeployment().getForceDedicatedWorkers()) { + arguments.put(HELM_INSTALL_OPTION_DEDICATED_WORKERS, serviceInfo.getDomain()); + } + Set<ServiceAccessMethod> externalAccessMethods = serviceExternalAccessMethods(serviceInfo.getAccessMethods()); + if (!externalAccessMethods.isEmpty()) { + arguments.putAll(getIngressVariables(serviceInfo.getRemoteCluster().getIngress().getResourceConfigOption(), externalAccessMethods, serviceInfo.getDomain())); + } } + if (serviceInfo.getAdditionalParameters() != null && !serviceInfo.getAdditionalParameters().isEmpty()) { arguments.putAll(removeRedundantParameters(serviceInfo.getAdditionalParameters())); } + return arguments; } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmInstallCommand.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmInstallCommand.java index c5cab7455db3c233b872095ed5eea07afdd93441..692e26b541fe15dc01aef97825bdc636b1dcdd7b 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmInstallCommand.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmInstallCommand.java @@ -27,6 +27,10 @@ public class HelmInstallCommand extends HelmCommand { */ public static HelmInstallCommand commandWithRepo(String helmVersion, String namespace, String releaseName, Map<String, String> values, String chartName, String chartVersion, boolean enableTls, String kubeConfigPath) { StringBuilder sb = buildBaseInstallCommand(helmVersion, namespace, releaseName, values); + + if(kubeConfigPath != null && !kubeConfigPath.isEmpty()) { + sb.append(SPACE).append(OPTION_KUBECONFIG).append(SPACE).append(kubeConfigPath); + } if (chartName == null || chartName.isEmpty()) { throw new IllegalArgumentException("Chart name can't be null or empty"); } @@ -36,9 +40,6 @@ public class HelmInstallCommand extends HelmCommand { } addTlsOptionIfRequired(helmVersion, enableTls, sb); - if(kubeConfigPath != null && !kubeConfigPath.isEmpty()) { - sb.append(SPACE).append(KUBECONFIG).append(SPACE).append(kubeConfigPath); - } return new HelmInstallCommand(sb.toString()); } diff --git a/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppRequestVerificationTask.java b/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppRequestVerificationTask.java index f7d1e2993767b4072f66086eae00a2cf6f0b13d0..cd623ce85a832418db8482a70a6f354763aa30b9 100644 --- a/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppRequestVerificationTask.java +++ b/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppRequestVerificationTask.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.naming.directory.InvalidAttributesException; import java.time.LocalDateTime; @Component @@ -43,7 +44,7 @@ public class AppRequestVerificationTask { final Application application = appRepository.findById(Long.valueOf(appDeployment.getApplicationId().getValue())).orElseThrow(() -> new InvalidApplicationIdException("Application for deployment " + deploymentId + " does not exist in repository")); if(!remoteClusterManager.clusterExist(appDeployment.getRemoteClusterId())) { - throw new InvalidDeploymentIdException("Wrong remote cluster Id"); + throw new InvalidAttributesException("Wrong remote cluster Id"); } serviceDeployment.verifyRequest( deploymentId,