|
|
@@ -4,15 +4,15 @@ import io.kubernetes.client.ApiException;
|
|
|
import io.kubernetes.client.apis.AppsV1Api;
|
|
|
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.model.Deployment;
|
|
|
import nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException;
|
|
|
-import nju.seec.SEECdemo.logic.api.k8s.vo.Namespace;
|
|
|
import nju.seec.SEECdemo.util.LoggerUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import static nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException.ALREADY_EXIST;
|
|
|
+import static nju.seec.SEECdemo.logic.api.k8s.exception.K8sApiException.NOT_FOUND;
|
|
|
import static nju.seec.SEECdemo.util.Constants.FOREGROUND_PROPAGATION_POLICY;
|
|
|
import static nju.seec.SEECdemo.util.Constants.PRETTY_FORMAT;
|
|
|
|
|
|
@@ -27,51 +27,65 @@ public class DeploymentApiImpl implements DeploymentApi{
|
|
|
@Autowired
|
|
|
private AppsV1Api appsV1Api;
|
|
|
|
|
|
- @Autowired
|
|
|
- private NamespaceApi namespaceApi;
|
|
|
-
|
|
|
@Override
|
|
|
- public void createSync(DeploymentDTO deployment) {
|
|
|
- if (!namespaceApi.exists(deployment.getNamespace())){
|
|
|
- throw new K8sApiException(K8sApiException.NAMESPACE_NOT_EXIST);
|
|
|
- }
|
|
|
+ public void createSync(Deployment deployment) {
|
|
|
+
|
|
|
try {
|
|
|
V1Deployment v1Deployment = deployment.toV1Deployment();
|
|
|
appsV1Api.createNamespacedDeployment(deployment.getNamespace(),v1Deployment, PRETTY_FORMAT);
|
|
|
} catch (ApiException e) {
|
|
|
LoggerUtil.error(logger, e, "deployment创建失败, deployment={}, response={}", deployment, e.getResponseBody());
|
|
|
- throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
|
|
|
+
|
|
|
+ if (e.getCode() == NOT_FOUND) {
|
|
|
+ throw new K8sApiException(NOT_FOUND, "namespace不存在");
|
|
|
+ } else if (e.getCode() == ALREADY_EXIST) {
|
|
|
+ throw new K8sApiException(ALREADY_EXIST, "deployment已经存在");
|
|
|
+ }else {
|
|
|
+ throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ LoggerUtil.error(logger, e, "deployment创建异常, deployment={}, response={}", deployment);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void createAsync() {
|
|
|
+ public void createAsync(Deployment deployment) {
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void delete(String namespace, String name) {
|
|
|
- if (!namespaceApi.exists(namespace)) {
|
|
|
- throw new K8sApiException(K8sApiException.NAMESPACE_NOT_EXIST);
|
|
|
+ try {
|
|
|
+
|
|
|
+ deleteDeployment(namespace, name);
|
|
|
+
|
|
|
+ } catch (ApiException e) {
|
|
|
+ LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
|
|
|
+
|
|
|
+ if (e.getCode() == K8sApiException.NOT_FOUND) {
|
|
|
+ throw new K8sApiException(NOT_FOUND, "deployment不存在");
|
|
|
+ }else {
|
|
|
+ throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
|
|
|
+ }
|
|
|
+ }catch (Exception e) {
|
|
|
+ LoggerUtil.error(logger, e, "删除Deployment异常,namespace={}, name={}", namespace, name);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- V1DeleteOptions v1DeleteOptions = new V1DeleteOptionsBuilder()
|
|
|
- .withApiVersion(Namespace.VERSION)
|
|
|
- .withPropagationPolicy(FOREGROUND_PROPAGATION_POLICY)
|
|
|
- .build();
|
|
|
+ @Override
|
|
|
+ public void deleteIfExist(String namespace, String name) {
|
|
|
try {
|
|
|
- appsV1Api.deleteNamespacedDeployment(
|
|
|
- name,
|
|
|
- namespace,
|
|
|
- v1DeleteOptions,
|
|
|
- PRETTY_FORMAT,
|
|
|
- null,
|
|
|
- null,
|
|
|
- FOREGROUND_PROPAGATION_POLICY);
|
|
|
+
|
|
|
+ deleteDeployment(namespace, name);
|
|
|
+
|
|
|
} catch (ApiException e) {
|
|
|
- LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
|
|
|
- throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
|
|
|
+ if (e.getCode() != K8sApiException.NOT_FOUND) {
|
|
|
+ LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", namespace, name, e.getResponseBody());
|
|
|
+ throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
|
|
|
+ }
|
|
|
+ }catch (Exception e) {
|
|
|
+ LoggerUtil.error(logger, e, "删除Deployment异常,namespace={}, name={}", namespace, name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -79,4 +93,19 @@ public class DeploymentApiImpl implements DeploymentApi{
|
|
|
public boolean exists(String namespace, String name) {
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ private void deleteDeployment(String namespace, String name) throws ApiException{
|
|
|
+ V1DeleteOptions v1DeleteOptions = new V1DeleteOptionsBuilder()
|
|
|
+ .withApiVersion(Deployment.API_VERSION)
|
|
|
+ .withPropagationPolicy(FOREGROUND_PROPAGATION_POLICY)
|
|
|
+ .build();
|
|
|
+ appsV1Api.deleteNamespacedDeployment(
|
|
|
+ name,
|
|
|
+ namespace,
|
|
|
+ v1DeleteOptions,
|
|
|
+ PRETTY_FORMAT,
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ FOREGROUND_PROPAGATION_POLICY);
|
|
|
+ }
|
|
|
}
|