소스 검색

SecretApi and it's implement

马佳君 7 년 전
부모
커밋
3d40a091c6
2개의 변경된 파일130개의 추가작업 그리고 3개의 파일을 삭제
  1. 25 2
      src/main/java/nju/seec/SEECdemo/logic/api/k8s/SecretApi.java
  2. 105 1
      src/main/java/nju/seec/SEECdemo/logic/api/k8s/impl/SecretApiImpl.java

+ 25 - 2
src/main/java/nju/seec/SEECdemo/logic/api/k8s/SecretApi.java

@@ -1,5 +1,12 @@
 package nju.seec.SEECdemo.logic.api.k8s;
 package nju.seec.SEECdemo.logic.api.k8s;
 
 
+import com.google.protobuf.Api;
+import io.kubernetes.client.ApiException;
+import io.kubernetes.client.models.V1Secret;
+import nju.seec.SEECdemo.logic.api.k8s.vo.ApiResult;
+
+import javax.xml.transform.Result;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 public interface SecretApi {
 public interface SecretApi {
@@ -9,8 +16,9 @@ public interface SecretApi {
      * @param namespace
      * @param namespace
      * @param name
      * @param name
      * @param data
      * @param data
+     * @return ApiResult
      */
      */
-    void createGenericSecret(String namespace, String name, Map<String, String> data);
+    ApiResult createGenericSecret(String namespace, String name, Map<String, byte[]> data);
 
 
     /**
     /**
      * 在namespace下生成私有仓库server的密钥
      * 在namespace下生成私有仓库server的密钥
@@ -19,5 +27,20 @@ public interface SecretApi {
      * @param user
      * @param user
      * @param password
      * @param password
      */
      */
-    void createPrivateRegistrySecret(String namespace, String server, String user, String password);
+    ApiResult createPrivateRegistrySecret(String namespace, String server, String user, String password);
+
+    /**
+     * 获取指定namespace下的Secret列表
+     * @param namespace
+     */
+    ApiResult getSecretList(String namespace);
+
+    /**
+     * 获取指定namespace下的密钥
+     * 返回指定命名的Secret
+     * @param namespace
+     * @param name
+     */
+    ApiResult getSecret(String namespace, String name);
+
 }
 }

+ 105 - 1
src/main/java/nju/seec/SEECdemo/logic/api/k8s/impl/SecretApiImpl.java

@@ -1,6 +1,110 @@
 package nju.seec.SEECdemo.logic.api.k8s.impl;
 package nju.seec.SEECdemo.logic.api.k8s.impl;
 
 
 
 
-public class SecretApiImpl {
+import com.google.protobuf.Api;
+import io.kubernetes.client.ApiException;
+import io.kubernetes.client.apis.CoreV1Api;
+import io.kubernetes.client.models.V1ObjectMeta;
+import io.kubernetes.client.models.V1Secret;
+import io.kubernetes.client.models.V1SecretList;
+import nju.seec.SEECdemo.logic.api.k8s.DeploymentApi;
+import nju.seec.SEECdemo.logic.api.k8s.SecretApi;
+import nju.seec.SEECdemo.logic.api.k8s.vo.ApiResult;
+import nju.seec.SEECdemo.util.LoggerUtil;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class SecretApiImpl implements SecretApi {
+
+    private static final Logger logger = LoggerUtil.getLogger(SecretApi.class);
+
+    @Autowired
+    private CoreV1Api coreV1Api;
+
+    @Override
+    public ApiResult createGenericSecret(String namespace, String name, Map<String, byte[]> data) {
+
+        //Secret默认创建的Type为Opaque,base64编码格式的Secret,用来储存密码、密钥等。
+
+        V1Secret v1Secret = new V1Secret();
+        V1ObjectMeta meta = new V1ObjectMeta();
+        meta.setName(name);
+        v1Secret.setApiVersion("v1");
+        meta.setNamespace(namespace);
+        v1Secret.setData(data);
+        v1Secret.setKind("Secret");
+        v1Secret.setMetadata(meta);
+
+        try {
+            V1Secret createdSecret = coreV1Api.createNamespacedSecret("mjj-test", v1Secret, "OK");
+            return new ApiResult<V1Secret>(createdSecret);
+        } catch (ApiException e) {
+            LoggerUtil.error(logger, e, "Secret创建失败, Secret={}, response={}", v1Secret, e.getResponseBody());
+            ApiResult<Void> result = new ApiResult<>();
+            result.setSuccess(false);
+            result.setErrorCode(e.getCode());
+            return result;
+        }
+    }
+
+    @Override
+    public ApiResult createPrivateRegistrySecret(String namespace, String server, String user, String password) {
+
+        Map<String, byte[]> data = new HashMap<>();
+
+        String dockerConfigJson =
+                "{\"auths\":{\"" + server +"\":{\"username\":\"" + user +
+                        "\",\"password\":\"" + password +
+                        "\",\"auth\":\"" + user + ":" + password + "\"}}}";
+        data.put(".dockerconfigjson", dockerConfigJson.getBytes());
+
+        //dockerSecret 统一的名称
+        String name = "dockerRegistrySecret";
+
+        return createGenericSecret(namespace, name, data);
+
+    }
+
+    @Override
+    public ApiResult getSecretList(String namespace) {
+        try {
+            V1SecretList v1SecretList = coreV1Api.listNamespacedSecret(namespace, "OK", "", "",false, "", 200, "", 10, false);
+            List<V1Secret> secretList = v1SecretList.getItems();
+            return new ApiResult<List<V1Secret>>(secretList);
+        } catch (ApiException e) {
+            LoggerUtil.error(logger, e, "Secret列表获取失败, response={}", e.getResponseBody());
+            ApiResult<Void> result = new ApiResult<>();
+            result.setSuccess(false);
+            result.setErrorCode(e.getCode());
+            return result;
+        }
+    }
+
+    @Override
+    public ApiResult getSecret(String namespace, String name) {
+        ApiResult apiResult = getSecretList(namespace);
+        if (apiResult.getErrorCode() != 0) {
+            return apiResult;
+        } else {
+            List<V1Secret> secretList = (List<V1Secret>) apiResult.getValue();
+            for (V1Secret secret : secretList) {
+                V1ObjectMeta meta = secret.getMetadata();
+                if (meta.getName().equals(name)) {
+                    return new ApiResult<V1Secret>(secret);
+                }
+            }
+            ApiResult<Void> result = new ApiResult<>();
+            result.setSuccess(false);
+            result.setErrorCode(ApiResult.NOT_EXIST);
+            return result;
+        }
+    }
 }
 }