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 <[email protected]> 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 {
