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)