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";