You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2024/01/24 22:04:08 UTC

(camel-karavan) branch main updated: Fix #1080

This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


The following commit(s) were added to refs/heads/main by this push:
     new 7fbb3e31 Fix #1080
7fbb3e31 is described below

commit 7fbb3e3139a61830267e0c316f0e425a0d7ce89a
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Jan 24 17:04:01 2024 -0500

    Fix #1080
---
 .../org/apache/camel/karavan/code/CodeService.java | 22 +++++++++++
 .../camel/karavan/infinispan/model/Project.java    |  8 ++--
 .../karavan/kubernetes/KubernetesService.java      | 43 ++++++++--------------
 3 files changed, 42 insertions(+), 31 deletions(-)

diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
index ea3eef7b..e519b5a4 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
@@ -23,6 +23,7 @@ import io.apicurio.datamodels.models.openapi.OpenApiDocument;
 import io.quarkus.qute.Engine;
 import io.quarkus.qute.Template;
 import io.quarkus.qute.TemplateInstance;
+import io.smallrye.mutiny.tuples.Tuple3;
 import io.vertx.core.Vertx;
 import io.vertx.core.buffer.Buffer;
 import jakarta.enterprise.context.ApplicationScoped;
@@ -64,6 +65,7 @@ public class CodeService {
     public static final String PROJECT_DEPLOYMENT_JKUBE_FILENAME = "deployment" + PROJECT_JKUBE_EXTENSION;
     private static final String SNIPPETS_PATH = "/snippets/";
     private static final String DATA_FOLDER = System.getProperty("user.dir") + File.separator + "data";
+    public static final String BUILDER_ENV_MAPPING_FILENAME = "kubernetes-builder-env.properties";
     private static final int INTERNAL_PORT = 8080;
 
     @ConfigProperty(name = "karavan.environment")
@@ -108,6 +110,26 @@ public class CodeService {
         return files;
     }
 
+    public List<Tuple3<String, String, String>> getBuilderEnvMapping() {
+        List<Tuple3<String, String, String>> result = new ArrayList<>();
+        ProjectFile projectFile = infinispanService.getProjectFile(Project.Type.templates.name(), BUILDER_ENV_MAPPING_FILENAME);
+        if (projectFile != null) {
+            String text = projectFile.getCode();
+            text.lines().forEach(line -> {
+                String[] params = line.split("=");
+                if (params.length > 1) {
+                    String env = params[0];
+                    String[] secret = params[1].split(":");
+                    String secretName = secret[0];
+                    String secretKey = secret[1];
+                    result.add(Tuple3.of(env, secretName, secretKey));
+                }
+            });
+        }
+
+        return result;
+    }
+
     public ProjectFile getApplicationProperties(Project project) {
         String target = "docker";
         if (ConfigService.inKubernetes()) {
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
index 87311fac..23684717 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
@@ -17,13 +17,13 @@
 
 package org.apache.camel.karavan.infinispan.model;
 
+import jakarta.validation.constraints.NotBlank;
 import org.infinispan.protostream.annotations.ProtoEnumValue;
 import org.infinispan.protostream.annotations.ProtoFactory;
 import org.infinispan.protostream.annotations.ProtoField;
 
 import java.time.Instant;
-
-import jakarta.validation.constraints.NotBlank;
+import java.util.Arrays;
 
 public class Project {
     public static final String CACHE = "projects";
@@ -69,7 +69,7 @@ public class Project {
         this.description = description;
         this.lastCommit = lastCommit;
         this.lastCommitTimestamp = lastCommitTimestamp;
-        this.type = Type.normal;
+        this.type = Arrays.stream(Type.values()).anyMatch(t -> t.name().equals(projectId)) ? Type.valueOf(projectId) : Type.normal;
     }
 
     public Project(String projectId, String name, String description) {
@@ -77,7 +77,7 @@ public class Project {
         this.name = name;
         this.description = description;
         this.lastCommitTimestamp = Instant.now().toEpochMilli();
-        this.type = Type.normal;
+        this.type = Arrays.stream(Type.values()).anyMatch(t -> t.name().equals(projectId)) ? Type.valueOf(projectId) : Type.normal;
     }
 
     public Project() {
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
index a4022754..8ca835c6 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
@@ -26,6 +26,7 @@ import io.fabric8.openshift.api.model.ImageStream;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.quarkus.runtime.configuration.ProfileManager;
 import io.smallrye.mutiny.tuples.Tuple2;
+import io.smallrye.mutiny.tuples.Tuple3;
 import io.vertx.mutiny.core.eventbus.EventBus;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.inject.Default;
@@ -170,7 +171,7 @@ public class KubernetesService implements HealthCheck {
             String containerName = project.getProjectId() + BUILDER_SUFFIX;
             Map<String, String> labels = getLabels(containerName, project, ContainerStatus.ContainerType.build);
 //        createPVC(containerName, labels);
-            createBuildScriptConfigmap(script, false);
+//            createBuildScriptConfigmap(script, false);
 
 //        Delete old build pod
             Pod old = client.pods().inNamespace(getNamespace()).withName(containerName).get();
@@ -178,7 +179,8 @@ public class KubernetesService implements HealthCheck {
                 client.resource(old).delete();
             }
             boolean hasDockerConfigSecret = hasDockerConfigSecret();
-            Pod pod = getBuilderPod(containerName, env, labels, hasDockerConfigSecret);
+            List<Tuple3<String, String, String>> envMappings =  codeService.getBuilderEnvMapping();
+            Pod pod = getBuilderPod(containerName, env, labels, envMappings, hasDockerConfigSecret);
             Pod result = client.resource(pod).create();
 
             LOGGER.info("Created pod " + result.getMetadata().getName());
@@ -224,7 +226,8 @@ public class KubernetesService implements HealthCheck {
                 .build();
     }
 
-    private Pod getBuilderPod(String name, List<String> env, Map<String, String> labels, boolean hasDockerConfigSecret) {
+    private Pod getBuilderPod(String name, List<String> env, Map<String, String> labels,
+                              List<Tuple3<String, String, String>> envMappings, boolean hasDockerConfigSecret) {
         List<EnvVar> envVars = new ArrayList<>();
         env.stream().map(s -> s.split("=")).filter(s -> s.length > 0).forEach(parts -> {
             String varName = parts[0];
@@ -232,30 +235,16 @@ public class KubernetesService implements HealthCheck {
             envVars.add(new EnvVarBuilder().withName(varName).withValue(varValue).build());
         });
 
-        envVars.add(
-                new EnvVar("IMAGE_REGISTRY", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("IMAGE_REGISTRY_USERNAME", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry-username", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("IMAGE_REGISTRY_PASSWORD", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry-password", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("IMAGE_GROUP", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-group", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("GIT_REPOSITORY", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-repository", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("GIT_USERNAME", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-username", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("GIT_PASSWORD", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-password", secretName, false)).build())
-        );
-        envVars.add(
-                new EnvVar("GIT_BRANCH", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-branch", secretName, false)).build())
-        );
+        envMappings.forEach(envMapping -> {
+            String variableName = envMapping.getItem1();
+            String sName = envMapping.getItem2();
+            String sKey = envMapping.getItem3();
+            envVars.add(
+                    new EnvVar(variableName, null, new EnvVarSourceBuilder().withSecretKeyRef(
+                            new SecretKeySelector(sKey, sName, false)
+                    ).build())
+            );
+        });
 
         ObjectMeta meta = new ObjectMetaBuilder()
                 .withName(name)