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 2023/12/27 16:37:08 UTC
(camel-karavan) 01/03: Fix #1038
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
commit e8129ae6bc59b6ada46e23b3f857ed9326dc5e06
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Dec 27 11:35:13 2023 -0500
Fix #1038
---
.../karavan/kubernetes/KubernetesService.java | 46 +++++++++++++++-------
.../org/apache/camel/karavan/shared/Constants.java | 1 +
2 files changed, 33 insertions(+), 14 deletions(-)
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 a2e2c49d..ca7ca032 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
@@ -174,7 +174,8 @@ public class KubernetesService implements HealthCheck {
if (old != null) {
client.resource(old).delete();
}
- Pod pod = getBuilderPod(containerName, env, labels);
+ boolean hasDockerConfigSecret = hasDockerConfigSecret();
+ Pod pod = getBuilderPod(containerName, env, labels, hasDockerConfigSecret);
Pod result = client.resource(pod).create();
LOGGER.info("Created pod " + result.getMetadata().getName());
@@ -220,7 +221,7 @@ public class KubernetesService implements HealthCheck {
.build();
}
- private Pod getBuilderPod(String name, List<String> env, Map<String, String> labels) {
+ private Pod getBuilderPod(String name, List<String> env, Map<String, String> labels, boolean hasDockerConfigSecret) {
List<EnvVar> envVars = new ArrayList<>();
env.stream().map(s -> s.split("=")).filter(s -> s.length > 0).forEach(parts -> {
String varName = parts[0];
@@ -265,6 +266,12 @@ public class KubernetesService implements HealthCheck {
.withProtocol("TCP")
.build();
+ List<VolumeMount> volumeMounts = new ArrayList<>();
+ volumeMounts.add(new VolumeMountBuilder().withName(BUILD_CONFIG_MAP).withMountPath("/karavan/builder").withReadOnly(true).build());
+ if (hasDockerConfigSecret) {
+ volumeMounts.add(new VolumeMountBuilder().withName(BUILD_DOCKER_CONFIG_SECRET).withMountPath("/karavan/.docker").withReadOnly(true).build());
+ }
+
Container container = new ContainerBuilder()
.withName(name)
.withImage(devmodeImage)
@@ -272,25 +279,27 @@ public class KubernetesService implements HealthCheck {
.withImagePullPolicy("Always")
.withEnv(envVars)
.withCommand("/bin/sh", "-c", "/karavan/builder/build.sh")
- .withVolumeMounts(
- new VolumeMountBuilder().withName(BUILD_CONFIG_MAP).withMountPath("/karavan/builder").withReadOnly(true).build()
- )
+ .withVolumeMounts(volumeMounts)
.build();
+ List<Volume> volumes = new ArrayList<>();
+ volumes.add(new VolumeBuilder().withName(BUILD_CONFIG_MAP)
+ .withConfigMap(new ConfigMapVolumeSourceBuilder().withName(BUILD_CONFIG_MAP).withItems(
+ new KeyToPathBuilder().withKey("build.sh").withPath("build.sh").build()
+ ).withDefaultMode(511).build()).build());
+ if (hasDockerConfigSecret) {
+ volumes.add(new VolumeBuilder().withName(BUILD_DOCKER_CONFIG_SECRET)
+ .withSecret(new SecretVolumeSourceBuilder().withSecretName(BUILD_DOCKER_CONFIG_SECRET).withItems(
+ new KeyToPathBuilder().withKey(".dockerconfigjson").withPath("config.json").build()
+ ).withDefaultMode(511).build()).build());
+ }
+
PodSpec spec = new PodSpecBuilder()
.withTerminationGracePeriodSeconds(0L)
.withContainers(container)
.withRestartPolicy("Never")
.withServiceAccount(builderServiceAccount)
- .withVolumes(
- new VolumeBuilder().withName(BUILD_CONFIG_MAP)
- .withConfigMap(new ConfigMapVolumeSourceBuilder().withName(BUILD_CONFIG_MAP).withItems(
- new KeyToPathBuilder().withKey("build.sh").withPath("build.sh").build()
- ).withDefaultMode(511).build()).build()
-// new VolumeBuilder().withName("maven-settings")
-// .withConfigMap(new ConfigMapVolumeSourceBuilder()
-// .withName("karavan").build()).build()
- )
+ .withVolumes(volumes)
.build();
return new PodBuilder()
@@ -299,6 +308,15 @@ public class KubernetesService implements HealthCheck {
.build();
}
+ public boolean hasDockerConfigSecret() {
+ try (KubernetesClient client = kubernetesClient()) {
+ return client.secrets().inNamespace(namespace).withName(BUILD_DOCKER_CONFIG_SECRET).get() != null;
+ } catch (Exception ex) {
+ LOGGER.error(ex.getMessage());
+ return false;
+ }
+ }
+
public Tuple2<LogWatch, KubernetesClient> getContainerLogWatch(String podName) {
KubernetesClient client = kubernetesClient();
LogWatch logWatch = client.pods().inNamespace(getNamespace()).withName(podName).tailingLines(100).watchLog();
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
index ffb531ab..b67bd6b4 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
@@ -38,6 +38,7 @@ public class Constants {
public static final String PVC_MAVEN_SETTINGS = "maven-settings";
public static final String BUILD_CONFIG_MAP = "build-config-map";
+ public static final String BUILD_DOCKER_CONFIG_SECRET = "dockerconfigjson";
public static final String BUILD_SCRIPT_FILENAME_SUFFIX = "-build.sh";
public enum CamelRuntime {