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) {