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 71689b91 Fix 71689b91 is described below commit 71689b911cc32a9661ac724bd5026bbed95ea870 Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Thu Dec 12 18:12:42 2024 -0500 Fix --- .../org/apache/camel/karavan/KaravanConstants.java | 2 ++ .../apache/camel/karavan/api/DevModeResource.java | 10 ++++---- .../camel/karavan/docker/DockerForKaravan.java | 15 ++++++------ .../karavan/kubernetes/KubernetesService.java | 20 +++++++++++----- .../camel/karavan/service/ProjectService.java | 27 ++++++++++++---------- 5 files changed, 44 insertions(+), 30 deletions(-) diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/KaravanConstants.java b/karavan-app/src/main/java/org/apache/camel/karavan/KaravanConstants.java index 3b2a40d8..052f19fd 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/KaravanConstants.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/KaravanConstants.java @@ -22,6 +22,8 @@ public class KaravanConstants { public static final String DEVMODE_IMAGE = "karavan.devmode.image"; public static final String DEVMODE_IMAGE_PULL_POLICY = "karavan.devmode.withImagePullPolicy"; public static final String ENV_VAR_VERBOSE_OPTION_NAME = "VERBOSE_OPTION"; + public static final String RUN_IN_COMPILE_MODE = "RUN_IN_COMPILE_MODE"; + public static final String RUN_IN_BUILD_MODE = "RUN_IN_BUILD_MODE"; public static final String ENV_VAR_VERBOSE_OPTION_VALUE = "--verbose"; public static final String LABEL_PART_OF = "app.kubernetes.io/part-of"; diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java index 6a0ef84d..c731ac8c 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java @@ -54,10 +54,10 @@ public class DevModeResource { @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - @Path("/{verbose}") - public Response runProjectWithJBangOptions(Project project, @PathParam("verbose") boolean verbose) { + @Path("/{verbose}/{compile}") + public Response runProjectInDeveloperMode(Project project, @PathParam("verbose") boolean verbose, @PathParam("compile") boolean compile) { try { - String containerName = projectService.runProjectWithJBangOptions(project, verbose, Map.of(), Map.of()); + String containerName = projectService.runProjectInDeveloperMode(project, verbose, compile, Map.of(), Map.of()); if (containerName != null) { return Response.ok(containerName).build(); } else { @@ -72,8 +72,8 @@ public class DevModeResource { @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public Response runProject(Project project) throws Exception { - return runProjectWithJBangOptions(project, false); + public Response runProjectInDeveloperMode(Project project) throws Exception { + return runProjectInDeveloperMode(project, false, false); } @GET 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 69fcc826..34aeb727 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 @@ -22,10 +22,7 @@ import com.github.dockerjava.api.model.MountType; import com.github.dockerjava.api.model.RestartPolicy; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import org.apache.camel.karavan.model.ContainerType; -import org.apache.camel.karavan.model.DockerComposeService; -import org.apache.camel.karavan.model.DockerComposeVolume; -import org.apache.camel.karavan.model.Project; +import org.apache.camel.karavan.model.*; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.jboss.logging.Logger; @@ -48,14 +45,14 @@ public class DockerForKaravan { @Inject DockerService dockerService; - public void runProjectInDevMode(String projectId, Boolean verbose, DockerComposeService composeService, + public void runProjectInDevMode(String projectId, Boolean verbose, Boolean compile, DockerComposeService composeService, Map<String, String> files, String projectDevmodeImage, Map<String, String> labels, Map<String, String> envVars) throws Exception { - Container c = createDevmodeContainer(projectId, verbose, composeService, projectDevmodeImage, labels, envVars); + Container c = createDevmodeContainer(projectId, verbose, compile, composeService, projectDevmodeImage, labels, envVars); dockerService.runContainer(projectId); dockerService.copyFiles(c.getId(), "/karavan/code", files, true); } - protected Container createDevmodeContainer(String projectId, Boolean verbose, DockerComposeService compose, + protected Container createDevmodeContainer(String projectId, Boolean verbose, Boolean compile, DockerComposeService compose, String projectDevmodeImage, Map<String, String> labels, Map<String, String> envVars) throws InterruptedException { LOGGER.infof("DevMode starting for %s with verbose=%s", projectId, verbose); @@ -67,6 +64,9 @@ public class DockerForKaravan { if (verbose) { env.add(ENV_VAR_VERBOSE_OPTION_NAME + "=" + ENV_VAR_VERBOSE_OPTION_VALUE); } + if (compile) { + env.add(RUN_IN_COMPILE_MODE + "=true"); + } if (createM2.orElse(false)) { compose.getVolumes().add(new DockerComposeVolume(MountType.VOLUME.name(), projectId+ "-m2-repository", "/karavan/.m2/repository")); @@ -93,6 +93,7 @@ public class DockerForKaravan { if (createM2.orElse(false)) { compose.getVolumes().add(new DockerComposeVolume(MountType.VOLUME.name(), project.getProjectId() + "-build-m2-repository", "/karavan/.m2/repository")); } + compose.addEnvironment(RUN_IN_BUILD_MODE, "true"); Container c = createBuildContainer(containerName, project, compose.getEnvironmentList(), compose.getVolumes(), tag); dockerService.copyExecFile(c.getId(), "/karavan/builder", BUILD_SCRIPT_FILENAME, script); sshFiles.forEach((name, text) -> { 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 18b0b78f..6de4f755 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 @@ -16,6 +16,8 @@ */ package org.apache.camel.karavan.kubernetes; +import org.apache.camel.karavan.model.KubernetesConfigMap; +import org.apache.camel.karavan.model.KubernetesSecret; import io.fabric8.kubernetes.api.model.*; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.client.KubernetesClient; @@ -30,8 +32,6 @@ import jakarta.enterprise.inject.Produces; import jakarta.inject.Inject; import org.apache.camel.karavan.KaravanConstants; import org.apache.camel.karavan.model.ContainerType; -import org.apache.camel.karavan.model.KubernetesConfigMap; -import org.apache.camel.karavan.model.KubernetesSecret; import org.apache.camel.karavan.model.Project; import org.apache.camel.karavan.service.CodeService; import org.apache.camel.karavan.service.ConfigService; @@ -186,6 +186,9 @@ public class KubernetesService { } Pod pod = Serialization.unmarshal(configFragment, Pod.class); + + pod.getSpec().getContainers().get(0).getEnv().add(new EnvVarBuilder().withName(RUN_IN_BUILD_MODE).withValue("true").build()); + Container container = new ContainerBuilder() .withName(name) .withImage(devmodeImage) @@ -335,7 +338,7 @@ public class KubernetesService { return result; } - public void runDevModeContainer(Project project, Boolean verbose, Map<String, String> files, String projectDevmodeImage, String deploymentFragment, Map<String, String> labels, Map<String, String> envVars) { + public void runDevModeContainer(Project project, Boolean verbose, Boolean compile, Map<String, String> files, String projectDevmodeImage, String deploymentFragment, Map<String, String> labels, Map<String, String> envVars) { String name = project.getProjectId(); Map<String, String> podLabels = new HashMap<>(labels); podLabels.putAll(getLabels(name, project, ContainerType.devmode)); @@ -346,7 +349,7 @@ public class KubernetesService { } Pod old = client.pods().inNamespace(getNamespace()).withName(name).get(); if (old == null) { - Pod pod = getDevModePod(name, verbose, podLabels, projectDevmodeImage, deploymentFragment, envVars); + Pod pod = getDevModePod(name, verbose, compile, podLabels, projectDevmodeImage, deploymentFragment, envVars); Pod result = client.resource(pod).serverSideApply(); copyFilesToContainer(result, files, "/karavan/code"); LOGGER.info("Created pod " + result.getMetadata().getName()); @@ -389,7 +392,7 @@ public class KubernetesService { .build(); } - private Pod getDevModePod(String name, Boolean verbose, Map<String, String> labels, String projectDevmodeImage, String deploymentFragment, Map<String, String> envVars) { + private Pod getDevModePod(String name, Boolean verbose, Boolean compile, Map<String, String> labels, String projectDevmodeImage, String deploymentFragment, Map<String, String> envVars) { Deployment deployment = Serialization.unmarshal(deploymentFragment, Deployment.class); PodSpec podSpec = null; @@ -420,7 +423,12 @@ public class KubernetesService { List<EnvVar> environmentVariables = new ArrayList<>(); envVars.forEach((k, v) -> environmentVariables.add(new EnvVarBuilder().withName(k).withValue(v).build())); - environmentVariables.add(new EnvVarBuilder().withName(ENV_VAR_VERBOSE_OPTION_NAME).withValue(ENV_VAR_VERBOSE_OPTION_VALUE).build()); + if (verbose) { + environmentVariables.add(new EnvVarBuilder().withName(ENV_VAR_VERBOSE_OPTION_NAME).withValue(ENV_VAR_VERBOSE_OPTION_VALUE).build()); + } + if (compile) { + environmentVariables.add(new EnvVarBuilder().withName(RUN_IN_COMPILE_MODE).withValue("true").build()); + } Container container = new ContainerBuilder() .withName(name) diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java index c7944a0c..46ea88a8 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java @@ -93,7 +93,7 @@ public class ProjectService { } } - public String runProjectWithJBangOptions(Project project, Boolean verbose, Map<String, String> labels, Map<String, String> envVars) throws Exception { + public String runProjectInDeveloperMode(Project project, Boolean verbose, Boolean compile, Map<String, String> labels, Map<String, String> envVars) throws Exception { String containerName = project.getProjectId(); PodContainerStatus status = karavanCache.getDevModePodContainerStatus(project.getProjectId(), environment); if (status == null) { @@ -107,10 +107,10 @@ public class ProjectService { String projectDevmodeImage = codeService.getProjectDevModeImage(project.getProjectId()); if (ConfigService.inKubernetes()) { String deploymentFragment = codeService.getDeploymentFragment(project.getProjectId()); - kubernetesService.runDevModeContainer(project, verbose, files, projectDevmodeImage, deploymentFragment, labels, envVars); + kubernetesService.runDevModeContainer(project, verbose, compile, files, projectDevmodeImage, deploymentFragment, labels, envVars); } else { DockerComposeService compose = getProjectDockerComposeService(project.getProjectId()); - dockerForKaravan.runProjectInDevMode(project.getProjectId(), verbose, compose, files, projectDevmodeImage, labels, envVars); + dockerForKaravan.runProjectInDevMode(project.getProjectId(), verbose, compile, compose, files, projectDevmodeImage, labels, envVars); } return containerName; } else { @@ -270,9 +270,8 @@ public class ProjectService { // Copy files from the source and make necessary modifications Map<String, ProjectFile> filesMap = karavanCache.getProjectFilesMap(sourceProjectId).entrySet().stream() - .filter(e -> !Objects.equals(e.getValue().getName(), PROJECT_COMPOSE_FILENAME) && - !Objects.equals(e.getValue().getName(), PROJECT_DEPLOYMENT_JKUBE_FILENAME) - ) + .filter(e -> !Objects.equals(e.getValue().getName(), PROJECT_COMPOSE_FILENAME)) + .filter(e -> !Objects.equals(e.getValue().getName(), PROJECT_DEPLOYMENT_JKUBE_FILENAME)) .collect(Collectors.toMap( e -> GroupedKey.create(project.getProjectId(), DEV, e.getValue().getName()), e -> { @@ -299,13 +298,17 @@ public class ProjectService { } public Integer getProjectPort(ProjectFile composeFile) { - if (composeFile != null) { - DockerComposeService dcs = DockerComposeConverter.fromCode(composeFile.getCode(), composeFile.getProjectId()); - Optional<Integer> port = dcs.getPortsMap().entrySet().stream() - .filter(e -> Objects.equals(e.getValue(), INTERNAL_PORT)).map(Map.Entry::getKey).findFirst(); - return port.orElse(null); + try { + if (composeFile != null) { + DockerComposeService dcs = DockerComposeConverter.fromCode(composeFile.getCode(), composeFile.getProjectId()); + Optional<Integer> port = dcs.getPortsMap().entrySet().stream() + .filter(e -> Objects.equals(e.getValue(), INTERNAL_PORT)).map(Map.Entry::getKey).findFirst(); + return port.orElse(null); + } + return null; + } catch (Exception e) { + return null; } - return null; } private int getMaxPortMappedInProjects() {