Browse Source

test:k8s连接,namespace,service创建

370774330@qq.com 5 years ago
parent
commit
8032d09065

+ 2 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/Context.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.core.pipeline;
 
+import lombok.Builder;
 import lombok.Data;
 import seecoder.devcloud.api.ApplicationProperties;
 
@@ -11,6 +12,7 @@ import java.util.HashMap;
  * @description: 流水线上下文
  */
 @Data
+@Builder
 public class Context {
 
     private ApplicationProperties applicationProperties;

+ 6 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/PipelineConfig.java

@@ -1,9 +1,15 @@
 package seecoder.devcloud.core.pipeline;
 
+import lombok.Data;
+
 /**
  * @author PuHong Weng
  * @date 2021/2/2
  * @description:
  */
+@Data
 public class PipelineConfig {
+
+
+    private String configJson;
 }

+ 0 - 11
core/src/main/java/seecoder/devcloud/core/pipeline/Stage.java

@@ -1,11 +0,0 @@
-package seecoder.devcloud.core.pipeline;
-
-/**
- * @author PuHong Weng
- * @date 2021/2/2
- * @description:
- */
-public interface Stage {
-
-
-}

+ 4 - 4
core/src/main/java/seecoder/devcloud/core/pipeline/handler/AbstractHandler.java

@@ -17,10 +17,10 @@ public abstract class AbstractHandler implements Handler {
 
     public AbstractHandler nextHandler;
 
-    /**
-     * 用来存放Handler的配置
-     */
-    public HashMap<String,String> configs = new HashMap<>();
+//    /**
+//     * 用来存放Handler的配置
+//     */
+//    public HashMap<String,String> configs = new HashMap<>();
 
     @Override
     public void invoke(Context context) {

+ 12 - 7
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sDeploymentHandler.java

@@ -1,9 +1,11 @@
 package seecoder.devcloud.core.pipeline.handler;
 
+import lombok.extern.slf4j.Slf4j;
 import seecoder.devcloud.api.ApplicationProperties;
 import seecoder.devcloud.api.k8s.DeploymentApi;
 import seecoder.devcloud.api.k8s.K8sConstants;
 import seecoder.devcloud.api.k8s.SecretApi;
+import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.model.Container;
 import seecoder.devcloud.api.k8s.model.ContainerPort;
 import seecoder.devcloud.api.k8s.model.Deployment;
@@ -28,6 +30,7 @@ import java.util.stream.Collectors;
  * 2. 以Group Name,作为Namespace, Project Name来作为Deployment name
  * 3. 镜像存放在seecoder的内部私有镜像仓库,所以需要设置
  */
+@Slf4j
 public class K8sDeploymentHandler extends AbstractHandler {
 
     private final SecretApi secretApi;
@@ -96,15 +99,17 @@ public class K8sDeploymentHandler extends AbstractHandler {
         deployment.setImagePullSecrets(registrySecrets);
 
 
-        K8sObjectRequest request = K8sObjectRequest.builder()
-                .namespace(groupName)
-                .name(projectName + K8sConstants.DEPLOYMENT_SUFFIX).build();
-        if (deploymentApi.getByCondition(request).size() == 0) {
+        try {
             deploymentApi.create(deployment);
-        } else {
-            deploymentApi.update(deployment);
+            log.info("deployment创建成功");
+        } catch (K8sApiException e){
+            if (e.getCode() == K8sApiException.ALREADY_EXIST){
+                deploymentApi.update(deployment);
+                log.info("deployment更新成功");
+            } else {
+                throw e;
+            }
         }
-
     }
 
     private void initConfig(Context context) {

+ 11 - 8
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sNamespaceHandler.java

@@ -27,26 +27,29 @@ public class K8sNamespaceHandler extends AbstractHandler {
 
     public K8sNamespaceHandler() {
         namespaceApi = SpringUtil.getBean(NamespaceApi.class);
+        secretApi = SpringUtil.getBean(SecretApi.class);
     }
 
     @Override
     public void process(Context context) {
         Namespace namespace = new Namespace();
-        namespace.setName(context.getProjectName());
+        namespace.setName(context.getGroupName());
 
-
-        K8sObjectRequest request = K8sObjectRequest.builder()
-                .name(context.getGroupName()).build();
-        if (namespaceApi.getByCondition(request).size() == 0) {
-            //namespace不存在的情况
+        //todo namespace在底下资源未删除时,不能轻易删除重建,只能直接通过异常查是否已创建,丑陋,待修改
+        try {
             namespace = namespaceApi.create(namespace);
             log.info("Namespace创建成功, {}", namespace);
             //为命名空间配置私有镜像仓库密钥,使得此命名空间可以访问镜像仓库来部署容器
             ApplicationProperties.Registry registry = context.getApplicationProperties().getRegistry();
             secretApi.createPrivateRegistrySecret(context.getGroupName(), registry.getHost(), registry.getUsername(), registry.getPassword());
-        } else {
-            log.info("Namespace已经存在, 无需新建, 继续执行");
+        } catch (K8sApiException e){
+            if (e.getCode() == K8sApiException.ALREADY_EXIST){
+                log.info("Namespace已经存在, 无需新建");
+            } else{
+                throw e;
+            }
         }
 
+
     }
 }

+ 14 - 11
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sServiceHandler.java

@@ -1,7 +1,9 @@
 package seecoder.devcloud.core.pipeline.handler;
 
+import lombok.extern.slf4j.Slf4j;
 import seecoder.devcloud.api.k8s.K8sConstants;
 import seecoder.devcloud.api.k8s.ServiceApi;
+import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.model.K8sObject;
 import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
 import seecoder.devcloud.api.k8s.model.Service;
@@ -21,6 +23,7 @@ import static seecoder.devcloud.api.k8s.K8sConstants.APPLICATION_LABEL;
  * @date 2021/1/18
  * @description: 通用的k8s建立service
  */
+@Slf4j
 public class K8sServiceHandler extends AbstractHandler {
 
     private ServiceApi serviceApi;
@@ -49,16 +52,16 @@ public class K8sServiceHandler extends AbstractHandler {
                 Collections.singleton(ServicePort.builder().port(servicePort).targetPort(targetPort).build())
         );
 
-        K8sObjectRequest request = K8sObjectRequest.builder()
-                .namespace(context.getGroupName())
-                .name(context.getProjectName()+ K8sConstants.DEPLOYMENT_SUFFIX)
-                .build();
-         if (serviceApi.getByCondition(request).size()==0){
-             serviceApi.create(service);
-         } else {
-             serviceApi.update(service);
-         }
-
-
+        try {
+            serviceApi.create(service);
+            log.info("service创建成功");
+        } catch (K8sApiException e){
+            if (e.getCode() == K8sApiException.ALREADY_EXIST){
+                serviceApi.update(service);
+                log.info("service更新成功");
+            } else {
+                throw e;
+            }
+        }
     }
 }

+ 1 - 7
core/src/main/resources/application-local.yml

@@ -28,13 +28,7 @@ seecoder:
       location: ./problem
   k8s:
     api-server: https://192.168.99.101:8443
-    token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IkM0R1hBTlZ3UjU1eVlKemNocUxBMUtxcUEwaWR3NW9Tb0pzYjA3RktTcjAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tZHo5bHYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjE5NTg0N2NhLTlhYjEtNGQ0Yi05Yjk3LTFhYmQ0MmFlMTQwYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.bEBgxEKWiATzkFu3gb2pljEHYcg5SZXd3fEH9RREbUGCzMQ7T2mibJ-MEMXnUJbEmft7L2OobUs1w_qPe2DSKgBbW97R6XYsillDhsORoDEhHbT-LIn2uK8hKa-1BYMoZ8g3Eo0FR2Ltkod5OrLEhldlkTMcylF_wtg64LlNHfG8MbGHFOZyjhHJRlMeZRrVDg9_c2KBHb_t42tD4NeaUcVrV8t3rA6qT69H8SvNCD4tioE1Pe3jJ840ZDXiJSzo7Qqk9zfyzkGsxC8ND6tc8UbaTt3tZqU9_TmDcptWGlE5wf1cu-F56PmotaQjOwTF1q4_XeY5Vbg_pVknR8-d7Q"
-    ingress-host: seecii.cn
-    public-namespace: dev
-    public-mysql-url: jdbc:mysql://seecii-mysql.dev.svc.cluster.local:3306
-    public-mysql-pod: seecii-mysql-579dc7c857-8m2fd
-    public-mysql-username: root
-    public-mysql-password: NJU67software
+    token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IkM0R1hBTlZ3UjU1eVlKemNocUxBMUtxcUEwaWR3NW9Tb0pzYjA3RktTcjAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZjbG91ZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLWI3OXJjIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwODdkMGI1ZC1mYjBjLTQxYjgtYTM2MC1kMGVlNjI5ZjI1MTUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGV2Y2xvdWQ6ZGVmYXVsdCJ9.NQ33155-zupAnzeyCon8NxhJq3MWTNYDZpfcLy0Y03fvrzCerrs76hFiBBvgagbFO8OvK4LVb-TXnn4ypSfGUvY-cxP_9KesI98BA8B598do36EMaonr0ixLHkErAm7aq_olAmVIa-dOSRnHgFVA9iNCUzLRQFV0fj1PwtCOX-X9gf6_J7pXngo9b4AdeKGVtNEzoNae1pT9q5F1mWBTBkES7Jj-g61HyeqoZKOgK-BNmKdOTXSm4HbTtnGVAXK5xMLmJjJ4UzDgzQzA20XKQv-TC1pUxJ3eyS5QcEUGB8fVv9-fHoDPUloQ6jAm8SNtktrJ5yzPHYH2ZZGY-HiLuA"
     debugging: false
   registry:
     host: 192.168.68.79:18082

+ 34 - 12
core/src/test/java/seecoder/devcloud/core/CoreApplicationTests.java

@@ -1,14 +1,22 @@
 package seecoder.devcloud.core;
 
+import org.junit.Before;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.xml.NamespaceHandler;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 import seecoder.devcloud.api.ApplicationProperties;
 import seecoder.devcloud.api.k8s.DeploymentApi;
+import seecoder.devcloud.core.pipeline.Context;
 import seecoder.devcloud.core.pipeline.handler.K8sDeploymentHandler;
 import seecoder.devcloud.core.pipeline.Pipeline;
+import seecoder.devcloud.core.pipeline.handler.K8sNamespaceHandler;
+
+import java.util.Collection;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -20,20 +28,34 @@ class CoreApplicationTests {
     @Autowired
     private DeploymentApi deploymentApi;
 
+    private Context context;
+
+
+    @BeforeEach
+    void setUp() {
+        mockContext();
+    }
+
     @Test
-    void contextLoads() {
-
-        Pipeline<String,String> filters = new Pipeline(new TestHandler())
-                .addHandler(new TestHandler())
-                .addHandler(new TestHandler());
-        filters.execute("GoYankees123!");
-//        System.out.printf(applicationProperties.toString());
-//        System.out.println("tset");
-////        System.out.printf(deploymentApi.toString());
-////        System.out.printf(SpringUtil.getBean(DeploymentApi.class).toString());
-        K8sDeploymentHandler handler = new K8sDeploymentHandler();
-//        handler.process("test");
+    void k8sDeployment() {
+
 
     }
 
+    @Test
+    void k8sNamespace() {
+
+        K8sNamespaceHandler k8sNamespaceHandler = new K8sNamespaceHandler();
+        k8sNamespaceHandler.process(context);
+
+    }
+
+
+    private void mockContext(){
+        this.context = Context.builder()
+                .groupName("test-group")
+                .projectName("test-project")
+                .applicationProperties(applicationProperties)
+                .configs(null).build();
+    }
 }