Kaynağa Gözat

更新 DeployerController 接口和相关实现

reghao 3 ay önce
ebeveyn
işleme
9e800f5982

+ 23 - 14
web/src/main/java/cn/reghao/bnt/web/devops/deployer/controller/DeployerController.java

@@ -1,6 +1,7 @@
 package cn.reghao.bnt.web.devops.deployer.controller;
 
-import cn.reghao.bnt.web.devops.deployer.model.dto.RemoteMachine;
+import cn.reghao.bnt.web.devops.deployer.model.dto.UpdateApp;
+import cn.reghao.bnt.web.devops.deployer.model.po.RemoteHost;
 import cn.reghao.bnt.web.devops.deployer.service.DeployApp;
 import cn.reghao.jutil.web.WebResult;
 import io.swagger.v3.oas.annotations.Operation;
@@ -8,10 +9,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * @author reghao
@@ -29,21 +29,30 @@ public class DeployerController {
     }
 
     @Operation(summary = "添加节点", description = "N")
-    @PostMapping(value = "/remote_host", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addRemoteHost(@RequestBody @Validated RemoteMachine remoteMachine) {
+    @PostMapping(value = "/remote_host/add", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String addRemoteHost(@RequestBody @Validated RemoteHost remoteHost) {
+        deployApp.addRemoteHost(remoteHost);
         return WebResult.success();
     }
 
-    @Operation(summary = "部署 devops-mgr", description = "N")
-    @PostMapping(value = "/mgr", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deployMgr(@RequestBody @Validated RemoteMachine remoteMachine) {
+    @Operation(summary = "删除节点", description = "N")
+    @PostMapping(value = "/remote_host/delete", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String deleteRemoteHost(@RequestBody String host) {
+        deployApp.deleteRemoteHost(host);
         return WebResult.success();
     }
 
-    @Operation(summary = "部署 devops-agent", description = "N")
-    @PostMapping(value = "/agent", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deployAgent(String host) {
-        deployApp.deployApp(host);
+    @Operation(summary = "获取节点", description = "N")
+    @GetMapping(value = "/remote_host/list", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getRemoteHosts(@RequestParam("nodeType") String nodeType) {
+        List<RemoteHost> list = deployApp.getRemoteHosts(nodeType);
+        return WebResult.success(list);
+    }
+
+    @Operation(summary = "部署 devops-mgr", description = "N")
+    @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String deployMgr(@RequestBody UpdateApp updateApp) {
+        //deployApp.deployApp(host);
         return WebResult.success();
     }
 }

+ 3 - 0
web/src/main/java/cn/reghao/bnt/web/devops/deployer/db/RemoteHostRepository.java

@@ -1,6 +1,8 @@
 package cn.reghao.bnt.web.devops.deployer.db;
 
 import cn.reghao.bnt.web.devops.deployer.model.po.RemoteHost;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 /**
@@ -8,5 +10,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2025-12-21 21:04:50
  */
 public interface RemoteHostRepository extends JpaRepository<RemoteHost, Integer> {
+    Page<RemoteHost> findByNodeType(String nodeType, Pageable pageable);
     RemoteHost findByHost(String host);
 }

+ 0 - 13
web/src/main/java/cn/reghao/bnt/web/devops/deployer/model/dto/RemoteMachine.java

@@ -1,13 +0,0 @@
-package cn.reghao.bnt.web.devops.deployer.model.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2025-12-21 21:17:39
- */
-@Setter
-@Getter
-public class RemoteMachine {
-}

+ 20 - 0
web/src/main/java/cn/reghao/bnt/web/devops/deployer/model/dto/UpdateApp.java

@@ -0,0 +1,20 @@
+package cn.reghao.bnt.web.devops.deployer.model.dto;
+
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2025-12-21 22:31:32
+ */
+@Setter
+@Getter
+public class UpdateApp {
+    @NotNull(message = "hostList 不能为 NULL")
+    @Size(min = 1, max = 100, message = "host 数量不超过 100")
+    private List<String> hostList;
+}

+ 29 - 10
web/src/main/java/cn/reghao/bnt/web/devops/deployer/model/po/RemoteHost.java

@@ -1,10 +1,13 @@
 package cn.reghao.bnt.web.devops.deployer.model.po;
 
 import cn.reghao.bnt.web.util.BaseEntity;
+import cn.reghao.jutil.jdk.web.result.NotAvailable;
 import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
 import jakarta.persistence.Table;
-import lombok.AllArgsConstructor;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -13,20 +16,43 @@ import lombok.Setter;
  * @author reghao
  * @date 2024-02-20 09:12:10
  */
-@NoArgsConstructor
 @Getter
 @Setter
 @Entity
 @Table(name = "devops_remote_host")
 public class RemoteHost extends BaseEntity {
+    @NotBlank
+    @Size(max = 255, message = "最大长度不能超过 255 个字符")
+    private String nodeType;
+    @NotBlank
+    @Size(max = 255, message = "最大长度不能超过 255 个字符")
+    @Column(unique = true, nullable = false)
     private String host;
-    private int port;
+    @NotNull
+    private Integer port;
+    @NotBlank
+    @Size(max = 255, message = "最大长度不能超过 255 个字符")
     private String authType;
+//    @NotBlank
+//    @Size(max = 255, message = "最大长度不能超过 255 个字符")
     private String username;
+//    @NotBlank
+//    @Size(max = 255, message = "最大长度不能超过 255 个字符")
     private String password;
+//    @NotBlank
+//    @Size(max = 10240, message = "最大长度不能超过 10240 个字符")
     @Column(columnDefinition="text")
     private String privateKey;
+    @NotBlank
+    @Size(max = 255, message = "最大长度不能超过 255 个字符")
     private String appDir;
+    @NotBlank
+    @Size(max = 255, message = "最大长度不能超过 255 个字符")
+    private String appVersion;
+
+    public RemoteHost() {
+        this.appVersion = NotAvailable.na.getDesc();
+    }
 
     public RemoteHost(String host, int port, String username, String password) {
         this.host = host;
@@ -35,11 +61,4 @@ public class RemoteHost extends BaseEntity {
         this.username = username;
         this.password = password;
     }
-
-    public RemoteHost(String host, int port, String privateKey) {
-        this.host = host;
-        this.port = port;
-        this.authType = "privateKey";
-        this.privateKey = privateKey;
-    }
 }

+ 24 - 1
web/src/main/java/cn/reghao/bnt/web/devops/deployer/service/DeployApp.java

@@ -4,8 +4,11 @@ import cn.reghao.bnt.web.devops.deployer.db.RemoteHostRepository;
 import cn.reghao.bnt.web.devops.deployer.model.po.RemoteHost;
 import cn.reghao.bnt.web.devops.deployer.util.Sftp;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2024-02-19 14:16:27
@@ -14,12 +17,32 @@ import org.springframework.stereotype.Service;
 @Service
 public class DeployApp {
     private final RemoteHostRepository remoteHostRepository;
-    private Sftp sftp = new Sftp();
+    private final Sftp sftp = new Sftp();
 
     public DeployApp(RemoteHostRepository remoteHostRepository) {
         this.remoteHostRepository = remoteHostRepository;
     }
 
+    public void addRemoteHost(RemoteHost remoteHost) {
+        String host = remoteHost.getHost();
+        RemoteHost remoteHostEntity = remoteHostRepository.findByHost(host);
+        if (remoteHostEntity == null) {
+            remoteHostRepository.save(remoteHost);
+        }
+    }
+
+    public void deleteRemoteHost(String host) {
+        RemoteHost remoteHostEntity = remoteHostRepository.findByHost(host);
+        if (remoteHostEntity != null) {
+            //remoteHostRepository.delete(remoteHostEntity);
+        }
+    }
+
+    public List<RemoteHost> getRemoteHosts(String nodeType) {
+        PageRequest pageRequest = PageRequest.of(0, 100);
+        return remoteHostRepository.findByNodeType(nodeType, pageRequest).getContent();
+    }
+
     public void deployApp(String host) {
         RemoteHost remoteHost = remoteHostRepository.findByHost(host);
         if (remoteHost == null) {