Przeglądaj źródła

疯狂重构
1. 将vo和dto整合到model包中
2. 将异常汇总,只提供概述的异常,不提供过于具体的异常描述
3. 提供deleteIfExist接口,适用于资源清理

raledong 7 lat temu
rodzic
commit
4bfbf4259a

+ 57 - 28
src/main/java/nju/seec/SEECdemo/logic/api/k8s/impl/DeploymentApiImpl.java

@@ -4,15 +4,15 @@ import io.kubernetes.client.ApiException;
 import io.kubernetes.client.apis.AppsV1Api;
 import io.kubernetes.client.models.*;
 import nju.seec.SEECdemo.logic.api.k8s.DeploymentApi;
-import nju.seec.SEECdemo.logic.api.k8s.NamespaceApi;
-import nju.seec.SEECdemo.logic.api.k8s.dto.DeploymentDTO;
+import nju.seec.SEECdemo.logic.api.k8s.model.Deployment;
 import nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException;
-import nju.seec.SEECdemo.logic.api.k8s.vo.Namespace;
 import nju.seec.SEECdemo.util.LoggerUtil;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import static nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException.ALREADY_EXIST;
+import static nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException.NOT_FOUND;
 import static nju.seec.SEECdemo.util.Constants.FOREGROUND_PROPAGATION_POLICY;
 import static nju.seec.SEECdemo.util.Constants.PRETTY_FORMAT;
 
@@ -27,51 +27,65 @@ public class DeploymentApiImpl implements DeploymentApi{
     @Autowired
     private AppsV1Api appsV1Api;
 
-    @Autowired
-    private NamespaceApi namespaceApi;
-
     @Override
-    public void createSync(DeploymentDTO deployment) {
-        if (!namespaceApi.exists(deployment.getNamespace())){
-            throw new K8sApiException(K8sApiException.NAMESPACE_NOT_EXIST);
-        }
+    public void createSync(Deployment deployment) {
+
         try {
             V1Deployment v1Deployment = deployment.toV1Deployment();
             appsV1Api.createNamespacedDeployment(deployment.getNamespace(),v1Deployment, PRETTY_FORMAT);
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "deployment创建失败, deployment={}, response={}", deployment, e.getResponseBody());
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "deployment已经存在");
+            }else {
+                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            }
+        } catch (Exception e) {
+            LoggerUtil.error(logger, e, "deployment创建异常, deployment={}, response={}", deployment);
         }
     }
 
     @Override
-    public void createAsync() {
+    public void createAsync(Deployment deployment) {
 
 
     }
 
     @Override
     public void delete(String namespace, String name) {
-        if (!namespaceApi.exists(namespace)) {
-            throw new K8sApiException(K8sApiException.NAMESPACE_NOT_EXIST);
+        try {
+
+            deleteDeployment(namespace, name);
+
+        } catch (ApiException e) {
+            LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
+
+            if (e.getCode() == K8sApiException.NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "deployment不存在");
+            }else {
+                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            }
+        }catch (Exception e) {
+            LoggerUtil.error(logger, e, "删除Deployment异常,namespace={}, name={}", namespace, name);
         }
+    }
 
-        V1DeleteOptions v1DeleteOptions = new V1DeleteOptionsBuilder()
-                .withApiVersion(Namespace.VERSION)
-                .withPropagationPolicy(FOREGROUND_PROPAGATION_POLICY)
-                .build();
+    @Override
+    public void deleteIfExist(String namespace, String name) {
         try {
-            appsV1Api.deleteNamespacedDeployment(
-                    name,
-                    namespace,
-                    v1DeleteOptions,
-                    PRETTY_FORMAT,
-                    null,
-                    null,
-                    FOREGROUND_PROPAGATION_POLICY);
+
+            deleteDeployment(namespace, name);
+
         } catch (ApiException e) {
-            LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            if (e.getCode() != K8sApiException.NOT_FOUND) {
+                LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
+                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            }
+        }catch (Exception e) {
+            LoggerUtil.error(logger, e, "删除Deployment异常,namespace={}, name={}", namespace, name);
         }
     }
 
@@ -79,4 +93,19 @@ public class DeploymentApiImpl implements DeploymentApi{
     public boolean exists(String namespace, String name) {
         return false;
     }
+
+    private void deleteDeployment(String namespace, String name) throws ApiException{
+        V1DeleteOptions v1DeleteOptions = new V1DeleteOptionsBuilder()
+                .withApiVersion(Deployment.API_VERSION)
+                .withPropagationPolicy(FOREGROUND_PROPAGATION_POLICY)
+                .build();
+        appsV1Api.deleteNamespacedDeployment(
+                name,
+                namespace,
+                v1DeleteOptions,
+                PRETTY_FORMAT,
+                null,
+                null,
+                FOREGROUND_PROPAGATION_POLICY);
+    }
 }