ApplicationDTO.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package nju.seec.SEECdemo.web.dto;
  2. import lombok.Data;
  3. import nju.seec.SEECdemo.logic.api.k8s.dto.DeploymentDTO;
  4. import nju.seec.SEECdemo.logic.api.k8s.dto.ServiceDTO;
  5. import org.hibernate.validator.constraints.Range;
  6. import javax.validation.constraints.NotEmpty;
  7. import java.util.*;
  8. import java.util.stream.Collectors;
  9. import static nju.seec.SEECdemo.util.Constants.APPLICATION_LABEL;
  10. @Data
  11. public class ApplicationDTO {
  12. @NotEmpty
  13. private String name;
  14. @NotEmpty
  15. private String projectName;
  16. @Range(min = 1, max = 3)
  17. private int replicas;
  18. private List<ContainerDTO> containers = new ArrayList<>();
  19. @Range(min = 0, max = 100)
  20. private int cpuRequest;
  21. /**
  22. * 存储的默认单位为M
  23. */
  24. @Range(min = 0)
  25. private int memoryRequest;
  26. @Range(min = 0)
  27. private int storageRequest;
  28. public DeploymentDTO toDeploymentDTO(){
  29. DeploymentDTO deploymentDTO = new DeploymentDTO();
  30. deploymentDTO.setNamespace(projectName);
  31. deploymentDTO.setName(name);
  32. deploymentDTO.setContainers(containers.stream().map(ContainerDTO::toContainerDTO).collect(Collectors.toList()));
  33. deploymentDTO.setReplicas(replicas);
  34. deploymentDTO.setLabels(Collections.singletonMap(APPLICATION_LABEL, name));
  35. //@todo 设置资源限额
  36. return deploymentDTO;
  37. }
  38. public ServiceDTO toServiceDTO() {
  39. ServiceDTO serviceDTO = new ServiceDTO();
  40. serviceDTO.setNamespace(projectName);
  41. serviceDTO.setName(name);
  42. serviceDTO.setSelectors(Collections.singletonMap(APPLICATION_LABEL, name));
  43. serviceDTO.setServicePorts(
  44. containers
  45. .stream()
  46. .map(ContainerDTO::getPorts)
  47. .flatMap(Collection::stream)
  48. .map(PortDTO::toServicePortDTO)
  49. .collect(Collectors.toSet())
  50. );
  51. return serviceDTO;
  52. }
  53. }