Ver Fonte

refactor: 增加对ingress更新时属性的merge

TianChenjiang há 5 anos atrás
pai
commit
d2cd6c61d4

+ 14 - 4
src/main/java/cn/seecoder/paas/service/facade/k8s/impl/IngressApiImpl.java

@@ -84,16 +84,17 @@ public class IngressApiImpl implements IngressApi {
      */
     @Override
     public Ingress update(Ingress ingress) {
-        ExtensionsV1beta1Ingress ExtensionsV1beta1Ingress = ingress.toK8sObject();
         try {
-            ExtensionsV1beta1Ingress = extensionsV1beta1Api.replaceNamespacedIngress(
+            ExtensionsV1beta1Ingress v1Ingress = getV1Ingress(ingress.getNamespace(), ingress.getNamespace());
+            ingress.merge(v1Ingress);
+            v1Ingress = extensionsV1beta1Api.replaceNamespacedIngress(
                     ingress.getName(),
                     ingress.getNamespace(),
-                    ExtensionsV1beta1Ingress,
+                    v1Ingress,
                     PRETTY_FORMAT,
                     null,
                     null);
-            return new Ingress(ExtensionsV1beta1Ingress);
+            return new Ingress(v1Ingress);
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "ingress更新失败,ingress={}, response={}", ingress, e.getResponseBody());
             if (e.getCode() == NOT_FOUND) {
@@ -186,4 +187,13 @@ public class IngressApiImpl implements IngressApi {
             return Collections.emptyList();
         }
     }
+
+    private ExtensionsV1beta1Ingress getV1Ingress(String namespace, String name) throws ApiException {
+        return extensionsV1beta1Api.readNamespacedIngress(
+                name,
+                namespace,
+                PRETTY_FORMAT,
+                false,
+                false);
+    }
 }

+ 14 - 2
src/main/java/cn/seecoder/paas/service/facade/k8s/model/Ingress.java

@@ -41,13 +41,13 @@ public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
         List<ExtensionsV1beta1IngressRule> rules = extensionsV1beta1Ingress.getSpec().getRules();
         List<ExtensionsV1beta1IngressTLS> exTls = extensionsV1beta1Ingress.getSpec().getTls();
         if (rules != null && !rules.isEmpty()) {
-            httpRules = rules.stream()
+            this.httpRules = rules.stream()
                     .filter(Objects::nonNull)
                     .map(IngressRule::new)
                     .collect(Collectors.toList());
         }
         if (exTls != null && !exTls.isEmpty()) {
-            tls = exTls.stream()
+            this.tls = exTls.stream()
                     .filter(Objects::nonNull)
                     .map(IngressTLS::new)
                     .collect(Collectors.toList());
@@ -196,4 +196,16 @@ public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
                 .map(IngressTLS::toK8sObject)
                 .collect(Collectors.toList());
     }
+
+    /**
+     * @param extensionsV1beta1Ingress 原有的ingress
+     */
+    public void merge(ExtensionsV1beta1Ingress extensionsV1beta1Ingress) {
+        extensionsV1beta1Ingress.getMetadata().setName(getName());
+        extensionsV1beta1Ingress.getMetadata().setNamespace(this.getNamespace());
+        extensionsV1beta1Ingress.getMetadata().setLabels(this.getLabels());
+        extensionsV1beta1Ingress.getMetadata().setAnnotations(this.getAnnotations());
+        extensionsV1beta1Ingress.getSpec().setRules(toExtensionsV1beta1IngressRules());
+        extensionsV1beta1Ingress.getSpec().setTls(toExtensionsV1beta1IngressTLS());
+    }
 }