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)