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 3c9a7b3b Support restart policy for #885
3c9a7b3b is described below

commit 3c9a7b3b93f7f6219da4d2b074d0fcee84da864d
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Sep 13 17:08:43 2023 -0400

    Support restart policy for #885
---
 .../apache/camel/karavan/docker/DockerForKaravan.java   |  5 +++--
 .../org/apache/camel/karavan/docker/DockerService.java  | 17 +++++++++++------
 2 files changed, 14 insertions(+), 8 deletions(-)

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 4d5ad276..2789033c 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
@@ -18,6 +18,7 @@ package org.apache.camel.karavan.docker;
 
 import com.github.dockerjava.api.model.Container;
 import com.github.dockerjava.api.model.HealthCheck;
+import com.github.dockerjava.api.model.RestartPolicy;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
@@ -69,7 +70,7 @@ public class DockerForKaravan {
         return dockerService.createContainer(projectId, devmodeImage,
                 env, ports, healthCheck,
                 Map.of(LABEL_TYPE, 
ContainerStatus.ContainerType.devmode.name(), LABEL_PROJECT_ID, projectId),
-                volumes, null);
+                volumes, null, RestartPolicy.noRestart());
 
     }
 
@@ -92,7 +93,7 @@ public class DockerForKaravan {
                         LABEL_PROJECT_ID, project.getProjectId(),
                         LABEL_TAG, tag
                 ),
-                volumes, null,"/karavan/build.sh");
+                volumes, null,RestartPolicy.noRestart(), "/karavan/build.sh");
     }
 
     private Map<String,String> getMavenVolumes(){
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 f003c099..00eb083e 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
@@ -156,8 +156,15 @@ public class DockerService extends DockerServiceUtils {
 
             LOGGER.infof("Compose Service started for %s", 
compose.getContainer_name());
 
+            RestartPolicy restartPolicy = RestartPolicy.noRestart();
+            if (Objects.equals(compose.getRestart(), 
RestartPolicy.onFailureRestart(10).getName())) {
+                restartPolicy = RestartPolicy.onFailureRestart(10);
+            } else if (Objects.equals(compose.getRestart(), 
RestartPolicy.alwaysRestart().getName())) {
+                restartPolicy = RestartPolicy.alwaysRestart();
+            }
+
             return createContainer(compose.getContainer_name(), 
compose.getImage(),
-                    env, compose.getPortsMap(), healthCheck, 
Map.of(LABEL_TYPE, type.name()), Map.of(), NETWORK_NAME);
+                    env, compose.getPortsMap(), healthCheck, 
Map.of(LABEL_TYPE, type.name()), Map.of(), NETWORK_NAME, restartPolicy);
 
         } else {
             LOGGER.info("Compose Service already exists: " + 
containers.get(0).getId());
@@ -172,7 +179,8 @@ public class DockerService extends DockerServiceUtils {
 
     public Container createContainer(String name, String image, List<String> 
env, Map<Integer, Integer> ports,
                                      HealthCheck healthCheck, Map<String, 
String> labels,
-                                     Map<String, String> volumes, String 
network, String... command) throws InterruptedException {
+                                     Map<String, String> volumes, String 
network, RestartPolicy restartPolicy,
+                                     String... command) throws 
InterruptedException {
         List<Container> containers = findContainer(name);
         if (containers.size() == 0) {
             pullImage(image);
@@ -195,6 +203,7 @@ public class DockerService extends DockerServiceUtils {
                 mounts.add(new 
Mount().withType(MountType.BIND).withSource("/var/run/docker.sock").withTarget("/var/run/docker.sock"));
             }
             createContainerCmd.withHostConfig(new HostConfig()
+                            .withRestartPolicy(restartPolicy)
                     .withPortBindings(portBindings)
                     .withMounts(mounts)
                     .withNetworkMode(network != null ? network : 
NETWORK_NAME));
@@ -251,10 +260,6 @@ public class DockerService extends DockerServiceUtils {
                 .exec();
     }
 
-    public void execStart(String id) throws InterruptedException {
-        getDockerClient().execStartCmd(id).start().awaitCompletion();
-    }
-
     public void execStart(String id, ResultCallback.Adapter<Frame> callBack) 
throws InterruptedException {
         dockerClient.execStartCmd(id).exec(callBack).awaitCompletion();
     }

Reply via email to