You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/09/27 23:15:47 UTC

[camel-karavan] branch main updated: Custom Kamelets in DevMode in Docker #913

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 803dacf1 Custom Kamelets in DevMode in Docker #913
803dacf1 is described below

commit 803dacf188a3322f62444f71f47d984f2fd46180
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Sep 27 19:15:37 2023 -0400

    Custom Kamelets in DevMode in Docker #913
---
 .../main/java/org/apache/camel/karavan/code/CodeService.java  | 11 ++++++++++-
 .../org/apache/camel/karavan/docker/DockerForKaravan.java     |  3 ++-
 .../java/org/apache/camel/karavan/docker/DockerService.java   |  7 ++++++-
 .../java/org/apache/camel/karavan/service/ProjectService.java |  9 +++++++--
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
index d28af85b..034ca5eb 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
@@ -46,6 +46,9 @@ import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.SafeConstructor;
 
 import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.time.Instant;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -59,6 +62,7 @@ public class CodeService {
     public static final String DEV_SERVICES_FILENAME = "devservices.yaml";
     public static final String PROJECT_COMPOSE_FILENAME = "docker-compose.yaml";
     public static final String PROJECT_DEPLOYMENT_JKUBE_FILENAME = "deployment.jkube.yaml";
+    public static final String KAMELETS_FOLDER = "kamelets";
     private static final String SNIPPETS_PATH = "/snippets/";
     private static final int INTERNAL_PORT = 8080;
 
@@ -106,8 +110,12 @@ public class CodeService {
         return new ProjectFile(APPLICATION_PROPERTIES_FILENAME, code, project.getProjectId(), Instant.now().toEpochMilli());
     }
 
-    public String saveProjectFilesInTemp(Map<String, String> files) {
+    public String saveProjectFilesInTemp(Map<String, String> files) throws IOException {
         String temp = vertx.fileSystem().createTempDirectoryBlocking("temp");
+        Path kameplesPath = Paths.get(temp, KAMELETS_FOLDER);
+        if (!Files.exists(kameplesPath)) {
+            Files.createDirectories(kameplesPath);
+        }
         files.forEach((fileName, code) -> addFile(temp, fileName, code));
         return temp;
     }
@@ -118,6 +126,7 @@ public class CodeService {
             vertx.fileSystem().writeFileBlocking(path, Buffer.buffer(code));
         } catch (Exception e) {
             LOGGER.error(e.getMessage());
+            e.printStackTrace();
         }
     }
 
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
index aebc197e..1e643185 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
@@ -50,7 +50,8 @@ public class DockerForKaravan {
     @Inject
     RegistryService registryService;
 
-    public void runProjectInDevMode(String projectId, String jBangOptions, Map<Integer, Integer> ports, Map<String, String> files) throws Exception {
+    public void runProjectInDevMode(String projectId, String jBangOptions, Map<Integer, Integer> ports,
+                                    Map<String, String> files) throws Exception {
         Map<String, String> volumes = getMavenVolumes();
         Container c = createDevmodeContainer(projectId, jBangOptions, ports, volumes);
         dockerService.runContainer(projectId);
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
index 174a33e5..40142177 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
@@ -233,6 +233,10 @@ public class DockerService extends DockerServiceUtils {
         }
     }
 
+    public void execCommandInContainer(Container container, String... cmd) {
+        getDockerClient().execCreateCmd(container.getId()).withCmd(cmd).exec();
+    }
+
     public List<Container> listContainers(Boolean showAll) {
         return getDockerClient().listContainersCmd().withShowAll(showAll).exec();
     }
@@ -264,8 +268,9 @@ public class DockerService extends DockerServiceUtils {
         dockerClient.execStartCmd(id).exec(callBack).awaitCompletion();
     }
 
-    public void copyFiles(String containerId, String containerPath, Map<String, String> files) {
+    public void copyFiles(String containerId, String containerPath, Map<String, String> files) throws IOException {
         String temp = codeService.saveProjectFilesInTemp(files);
+        System.out.println(temp);
         dockerClient.copyArchiveToContainerCmd(containerId).withRemotePath(containerPath)
                 .withDirChildrenOnly(true).withHostResource(temp).exec();
     }
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 69c7e65a..0848f2de 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -40,13 +40,13 @@ import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.inject.Default;
 import jakarta.inject.Inject;
 
+import java.io.File;
 import java.time.Instant;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
-import static org.apache.camel.karavan.code.CodeService.DEV_SERVICES_FILENAME;
-import static org.apache.camel.karavan.code.CodeService.PROJECT_COMPOSE_FILENAME;
+import static org.apache.camel.karavan.code.CodeService.*;
 
 @Default
 @Readiness
@@ -110,6 +110,11 @@ public class ProjectService implements HealthCheck {
                         .filter(f -> !Objects.equals(f.getName(), PROJECT_COMPOSE_FILENAME))
                         .collect(Collectors.toMap(ProjectFile::getName, ProjectFile::getCode));
 
+                infinispanService.getProjectFiles(Project.Type.kamelets.name())
+                        .forEach(file -> files.put(KAMELETS_FOLDER + File.separator + file.getName(), file.getCode()));
+
+                files.forEach((s, s2) -> System.out.println(s));
+
                 ProjectFile compose = infinispanService.getProjectFile(project.getProjectId(), PROJECT_COMPOSE_FILENAME);
                 DockerComposeService dcs = DockerComposeConverter.fromCode(compose.getCode(), project.getProjectId());
                 dockerForKaravan.runProjectInDevMode(project.getProjectId(), jBangOptions, dcs.getPortsMap(), files);