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;
+ }
+
+}