|
|
@@ -2,13 +2,9 @@ package cn.seecoder.web.core.pipeline.handler;
|
|
|
|
|
|
|
|
|
import cn.seecoder.api.ApplicationProperties;
|
|
|
-import cn.seecoder.api.k8s.JobApi;
|
|
|
-import cn.seecoder.api.k8s.K8sConstants;
|
|
|
-import cn.seecoder.api.k8s.SecretApi;
|
|
|
+import cn.seecoder.api.k8s.*;
|
|
|
import cn.seecoder.api.k8s.exception.K8sApiException;
|
|
|
-import cn.seecoder.api.k8s.model.Container;
|
|
|
-import cn.seecoder.api.k8s.model.Job;
|
|
|
-import cn.seecoder.api.k8s.model.K8sObjectRequest;
|
|
|
+import cn.seecoder.api.k8s.model.*;
|
|
|
import cn.seecoder.api.k8s.vo.SecretVO;
|
|
|
import cn.seecoder.common.util.SpringUtil;
|
|
|
import cn.seecoder.web.core.pipeline.Context;
|
|
|
@@ -24,6 +20,8 @@ public class K8sJobHandler extends AbstractHandler{
|
|
|
|
|
|
private final SecretApi secretApi;
|
|
|
private final JobApi jobApi;
|
|
|
+ private final NamespaceApi namespaceApi;
|
|
|
+ private final LimitRangeApi limitRangeApi;
|
|
|
private final ApplicationProperties applicationProperties;
|
|
|
private final static String DEFAULT_IMAGE_PULL_SECRET_NAME = "seecoder-devcloud-image-pull-secret";
|
|
|
|
|
|
@@ -31,10 +29,56 @@ public class K8sJobHandler extends AbstractHandler{
|
|
|
this.applicationProperties = SpringUtil.getBean(ApplicationProperties.class);
|
|
|
secretApi = SpringUtil.getBean(SecretApi.class);
|
|
|
jobApi = SpringUtil.getBean(JobApi.class);
|
|
|
+ namespaceApi = SpringUtil.getBean(NamespaceApi.class);
|
|
|
+ limitRangeApi = SpringUtil.getBean(LimitRangeApi.class);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void process(Context context) throws PipelineException {
|
|
|
+ //1. 创建namespace 和 limit range
|
|
|
+ Namespace k8sNamespace = new Namespace();
|
|
|
+ k8sNamespace.setName(context.getNamespace());
|
|
|
+ //todo namespace在底下资源未删除时,不能轻易删除重建,只能直接通过异常查是否已创建,丑陋,待修改
|
|
|
+ try {
|
|
|
+ List<Namespace> namespaces = namespaceApi.getByCondition(K8sObjectRequest.builder()
|
|
|
+ .name(context.getNamespace()).build());
|
|
|
+ if (namespaces.size() == 0) {
|
|
|
+ namespaceApi.create(k8sNamespace);
|
|
|
+ log.info("Namespace创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+ } else {
|
|
|
+ log.info("Namespace已经存在, 无需新建: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+ }
|
|
|
+ } catch (K8sApiException e) {
|
|
|
+ context.appendErrorResult(PipelineException.NAMESPACE_CREATE_ERROR, e);
|
|
|
+ throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.NAMESPACE_CREATE_ERROR, e);
|
|
|
+ }
|
|
|
+ context.appendSuccessResult("K8s Namespace创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+
|
|
|
+ LimitRange limitRange = new LimitRange();
|
|
|
+ limitRange.setNamespace(context.getNamespace());
|
|
|
+ limitRange.setName(context.getDeployName()+K8sConstants.LIMIT_RANGE_SUFFIX);
|
|
|
+// limitRange.setMinCpu("100m");
|
|
|
+// limitRange.setMaxCpu("2000m");
|
|
|
+// limitRange.setMinMemory("512Mi");
|
|
|
+// limitRange.setMaxMemory("1024Mi");
|
|
|
+ try {
|
|
|
+ List<LimitRange> limitRanges = limitRangeApi.getByCondition(K8sObjectRequest.builder()
|
|
|
+ .namespace(limitRange.getNamespace()).name(limitRange.getName()).build());
|
|
|
+ if (limitRanges.size() == 0) {
|
|
|
+ limitRangeApi.create(limitRange);
|
|
|
+ log.info("limitRange创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+ } else {
|
|
|
+ limitRangeApi.update(limitRange);
|
|
|
+ log.info("limitRange更新成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+
|
|
|
+ }
|
|
|
+ } catch (K8sApiException e) {
|
|
|
+ context.appendErrorResult(PipelineException.LIMIT_RANGE_CREATE_ERROR, e);
|
|
|
+ throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.LIMIT_RANGE_CREATE_ERROR, e);
|
|
|
+ }
|
|
|
+ context.appendSuccessResult("K8s limit range创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
|
|
|
+
|
|
|
+
|
|
|
context.appendSuccessResult("成功开始执行K8sHandler");
|
|
|
// 0 变量
|
|
|
// imageName 是 namespace-deployName-sonar
|