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 a091b28597099bc58b9191da9aab607ab0583160 Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Thu Jan 30 14:47:19 2025 -0500 Support labels --- .../apache/camel/karavan/docker/DockerComposeConverter.java | 11 +++++++++++ .../org/apache/camel/karavan/docker/DockerForKaravan.java | 4 ++++ .../apache/camel/karavan/kubernetes/KubernetesService.java | 1 + .../org/apache/camel/karavan/model/DockerComposeService.java | 10 ++++++++++ .../apache/camel/karavan/scheduler/CamelStatusScheduler.java | 3 +++ .../java/org/apache/camel/karavan/service/GitService.java | 4 ++-- 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerComposeConverter.java b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerComposeConverter.java index 79f7ce33..646ae80d 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerComposeConverter.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerComposeConverter.java @@ -36,6 +36,7 @@ import static com.github.dockerjava.api.model.MountType.VOLUME; public class DockerComposeConverter { private static final String ENVIRONMENT = "environment"; + private static final String LABELS = "labels"; private static final String VOLUMES = "volumes"; public static DockerCompose fromCode(String code) { @@ -80,6 +81,16 @@ public class DockerComposeConverter { }); service.put(ENVIRONMENT, env); } + if (service.containsKey(LABELS) && service.getValue(LABELS) instanceof JsonArray) { + JsonObject env = new JsonObject(); + service.getJsonArray(LABELS).forEach(o -> { + String[] kv = o.toString().split("="); + if (kv.length == 2) { + env.put(kv[0], kv[1]); + } + }); + service.put(LABELS, env); + } if (service.containsKey(VOLUMES) && service.getValue(VOLUMES) instanceof JsonArray) { JsonArray volumes = new JsonArray(); JsonArray yamlVolumes = service.getJsonArray(VOLUMES); diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java index 86bc6954..c46625e7 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java @@ -53,6 +53,7 @@ public class DockerForKaravan { Container c = createDevmodeContainer(projectId, verbose, compile, composeService, projectDevmodeImage, labels, envVars); dockerService.runContainer(projectId); dockerService.copyFiles(c.getId(), "/karavan/code", files, true); + dockerService.copyFiles(c.getId(), "/tmp", Map.of(".karavan.done", "done"), true); } protected Container createDevmodeContainer(String projectId, Boolean verbose, Boolean compile, DockerComposeService compose, @@ -78,6 +79,9 @@ public class DockerForKaravan { var imageName = projectDevmodeImage != null ? projectDevmodeImage : devmodeImage; var containerLabels = new HashMap<>(labels); + if (compose.getLabels() != null) { + containerLabels.putAll(compose.getLabels()); + } containerLabels.put(LABEL_TYPE, ContainerType.devmode.name()); containerLabels.put(LABEL_PROJECT_ID, projectId); containerLabels.put(LABEL_CAMEL_RUNTIME, CamelRuntime.CAMEL_MAIN.getValue()); diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java b/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java index b5d270fa..33d756b1 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java @@ -350,6 +350,7 @@ public class KubernetesService { Pod pod = getDevModePod(projectId, verbose, compile, podLabels, projectDevmodeImage, deploymentFragment, envVars); Pod result = client.resource(pod).serverSideApply(); copyFilesToContainer(result, files, "/karavan/code"); + copyFilesToContainer(result, Map.of(".karavan.done", "done"), "/tmp"); LOGGER.info("Created pod " + result.getMetadata().getName()); } } diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/model/DockerComposeService.java b/karavan-app/src/main/java/org/apache/camel/karavan/model/DockerComposeService.java index 02a076f8..010d88d9 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/model/DockerComposeService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/DockerComposeService.java @@ -39,6 +39,7 @@ public class DockerComposeService { private List<String> networks = new ArrayList<>(); private Map<String,String> environment = new HashMap<>(); private DockerComposeHealthCheck healthcheck; + private Map<String,String> labels = new HashMap<>(); public DockerComposeService() { } @@ -178,6 +179,14 @@ public class DockerComposeService { this.volumes = volumes; } + public Map<String,String> getLabels() { + return labels; + } + + public void setLabels(Map<String,String> labels) { + this.labels = labels; + } + @Override public String toString() { return "DockerComposeService {" + @@ -196,6 +205,7 @@ public class DockerComposeService { ", healthcheck=" + healthcheck + ", volumes=" + volumes + ", environment=" + environment + + ", labels=" + labels + '}'; } diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java index 0ab8985f..2bafd074 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java @@ -24,6 +24,7 @@ import jakarta.inject.Inject; import org.apache.camel.karavan.KaravanCache; import org.apache.camel.karavan.KaravanConstants; import org.apache.camel.karavan.model.CamelStatusRequest; +import org.apache.camel.karavan.model.ContainerType; import org.apache.camel.karavan.service.ConfigService; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.jboss.logging.Logger; @@ -55,6 +56,7 @@ public class CamelStatusScheduler { if (ConfigService.inKubernetes()) { karavanCache.getPodContainerStatuses(environment).stream() .filter(cs -> Objects.equals(cs.getLabels().get(LABEL_KUBERNETES_RUNTIME), CAMEL_PREFIX)) + .filter(cs -> Objects.equals(cs.getType(), ContainerType.devmode) || Objects.equals(cs.getType(), ContainerType.project)) .filter(cs -> Objects.equals(cs.getCamelRuntime(), KaravanConstants.CamelRuntime.CAMEL_MAIN.getValue())) .forEach(cs -> { CamelStatusRequest csr = new CamelStatusRequest(cs.getProjectId(), cs.getContainerName()); @@ -65,6 +67,7 @@ public class CamelStatusScheduler { } else { karavanCache.getPodContainerStatuses(environment).stream() .filter(cs -> Objects.equals(cs.getCamelRuntime(), KaravanConstants.CamelRuntime.CAMEL_MAIN.getValue())) + .filter(cs -> Objects.equals(cs.getType(), ContainerType.devmode) || Objects.equals(cs.getType(), ContainerType.project)) .forEach(cs -> { CamelStatusRequest csr = new CamelStatusRequest(cs.getProjectId(), cs.getContainerName()); eventBus.publish(CMD_COLLECT_CAMEL_STATUS, diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java index b27bf69b..29272411 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java @@ -533,7 +533,7 @@ public class GitService { } } } catch (IOException e) { - LOGGER.error("Error", e); + LOGGER.error("Error", e); } return result; } @@ -548,4 +548,4 @@ public class GitService { return treeParser; } } -} +} \ No newline at end of file