From bbcda2a4070d485d0c1c4d80945c075b5fe50b07 Mon Sep 17 00:00:00 2001 From: Marica Antonacci Date: Thu, 26 Aug 2021 13:00:13 +0200 Subject: [PATCH 1/2] Fix helm release name and add annotations --- .../providers/KubernetesServiceImpl.java | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java b/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java index dbb2cde1fb..c078c2856a 100644 --- a/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java +++ b/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java @@ -29,6 +29,7 @@ import io.kubernetes.client.util.generic.GenericKubernetesApi; import io.kubernetes.client.util.generic.KubernetesApiResponse; import it.reply.orchestrator.annotation.DeploymentProviderQualifier; +import it.reply.orchestrator.config.properties.OrchestratorProperties; import it.reply.orchestrator.dal.entity.Deployment; import it.reply.orchestrator.dal.entity.OidcTokenId; import it.reply.orchestrator.dto.CloudProviderEndpoint; @@ -53,9 +54,11 @@ import it.reply.orchestrator.service.deployment.providers.factory.KubernetesClientFactory; import it.reply.orchestrator.service.security.OAuth2TokenService; import it.reply.orchestrator.utils.CommonUtils; +import it.reply.orchestrator.utils.JwtUtils; import it.reply.orchestrator.utils.ToscaConstants; import it.reply.orchestrator.utils.ToscaUtils; import it.reply.orchestrator.utils.WorkflowConstants; + import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -76,12 +79,17 @@ @Slf4j public class KubernetesServiceImpl extends AbstractDeploymentProviderService { + public static final String HELM_RELEASE_PREFIX = "paas-"; + @Autowired private ToscaService toscaService; @Autowired private KubernetesClientFactory clientFactory; + @Autowired + private OrchestratorProperties orchestratorProperties; + @Autowired private OAuth2TokenService oauth2TokenService; @@ -181,8 +189,14 @@ private V1HelmRelease helmReleaseFromTosca(V1HelmRelease helmRelease, Deployment String values = ToscaUtils.extractScalar(chartNode.getProperties(), "values") .orElseGet(String::new); + /** Note: the release name is used to set the label instance that must + * adhere to DNS-1035 naming convention: it must consist of lower case alphanumeric + * characters or '-', start with an alphabetic character, and end with an alphanumeric + * character + */ return helmRelease .spec(new V1HelmReleaseSpec() + .releaseName(HELM_RELEASE_PREFIX + deployment.getId()) .chart(new V1HelmReleaseSpecChart() .repository(repository) .name(chartName) @@ -201,17 +215,33 @@ public boolean doDeploy(DeploymentMessage deploymentMessage) { deployment.setEndpoint(name); CloudProviderEndpoint chosenCloudProviderEndpoint = deploymentMessage .getChosenCloudProviderEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); + + String email = ""; + try { + String accessToken = oauth2TokenService.getAccessToken(requestedWithToken); + email = JwtUtils.getJwtClaimsSet(JwtUtils.parseJwt(accessToken)).getStringClaim("email"); + } catch (Exception e) { + } + + final String userEmail = email; + + Map annotations = new HashMap() {{ + put("PAAS_URL", orchestratorProperties.getUrl().toString()); + put("PAAS_DEP_USER_EMAIL", userEmail); + put("PAAS_DEP_UUID", deployment.getId()); + }}; + V1HelmRelease helmRelease = new V1HelmRelease() .apiVersion("helm.fluxcd.io/v1") .kind("HelmRelease") .metadata(new V1ObjectMeta() .name(name) .namespace(namespace) + .annotations(annotations) ); helmReleaseFromTosca(helmRelease, deployment); try { @@ -230,7 +260,6 @@ public boolean isDeployed(DeploymentMessage deploymentMessage) { final OidcTokenId requestedWithToken = deploymentMessage.getRequestedWithToken(); Deployment deployment = getDeployment(deploymentMessage); String name = deployment.getEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); V1HelmRelease helmRelease = null; @@ -305,7 +334,6 @@ public boolean doUpdate(DeploymentMessage deploymentMessage, String template) { deployment.setEndpoint(name); CloudProviderEndpoint chosenCloudProviderEndpoint = deploymentMessage .getChosenCloudProviderEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); @@ -337,7 +365,6 @@ public boolean doUndeploy(DeploymentMessage deploymentMessage) { final OidcTokenId requestedWithToken = deploymentMessage.getRequestedWithToken(); String name = deployment.getId(); CloudProviderEndpoint chosenCloudProviderEndpoint = deployment.getCloudProviderEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); try { @@ -358,7 +385,6 @@ public boolean isUndeployed(DeploymentMessage deploymentMessage) { final OidcTokenId requestedWithToken = deploymentMessage.getRequestedWithToken(); String name = deployment.getId(); CloudProviderEndpoint chosenCloudProviderEndpoint = deployment.getCloudProviderEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); try { @@ -396,12 +422,11 @@ public void finalizeDeploy(DeploymentMessage deploymentMessage) { .getChosenCloudProviderEndpoint(); final OidcTokenId requestedWithToken = deploymentMessage.getRequestedWithToken(); - String name = deployment.getEndpoint(); - //String namespace = oauth2TokenService.getOrganization(requestedWithToken); + String name = HELM_RELEASE_PREFIX + deployment.getId(); String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); - String labelSelector = String.format("app.kubernetes.io/instance=%s-%s", namespace, name); + String labelSelector = String.format("app.kubernetes.io/instance=%s", name); Map nodes = Optional .ofNullable(ar.getTopology()) .map(Topology::getNodeTemplates) @@ -435,7 +460,7 @@ public void finalizeDeploy(DeploymentMessage deploymentMessage) { null, null)); services.getItems().forEach(service -> { String serviceName = service - .getMetadata().getName().split(namespace + "-" + name + "-")[1]; + .getMetadata().getName().split(name + "-")[1]; Optional .ofNullable(service.getSpec()) .map(V1ServiceSpec::getPorts) From a3ae3f620a2e4b3548856f5474243139dccb50ce Mon Sep 17 00:00:00 2001 From: Marica Antonacci Date: Thu, 26 Aug 2021 14:41:35 +0200 Subject: [PATCH 2/2] Fix style issues --- .../providers/KubernetesServiceImpl.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java b/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java index c078c2856a..b87a0a5a23 100644 --- a/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java +++ b/src/main/java/it/reply/orchestrator/service/deployment/providers/KubernetesServiceImpl.java @@ -189,14 +189,14 @@ private V1HelmRelease helmReleaseFromTosca(V1HelmRelease helmRelease, Deployment String values = ToscaUtils.extractScalar(chartNode.getProperties(), "values") .orElseGet(String::new); - /** Note: the release name is used to set the label instance that must - * adhere to DNS-1035 naming convention: it must consist of lower case alphanumeric - * characters or '-', start with an alphabetic character, and end with an alphanumeric - * character - */ + /* Note: the release name is used to set the label instance that must + adhere to DNS-1035 naming convention: it must consist of lower case alphanumeric + characters or '-', start with an alphabetic character, and end with an alphanumeric + character + */ return helmRelease .spec(new V1HelmReleaseSpec() - .releaseName(HELM_RELEASE_PREFIX + deployment.getId()) + .releaseName(HELM_RELEASE_PREFIX + deployment.getId()) .chart(new V1HelmReleaseSpecChart() .repository(repository) .name(chartName) @@ -219,12 +219,12 @@ public boolean doDeploy(DeploymentMessage deploymentMessage) { String namespace = Optional.ofNullable(deployment.getUserGroup()) .orElse(oauth2TokenService.getOrganization(requestedWithToken)); - String email = ""; try { - String accessToken = oauth2TokenService.getAccessToken(requestedWithToken); - email = JwtUtils.getJwtClaimsSet(JwtUtils.parseJwt(accessToken)).getStringClaim("email"); + String accessToken = oauth2TokenService.getAccessToken(requestedWithToken); + email = JwtUtils.getJwtClaimsSet(JwtUtils.parseJwt(accessToken)).getStringClaim("email"); } catch (Exception e) { + LOG.warn("Unable to set user email in annotations"); } final String userEmail = email; @@ -233,7 +233,7 @@ public boolean doDeploy(DeploymentMessage deploymentMessage) { put("PAAS_URL", orchestratorProperties.getUrl().toString()); put("PAAS_DEP_USER_EMAIL", userEmail); put("PAAS_DEP_UUID", deployment.getId()); - }}; + }}; V1HelmRelease helmRelease = new V1HelmRelease() .apiVersion("helm.fluxcd.io/v1")