Ingress.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package seecoder.devcloud.api.k8s.model;
  2. import io.kubernetes.client.custom.IntOrString;
  3. import io.kubernetes.client.openapi.models.*;
  4. import lombok.*;
  5. import java.util.*;
  6. import java.util.stream.Collectors;
  7. /**
  8. * author: rale
  9. * createdAt: 1/5/19
  10. * @// TODO: 3/25/19 添加标签字段 以后应当是一个分支上的代码可以创建一个deployment
  11. */
  12. @Data
  13. @NoArgsConstructor
  14. @AllArgsConstructor
  15. @Builder
  16. @EqualsAndHashCode(callSuper=true)
  17. public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
  18. public static final String API_VERSION = "extensions/v1beta1";
  19. private static final String KIND = "Ingress";
  20. public static final String REWRITE_ANNOTATION = "nginx.ingress.kubernetes.io/rewrite-target";
  21. public static final String DEFAULT_REWRITE_PATH = "/";
  22. //重定向的路径,默认为根路径
  23. private static final String redirectPath = DEFAULT_REWRITE_PATH;
  24. @Builder.Default
  25. /*Ingress能暴露HTTP和HTTPS协议口,目前暂不支持HTTPS协议*/
  26. private List<IngressRule> httpRules = new ArrayList<>();
  27. public Ingress(ExtensionsV1beta1Ingress extensionsV1beta1Ingress) {
  28. super(extensionsV1beta1Ingress);
  29. List<ExtensionsV1beta1IngressRule> rules = extensionsV1beta1Ingress.getSpec().getRules();
  30. if (rules != null && !rules.isEmpty()) {
  31. httpRules = rules.stream()
  32. .filter(Objects::nonNull)
  33. .map(IngressRule::new)
  34. .collect(Collectors.toList());
  35. }
  36. }
  37. @Override
  38. public ExtensionsV1beta1Ingress toK8sObject() {
  39. ExtensionsV1beta1IngressSpec ExtensionsV1beta1IngressSpec = new ExtensionsV1beta1IngressSpecBuilder()
  40. .withRules(toExtensionsV1beta1IngressRules())
  41. .build();
  42. ExtensionsV1beta1Ingress ExtensionsV1beta1Ingress = new ExtensionsV1beta1IngressBuilder()
  43. .withApiVersion(getApiVersion() == null ? API_VERSION : getApiVersion())
  44. .withKind(getKind() == null ? KIND : getKind())
  45. .withMetadata(this.toV1ObjectMeta())
  46. .withSpec(ExtensionsV1beta1IngressSpec)
  47. .build();
  48. return ExtensionsV1beta1Ingress;
  49. }
  50. @Data
  51. @NoArgsConstructor
  52. @AllArgsConstructor
  53. @EqualsAndHashCode
  54. @Builder
  55. public static class IngressPath implements K8sObjectTransformer<ExtensionsV1beta1HTTPIngressPath> {
  56. private String path;
  57. private String serviceName;
  58. private int port;
  59. public IngressPath(ExtensionsV1beta1HTTPIngressPath path) {
  60. this.path = path.getPath();
  61. this.serviceName = path.getBackend().getServiceName();
  62. this.port = path.getBackend().getServicePort().getIntValue();
  63. }
  64. @Override
  65. public ExtensionsV1beta1HTTPIngressPath toK8sObject() {
  66. ExtensionsV1beta1HTTPIngressPath v1beta1HTTPIngressPath = new ExtensionsV1beta1HTTPIngressPath();
  67. v1beta1HTTPIngressPath.setPath(getPath());
  68. ExtensionsV1beta1IngressBackend ExtensionsV1beta1IngressBackend = new ExtensionsV1beta1IngressBackend();
  69. ExtensionsV1beta1IngressBackend.setServiceName(serviceName);
  70. ExtensionsV1beta1IngressBackend.setServicePort(new IntOrString(port));
  71. v1beta1HTTPIngressPath.setBackend(ExtensionsV1beta1IngressBackend);
  72. return v1beta1HTTPIngressPath;
  73. }
  74. }
  75. @Data
  76. @NoArgsConstructor
  77. @AllArgsConstructor
  78. @EqualsAndHashCode
  79. @Builder
  80. public static class IngressRule implements K8sObjectTransformer<ExtensionsV1beta1IngressRule> {
  81. private String host;
  82. @Builder.Default
  83. private Set<IngressPath> ruleValues = new HashSet<>();
  84. public IngressRule(String host) {
  85. this.host = host;
  86. }
  87. public void addRuleValue(IngressPath ingressPath) {
  88. this.ruleValues.add(ingressPath);
  89. }
  90. public IngressRule(ExtensionsV1beta1IngressRule ExtensionsV1beta1IngressRule) {
  91. this.host = ExtensionsV1beta1IngressRule.getHost();
  92. if (ExtensionsV1beta1IngressRule.getHttp() != null) {
  93. this.ruleValues = ExtensionsV1beta1IngressRule.getHttp() != null && ExtensionsV1beta1IngressRule.getHttp()
  94. .getPaths() != null ? ExtensionsV1beta1IngressRule.getHttp()
  95. .getPaths()
  96. .stream()
  97. .map(IngressPath::new)
  98. .collect(Collectors.toSet()) : null;
  99. }
  100. }
  101. private ExtensionsV1beta1HTTPIngressRuleValue toV1beta1HTTPIngressRuleValue() {
  102. List<ExtensionsV1beta1HTTPIngressPath> paths = ruleValues == null ? null : ruleValues.stream()
  103. .map(IngressPath::toK8sObject)
  104. .collect(Collectors.toList());
  105. return new ExtensionsV1beta1HTTPIngressRuleValueBuilder()
  106. .withPaths(paths)
  107. .build();
  108. }
  109. @Override
  110. public ExtensionsV1beta1IngressRule toK8sObject() {
  111. return new ExtensionsV1beta1IngressRuleBuilder()
  112. .withHost(host)
  113. .withHttp(toV1beta1HTTPIngressRuleValue())
  114. .build();
  115. }
  116. }
  117. private List<ExtensionsV1beta1IngressRule> toExtensionsV1beta1IngressRules() {
  118. return httpRules.stream()
  119. .map(IngressRule::toK8sObject)
  120. .collect(Collectors.toList());
  121. }
  122. }