This is an automated email from the ASF dual-hosted git repository.
linying pushed a commit to branch dev-2.1.3
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git
The following commit(s) were added to refs/heads/dev-2.1.3 by this push:
new 8f82ca3e8 [Feat] docker check support (#3593)
8f82ca3e8 is described below
commit 8f82ca3e85cd1219c9c1e49a1850bbf96b318b5c
Author: benjobs <[email protected]>
AuthorDate: Fri Mar 1 16:35:04 2024 +0800
[Feat] docker check support (#3593)
---
.../streampark-console-service/pom.xml | 22 +++++++++++
.../core/service/impl/SettingServiceImpl.java | 45 ++++++++++++++++++++--
.../console/core/service/SettingServiceTest.java | 15 ++++++++
.../src/views/setting/System/SettingForm.vue | 2 +-
4 files changed, 80 insertions(+), 4 deletions(-)
diff --git a/streampark-console/streampark-console-service/pom.xml
b/streampark-console/streampark-console-service/pom.xml
index b53096058..7022c2c24 100644
--- a/streampark-console/streampark-console-service/pom.xml
+++ b/streampark-console/streampark-console-service/pom.xml
@@ -41,6 +41,8 @@
<MaxPermGen>512m</MaxPermGen>
<CodeCacheSize>512m</CodeCacheSize>
+ <docker.client.version>3.2.13</docker.client.version>
+
<knife4j-openapi3.version>4.0.0</knife4j-openapi3.version>
<springdoc-openapi-ui.version>1.6.9</springdoc-openapi-ui.version>
<commons-compress.version>1.21</commons-compress.version>
@@ -153,6 +155,26 @@
</exclusions>
</dependency>
+
+ <!-- docker client-->
+ <dependency>
+ <groupId>com.github.docker-java</groupId>
+ <artifactId>docker-java-core</artifactId>
+ <version>${docker.client.version}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>guava</artifactId>
+ <groupId>com.google.guava</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>com.github.docker-java</groupId>
+ <artifactId>docker-java-transport-httpclient5</artifactId>
+ <version>${docker.client.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
index f7da3fa7a..0386db4b1 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
@@ -29,6 +29,14 @@ import org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.model.AuthConfig;
+import com.github.dockerjava.api.model.AuthResponse;
+import com.github.dockerjava.core.DefaultDockerClientConfig;
+import com.github.dockerjava.core.DockerClientConfig;
+import com.github.dockerjava.core.DockerClientImpl;
+import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
+import com.github.dockerjava.transport.DockerHttpClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
@@ -145,10 +153,41 @@ public class SettingServiceImpl extends
ServiceImpl<SettingMapper, Setting>
@Override
public ResponseResult checkDocker(DockerConfig dockerConfig) {
- // TODO check
+ DockerClientConfig config =
+ DefaultDockerClientConfig.createDefaultConfigBuilder()
+ .withRegistryUrl(dockerConfig.getAddress())
+ .build();
+
+ DockerHttpClient httpClient =
+ new
ApacheDockerHttpClient.Builder().dockerHost(config.getDockerHost()).build();
+
ResponseResult result = new ResponseResult();
- result.setStatus(200);
- result.setMsg("success");
+
+ try (DockerClient dockerClient = DockerClientImpl.getInstance(config,
httpClient)) {
+ AuthConfig authConfig =
+ new AuthConfig()
+ .withUsername(dockerConfig.getUserName())
+ .withPassword(dockerConfig.getPassword())
+ .withRegistryAddress(dockerConfig.getAddress());
+ AuthResponse response =
dockerClient.authCmd().withAuthConfig(authConfig).exec();
+ if (response.getStatus().equals("Login Succeeded")) {
+ result.setStatus(200);
+ } else {
+ result.setStatus(500);
+ result.setMsg("docker login failed, status: " + response.getStatus());
+ }
+ } catch (Exception e) {
+ if (e.getMessage().contains("LastErrorException")) {
+ result.setStatus(400);
+ } else if (e.getMessage().contains("Status 401")) {
+ result.setStatus(500);
+ result.setMsg(
+ "Failed to validate Docker registry, unauthorized: incorrect
username or password ");
+ } else {
+ result.setStatus(500);
+ result.setMsg("Failed to validate Docker registry, error: " +
e.getMessage());
+ }
+ }
return result;
}
diff --git
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
index 40ab59621..8d119a42c 100644
---
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
+++
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
@@ -98,4 +98,19 @@ class SettingServiceTest extends SpringTestBase {
ResponseResult result = settingService.checkEmail(senderEmail);
Assertions.assertEquals(result.getStatus(), 200);
}
+
+ @Test
+ void checkDockerTest() {
+ String username = "******";
+ String password = "******";
+
+ DockerConfig dockerConfig = new DockerConfig();
+ dockerConfig.setAddress("registry.cn-hangzhou.aliyuncs.com");
+ dockerConfig.setUserName(username);
+ dockerConfig.setPassword(password);
+ dockerConfig.setNamespace("streampark");
+
+ ResponseResult result = settingService.checkDocker(dockerConfig);
+ Assertions.assertEquals(result.getStatus(), 200);
+ }
}
diff --git
a/streampark-console/streampark-console-webapp/src/views/setting/System/SettingForm.vue
b/streampark-console/streampark-console-webapp/src/views/setting/System/SettingForm.vue
index 0175f72b1..86d3bd3e8 100644
---
a/streampark-console/streampark-console-webapp/src/views/setting/System/SettingForm.vue
+++
b/streampark-console/streampark-console-webapp/src/views/setting/System/SettingForm.vue
@@ -95,7 +95,7 @@
const formData = await validate();
if (type.value === 'docker') {
const resp = await fetchVerifyDocker(formData);
- if (resp.status === 200) {
+ if (resp.status === 200 || resp.status === 400) {
await fetchDockerUpdate(formData);
} else {
Swal.fire({