raledong 7 rokov pred
rodič
commit
dbae34f4fb

+ 2 - 2
src/main/java/nju/seec/SEECdemo/data/entity/ResourceConfig.java

@@ -2,8 +2,8 @@ package nju.seec.SEECdemo.data.entity;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import nju.seec.SEECdemo.logic.api.k8s.vo.CpuQuantity;
-import nju.seec.SEECdemo.logic.api.k8s.vo.StorageQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.CpuQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.StorageQuantity;
 
 /**
  * @Todo 是否需要将不同的配置新建为不同的类

+ 0 - 3
src/main/java/nju/seec/SEECdemo/logic/api/k8s/impl/DeploymentApiImpl.java

@@ -2,14 +2,11 @@ package nju.seec.SEECdemo.logic.api.k8s.impl;
 
 import io.kubernetes.client.ApiException;
 import io.kubernetes.client.apis.AppsV1Api;
-import io.kubernetes.client.apis.CoreV1Api;
 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.exception.K8sApiException;
-import nju.seec.SEECdemo.logic.api.k8s.vo.ApiResult;
-import nju.seec.SEECdemo.logic.api.k8s.vo.Deployment;
 import nju.seec.SEECdemo.logic.api.k8s.vo.Namespace;
 import nju.seec.SEECdemo.util.LoggerUtil;
 import org.slf4j.Logger;

+ 0 - 76
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/Container.java

@@ -1,76 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.models.V1Container;
-import io.kubernetes.client.models.V1ContainerBuilder;
-import io.kubernetes.client.models.V1EnvVar;
-import io.kubernetes.client.models.V1EnvVarBuilder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static nju.seec.SEECdemo.util.Constants.NAME_PATTERN;
-
-
-/**
- * author: rale
- * createdAt: 12/23/18
- */
-@Data
-@NoArgsConstructor
-public class Container {
-
-    @NotNull
-    @Pattern(regexp = NAME_PATTERN)
-    private String name;
-
-    @NotBlank
-    private String image;
-
-
-    private Set<ContainerPort>  ports = new HashSet<>();
-
-    /* 启动指令的参数 */
-    private List<String> args;
-
-    /* 启动指令 */
-    private List<String> command;
-
-    /* 环境变量 */
-    private Map<String, String> env = new HashMap<>();
-
-    public Container(V1Container v1Container) {
-        this.name = v1Container.getName();
-        this.image = v1Container.getImage();
-        this.ports = v1Container.getPorts().stream().map(ContainerPort::new).collect(Collectors.toSet());
-        this.args = v1Container.getArgs();
-        this.command = v1Container.getCommand();
-        this.env = v1Container.getEnv().stream().collect(Collectors.toMap(V1EnvVar::getName, V1EnvVar::getValue));
-    }
-
-    public V1Container toV1Container(){
-        V1Container container = new V1ContainerBuilder()
-                .withName(name)
-                .withImage(image)
-                .withImagePullPolicy("Always")
-                .withArgs(args)
-                .withCommand(command)
-                .withPorts(ports.stream().map(ContainerPort::toV1ContainerPort).collect(Collectors.toList()))
-                .withEnv(env
-                        .entrySet()
-                        .stream()
-                        .map(entry ->
-                                new V1EnvVarBuilder()
-                                        .withName(entry.getKey())
-                                        .withValue(entry.getValue())
-                                        .build())
-                        .collect(Collectors.toList())
-                )
-                .build();
-        return container;
-    }
-}

+ 0 - 51
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/ContainerPort.java

@@ -1,51 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.models.V1ContainerPort;
-import io.kubernetes.client.models.V1ContainerPortBuilder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.hibernate.validator.constraints.Range;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-
-import static nju.seec.SEECdemo.util.Constants.NAME_PATTERN;
-
-/**
- * author: rale
- * createdAt: 12/23/18
- */
-@Data
-@EqualsAndHashCode
-@NoArgsConstructor
-public class ContainerPort {
-
-    @NotNull
-    @Pattern(regexp = NAME_PATTERN)
-    private String name;
-
-    @NotNull
-    @Range(min = 1, max = 65535)
-    private int port;
-
-    @NotNull
-    @Pattern(regexp = "^(TCP|UDP)$")
-    private String protocol;
-
-    public ContainerPort(V1ContainerPort v1ContainerPort) {
-        ContainerPort containerPort = new ContainerPort();
-        containerPort.setName(v1ContainerPort.getName());
-        containerPort.setPort(v1ContainerPort.getContainerPort());
-        containerPort.setProtocol(v1ContainerPort.getProtocol());
-    }
-    public V1ContainerPort toV1ContainerPort(){
-        V1ContainerPort v1ContainerPort = new V1ContainerPortBuilder()
-                .withContainerPort(port)
-                .withName(name)
-                .withProtocol(protocol)
-                .build();
-        return v1ContainerPort;
-    }
-
-}

+ 0 - 32
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/CpuQuantity.java

@@ -1,32 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.custom.Quantity;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-
-@Data
-@NoArgsConstructor
-public class CpuQuantity {
-
-    private BigDecimal quantity;
-
-    public CpuQuantity(int quantity){
-        //转化成百分比
-        this.quantity = BigDecimal.valueOf(quantity * 1.0 / 100);
-    }
-
-    public CpuQuantity(Quantity quantity) {
-        this.quantity = quantity.getNumber();
-    }
-
-    public Quantity toQuantity(){
-        return new Quantity(quantity, Quantity.Format.DECIMAL_SI);
-    }
-
-    public int getQuantity(){
-        return quantity.intValue();
-    }
-
-}

+ 0 - 109
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/Deployment.java

@@ -1,109 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.models.*;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.hibernate.validator.constraints.Range;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static nju.seec.SEECdemo.util.Constants.APPLICATION_LABEL;
-
-
-/**
- * author: rale
- * createdAt: 12/23/18
- */
-@Data
-@NoArgsConstructor
-public class Deployment {
-
-    private static final String DEPLOYMENT_VERSION = "apps/v1";
-
-    private static final String DEPLOYMENT_KIND = "Deployment";
-
-    private static final String SERVICE_VERSION = "v1";
-
-    private static final String SERVICE_KIND = "Service";
-
-    @NotEmpty
-    private String name;
-
-    @NotNull
-    private String namespace;
-
-    //@todo 加上部署应用的类型,如数据库,web应用
-
-    @Range(min = 1, max = 3)
-    private int replicas;
-
-    private List<Container> containers = new ArrayList<>();
-
-    private Set<ServicePort> servicePorts = new HashSet<>();
-
-    public V1Deployment toV1Deployment(){
-        return new V1DeploymentBuilder()
-                .withApiVersion(DEPLOYMENT_VERSION)
-                .withKind(DEPLOYMENT_KIND)
-                .withMetadata(this.toV1ObjectMeta())
-                .withSpec(this.toV1DeploymentSpec())
-                .build();
-    }
-
-    public V1Service toV1Service() {
-        V1Service v1Service = new V1ServiceBuilder()
-                .withApiVersion(SERVICE_VERSION)
-                .withKind(SERVICE_KIND)
-                .withMetadata(this.toV1ObjectMeta())
-                .withSpec(this.toV1ServiceSpec())
-                .build();
-        return v1Service;
-    }
-    private V1ObjectMeta toV1ObjectMeta(){
-        return new V1ObjectMetaBuilder()
-                .withName(name)
-                .withNamespace(namespace)
-                .build();
-    }
-
-    private V1LabelSelector toDeploymentV1LabelSelector() {
-        return new V1LabelSelectorBuilder()
-                .withMatchLabels(Collections.singletonMap(APPLICATION_LABEL, name))
-                .build();
-    }
-
-    private V1PodTemplateSpec toPodSpecTemplate(){
-        V1ObjectMeta v1ObjectMeta = new V1ObjectMetaBuilder()
-                .withLabels(Collections.singletonMap(APPLICATION_LABEL, name))
-                .build();
-        V1PodSpec v1PodSpec = new V1PodSpecBuilder()
-                .addAllToContainers(containers.stream().map(Container::toV1Container).collect(Collectors.toList()))
-                .withImagePullSecrets(new V1LocalObjectReference().name("regcred"))
-                .build();
-        V1PodTemplateSpec v1PodTemplateSpec = new V1PodTemplateSpecBuilder()
-                .withMetadata(v1ObjectMeta)
-                .withSpec(v1PodSpec)
-                .build();
-        return v1PodTemplateSpec;
-    }
-
-    private V1DeploymentSpec toV1DeploymentSpec(){
-        return new V1DeploymentSpecBuilder()
-                .withReplicas(replicas)
-                .withSelector(this.toDeploymentV1LabelSelector())
-                .withTemplate(this.toPodSpecTemplate())
-                .build();
-    }
-
-    private V1ServiceSpec toV1ServiceSpec(){
-        V1ServiceSpec serviceSpec = new V1ServiceSpecBuilder()
-                .withSelector(Collections.singletonMap(APPLICATION_LABEL, name))
-                .withPorts(servicePorts.stream().map(ServicePort::toV1ServicePort).collect(Collectors.toList()))
-                .build();
-        return serviceSpec;
-    }
-
-}

+ 2 - 1
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/LimitRange.java

@@ -2,9 +2,10 @@ package nju.seec.SEECdemo.logic.api.k8s.vo;
 
 import io.kubernetes.client.custom.Quantity;
 import io.kubernetes.client.models.*;
-import jnr.ffi.annotations.In;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import nju.seec.SEECdemo.logic.api.k8s.util.CpuQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.StorageQuantity;
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;

+ 2 - 0
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/ResourceQuota.java

@@ -4,6 +4,8 @@ import io.kubernetes.client.custom.Quantity;
 import io.kubernetes.client.models.*;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import nju.seec.SEECdemo.logic.api.k8s.util.CpuQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.StorageQuantity;
 
 import java.util.HashMap;
 import java.util.Map;

+ 0 - 47
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/ServicePort.java

@@ -1,47 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.custom.IntOrString;
-import io.kubernetes.client.models.V1ServicePort;
-import io.kubernetes.client.models.V1ServicePortBuilder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.hibernate.validator.constraints.Range;
-
-import javax.validation.constraints.NotNull;
-
-/**
- * author: rale
- * createdAt: 12/23/18
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode
-public class ServicePort {
-
-    @NotNull
-    private String name;
-
-    @Range(min = 1, max = 633)
-    private int port;
-
-    @NotNull
-    private String targetPortName;
-
-    public ServicePort(V1ServicePort v1ServicePort) {
-        this.name = v1ServicePort.getName();
-        this.port = v1ServicePort.getPort();
-        this.targetPortName = v1ServicePort.getTargetPort().getStrValue();
-    }
-
-    public V1ServicePort toV1ServicePort(){
-        V1ServicePort v1ServicePort = new V1ServicePortBuilder()
-                .withName(name)
-                .withPort(port)
-                .withTargetPort(new IntOrString(targetPortName))
-                .build();
-        return v1ServicePort;
-    }
-
-
-}

+ 0 - 52
src/main/java/nju/seec/SEECdemo/logic/api/k8s/vo/StorageQuantity.java

@@ -1,52 +0,0 @@
-package nju.seec.SEECdemo.logic.api.k8s.vo;
-
-import io.kubernetes.client.custom.Quantity;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-
-@Data
-@NoArgsConstructor
-public class StorageQuantity {
-
-    private BigDecimal quantity;
-
-    //存储的默认单位为MB
-    private Unit unit = Unit.MB;
-
-    //存储单位
-    public enum Unit{
-        KB("Ki"),
-        MB("Mi"),
-        GB("Gi");
-
-        private String code;
-
-        Unit(String code) {
-            this.code = code;
-        }
-    }
-
-    public static final StorageQuantity EMPTY = new StorageQuantity(0);
-
-    public StorageQuantity(int quantity){
-        this.quantity = BigDecimal.valueOf(quantity);
-    }
-
-    public StorageQuantity(int quantity, Unit unit) {
-        this.quantity = BigDecimal.valueOf(quantity);
-        this.unit = unit;
-    }
-
-    public StorageQuantity(Quantity quantity) {
-        this.quantity = quantity.getNumber();
-        //@todo 检验到底是啥单位
-    }
-
-    public Quantity toQuantity(){
-        return new Quantity(quantity, Quantity.Format.DECIMAL_SI);
-    }
-
-
-}

+ 2 - 2
src/main/java/nju/seec/SEECdemo/util/BeanUtil.java

@@ -1,8 +1,8 @@
 package nju.seec.SEECdemo.util;
 
 import nju.seec.SEECdemo.data.entity.ResourceConfig;
-import nju.seec.SEECdemo.logic.api.k8s.vo.CpuQuantity;
-import nju.seec.SEECdemo.logic.api.k8s.vo.StorageQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.CpuQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.StorageQuantity;
 import nju.seec.SEECdemo.logic.vo.projecttemplate.ProjectTemplate;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;

+ 2 - 4
src/test/java/nju/seec/SEECdemo/service/api/ResourceQuotaApiImplTest.java

@@ -1,12 +1,10 @@
 package nju.seec.SEECdemo.service.api;
 
-import nju.seec.SEECdemo.logic.api.k8s.ResourceQuotaApi;
-import nju.seec.SEECdemo.logic.api.k8s.vo.CpuQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.CpuQuantity;
 import nju.seec.SEECdemo.logic.api.k8s.vo.ResourceQuota;
-import nju.seec.SEECdemo.logic.api.k8s.vo.StorageQuantity;
+import nju.seec.SEECdemo.logic.api.k8s.util.StorageQuantity;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;