diff --git a/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java b/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java index 4b89816..0cf6a9f 100644 --- a/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java +++ b/nex-be/src/main/java/com/unisinsight/project/controller/ClientController.java @@ -4,6 +4,7 @@ import cn.hutool.json.JSONUtil; import com.unisinsight.project.entity.req.DeviceReq; import com.unisinsight.project.entity.req.DeviceUserReq; import com.unisinsight.project.entity.req.LoginReq; +import com.unisinsight.project.entity.res.ImageDesktopRes; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.service.ClientService; diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageDesktop.java b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageDesktop.java index 27e40e2..10f1134 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageDesktop.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageDesktop.java @@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * 桌面镜像(ImageDesktop)表实体类 @@ -87,7 +89,7 @@ public class ImageDesktop extends Model { @TableField(value = "create_time", fill = FieldFill.INSERT) @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -103,7 +105,7 @@ public class ImageDesktop extends Model { @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -135,7 +137,7 @@ public class ImageDesktop extends Model { @TableField(value = "publish_time") @ApiModelProperty("发布时间") - private String publishTime; + private Date publishTime; } diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageTool.java b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageTool.java index 9b85792..621bcf0 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageTool.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageTool.java @@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * (ImageTool)表实体类 @@ -63,7 +65,7 @@ public class ImageTool extends Model { @TableField(value = "create_time", fill = FieldFill.INSERT) @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -79,7 +81,7 @@ public class ImageTool extends Model { @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -93,9 +95,9 @@ public class ImageTool extends Model { **/ - @TableField(value = "upload_time") + @TableField(value = "upload_time", fill = FieldFill.INSERT) @ApiModelProperty("上传时间") - private String uploadTime; + private Date uploadTime; /** * 存储路径 **/ diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageVirtualMachines.java b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageVirtualMachines.java index e08fe3b..b5a2899 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageVirtualMachines.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/dao/ImageVirtualMachines.java @@ -3,10 +3,13 @@ package com.unisinsight.project.entity.dao; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * 镜像虚拟机(ImageVirtualMachines)表实体类 @@ -48,18 +51,32 @@ public class ImageVirtualMachines extends Model { @TableField(value = "os_version") @ApiModelProperty("操作系统") private String osVersion; + @TableField("os_variant") + @ApiModelProperty("操作系统版本") + private String osVariant; /** * 镜像存储路径 **/ @TableField(value = "storage_path") @ApiModelProperty("镜像存储路径") private String storagePath; + @TableField("storage_pool_name") + @ApiModelProperty("存储卷名称") + private String storagePoolName; + + + /** + * 驱动名称 + **/ + @TableField("image_tool_name") + @ApiModelProperty("驱动名称") + private String imageToolName; /** * 创建时间 **/ @TableField(value = "create_time", fill = FieldFill.INSERT) @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -71,7 +88,7 @@ public class ImageVirtualMachines extends Model { **/ @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageCreateReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageCreateReq.java index 28e9d64..c99b068 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageCreateReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageCreateReq.java @@ -23,7 +23,7 @@ import lombok.NoArgsConstructor; @Builder public class ImageCreateReq { - @JsonProperty("name") + @JsonProperty("vm_name") private String name; @JsonProperty("os_type") private String osType; @@ -35,8 +35,7 @@ public class ImageCreateReq { private Integer memory; @JsonProperty("disk_size") private Integer diskSize; - @JsonProperty("disk_format") - private String diskFormat; + @JsonProperty("storage_pool_name") private String storagePoolName; @JsonProperty("network_name") diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageToolReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageToolReq.java index 9f89f39..b543a69 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageToolReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageToolReq.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * (ImageTool)表实体类 * @@ -50,7 +52,7 @@ public class ImageToolReq { **/ @JsonProperty("create_time") @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -62,7 +64,7 @@ public class ImageToolReq { **/ @JsonProperty("update_time") @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -74,7 +76,7 @@ public class ImageToolReq { **/ @JsonProperty("upload_time") @ApiModelProperty("上传时间") - private String uploadTime; + private Date uploadTime; /** * 存储路径 **/ diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageUpdateReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageUpdateReq.java index f997698..9e88705 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageUpdateReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageUpdateReq.java @@ -30,8 +30,12 @@ public class ImageUpdateReq { private Integer vcpus; @JsonProperty("memory") private Integer memory; + @JsonProperty("disk_size") + private Integer diskSize; @JsonProperty("network_name") private String networkName; + @JsonProperty("STORAGE_POOL_NAME") + private String storagePoolName; @JsonProperty("autostart") private Boolean autostart; @JsonProperty("auto_mount_virtio") diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageVirtualMachinesReq.java b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageVirtualMachinesReq.java index 8b06e70..8c9d901 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageVirtualMachinesReq.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/req/ImageVirtualMachinesReq.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * 镜像虚拟机(ImageVirtualMachines)表实体类 * @@ -45,6 +47,12 @@ public class ImageVirtualMachinesReq { @JsonProperty("os_version") @ApiModelProperty("操作系统") private String osVersion; + /** + * 操作系统版本 + **/ + @JsonProperty("os_variant") + @ApiModelProperty("操作系统版本") + private String osVariant; /** * 镜像存储路径 **/ @@ -71,7 +79,7 @@ public class ImageVirtualMachinesReq { **/ @JsonProperty("create_time") @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -83,7 +91,7 @@ public class ImageVirtualMachinesReq { **/ @JsonProperty("update_time") @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -118,7 +126,7 @@ public class ImageVirtualMachinesReq { * 内存大小(GB) **/ @JsonProperty("memory_total") - @ApiModelProperty("内存大小(GB)") + @ApiModelProperty("内存大小(MB)") private Integer memoryTotal; /** * 系统盘大小(GB) diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageStatusRes.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageStatusRes.java index 4d0b108..858f926 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageStatusRes.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageStatusRes.java @@ -24,16 +24,7 @@ import java.util.List; @Data public class ImageStatusRes { - @JsonProperty("code") - private String code; - @JsonProperty("message") - private String message; - @JsonProperty("data") - private DataDTO data; - @NoArgsConstructor - @Data - public static class DataDTO { @JsonProperty("items") private List items; @JsonProperty("total") @@ -124,5 +115,5 @@ public class ImageStatusRes { private String network; } } - } + } diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageToolRes.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageToolRes.java index 5c748d9..4f080fa 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageToolRes.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageToolRes.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * (ImageTool)表实体类 @@ -52,7 +53,7 @@ public class ImageToolRes implements Serializable { **/ @JsonProperty("create_time") @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -64,7 +65,7 @@ public class ImageToolRes implements Serializable { **/ @JsonProperty("update_time") @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -76,7 +77,7 @@ public class ImageToolRes implements Serializable { **/ @JsonProperty("upload_time") @ApiModelProperty("上传时间") - private String uploadTime; + private Date uploadTime; /** * 存储路径 **/ diff --git a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageVirtualMachinesRes.java b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageVirtualMachinesRes.java index 60ab93e..e12b042 100644 --- a/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageVirtualMachinesRes.java +++ b/nex-be/src/main/java/com/unisinsight/project/entity/res/ImageVirtualMachinesRes.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * 镜像虚拟机(ImageVirtualMachines)表实体类 @@ -53,6 +54,9 @@ public class ImageVirtualMachinesRes implements Serializable { @JsonProperty("os_version") @ApiModelProperty("操作系统") private String osVersion; + @JsonProperty("os_variant") + @ApiModelProperty("操作系统版本") + private String osVariant; /** * 镜像存储路径 **/ @@ -64,7 +68,7 @@ public class ImageVirtualMachinesRes implements Serializable { **/ @JsonProperty("create_time") @ApiModelProperty("创建时间") - private String createTime; + private Date createTime; /** * 创建人 **/ @@ -76,7 +80,7 @@ public class ImageVirtualMachinesRes implements Serializable { **/ @JsonProperty("update_time") @ApiModelProperty("更新时间") - private String updateTime; + private Date updateTime; /** * 更新人 **/ @@ -125,9 +129,20 @@ public class ImageVirtualMachinesRes implements Serializable { @JsonProperty("network_module") @ApiModelProperty("网络模块") private String networkModule; + @JsonProperty("storage_pool_name") + @ApiModelProperty("存储卷名称") + private String storagePoolName; + + + /** + * 驱动名称 + **/ + @JsonProperty("image_tool_name") + @ApiModelProperty("驱动名称") + private String imageToolName; @JsonProperty("vnc_data") @ApiModelProperty("远程连接信息") - private ImageStatusRes.DataDTO.ItemsDTO.VncDTO vncData; + private ImageStatusRes.ItemsDTO.VncDTO vncData; } diff --git a/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java b/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java index b1c5dc9..81b7efd 100644 --- a/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java +++ b/nex-be/src/main/java/com/unisinsight/project/feign/ExternalApiClient.java @@ -5,11 +5,14 @@ import com.unisinsight.project.entity.dto.ApiResponse; import com.unisinsight.project.entity.dto.Network; import com.unisinsight.project.entity.dto.NetworkData; import com.unisinsight.project.entity.dto.StoragePoolData; -import com.unisinsight.project.entity.req.NetworkManageReq; -import com.unisinsight.project.entity.req.StoragePoolReq; +import com.unisinsight.project.entity.req.*; +import com.unisinsight.project.entity.res.ImageStatusRes; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.Map; + /** * 第三方API客户端 */ @@ -52,4 +55,32 @@ public interface ExternalApiClient { @GetMapping("/api/v1/storage/pools") ApiResponse listStorage(@RequestParam("page")int page, @RequestParam("page_size")int pageSize); + + // 镜像虚拟机相关接口 + @PostMapping("/api/v1/vm/batch-status") + ApiResponse getImageStatusData(@RequestBody Map requestBody); + + @PostMapping("/api/v1/vm/create") + ApiResponse createImage(@RequestBody ImageCreateReq createReq); + + @PostMapping("/api/v1/vm/update") + ApiResponse updateImage(@RequestBody ImageUpdateReq updateReq); + + @PostMapping("/api/v1/vm/delete") + ApiResponse deleteImage(@RequestBody ImageDeleteReq deleteReq); + + @PostMapping("/api/v1/vm/clone-to-desktop") + ApiResponse cloneTemplate(@RequestBody ImageCloneToDesktopReq cloneReq); + + @PostMapping("/api/v1/vm/start") + ApiResponse startImage(@RequestBody ImageOperationReq operationReq); + + @PostMapping("/api/v1/vm/shutdown") + ApiResponse shutdownImage(@RequestBody ImageOperationReq operationReq); + + @PostMapping("/api/v1/vm/destroy") + ApiResponse destroyImage(@RequestBody ImageOperationReq operationReq); + + @PostMapping("/api/v1/vm/reboot") + ApiResponse rebootImage(@RequestBody ImageOperationReq operationReq); } diff --git a/nex-be/src/main/java/com/unisinsight/project/properties/ImageConfigProperties.java b/nex-be/src/main/java/com/unisinsight/project/properties/ImageConfigProperties.java deleted file mode 100644 index 9329491..0000000 --- a/nex-be/src/main/java/com/unisinsight/project/properties/ImageConfigProperties.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.unisinsight.project.properties; - -import lombok.AccessLevel; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @author : ch - * @version : 1.0 - * @ClassName : ImageConfigProperties - * @Description : 镜像服务配置属性类 - * @DATE : Created in 15:52 2025/8/25 - *
       Copyright: Copyright(c) 2025     
- *
       Company :   	紫光汇智信息技术有限公司		           
- * Modification History: - * Date Author Version Discription - * -------------------------------------------------------------------------- - * 2025/08/25 ch 1.0 Why & What is modified: <修改原因描述> * - */ -@Component -@ConfigurationProperties(prefix = "image") -@Data -public class ImageConfigProperties { - - /** - * 镜像服务基础URL - */ - private String baseUrl; - - /** - * 状态查询URL - */ - @Getter(value=AccessLevel.NONE) - private String statusUrl; - @Getter(value=AccessLevel.NONE) - private String createUrl; - @Getter(value=AccessLevel.NONE) - private String deleteUrl; - @Getter(value=AccessLevel.NONE) - private String updateUrl; - @Getter(value=AccessLevel.NONE) - private String startUrl; - @Getter(value=AccessLevel.NONE) - private String shutdownUrl; - @Getter(value=AccessLevel.NONE) - private String destroyUrl; - @Getter(value=AccessLevel.NONE) - private String rebootUrl; - @Getter(value=AccessLevel.NONE) - private String pauseUrl; - @Getter(value=AccessLevel.NONE) - private String resumeUrl; - @Getter(value=AccessLevel.NONE) - private String cloneToDesktopUrl; - - - - - public String getStatusUrl() { - return baseUrl+statusUrl; - } - - public String getCreateUrl() { - return baseUrl+createUrl; - } - - public String getDeleteUrl() { - return baseUrl+deleteUrl; - } - - public String getUpdateUrl() { - return baseUrl+updateUrl; - } - - public String getStartUrl() { - return baseUrl+startUrl; - } - - public String getShutdownUrl() { - return baseUrl+shutdownUrl; - } - - public String getDestroyUrl() { - return baseUrl+destroyUrl; - } - - public String getRebootUrl() { - return baseUrl+rebootUrl; - } - - public String getPauseUrl() { - return baseUrl+pauseUrl; - } - - public String getResumeUrl() { - return baseUrl+resumeUrl; - } - - public String getCloneToDesktopUrl() { - return baseUrl+cloneToDesktopUrl; - } - -} diff --git a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageToolServiceImpl.java b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageToolServiceImpl.java index 9ab0ec0..2578751 100644 --- a/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageToolServiceImpl.java +++ b/nex-be/src/main/java/com/unisinsight/project/service/impl/ImageToolServiceImpl.java @@ -147,10 +147,7 @@ public class ImageToolServiceImpl extends ServiceImpl nameList = data.stream().map(ImageVirtualMachinesRes::getImageName).filter(Objects::nonNull).distinct().collect(Collectors.toList()); // 添加请求参数 - Map imageStatusData = getImageStatusData(nameList); + Map imageStatusData = getImageStatusData(nameList); for (ImageVirtualMachinesRes res : data) { if (res.getImageSystemId() != null && StringUtils.isNotEmpty(imageMap.get(res.getImageSystemId()))) { res.setImageSystemName(imageMap.get(res.getImageSystemId())); } if (imageStatusData.containsKey(res.getImageName())) { - ImageStatusRes.DataDTO.ItemsDTO itemsDTO = imageStatusData.get(res.getImageName()); + ImageStatusRes.ItemsDTO itemsDTO = imageStatusData.get(res.getImageName()); res.setImageStatus(itemsDTO.getState()); res.setVncData(itemsDTO.getVnc()); } @@ -111,23 +109,20 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl getImageStatusData(List nameList) { + private Map getImageStatusData(List nameList) { Map requestBody = new HashMap<>(); requestBody.put("page", 1); requestBody.put("page_size", 100); requestBody.put("vm_names", nameList); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity> requestEntity = new HttpEntity<>(requestBody, headers); - ResponseEntity exchange = restTemplate.exchange(imageConfigProperties.getStatusUrl(), HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (exchange.getBody() != null && "200".equals(exchange.getBody().getCode()) && exchange.getBody().getData() != null) { - List items = exchange.getBody().getData().getItems(); + ApiResponse response = externalApiClient.getImageStatusData(requestBody); + if (response != null && "200".equals(response.getCode()) && response.getData() != null) { + List items = response.getData().getItems(); if (CollUtil.isNotEmpty(items)) { - return items.stream().collect(Collectors.toMap(ImageStatusRes.DataDTO.ItemsDTO::getName, Function.identity(), (k1, k2) -> k1)); + return items.stream().collect(Collectors.toMap(ImageStatusRes.ItemsDTO::getName, Function.identity(), (k1, k2) -> k1)); } } - log.error("根据名称[{}]请求接口,返回数据为空:{}", nameList, exchange.getBody()); + log.error("根据名称[{}]请求接口,返回数据为空:{}", nameList, response); return Collections.emptyMap(); } @@ -149,7 +144,7 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl imageToolLambdaQueryWrapper = new LambdaQueryWrapper<>(); - imageToolLambdaQueryWrapper.eq(ImageTool::getFileName, imageVirtualMachinesReq.getImageName()); + imageToolLambdaQueryWrapper.eq(ImageTool::getFileName, imageVirtualMachinesReq.getImageToolName()); ImageTool imageTool = imageToolService.getOne(imageToolLambdaQueryWrapper); @@ -157,24 +152,24 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(createReq, headers); - ResponseEntity exchange = restTemplate.exchange(imageConfigProperties.getCreateUrl(), HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)){ + ApiResponse response = externalApiClient.createImage(createReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "创建虚拟机失败"); } @@ -193,22 +188,24 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl update(ImageVirtualMachinesReq imageVirtualMachinesReq) { - // todo 调用镜像修改服务 + //查询驱动信息 + LambdaQueryWrapper imageToolLambdaQueryWrapper = new LambdaQueryWrapper<>(); + imageToolLambdaQueryWrapper.eq(ImageTool::getFileName, imageVirtualMachinesReq.getImageName()); + ImageTool imageTool = imageToolService.getOne(imageToolLambdaQueryWrapper); + // 调用镜像修改服务 ImageUpdateReq updateReq = ImageUpdateReq.builder() .vmName(imageVirtualMachinesReq.getImageName()) .vcpus(imageVirtualMachinesReq.getCpuTotal()) .memory(imageVirtualMachinesReq.getMemoryTotal()) - + .diskSize(imageVirtualMachinesReq.getSystemTotal()) + .storagePoolName(imageVirtualMachinesReq.getStoragePoolName()) .networkName(imageVirtualMachinesReq.getNetworkModule()) //驱动 -// .virtioWinPath(imageVirtualMachinesReq.getStoragePath()) + .virtioWinPath(imageTool.getStorePath()) .description(imageVirtualMachinesReq.getDescription()) .build(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity requestEntity = new HttpEntity<>(updateReq, headers); - ResponseEntity exchange = restTemplate.exchange(imageConfigProperties.getUpdateUrl(), HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)){ + ApiResponse response = externalApiClient.updateImage(updateReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "修改虚拟机失败"); } @@ -251,11 +248,8 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(deleteReq, headers); - ResponseEntity exchange = restTemplate.exchange(imageConfigProperties.getDeleteUrl(), HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + ApiResponse response = externalApiClient.deleteImage(deleteReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "删除虚拟机失败"); } @@ -271,6 +265,7 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl cloneTemplate(ImageVirtualMachinesReq req) { +// todo 改为调用脚本方式执行 // 查询虚拟机信息 ImageVirtualMachines imageVirtualMachines = machinesMapper.selectById(req.getId()); if (ObjectUtils.isEmpty(imageVirtualMachines)) { @@ -285,13 +280,9 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(cloneReq, headers); - String cloneToDesktopUrl = imageConfigProperties.getCloneToDesktopUrl(); - ResponseEntity exchange = restTemplate.exchange(cloneToDesktopUrl, HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + + ApiResponse response = externalApiClient.cloneTemplate(cloneReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "克隆虚拟机到桌面镜像失败"); } @@ -330,11 +321,8 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(operationReq, headers); - ResponseEntity exchange = restTemplate.exchange(imageConfigProperties.getStartUrl(), HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + ApiResponse response = externalApiClient.startImage(operationReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "启动虚拟机失败"); } @@ -354,12 +342,8 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(operationReq, headers); - String shutdownUrl = imageConfigProperties.getShutdownUrl(); - ResponseEntity exchange = restTemplate.exchange(shutdownUrl, HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + ApiResponse response = externalApiClient.shutdownImage(operationReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "关闭虚拟机失败"); } @@ -379,12 +363,8 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(operationReq, headers); - String destroyUrl = imageConfigProperties.getDestroyUrl(); - ResponseEntity exchange = restTemplate.exchange(destroyUrl, HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + ApiResponse response = externalApiClient.destroyImage(operationReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "强制关闭虚拟机失败"); } @@ -404,12 +384,8 @@ public class ImageVirtualMachinesServiceImpl extends ServiceImpl requestEntity = new HttpEntity<>(operationReq, headers); - String rebootUrl = imageConfigProperties.getRebootUrl(); - ResponseEntity exchange = restTemplate.exchange(rebootUrl, HttpMethod.POST, requestEntity, ImageStatusRes.class); - if (!exchange.getStatusCode().equals(HttpStatus.OK)) { + ApiResponse response = externalApiClient.rebootImage(operationReq); + if (response == null || !"200".equals(response.getCode())) { return Result.errorResult(BaseErrorCode.HTTP_REQUEST_FAILURE, "重启虚拟机失败"); } diff --git a/nex-be/src/main/resources/application.yml b/nex-be/src/main/resources/application.yml index 465c06c..6f7d1a6 100644 --- a/nex-be/src/main/resources/application.yml +++ b/nex-be/src/main/resources/application.yml @@ -8,19 +8,6 @@ file: bt-url: http://10.100.51.86:8114 tool: dir: /vms/tool/iso -image: - base-url: http://10.100.51.178:5173 - status-url: /api/v1/vm/batch-status - create-url: /api/v1/vm/create - delete-url: /api/v1/vm/delete - update-url: /api/v1/vm/update - start-url: /api/v1/vm/start - shutdown-url: /api/v1/vm/shutdown - destroy-url: /api/v1/vm/destroy - reboot-url: /api/v1/vm/reboot - pause-url: /api/v1/vm/pause - resume-url: /api/v1/vm/resume - clone-to-desktop-url: /api/v1/vm/clone-to-desktop spring: servlet: multipart: @@ -63,7 +50,7 @@ mybatis-plus: grpc: server: # 指定Grpc暴露的端口,后续客户端通过这个端口访问 - port: 50051 + port: 51051 # Feign 配置 feign: