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 {