raledong 7 vuotta sitten
vanhempi
commit
856572a2d1

+ 40 - 0
src/main/java/nju/seec/SEECdemo/logic/service/ApplicationService.java

@@ -0,0 +1,40 @@
+package nju.seec.SEECdemo.logic.service;
+
+import nju.seec.SEECdemo.logic.vo.ApplicationVO;
+import nju.seec.SEECdemo.web.dto.ApplicationDTO;
+
+public interface ApplicationService {
+
+    /**
+     * 新建应用
+     * @todo 挂载
+     * @param projectId 项目ID
+     * @param applicationDTO 应用详情
+     * @return
+     */
+    ApplicationVO create(long projectId, ApplicationDTO applicationDTO);
+
+    /**
+     * 删除应用
+     * @param name
+     * @return
+     */
+    boolean deleteByName(String name);
+
+    /**
+     * 更新应用
+     * 可更新的内容包括应用的镜像,应用的资源
+     * @param projectId
+     * @param applicationDTO
+     * @return
+     */
+    ApplicationVO update(long projectId, ApplicationDTO applicationDTO);
+
+    /**
+     * 查看应用的情况
+     * @param projectId
+     * @param name
+     * @return
+     */
+    ApplicationVO getByName(long projectId, String name);
+}

+ 38 - 0
src/main/java/nju/seec/SEECdemo/logic/service/ProjectService.java

@@ -0,0 +1,38 @@
+package nju.seec.SEECdemo.logic.service;
+
+import nju.seec.SEECdemo.logic.vo.ProjectVO;
+
+import java.util.Date;
+
+public interface ProjectService {
+
+    /**
+     * 创建软工二的项目
+     * //@Todo 后期希望能够根据课程类型选择课程模板
+     * @param projectName
+     * @param description
+     * @param startsAt
+     * @param endsAt
+     * @return
+     */
+     long createSeecIIProject(String projectName, String description, Date startsAt, Date endsAt);
+
+    /**
+     * 删除项目
+     * 如果项目底下仍有尚在运行的应用,则不会删除
+     * @param projectId
+     * @return
+     */
+     boolean deleteProject(long projectId);
+
+    /**
+     * 强制删除项目
+     * 无论项目之下是否有运行中的应用,都会删除
+     * 会强制删除项目之下的所有的应用,并回收资源
+     * @param projectId
+     * @return
+     */
+     boolean deleteProjectForce(long projectId);
+
+
+}

+ 40 - 0
src/main/java/nju/seec/SEECdemo/logic/service/impl/ApplicationServiceImpl.java

@@ -0,0 +1,40 @@
+package nju.seec.SEECdemo.logic.service.impl;
+
+import io.kubernetes.client.apis.CoreV1Api;
+import io.kubernetes.client.models.*;
+import nju.seec.SEECdemo.logic.api.k8s.DeploymentApi;
+import nju.seec.SEECdemo.logic.service.ApplicationService;
+import nju.seec.SEECdemo.logic.vo.ApplicationVO;
+import nju.seec.SEECdemo.logic.vo.ContainerVO;
+import nju.seec.SEECdemo.web.dto.ApplicationDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class ApplicationServiceImpl implements ApplicationService{
+
+    @Autowired
+    private DeploymentApi deploymentApi;
+
+
+    @Override
+    public ApplicationVO create(long projectId, ApplicationDTO applicationDTO) {
+        return null;
+    }
+
+    @Override
+    public boolean deleteByName(String name) {
+        return false;
+    }
+
+    @Override
+    public ApplicationVO update(long projectId, ApplicationDTO applicationDTO) {
+        return null;
+    }
+
+    @Override
+    public ApplicationVO getByName(long projectId, String name) {
+        return null;
+    }
+}

+ 36 - 0
src/main/java/nju/seec/SEECdemo/logic/service/impl/ProjectServiceImpl.java

@@ -0,0 +1,36 @@
+package nju.seec.SEECdemo.logic.service.impl;
+
+import io.kubernetes.client.ApiException;
+import io.kubernetes.client.apis.CoreV1Api;
+import io.kubernetes.client.models.V1Namespace;
+import io.kubernetes.client.models.V1ObjectMeta;
+import nju.seec.SEECdemo.logic.service.ProjectService;
+import nju.seec.SEECdemo.logic.vo.ProjectVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class ProjectServiceImpl implements ProjectService{
+    @Autowired
+    private CoreV1Api api;
+
+
+    @Override
+    public long createSeecIIProject(String projectName, String description, Date startsAt, Date endsAt) {
+        return 0;
+    }
+
+    @Override
+    public boolean deleteProject(long projectId) {
+        return false;
+    }
+
+    @Override
+    public boolean deleteProjectForce(long projectId) {
+        return false;
+    }
+}

+ 19 - 0
src/main/java/nju/seec/SEECdemo/logic/vo/ApplicationVO.java

@@ -0,0 +1,19 @@
+package nju.seec.SEECdemo.logic.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode
+public class ApplicationVO {
+
+
+    private long id;
+
+    private long projectId;
+
+    private String name;
+
+}

+ 24 - 0
src/main/java/nju/seec/SEECdemo/logic/vo/ContainerVO.java

@@ -0,0 +1,24 @@
+package nju.seec.SEECdemo.logic.vo;
+
+import lombok.Data;
+import nju.seec.SEECdemo.data.entity.Port;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+@Data
+public class ContainerVO {
+
+    private String name;
+
+    private String image;
+
+    private String command;
+
+    private String entryPoint;
+
+    private Map<String, String> env = new HashMap<>();
+
+    private Set<Port> ports;
+}

+ 21 - 0
src/main/java/nju/seec/SEECdemo/logic/vo/ProjectVO.java

@@ -0,0 +1,21 @@
+package nju.seec.SEECdemo.logic.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode
+public class ProjectVO {
+
+    private Long id;
+
+    private String name;
+
+    private String description;
+
+    private Date startsAt;
+
+    private Date endsAt;
+}

+ 25 - 0
src/main/java/nju/seec/SEECdemo/web/dto/ApplicationDTO.java

@@ -0,0 +1,25 @@
+package nju.seec.SEECdemo.web.dto;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Data
+public class ApplicationDTO {
+
+    @NotEmpty
+    private String name;
+
+    @Range(min = 1, max = 3)
+    private int replicas;
+
+    private List<ContainerDTO> containers;
+
+    private int cpuRequest;
+
+    private int memoryRequest;
+
+    private int storageRequest;
+}

+ 19 - 0
src/main/java/nju/seec/SEECdemo/web/dto/ContainerDTO.java

@@ -0,0 +1,19 @@
+package nju.seec.SEECdemo.web.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Data
+public class ContainerDTO {
+
+    @NotEmpty
+    private String image;
+
+    private Set<PortDTO> ports = new HashSet<>();
+
+}

+ 12 - 0
src/main/java/nju/seec/SEECdemo/web/dto/PortDTO.java

@@ -0,0 +1,12 @@
+package nju.seec.SEECdemo.web.dto;
+
+public class PortDTO {
+
+    private String name;
+
+    private int port;
+
+    private int targetPort;
+
+
+}