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 0717688c Project build image
0717688c is described below
commit 0717688cc605035a6b3f95910d9891fab9562576
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon Jun 10 10:46:22 2024 -0400
Project build image
---
.../org/apache/camel/karavan/KaravanConstants.java | 2 ++
.../apache/camel/karavan/docker/DockerForKaravan.java | 13 +++++++------
.../camel/karavan/kubernetes/KubernetesService.java | 18 +++++++++++-------
.../org/apache/camel/karavan/service/CodeService.java | 17 ++++++++++++++++-
.../apache/camel/karavan/service/ProjectService.java | 7 ++++---
5 files changed, 40 insertions(+), 17 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 cf0de596..f0a250e5 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
@@ -19,6 +19,8 @@ package org.apache.camel.karavan;
public class KaravanConstants {
public static final String DEV_ENVIRONMENT = "dev";
+ 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_JBANG_OPTIONS = "JBANG_OPTIONS";
public static final String LABEL_PART_OF = "app.kubernetes.io/part-of";
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 2b5f0445..1489a43c 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
@@ -39,7 +39,7 @@ public class DockerForKaravan {
private static final Logger LOGGER =
Logger.getLogger(DockerForKaravan.class.getName());
- @ConfigProperty(name = "karavan.devmode.image")
+ @ConfigProperty(name = DEVMODE_IMAGE)
String devmodeImage;
@Inject
@@ -49,13 +49,14 @@ public class DockerForKaravan {
ProjectService projectService;
public void runProjectInDevMode(String projectId, String jBangOptions,
Map<Integer, Integer> ports,
- Map<String, String> files) throws
Exception {
- Container c = createDevmodeContainer(projectId, jBangOptions, ports,
new HashMap<>());
+ Map<String, String> files, String
projectDevmodeImage) throws Exception {
+ Container c = createDevmodeContainer(projectId, jBangOptions, ports,
new HashMap<>(), projectDevmodeImage);
dockerService.runContainer(projectId);
dockerService.copyFiles(c.getId(), "/karavan/code", files, true);
}
- protected Container createDevmodeContainer(String projectId, String
jBangOptions, Map<Integer, Integer> ports, Map<String, String> volumes) throws
InterruptedException {
+ protected Container createDevmodeContainer(String projectId, String
jBangOptions, Map<Integer, Integer> ports,
+ Map<String, String> volumes,
String projectDevmodeImage) throws InterruptedException {
LOGGER.infof("DevMode starting for %s with JBANG_OPTIONS=%s",
projectId, jBangOptions);
HealthCheck healthCheck = new HealthCheck().withTest(List.of("CMD",
"curl", "-f", "http://localhost:8080/q/dev/health"))
@@ -67,7 +68,8 @@ public class DockerForKaravan {
DockerComposeService composeService =
projectService.getProjectDockerComposeService(projectId);
- return dockerService.createContainer(projectId, devmodeImage,
+ return dockerService.createContainer(projectId,
+ (projectDevmodeImage != null ? projectDevmodeImage :
devmodeImage),
env, ports, healthCheck,
Map.of(LABEL_TYPE,
PodContainerStatus.ContainerType.devmode.name(),
LABEL_PROJECT_ID, projectId,
@@ -75,7 +77,6 @@ public class DockerForKaravan {
),
volumes, null, RestartPolicy.noRestart(), false,
composeService.getCpus(), composeService.getCpu_percent(),
composeService.getMem_limit(), composeService.getMem_reservation());
-
}
public void runBuildProject(Project project, String script, List<String>
env, Map<String, String> sshFiles, String tag) throws Exception {
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 8c325a49..0339262f 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
@@ -61,9 +61,12 @@ public class KubernetesService {
@ConfigProperty(name = "karavan.environment")
public String environment;
- @ConfigProperty(name = "karavan.devmode.image")
+ @ConfigProperty(name = DEVMODE_IMAGE)
public String devmodeImage;
+ @ConfigProperty(name = DEVMODE_IMAGE_PULL_POLICY, defaultValue =
"IfNotPresent")
+ public Optional<String> devmodeImagePullPolicy;
+
@ConfigProperty(name = "karavan.devmode.service.account")
public String devModeServiceAccount;
@@ -208,7 +211,7 @@ public class KubernetesService {
.withName(name)
.withImage(devmodeImage)
.withPorts(port)
- .withImagePullPolicy("Always")
+
.withImagePullPolicy(devmodeImagePullPolicy.orElse("IfNotPresent"))
.withEnv(envVars)
.withCommand("/bin/sh", "-c", "/karavan/builder/build.sh")
.withVolumeMounts(volumeMounts)
@@ -336,7 +339,7 @@ public class KubernetesService {
return result;
}
- public void runDevModeContainer(Project project, String jBangOptions,
Map<String, String> files) {
+ public void runDevModeContainer(Project project, String jBangOptions,
Map<String, String> files, String projectDevmodeImage) {
String name = project.getProjectId();
Map<String, String> labels = getLabels(name, project,
PodContainerStatus.ContainerType.devmode);
@@ -347,7 +350,7 @@ public class KubernetesService {
Pod old =
client.pods().inNamespace(getNamespace()).withName(name).get();
if (old == null) {
Map<String, String> containerResources =
CodeService.DEFAULT_CONTAINER_RESOURCES;
- Pod pod = getDevModePod(name, jBangOptions,
containerResources, labels);
+ Pod pod = getDevModePod(name, jBangOptions,
containerResources, labels, projectDevmodeImage);
Pod result = client.resource(pod).createOrReplace();
copyFilesToContainer(result, files, "/karavan/code");
LOGGER.info("Created pod " + result.getMetadata().getName());
@@ -390,7 +393,8 @@ public class KubernetesService {
.build();
}
- private Pod getDevModePod(String name, String jbangOptions, Map<String,
String> containerResources, Map<String, String> labels) {
+ private Pod getDevModePod(String name, String jbangOptions, Map<String,
String> containerResources,
+ Map<String, String> labels, String
projectDevmodeImage) {
ResourceRequirements resources =
getResourceRequirements(containerResources);
ObjectMeta meta = new ObjectMetaBuilder()
@@ -407,10 +411,10 @@ public class KubernetesService {
Container container = new ContainerBuilder()
.withName(name)
- .withImage(devmodeImage)
+ .withImage(projectDevmodeImage != null ? projectDevmodeImage :
devmodeImage)
.withPorts(port)
.withResources(resources)
- .withImagePullPolicy("IfNotPresent")
+
.withImagePullPolicy(devmodeImagePullPolicy.orElse("IfNotPresent"))
.withEnv(new
EnvVarBuilder().withName(ENV_VAR_JBANG_OPTIONS).withValue(jbangOptions).build())
.build();
diff --git
a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
index 52ed09a0..6959585d 100644
---
a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
+++
b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
@@ -41,6 +41,7 @@ import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
+import static org.apache.camel.karavan.KaravanConstants.DEVMODE_IMAGE;
import static org.apache.camel.karavan.KaravanConstants.DEV_ENVIRONMENT;
@ApplicationScoped
@@ -80,6 +81,20 @@ public class CodeService {
"limits.cpu", "2000m"
);
+ public String getProjectDevModeImage(String projectId) {
+ try {
+ ProjectFile appProp = getApplicationProperties(projectId);
+ return getPropertyValue(appProp.getCode(), DEVMODE_IMAGE);
+ } catch (Exception e) {
+ LOGGER.error("getProjectDevModeImage " + (e.getCause() != null ?
e.getCause().getMessage() : e.getMessage()));
+ return null;
+ }
+ }
+
+ private ProjectFile getApplicationProperties(String projectId) {
+ return karavanCache.getProjectFile(projectId,
APPLICATION_PROPERTIES_FILENAME);
+ }
+
public Map<String, String> getProjectFilesForDevMode(String projectId,
Boolean withKamelets) {
Map<String, String> files =
karavanCache.getProjectFiles(projectId).stream()
.filter(f -> !f.getName().endsWith(MARKDOWN_EXTENSION))
@@ -114,7 +129,7 @@ public class CodeService {
return result;
}
- public ProjectFile getApplicationProperties(Project project) {
+ public ProjectFile generateApplicationProperties(Project project) {
String code = getTemplateText(APPLICATION_PROPERTIES_FILENAME);
if (code != null) {
code = code.replace("{projectId}", project.getProjectId());
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 bc42e4ca..1f0e7cd4 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
@@ -97,11 +97,12 @@ public class ProjectService {
eventBus.publish(POD_CONTAINER_UPDATED,
JsonObject.mapFrom(status));
Map<String, String> files =
codeService.getProjectFilesForDevMode(project.getProjectId(), true);
+ String projectDevmodeImage =
codeService.getProjectDevModeImage(project.getProjectId());
if (ConfigService.inKubernetes()) {
- kubernetesService.runDevModeContainer(project, jBangOptions,
files);
+ kubernetesService.runDevModeContainer(project, jBangOptions,
files, projectDevmodeImage);
} else {
DockerComposeService dcs =
codeService.getDockerComposeService(project.getProjectId());
- dockerForKaravan.runProjectInDevMode(project.getProjectId(),
jBangOptions, dcs.getPortsMap(), files);
+ dockerForKaravan.runProjectInDevMode(project.getProjectId(),
jBangOptions, dcs.getPortsMap(), files, projectDevmodeImage);
}
return containerName;
} else {
@@ -237,7 +238,7 @@ public class ProjectService {
throw new Exception("Project with id " + project.getProjectId() +
" already exists");
} else {
karavanCache.saveProject(project);
- ProjectFile appProp =
codeService.getApplicationProperties(project);
+ ProjectFile appProp =
codeService.generateApplicationProperties(project);
karavanCache.saveProjectFile(appProp, false);
if (!ConfigService.inKubernetes()) {
ProjectFile projectCompose =
codeService.createInitialProjectCompose(project, getMaxPortMappedInProjects() +
1);