|
@@ -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;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|