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 fb784c59 Images list for #817
fb784c59 is described below

commit fb784c59f904247077308e3c040cfc6724fd6813
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Wed Sep 6 19:16:48 2023 -0400

    Images list for #817
---
 .../apache/camel/karavan/api/ImagesResource.java   | 44 ++++++++++++++
 .../camel/karavan/docker/DockerForKaravan.java     | 19 ++----
 .../apache/camel/karavan/docker/DockerService.java |  5 ++
 .../apache/camel/karavan/service/GitService.java   | 21 +++++++
 .../camel/karavan/service/ProjectService.java      | 29 +++------
 .../camel/karavan/service/RegistryService.java     | 68 ++++++++++++++++++++++
 6 files changed, 153 insertions(+), 33 deletions(-)

diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
new file mode 100644
index 00000000..882ef5db
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.karavan.api;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import org.apache.camel.karavan.docker.DockerService;
+import org.apache.camel.karavan.service.RegistryService;
+
+import java.util.List;
+
+@Path("/api/image")
+public class ImagesResource {
+
+    @Inject
+    DockerService dockerService;
+
+    @Inject
+    RegistryService registryService;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/{projectId}")
+    public List<String> getImagesForProject(@HeaderParam("username") String 
username,
+                                 @PathParam("projectId") String projectId) 
throws Exception {
+        String pattern = registryService.getRegistryWithGroup() + "/" + 
projectId;
+        return dockerService.getImages().stream().filter(s -> 
s.startsWith(pattern)).toList();
+    }
+}
\ No newline at end of file
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 017c133f..13b4bf76 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
@@ -22,13 +22,13 @@ import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import org.apache.camel.karavan.docker.model.DockerComposeService;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
+import org.apache.camel.karavan.service.RegistryService;
 import org.apache.camel.karavan.shared.ConfigService;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.jboss.logging.Logger;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 import static org.apache.camel.karavan.shared.Constants.*;
 
@@ -40,16 +40,12 @@ public class DockerForKaravan {
     @ConfigProperty(name = "karavan.devmode.image")
     String devmodeImage;
 
-    @ConfigProperty(name = "karavan.image-registry-install-registry")
-    boolean installRegistry;
-    @ConfigProperty(name = "karavan.image-registry")
-    String registry;
-    @ConfigProperty(name = "karavan.image-group")
-    String group;
-
     @Inject
     DockerService dockerService;
 
+    @Inject
+    RegistryService registryService;
+
     public void runProjectInDevMode(String projectId, String jBangOptions, 
Map<Integer, Integer> ports, Map<String, String> files) throws Exception {
         Container c = createDevmodeContainer(projectId, jBangOptions, ports);
         dockerService.runContainer(projectId);
@@ -96,11 +92,8 @@ public class DockerForKaravan {
     }
 
     public void syncImage(String projectId, String tag) throws 
InterruptedException {
-        String registryUrl = registry;
-        if (ConfigService.inDocker() && installRegistry) {
-            registryUrl = "localhost:5555";
-        }
-        String image = registryUrl + "/" + group + "/" + projectId + ":" + tag;
+        String image = registryService.getRegistryWithGroup() + "/" + 
projectId + ":" + tag;
+        System.out.println(image);
         dockerService.pullImage(image);
     }
 }
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 d1c717fa..6a06a0c9 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
@@ -378,4 +378,9 @@ public class DockerService extends DockerServiceUtils {
                 .mapToInt(Integer::intValue)
                 .max().orElse(port);
     }
+
+    public List<String> getImages() {
+        return 
getDockerClient().listImagesCmd().withShowAll(true).exec().stream()
+                .map(image -> image.getRepoTags()[0]).toList();
+    }
 }
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
index 47329fb0..7fb99882 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
@@ -112,6 +112,27 @@ public class GitService {
         }
     }
 
+    public GitConfig getGitConfigForBuilder() {
+        String propertiesPrefix = "karavan.";
+        String branch = ConfigProvider.getConfig().getValue(propertiesPrefix + 
"git-branch", String.class);
+        if (ConfigService.inKubernetes()) {
+            LOGGER.info("inKubernetes " + kubernetesService.getNamespace());
+            Secret secret = kubernetesService.getKaravanSecret();
+            String uri = new 
String(Base64.getDecoder().decode(secret.getData().get("git-repository").getBytes(StandardCharsets.UTF_8)));
+            String username = new 
String(Base64.getDecoder().decode(secret.getData().get("git-username").getBytes(StandardCharsets.UTF_8)));
+            String password = new 
String(Base64.getDecoder().decode(secret.getData().get("git-password").getBytes(StandardCharsets.UTF_8)));
+            if (secret.getData().containsKey("git-branch")) {
+                branch = new 
String(Base64.getDecoder().decode(secret.getData().get("git-branch").getBytes(StandardCharsets.UTF_8)));
+            }
+            return new GitConfig(uri, username, password, branch);
+        } else {
+            String uri = ConfigProvider.getConfig().getValue(propertiesPrefix 
+ "git-repository", String.class);
+            String username = 
ConfigProvider.getConfig().getValue(propertiesPrefix + "git-username", 
String.class);
+            String password = 
ConfigProvider.getConfig().getValue(propertiesPrefix + "git-password", 
String.class);
+            return new GitConfig(uri, username, password, branch);
+        }
+    }
+
     public RevCommit commitAndPushProject(Project project, List<ProjectFile> 
files, String message) throws GitAPIException, IOException, URISyntaxException {
         LOGGER.info("Commit and push project " + project.getProjectId());
         GitConfig gitConfig = getGitConfig();
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 8755ca93..0005395a 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
@@ -38,10 +38,7 @@ import jakarta.enterprise.inject.Default;
 import jakarta.inject.Inject;
 
 import java.time.Instant;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
@@ -61,15 +58,6 @@ public class ProjectService implements HealthCheck {
     @ConfigProperty(name = "karavan.maven.cache")
     Optional<String> mavenCache;
 
-    @ConfigProperty(name = "karavan.image-registry")
-    String registry;
-    @ConfigProperty(name = "karavan.image-group")
-    String group;
-    @ConfigProperty(name = "karavan.image-registry-username")
-    Optional<String> username;
-    @ConfigProperty(name = "karavan.image-registry-password")
-    Optional<String> password;
-
     @Inject
     InfinispanService infinispanService;
 
@@ -79,6 +67,9 @@ public class ProjectService implements HealthCheck {
     @Inject
     DockerForKaravan dockerForKaravan;
 
+    @Inject
+    RegistryService registryService;
+
     @Inject
     GitService gitService;
 
@@ -148,20 +139,18 @@ public class ProjectService implements HealthCheck {
     }
 
     private List<String> getEnvForBuild(Project project, String tag) {
-        GitConfig gitConfig = gitService.getGitConfig();
-        List<String> env = List.of(
+        GitConfig gitConfig = gitService.getGitConfigForBuilder();
+        List<String> env = new ArrayList<>();
+        env.addAll(registryService.getEnvForBuild());
+        env.addAll(List.of(
                 "GIT_REPOSITORY=" + gitConfig.getUri(),
                 "GIT_USERNAME=" + gitConfig.getUsername(),
                 "GIT_PASSWORD=" + gitConfig.getPassword(),
                 "GIT_BRANCH=" + gitConfig.getBranch(),
                 "PROJECT_ID=" + project.getProjectId(),
-                "IMAGE_REGISTRY=" + registry,
-                "IMAGE_REGISTRY_USERNAME=" + username,
-                "IMAGE_REGISTRY_PASSWORD=" + password,
-                "IMAGE_GROUP=" + group,
                 "JBANG_REPO=~/.m2",
                 "TAG=" + tag
-        );
+        ));
         return env;
     }
 
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/RegistryService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/RegistryService.java
new file mode 100644
index 00000000..33968ed2
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/RegistryService.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.karavan.service;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import org.apache.camel.karavan.infinispan.model.GitConfig;
+import org.apache.camel.karavan.infinispan.model.Project;
+import org.apache.camel.karavan.shared.ConfigService;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+
+import java.util.List;
+import java.util.Optional;
+
+@ApplicationScoped
+public class RegistryService {
+
+    private static final Logger LOGGER = 
Logger.getLogger(RegistryService.class.getName());
+
+    @ConfigProperty(name = "karavan.image-registry-install-registry")
+    boolean installRegistry;
+    @ConfigProperty(name = "karavan.image-registry")
+    String registry;
+    @ConfigProperty(name = "karavan.image-group")
+    String group;
+    @ConfigProperty(name = "karavan.image-registry-username")
+    Optional<String> username;
+    @ConfigProperty(name = "karavan.image-registry-password")
+    Optional<String> password;
+
+
+    public String getRegistry() {
+        String registryUrl = registry;
+        if (!ConfigService.inDocker() && installRegistry) {
+            registryUrl = "localhost:5555";
+        }
+        return registryUrl;
+    }
+
+    public String getRegistryWithGroup() {
+        return getRegistry() + "/" + group;
+    }
+
+    public List<String> getEnvForBuild() {
+        List<String> env = List.of(
+                "IMAGE_REGISTRY=" + registry,
+                "IMAGE_REGISTRY_USERNAME=" + username,
+                "IMAGE_REGISTRY_PASSWORD=" + password,
+                "IMAGE_GROUP=" + group
+        );
+        return env;
+    }
+
+}

Reply via email to