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/01 17:57:02 UTC
[camel-karavan] 05/07: Gitea chaos for #817
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
commit 29682c75edc4b239bac4ecbb3f333c816d5e5b48
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Fri Sep 1 12:54:31 2023 -0400
Gitea chaos for #817
---
.../camel/karavan/docker/DockerEventListener.java | 21 +-----
.../camel/karavan/docker/DockerForGitea.java | 85 +---------------------
.../apache/camel/karavan/service/EventService.java | 23 +-----
.../apache/camel/karavan/service/GiteaService.java | 50 ++++++++-----
.../camel/karavan/service/KaravanService.java | 12 ++-
.../org/apache/camel/karavan/shared/EventType.java | 2 -
6 files changed, 47 insertions(+), 146 deletions(-)
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
index e13a6c76..e9a7b746 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
@@ -59,14 +59,9 @@ public class DockerEventListener implements ResultCallback<Event> {
public void onContainerEvent(Event event, Container container) {
String status = event.getStatus();
-// if (status.startsWith("health_status:") && container.getNames()[0].equals("/gitea")) {
-// onGiteaHealthEvent(container, event);
-// }
if (infinispanService.isReady()) {
if (status.startsWith("health_status:")) {
- if (container.getNames()[0].equals("/infinispan")) {
- onInfinispanHealthEvent(container, event);
- } else if (inDevMode(container)) {
+ if (inDevMode(container)) {
onDevModeHealthEvent(container, event);
}
}
@@ -104,20 +99,6 @@ public class DockerEventListener implements ResultCallback<Event> {
}
}
- public void onGiteaHealthEvent(Container container, Event event) {
- String status = event.getStatus();
- String health = status.replace("health_status: ", "");
- LOGGER.infof("Container %s health status: %s", container.getNames()[0], health);
-// eventBus.publish(GITEA_CONTAINER_STARTED, health);
- }
-
- public void onInfinispanHealthEvent(Container container, Event event) {
- String status = event.getStatus();
- String health = status.replace("health_status: ", "");
- LOGGER.infof("Container %s health status: %s", container.getNames()[0], health);
-// eventBus.publish(INFINISPAN_STARTED, health);
- }
-
public void onDevModeHealthEvent(Container container, Event event) {
String status = event.getStatus();
String health = status.replace("health_status: ", "");
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
index 6c3fb784..38397495 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
@@ -64,19 +64,13 @@ public class DockerForGitea {
var compose = dockerService.getInternalDockerComposeService(GITEA_CONTAINER_NAME);
Container c = dockerService.createContainerFromCompose(compose, ContainerStatus.ContainerType.internal);
dockerService.runContainer(GITEA_CONTAINER_NAME);
- eventBus.publish(GITEA_CREATE_INSTANCE, null);
LOGGER.info("Gitea container is started");
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
}
- @ConsumeEvent(value = GITEA_CREATE_INSTANCE, blocking = true, ordered = true)
- void installGiteaInGiteaContainer(String giteaHealth) {
- installGitea();
- }
-
- protected void createGiteaUser() {
+ public void createGiteaUser() {
try {
LOGGER.info("Creating Gitea User");
GitConfig config = gitService.getGitConfig();
@@ -96,7 +90,6 @@ public class DockerForGitea {
}
}
-
protected void checkGiteaInstance() {
try {
Container gitea = dockerService.getContainerByName(GITEA_CONTAINER_NAME);
@@ -108,78 +101,4 @@ public class DockerForGitea {
LOGGER.error(e.getMessage());
}
}
-
- protected void createGiteaInstance() {
- try {
- LOGGER.info("Creating Gitea Instance");
- Container gitea = dockerService.getContainerByName(GITEA_CONTAINER_NAME);
-// ExecCreateCmdResponse instance = dockerService.execCreate(gitea.getId(),
-// "curl", "-X", "POST", "localhost:3000", "-d",
-// "db_type=sqlite3&db_host=localhost%3A3306&db_user=root&db_passwd=&db_name=gitea" +
-// "&ssl_mode=disable&db_schema=&db_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Fgitea.db&app_name=Gitea%3A+Git+with+a+cup+of+tea" +
-// "&repo_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Frepositories&lfs_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Flfs&run_user=git" +
-// "&domain=localhost&ssh_port=2222&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Flog" +
-// "&smtp_addr=&smtp_port=&smtp_from=&smtp_user=&smtp_passwd=&enable_federated_avatar=on&enable_open_id_sign_in=on" +
-// "&enable_open_id_sign_up=on&default_allow_create_organization=on&default_enable_timetracking=on" +
-// "&no_reply_address=noreply.localhost&password_algorithm=pbkdf2&admin_name=&admin_email=&admin_passwd=&admin_confirm_passwd=",
-// "-H", "'Content-Type: application/x-www-form-urlencoded'");
- ExecCreateCmdResponse instance = dockerService.getDockerClient().execCreateCmd(gitea.getId())
- .withAttachStdout(true).withAttachStderr(true)
- .withCmd("curl", "-X", "POST", "localhost:3000", "-d",
- "db_type=sqlite3&db_host=localhost%3A3306&db_user=root&db_passwd=&db_name=gitea" +
- "&ssl_mode=disable&db_schema=&db_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Fgitea.db&app_name=Gitea%3A+Git+with+a+cup+of+tea" +
- "&repo_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Frepositories&lfs_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Flfs&run_user=git" +
- "&domain=localhost&ssh_port=2222&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Flog" +
- "&smtp_addr=&smtp_port=&smtp_from=&smtp_user=&smtp_passwd=&enable_federated_avatar=on&enable_open_id_sign_in=on" +
- "&enable_open_id_sign_up=on&default_allow_create_organization=on&default_enable_timetracking=on" +
- "&no_reply_address=noreply.localhost&password_algorithm=pbkdf2&admin_name=&admin_email=&admin_passwd=&admin_confirm_passwd=",
- "-H", "'Content-Type: application/x-www-form-urlencoded'")
- .exec();
-
- dockerService.getDockerClient().execStartCmd(instance.getId()).start().awaitCompletion();
- LOGGER.info(instance.toString());
- dockerService.execStart(instance.getId());
- LOGGER.info("Created Gitea Instance");
- } catch (Exception e) {
- LOGGER.error(e.getMessage());
- }
- }
-
- public void installGitea() {
- createGiteaInstance();
- checkGiteaInstance();
- }
-
- private String getURL() throws UnsupportedEncodingException {
- Map<String, String> map = new HashMap();
- map.put("db_type", "sqlite3");
- map.put("db_host", "localhost:3306");
- map.put("db_user", "root");
- map.put("db_passwd", "");
- map.put("db_name", "gitea");
- map.put("ssl_mode", "disable");
- map.put("db_schema", "");
- map.put("db_path", "/data/gitea.db");
- map.put("app_name", "karavan");
- map.put("repo_root_path", "/data/repositories");
- map.put("lfs_root_path", "");
- map.put("run_user", "git");
- map.put("domain", "localhost");
- map.put("ssh_port", "2222");
- map.put("http_port", "3000");
- map.put("app_url", "http://localhost:3000/");
- map.put("log_root_path", "/data/log");
- map.put("enable_federated_avatar", "on");
- map.put("enable_open_id_sign_in", "on");
- map.put("enable_open_id_sign_up", "on");
- map.put("default_allow_create_organization", "on");
- map.put("default_enable_timetracking", "on");
- map.put("no_reply_address", "noreply.localhost");
- map.put("password_algorithm", "pbkdf2");
- map.put("admin_name", "karavan");
- map.put("admin_email", "karavan@karavan.space");
- map.put("admin_passwd", "karavan");
- map.put("admin_confirm_passwd", "karavan");
- return URLEncoder.encode(Json.encode(map), StandardCharsets.UTF_8.toString());
- }
-}
+}
\ No newline at end of file
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java
index 4fa56052..2b161620 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java
@@ -1,26 +1,19 @@
package org.apache.camel.karavan.service;
import io.quarkus.vertx.ConsumeEvent;
-import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonObject;
-import org.apache.camel.karavan.docker.DockerForGitea;
-import org.apache.camel.karavan.docker.DockerForInfinispan;
-import org.apache.camel.karavan.docker.DockerForKaravan;
-import org.apache.camel.karavan.docker.DockerService;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.CamelStatus;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.kubernetes.KubernetesService;
import org.apache.camel.karavan.shared.ConfigService;
-import org.apache.camel.karavan.shared.Constants;
import org.apache.camel.karavan.shared.EventType;
import org.eclipse.microprofile.config.inject.ConfigProperty;
-import org.infinispan.client.hotrod.exceptions.TransportException;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
import java.util.Map;
import java.util.Objects;
@@ -42,18 +35,6 @@ public class EventService {
@Inject
KubernetesService kubernetesService;
- @Inject
- DockerService dockerService;
-
- @Inject
- DockerForInfinispan dockerForInfinispan;
-
- @Inject
- DockerForKaravan dockerForKaravan;
-
- @Inject
- DockerForGitea dockerForGitea;
-
@Inject
CamelService camelService;
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
index b62d268d..6e8bc1be 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.karavan.service;
-import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.Vertx;
import io.vertx.mutiny.core.buffer.Buffer;
@@ -25,7 +24,7 @@ import io.vertx.mutiny.ext.web.client.WebClient;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.karavan.infinispan.model.GitConfig;
-import org.apache.camel.karavan.shared.EventType;
+import org.eclipse.microprofile.faulttolerance.Retry;
import org.jboss.logging.Logger;
import java.util.List;
@@ -39,9 +38,6 @@ public class GiteaService {
@Inject
Vertx vertx;
- @Inject
- EventBus eventBus;
-
@Inject
GitService gitService;
@@ -54,8 +50,30 @@ public class GiteaService {
return webClient;
}
- public void createRepository() {
- try {
+ @Retry(maxRetries = 100, delay = 2000)
+ public void install() throws Exception {
+ LOGGER.info("Install Gitea");
+ HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000").timeout(1000)
+ .putHeader("Content-Type", "application/x-www-form-urlencoded")
+ .sendBuffer(Buffer.buffer(
+ "db_type=sqlite3&db_host=localhost%3A3306&db_user=root&db_passwd=&db_name=gitea" +
+ "&ssl_mode=disable&db_schema=&db_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Fgitea.db&app_name=Karavan" +
+ "&repo_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Frepositories&lfs_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Flfs&run_user=git" +
+ "&domain=localhost&ssh_port=2222&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Flog" +
+ "&smtp_addr=&smtp_port=&smtp_from=&smtp_user=&smtp_passwd=&enable_federated_avatar=on&enable_open_id_sign_in=on" +
+ "&enable_open_id_sign_up=on&default_allow_create_organization=on&default_enable_timetracking=on" +
+ "&no_reply_address=noreply.localhost&password_algorithm=pbkdf2&admin_name=&admin_email=&admin_passwd=&admin_confirm_passwd="
+ ))
+ .subscribeAsCompletionStage().toCompletableFuture().get();
+ if (result.statusCode() != 200 && result.statusCode() != 405) {
+ LOGGER.info("Gitea not ready");
+ throw new Exception("Gitea not ready");
+ }
+ LOGGER.info("Installed Gitea");
+ }
+
+ @Retry(maxRetries = 100, delay = 2000)
+ public void createRepository() throws Exception {
LOGGER.info("Creating Gitea Repository");
String token = generateToken();
HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/user/repos").timeout(500)
@@ -71,16 +89,15 @@ public class GiteaService {
.subscribeAsCompletionStage().toCompletableFuture().get();
if (result.statusCode() == 201) {
JsonObject res = result.bodyAsJsonObject();
- eventBus.publish(EventType.START_INFINISPAN_IN_DOCKER, null);
+ } else {
+ LOGGER.info("Error creating Gitea repository");
+ throw new Exception("Error creating Gitea repository");
}
LOGGER.info("Created Gitea Repository");
- } catch (Exception e) {
- LOGGER.info(e.getMessage());
- }
}
- private String generateToken() {
- try {
+ @Retry(maxRetries = 100, delay = 2000)
+ protected String generateToken() throws Exception {
LOGGER.info("Creating Gitea User Token");
GitConfig config = gitService.getGitConfig();
HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/users/" + config.getUsername() + "/tokens").timeout(500)
@@ -92,10 +109,9 @@ public class GiteaService {
if (result.statusCode() == 201) {
JsonObject res = result.bodyAsJsonObject();
return res.getString("sha1");
+ } else {
+ LOGGER.info("Error getting token");
+ throw new Exception("Error getting token");
}
- } catch (Exception e) {
- LOGGER.info(e.getMessage());
- }
- return null;
}
}
\ No newline at end of file
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index 1eac2bbd..41ef59ab 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -35,6 +35,7 @@ import org.jboss.logging.Logger;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import java.io.IOException;
+import java.util.concurrent.ExecutionException;
import static org.apache.camel.karavan.shared.EventType.IMPORT_PROJECTS;
@@ -64,6 +65,9 @@ public class KaravanService {
@Inject
EventBus eventBus;
+ @Inject
+ GiteaService giteaService;
+
private static final String START_INTERNAL_DOCKER_SERVICES = "START_INTERNAL_DOCKER_SERVICES";
private static final String START_SERVICES = "START_SERVICES";
@@ -73,20 +77,22 @@ public class KaravanService {
} else {
LOGGER.info("Starting Karavan in " + (kubernetesService.isOpenshift() ? "OpenShift" : "Kubernetes"));
}
- eventBus.publish(START_SERVICES, null);
+// eventBus.publish(START_SERVICES, null);
}
@ConsumeEvent(value = START_INTERNAL_DOCKER_SERVICES, blocking = true)
- void startInternalDockerServices(String data) {
+ void startInternalDockerServices(String data) throws Exception {
LOGGER.info("Starting Karavan in Docker");
if (!dockerService.checkDocker()){
Quarkus.asyncExit();
} else {
dockerService.createNetwork();
dockerService.startListeners();
- dockerForInfinispan.startInfinispan();
+// dockerForInfinispan.startInfinispan();
if (giteaInstall) {
dockerForGitea.startGitea();
+ giteaService.install();
+ dockerForGitea.createGiteaUser();
}
}
}
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java
index be501549..609fce03 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java
@@ -24,8 +24,6 @@ public class EventType {
// Import projects from Git repository
public static final String IMPORT_PROJECTS = "IMPORT_PROJECTS";
- public static final String START_INFINISPAN_IN_DOCKER = "START_INFINISPAN_IN_DOCKER";
-
public static final String CONTAINER_STATUS = "CONTAINER_STATUS";
public static final String DEVMODE_CONTAINER_READY = "DEVMODE_STATUS";
public static final String DEVMODE_DELAY_MESSAGE = "DEVMODE_DELAY_MESSAGE";