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