You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ap...@apache.org on 2023/11/06 08:17:01 UTC

(ignite-3) branch main updated: IGNITE-20783 Add Swagger UI docker-compose (#2798)

This is an automated email from the ASF dual-hosted git repository.

apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new d8407d1282 IGNITE-20783 Add Swagger UI docker-compose (#2798)
d8407d1282 is described below

commit d8407d1282f359673652fa5c504d7e4f002b3302
Author: Aleksandr Pakhomov <ap...@gmail.com>
AuthorDate: Mon Nov 6 12:16:57 2023 +0400

    IGNITE-20783 Add Swagger UI docker-compose (#2798)
    
    * docker-compose file added
    * security schema defined in openapi.yaml
    * CORS enabled for Authorization header
---
 DEVNOTES.md                                            | 10 ++++++++++
 modules/rest-api/openapi/docker-compose.yml            | 10 ++++++++++
 modules/rest-api/openapi/openapi.yaml                  |  8 ++++++++
 .../apache/ignite/internal/rest/api/Definition.java    | 18 +++++++++++++-----
 .../org/apache/ignite/internal/rest/RestComponent.java |  2 ++
 5 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/DEVNOTES.md b/DEVNOTES.md
index 4e1904204b..68902bca0b 100644
--- a/DEVNOTES.md
+++ b/DEVNOTES.md
@@ -274,6 +274,16 @@ docker run -it --rm --net ignite3_default apacheignite/ignite3 cli
 > cluster init --cluster-name cluster --meta-storage-node node1 --meta-storage-node node2 --meta-storage-node node3
 ```
 
+### Run Swagger UI with docker-compose
+
+To run Swagger UI in docker, run the following command:
+```shell
+  cd modules/rest-api/openapi
+  docker-compose up
+```
+
+Swagger UI will be available at http://localhost:8082
+
 ## Release candidate verification
 1. Build all packages (this will also run unit tests and all checks)
     ```shell
diff --git a/modules/rest-api/openapi/docker-compose.yml b/modules/rest-api/openapi/docker-compose.yml
new file mode 100644
index 0000000000..76002a8d1e
--- /dev/null
+++ b/modules/rest-api/openapi/docker-compose.yml
@@ -0,0 +1,10 @@
+services:
+  swagger-ui:
+    image: swaggerapi/swagger-ui
+    container_name: "swagger-ui-container"
+    ports:
+      - "8082:8080"
+    volumes:
+      - ./openapi.yaml:/swagger.yml
+    environment:
+      SWAGGER_JSON: /swagger.yml
diff --git a/modules/rest-api/openapi/openapi.yaml b/modules/rest-api/openapi/openapi.yaml
index 15b7d30b95..0e691aacf7 100644
--- a/modules/rest-api/openapi/openapi.yaml
+++ b/modules/rest-api/openapi/openapi.yaml
@@ -7,6 +7,10 @@ info:
     name: Apache 2.0
     url: https://ignite.apache.org
   version: 3.0.0-SNAPSHOT
+servers:
+- url: http://localhost:10300
+security:
+- basicAuth: []
 paths:
   /management/v1/cluster/init:
     post:
@@ -984,3 +988,7 @@ components:
       enum:
       - MAJORITY
       - ALL
+  securitySchemes:
+    basicAuth:
+      type: http
+      scheme: basic
diff --git a/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/Definition.java b/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/Definition.java
index aae05ac595..dcbb78a2d2 100644
--- a/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/Definition.java
+++ b/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/Definition.java
@@ -18,17 +18,25 @@
 package org.apache.ignite.internal.rest.api;
 
 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
+import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
 import io.swagger.v3.oas.annotations.info.Contact;
 import io.swagger.v3.oas.annotations.info.Info;
 import io.swagger.v3.oas.annotations.info.License;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.security.SecurityScheme;
+import io.swagger.v3.oas.annotations.servers.Server;
 
 /**
  * Dummy class used to generate OpenAPI specification.
  */
-@OpenAPIDefinition(info = @Info(
-        title = "Ignite REST module",
-        version = "3.0.0-SNAPSHOT",
-        license = @License(name = "Apache 2.0", url = "https://ignite.apache.org"),
-        contact = @Contact(email = "user@ignite.apache.org")))
+@OpenAPIDefinition(
+        servers = @Server(url = "http://localhost:10300"),
+        info = @Info(
+                title = "Ignite REST module",
+                version = "3.0.0-SNAPSHOT",
+                license = @License(name = "Apache 2.0", url = "https://ignite.apache.org"),
+                contact = @Contact(email = "user@ignite.apache.org")))
+@SecurityRequirement(name = "basicAuth")
+@SecurityScheme(name = "basicAuth", scheme = "basic", type = SecuritySchemeType.HTTP)
 public class Definition {
 }
diff --git a/modules/rest/src/main/java/org/apache/ignite/internal/rest/RestComponent.java b/modules/rest/src/main/java/org/apache/ignite/internal/rest/RestComponent.java
index 866ef432a8..39f0569be2 100644
--- a/modules/rest/src/main/java/org/apache/ignite/internal/rest/RestComponent.java
+++ b/modules/rest/src/main/java/org/apache/ignite/internal/rest/RestComponent.java
@@ -188,6 +188,8 @@ public class RestComponent implements IgniteComponent {
 
         Map<String, Object> result = new HashMap<>();
         result.put("micronaut.server.port", port);
+        result.put("micronaut.server.cors.enabled", "true");
+        result.put("micronaut.server.cors.configurations.web.allowed-headers", "Authorization");
         result.put("ignite.endpoints.filter-non-initialized", "true");
 
         if (sslEnabled) {