فهرست منبع

完成添加和复制应用编排接口

reghao 5 سال پیش
والد
کامیت
e36a861b14
39فایلهای تغییر یافته به همراه172 افزوده شده و 280 حذف شده
  1. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/OrchestrationCache.java
  2. 0 22
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppStage.java
  3. 11 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppType.java
  4. 3 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/BuildStage.java
  5. 1 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/CompilerType.java
  6. 5 15
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigType.java
  7. 11 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/EnvType.java
  8. 11 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/NotifierType.java
  9. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/PackerType.java
  10. 2 14
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoAuthType.java
  11. 2 14
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoType.java
  12. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java
  13. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ManageController.java
  14. 8 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java
  15. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/DeployedApp.java
  16. 0 21
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/NotifierType.java
  17. 0 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/AuthType.java
  18. 0 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/RepoType.java
  19. 8 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java
  20. 0 21
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppType.java
  21. 0 21
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/EnvType.java
  22. 0 19
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppDeploy.java
  23. 0 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppRunning.java
  24. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java
  25. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  26. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildResult.java
  27. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java
  28. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java
  29. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  30. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java
  31. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  32. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuilderUtil.java
  33. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/GitImpl.java
  34. 43 31
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/SharedEntityChecker.java
  35. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/build/PackerConfigCrudService.java
  36. 40 18
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java
  37. 7 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  38. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/RoleRepository.java
  39. 0 16
      dmaster/src/test/java/cn/reghao/autodop/common/amqp/RabbitProducerTest.java

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/OrchestrationCache.java

@@ -7,7 +7,7 @@ import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationR
 import org.springframework.stereotype.Service;
 
 /**
- * 编排缓存
+ * TODO 配置缓存
  *
  * @author reghao
  * @date 2020-03-06 15:17:33

+ 0 - 22
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppStage.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.dmaster.app.constant;
-
-/**
- * 应用构建部署时所处的阶段
- * TODO 后期使用状态机
- *
- * @author reghao
- * @date 2019-10-18 14:31:29
- */
-public enum AppStage {
-    update("更新"), compile("编译"), pack("打包"), build("构建"), deploy("部署");
-
-    private String value;
-
-    AppStage(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}

+ 11 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppType.java

@@ -0,0 +1,11 @@
+package cn.reghao.autodop.dmaster.app.constant;
+
+/**
+ * 应用类型
+ *
+ * @author reghao
+ * @date 2019-10-18 14:31:29
+ */
+public enum AppType {
+    maven, dotnetCore, npm
+}

+ 3 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/BuildStage.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/BuildStage.java

@@ -1,6 +1,8 @@
-package cn.reghao.autodop.dmaster.app.entity.config.build;
+package cn.reghao.autodop.dmaster.app.constant;
 
 /**
+ * 应用构建所处的阶段
+ *
  * @author reghao
  * @date 2021-02-05 23:56:58
  */

+ 1 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/CompilerType.java

@@ -7,15 +7,5 @@ package cn.reghao.autodop.dmaster.app.constant;
  * @date 2019-10-18 14:31:29
  */
 public enum CompilerType {
-    shell("Shell 脚本"), none("None"), maven("Maven");
-
-    private String value;
-
-    CompilerType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
+    shell, maven, none
 }

+ 5 - 15
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigType.java

@@ -7,19 +7,9 @@ package cn.reghao.autodop.dmaster.app.constant;
  * @date 2019-10-18 14:31:29
  */
 public enum ConfigType {
-    app("App"), env("Env"),
-    localDir("LocalDir"), notifier("Notifier"),
-    repo("Repo"), compiler("Compiler"), packer("Packer"),
-    repoAuth("RepoAuth"),
-    proj("Proj"), update("Update"), compile("Compile"), pack("Pack"), notify("Notify");
-
-    private String value;
-
-    ConfigType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
+    app, env,
+    localDir, notifier,
+    repo, compiler, packer,
+    repoAuth,
+    proj
 }

+ 11 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/EnvType.java

@@ -0,0 +1,11 @@
+package cn.reghao.autodop.dmaster.app.constant;
+
+/**
+ * 应用对应的环境
+ *
+ * @author reghao
+ * @date 2019-10-18 14:31:29
+ */
+public enum EnvType {
+    dev, test, prod
+}

+ 11 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/NotifierType.java

@@ -0,0 +1,11 @@
+package cn.reghao.autodop.dmaster.app.constant;
+
+/**
+ * 通知工具类型
+ *
+ * @author reghao
+ * @date 2020-03-01 17:18:53
+ */
+public enum NotifierType {
+    webhook, email, sms
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/PackerType.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/PackerType.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.app.entity.config.build.tools;
+package cn.reghao.autodop.dmaster.app.constant;
 
 /**
  * @author reghao

+ 2 - 14
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoAuthType.java

@@ -1,21 +1,9 @@
 package cn.reghao.autodop.dmaster.app.constant;
 
 /**
- * 代码仓库认证方式
- *
  * @author reghao
- * @date 2019-10-18 14:31:29
+ * @date 2021-02-05 18:50:01
  */
 public enum RepoAuthType {
-    password("帐号密码"), rsa("RSA 密钥对");
-
-    private String value;
-
-    RepoAuthType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
+    http, ssh
 }

+ 2 - 14
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoType.java

@@ -1,21 +1,9 @@
 package cn.reghao.autodop.dmaster.app.constant;
 
 /**
- * 版本管理工具
- *
  * @author reghao
- * @date 2019-11-15 22:41:04
+ * @date 2021-02-05 22:50:41
  */
 public enum RepoType {
-    svn("SVN"), git("GIT");
-
-    private String value;
-
-    RepoType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
+    git, svn
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.EnvType;
+import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.vo.SuccessfullyBuildVO;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployResult;
 import cn.reghao.autodop.dmaster.app.service.BuildService;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ManageController.java

@@ -2,7 +2,7 @@ package cn.reghao.autodop.dmaster.app.controller;
 
 import cn.reghao.autodop.common.deploy.AppStatus;
 import cn.reghao.autodop.common.dockerc.exception.DockerException;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.EnvType;
+import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.service.LogManager;
 import cn.reghao.autodop.dmaster.app.service.StatusManager;
 import cn.reghao.autodop.dmaster.app.vo.LogFile;

+ 8 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java

@@ -41,6 +41,14 @@ public class OrchestrateCrudController {
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
+    @ApiOperation(value = "复制应用编排")
+    @PostMapping(value = "/app/copy")
+    public ResponseEntity<String> copyAppOrchestration(@RequestParam("from") String from,
+                                                       @RequestParam("to") String to) throws Exception {
+        appCrudService.copy(from, to);
+        return ResponseEntity.ok().body(WebResult.success("ok"));
+    }
+
     @ApiOperation(value = "分页获取应用编排")
     @GetMapping("/app")
     public ResponseEntity<String> getAppOrchestrationByPage(@RequestParam("page") int page,

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployedApp.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/DeployedApp.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.app.entity.deploy;
+package cn.reghao.autodop.dmaster.app.entity;
 
 import cn.reghao.autodop.common.orm.BaseEntity;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;

+ 0 - 21
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/NotifierType.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.config;
-
-/**
- * 通知工具
- *
- * @author reghao
- * @date 2020-03-01 17:18:53
- */
-public enum NotifierType {
-    webhook("Webhook"), email("邮件"), sms("短信");
-
-    private String value;
-
-    NotifierType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}

+ 0 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/AuthType.java

@@ -1,9 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.config.build.tools;
-
-/**
- * @author reghao
- * @date 2021-02-05 18:50:01
- */
-public enum AuthType {
-    http, ssh
-}

+ 0 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/RepoType.java

@@ -1,9 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.config.build.tools;
-
-/**
- * @author reghao
- * @date 2021-02-05 22:50:41
- */
-public enum RepoType {
-    git, svn
-}

+ 8 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java

@@ -24,20 +24,28 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     // TODO 仅允许大小写、数字和 ‘_’ ‘-’ 等字符
     @Column(nullable = false, unique = true)
     private String appId;
+    @Column(nullable = false)
     private String env;
     private String description;
     // 是否总是构建
+    @Column(nullable = false)
     private boolean alwaysBuild;
     // 启用编排
+    @Column(nullable = false)
     private boolean enable;
 
     /* 构建配置 */
+    @Column(nullable = false)
     private String appType;
+    @Column(nullable = false)
     private String appRepo;
+    @Column(nullable = false)
     private String branch;
     // 应用代码所在目录的名字
+    @Column(nullable = false)
     private String dirname;
     // 编译应用时所处的目录,以仓库目录为起点
+    @Column(nullable = false)
     private String compileHome;
 
     // buildConfig 和 projId 二者只能存在一个

+ 0 - 21
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppType.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.config.orchestration;
-
-/**
- * 应用类型
- *
- * @author reghao
- * @date 2019-10-18 14:31:29
- */
-public enum AppType {
-    maven("Maven"), dotnetCore("DotnetCore"), npm("NPM");
-
-    private String value;
-
-    AppType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}

+ 0 - 21
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/EnvType.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.config.orchestration;
-
-/**
- * 应用构建部署时所处的环境
- *
- * @author reghao
- * @date 2019-10-18 14:31:29
- */
-public enum EnvType {
-    dev("开发环境"), test("测试环境"), prod("生产环境");
-
-    private String value;
-
-    EnvType(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}

+ 0 - 19
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppDeploy.java

@@ -1,19 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.deploy;
-
-import cn.reghao.autodop.common.dagent.machine.api.data.MachineRegistry;
-import lombok.Data;
-
-import javax.persistence.*;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2020-05-13 16:59:20
- */
-@Data
-public class AppDeploy {
-    private String runningScript;
-    // 绝对路径
-    private String runningDir;
-    private MachineRegistry machineRegistry;
-}

+ 0 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppRunning.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity.deploy;
-
-import lombok.Data;
-
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2020-05-13 16:59:20
- */
-@Data
-public class AppRunning {
-    private int httpPort;
-    private String healthCheck;
-    private Set<LogConfig> logs;
-}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java

@@ -15,7 +15,7 @@ import java.util.List;
 @Data
 @Embeddable
 public class RunningConfig {
-    private int httpPort;
+    private Integer httpPort;
     private String healthCheck;
     @ElementCollection
     private List<LogConfig> logs;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.dmaster.app.entity.log;
 
 import cn.reghao.autodop.common.orm.BaseDocument;
-import cn.reghao.autodop.dmaster.app.entity.config.build.BuildStage;
+import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.data.mongodb.core.mapping.Document;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildResult.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.entity.log;
 
-import cn.reghao.autodop.dmaster.app.entity.config.build.BuildStage;
+import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import lombok.Data;
 
 import java.time.LocalDateTime;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployResult.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.app.entity.deploy;
+package cn.reghao.autodop.dmaster.app.entity.log;
 
 import lombok.Data;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.repository.deploy;
 
-import cn.reghao.autodop.dmaster.app.entity.deploy.DeployedApp;
+import cn.reghao.autodop.dmaster.app.entity.DeployedApp;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -1,9 +1,9 @@
 package cn.reghao.autodop.dmaster.app.service;
 
 import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
-import cn.reghao.autodop.dmaster.app.entity.config.build.BuildStage;
+import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
-import cn.reghao.autodop.dmaster.app.entity.deploy.DeployResult;
+import cn.reghao.autodop.dmaster.app.entity.log.DeployResult;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildResult;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.service;
 import cn.reghao.autodop.common.deploy.AppStatus;
 import cn.reghao.autodop.common.dockerc.exception.DockerException;
 import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
-import cn.reghao.autodop.dmaster.app.entity.deploy.DeployedApp;
+import cn.reghao.autodop.dmaster.app.entity.DeployedApp;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.deploy.DeployedAppRepository;
 import org.springframework.data.domain.Page;

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java

@@ -1,5 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build;
 
+import cn.reghao.autodop.dmaster.app.constant.PackerType;
+import cn.reghao.autodop.dmaster.app.constant.RepoType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.*;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuilderUtil.java

@@ -2,7 +2,7 @@ package cn.reghao.autodop.dmaster.app.service.build;
 
 import cn.reghao.autodop.common.utils.FileOps;
 import cn.reghao.autodop.common.utils.text.ReplaceCharacter;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppType;
+import cn.reghao.autodop.dmaster.app.constant.AppType;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
 import cn.reghao.autodop.dmaster.common.config.SysConfig;

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/GitImpl.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.updater;
 
-import cn.reghao.autodop.dmaster.app.entity.config.build.tools.AuthType;
+import cn.reghao.autodop.dmaster.app.constant.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.RepoConfig;
 import com.jcraft.jsch.JSch;
 import com.jcraft.jsch.JSchException;
@@ -38,7 +38,7 @@ public class GitImpl implements CodeUpdater {
     private SshSessionFactory sshSessionFactory;
 
     public GitImpl(RepoConfig repoConfig) {
-        switch (AuthType.valueOf(repoConfig.getAuthType())) {
+        switch (RepoAuthType.valueOf(repoConfig.getAuthType())) {
             case http:
                 httpAuth(repoConfig.getUsername(), repoConfig.getPassword());
                 break;

+ 43 - 31
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/SharedEntityChecker.java

@@ -10,7 +10,6 @@ import cn.reghao.autodop.dmaster.app.repository.build.CompilerConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.PackerConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.RepoConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.NotifierRepository;
-import cn.reghao.autodop.dmaster.app.vo.BuildConfigVO;
 import cn.reghao.autodop.dmaster.auth.entity.Role;
 import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
 import org.springframework.stereotype.Service;
@@ -41,9 +40,6 @@ public class SharedEntityChecker {
         this.roleRepository = roleRepository;
     }
 
-    public void checkAndSet(AppOrchestration app) {
-    }
-
     /**
      * 检查构建共享配置
      *
@@ -51,28 +47,33 @@ public class SharedEntityChecker {
      * @return
      * @date 2020-09-30 下午3:17
      */
-    private void checkAndSetBuildConfig(AppOrchestration app) throws Exception {
-        /*BuildConfig buildConfig = new BuildConfig();
-        String repo = buildVO.getRepo();
-        RepoConfig appUpdate = repoConfigRepository.findByIsDeleteFalseAndName(repo);
-        if (appUpdate == null) {
-            throw new Exception(repo + " 不存在...");
-        }
-        appBuild.setAppUpdate(appUpdate);
+    public void checkAndSetBuildConfig(AppOrchestration app) throws Exception {
+        BuildConfig buildConfig = app.getBuildConfig();
+        if (buildConfig != null) {
+            RepoConfig repo = buildConfig.getRepoConfig();
+            RepoConfig repoEntity = repoConfigRepository.findByIsDeleteFalseAndName(repo.getName());
+            if (repoEntity != null) {
+                buildConfig.setRepoConfig(repoEntity);
+            } else {
+                throw new Exception("仓库配置 " + repo.getName() + " 不存在...");
+            }
 
-        String compiler = buildVO.getCompiler();
-        CompilerConfig appCompile = compilerConfigRepository.findByIsDeleteFalseAndName(compiler);
-        if (appCompile == null) {
-            throw new Exception(compiler + " 不存在...");
-        }
-        //appBuild.setAppCompile(appCompile);
+            CompilerConfig compiler = buildConfig.getCompilerConfig();
+            CompilerConfig compilerEntity = compilerConfigRepository.findByIsDeleteFalseAndName(compiler.getName());
+            if (compilerEntity != null) {
+                buildConfig.setCompilerConfig(compilerEntity);
+            } else {
+                throw new Exception("编译器配置 " + compiler.getName() + " 不存在...");
+            }
 
-        String packer = buildVO.getPacker();
-        PackerConfig appPack = packerConfigRepository.findByIsDeleteFalseAndName(packer);
-        if (appPack == null) {
-            throw new Exception(packer + " 不存在...");
+            PackerConfig packer = buildConfig.getPackerConfig();
+            PackerConfig packerEntity = packerConfigRepository.findByIsDeleteFalseAndName(packer.getName());
+            if (packerEntity != null) {
+                buildConfig.setPackerConfig(packerEntity);
+            } else {
+                throw new Exception("打包配置 " + packer.getName() + " 不存在...");
+            }
         }
-        appBuild.setAppPack(appPack);*/
     }
 
     /**
@@ -82,16 +83,27 @@ public class SharedEntityChecker {
      * @return
      * @date 2020-09-30 下午3:18
      */
-    private void checkAndSetNotifier(AppOrchestration app, String notifier) throws Exception {
-        /*if (notifier != null) {
-            NotifierConfig notifierConfig = notifierRepository.findByIsDeleteFalseAndName(notifier);
-            if (notifierConfig == null) {
-                throw new Exception(notifierConfig + " 不存在...");
+    public void checkAndSetNotifier(AppOrchestration app) throws Exception {
+        NotifierConfig notifierConfig = app.getNotifierConfig();
+        if (notifierConfig != null) {
+            NotifierConfig notifierConfigEntity = notifierRepository.findByIsDeleteFalseAndName(notifierConfig.getName());
+            if (notifierConfigEntity != null) {
+                app.setNotifierConfig(notifierConfigEntity);
+            } else {
+                throw new Exception("通知配置 " + notifierConfig.getName() + " 不存在...");
             }
-            app.setNotification(notification);
-        }*/
+        }
     }
 
-    private void checkAndSetRole(Role role) throws Exception {
+    public void checkAndSetRole(AppOrchestration app) throws Exception {
+        Role role = app.getRole();
+        if (role != null) {
+            Role roleEntity = roleRepository.findRoleByName(role.getName());
+            if (roleEntity != null) {
+                app.setRole(roleEntity);
+            } else {
+                throw new Exception("角色 " + role.getName() + " 不存在...");
+            }
+        }
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/build/PackerConfigCrudService.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.crud.build;
 import cn.reghao.autodop.common.utils.data.db.CrudOps;
 import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.PackerConfig;
-import cn.reghao.autodop.dmaster.app.entity.config.build.tools.PackerType;
+import cn.reghao.autodop.dmaster.app.constant.PackerType;
 import cn.reghao.autodop.dmaster.app.repository.build.PackerConfigRepository;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;

+ 40 - 18
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java

@@ -6,7 +6,6 @@ import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestratio
 import cn.reghao.autodop.dmaster.app.repository.orchestration.AppOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.service.crud.SharedEntityChecker;
-import cn.reghao.autodop.dmaster.app.vo.orchestration.AppVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
@@ -34,20 +33,9 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
 
     @Override
     public void addOrModify(AppOrchestration app) throws Exception {
-        sharedEntityChecker.checkAndSet(app);
-        /*if (appVO.getProjId() == null) {
-            BuildConfig buildConfig1 = sharedEntityChecker.checkBuildConfig(appVO.getBuildConfigVO());
-            app.setBuildConfig(buildConfig1);
-            String notifier = appVO.getNotifier();
-            sharedEntityChecker.checkNotifier(app, notifier);
-        } else {
-            // TODO
-            ProjOrchestration entity = projRepository.findByIsDeleteFalseAndProjId(appVO.getProjId());
-            if (entity == null) {
-                throw new Exception("项目 " + appVO.getProjId() + " 不存在...");
-            }
-            app.setProj(entity);
-        }*/
+        sharedEntityChecker.checkAndSetBuildConfig(app);
+        sharedEntityChecker.checkAndSetNotifier(app);
+        sharedEntityChecker.checkAndSetRole(app);
 
         AppOrchestration appEntity = appRepository.findByIsDeleteFalseAndAppId(app.getAppId());
         if (appEntity != null) {
@@ -59,7 +47,40 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         appRepository.save(app);
     }
 
-    public void copy() {
+    public void copy(String from, String to) throws Exception {
+        AppOrchestration fromApp = appRepository.findByIsDeleteFalseAndAppId(from);
+        if (fromApp == null) {
+            throw new Exception("ID 为 " + from + " 的应用配置不存在...");
+        }
+
+        AppOrchestration toApp = appRepository.findByIsDeleteFalseAndAppId(to);
+        if (toApp == null) {
+            toApp = (AppOrchestration) fromApp.clone();
+            copyToDifferentApp(toApp, to);
+            appRepository.save(toApp);
+        }
+    }
+
+    private void copyToDifferentApp(AppOrchestration app, String to) {
+        app.setAppId(to);
+        app.setDescription("");
+        app.setAppRepo("");
+        app.setBranch("");
+        app.setDirname("");
+        app.setCompileHome("");
+
+        app.setBuildConfig(null);
+        app.setDeployConfig(null);
+        app.setRunningConfig(null);
+        app.setNotifierConfig(null);
+
+        app.setId(null);
+        app.setCreateTime(null);
+        app.setUpdateTime(null);
+    }
+
+    // TODO 当前应用的另一个分支
+    private void copyToDifferentBranch(AppOrchestration app, String to) {
     }
 
     @Override
@@ -81,8 +102,9 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         AppOrchestration appEntity = appRepository.findByIsDeleteFalseAndAppId(uniqueKey);
         if (appEntity == null) {
             throw new Exception(uniqueKey + " 不存在");
+        } else {
+            appEntity.setIsDelete(true);
+            appRepository.save(appEntity);
         }
-        //appEntity.setIsDelete(true);
-        appRepository.save(appEntity);
     }
 }

+ 7 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -3,13 +3,16 @@ package cn.reghao.autodop.dmaster.app.vo.orchestration;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogLevel;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogType;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.app.constant.PackerType;
+import cn.reghao.autodop.dmaster.app.constant.RepoAuthType;
+import cn.reghao.autodop.dmaster.app.constant.RepoType;
 import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
-import cn.reghao.autodop.dmaster.app.entity.config.NotifierType;
+import cn.reghao.autodop.dmaster.app.constant.NotifierType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.*;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppType;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.EnvType;
+import cn.reghao.autodop.dmaster.app.constant.AppType;
+import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.deploy.LogConfig;
 import cn.reghao.autodop.dmaster.app.entity.deploy.RunningConfig;
@@ -133,7 +136,7 @@ public class AppVO {
         RepoConfig repoConfig = new RepoConfig();
         repoConfig.setName("git-codeup");
         repoConfig.setType(RepoType.git.name());
-        repoConfig.setAuthType(AuthType.ssh.name());
+        repoConfig.setAuthType(RepoAuthType.ssh.name());
         repoConfig.setRsaPrikey("rsa private key");
         buildConfig.setRepoConfig(repoConfig);
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/repository/RoleRepository.java

@@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2019-08-29 10:52:14
  */
 public interface RoleRepository extends JpaRepository<Role, Integer> {
-    Role findRoleByName(String roleName);
+    Role findRoleByName(String name);
 }

+ 0 - 16
dmaster/src/test/java/cn/reghao/autodop/common/amqp/RabbitProducerTest.java

@@ -1,24 +1,11 @@
 package cn.reghao.autodop.common.amqp;
 
 import cn.reghao.autodop.common.dagent.app.api.data.deploy.AppDeployArgs;
-import cn.reghao.autodop.common.dagent.app.api.data.log.LogLevel;
-import cn.reghao.autodop.common.dagent.app.api.data.log.LogType;
 import cn.reghao.autodop.common.dagent.machine.api.MachineOps;
 import cn.reghao.autodop.common.dagent.machine.api.data.MachineShell;
 import cn.reghao.autodop.common.dagent.machine.api.data.MachineShellArgs;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.DmasterApplication;
-import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
-import cn.reghao.autodop.dmaster.app.entity.config.NotifierType;
-import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
-import cn.reghao.autodop.dmaster.app.entity.config.build.tools.*;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppType;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.EnvType;
-import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
-import cn.reghao.autodop.dmaster.app.entity.deploy.LogConfig;
-import cn.reghao.autodop.dmaster.app.entity.deploy.RunningConfig;
-import cn.reghao.autodop.dmaster.app.vo.orchestration.AppVO;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 
@@ -28,9 +15,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.ArrayList;
-import java.util.List;
-
 @Slf4j
 @ActiveProfiles("dev")
 @SpringBootTest(classes = DmasterApplication.class)