添加主机配置
This commit is contained in:
@@ -17,8 +17,12 @@ public interface ErrorMessage {
|
||||
|
||||
String INVALID_PARAM = "参数验证失败";
|
||||
|
||||
String DATA_MODIFIED = "数据发生变更, 请刷新后重试";
|
||||
|
||||
String DATA_ABSENT = "数据不存在";
|
||||
|
||||
String CONFIG_ABSENT = "配置不存在";
|
||||
|
||||
String DATA_PRESENT = "数据已存在";
|
||||
|
||||
String NAME_PRESENT = "名称已存在";
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.orion.lang.define.wrapper.DataGrid;
|
||||
import com.orion.ops.framework.common.annotation.IgnoreLog;
|
||||
import com.orion.ops.framework.common.annotation.RestWrapper;
|
||||
import com.orion.ops.framework.common.constant.IgnoreLogMode;
|
||||
import com.orion.ops.framework.common.valid.group.Id;
|
||||
import com.orion.ops.framework.common.valid.group.Page;
|
||||
import ${package.Service}.*;
|
||||
#foreach($pkg in ${customModuleFilePackages})
|
||||
@@ -59,7 +58,7 @@ public class ${table.controllerName} {
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "${apiComment.updateById}")
|
||||
@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:update')")
|
||||
public Integer update${type}(@Validated(Id.class) @RequestBody ${type}UpdateRequest request) {
|
||||
public Integer update${type}(@Validated @RequestBody ${type}UpdateRequest request) {
|
||||
return ${typeLower}Service.update${type}ById(request);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,14 @@ import com.orion.lang.define.wrapper.DataGrid;
|
||||
import com.orion.ops.framework.common.annotation.IgnoreLog;
|
||||
import com.orion.ops.framework.common.annotation.RestWrapper;
|
||||
import com.orion.ops.framework.common.constant.IgnoreLogMode;
|
||||
import com.orion.ops.framework.common.valid.group.Id;
|
||||
import com.orion.ops.framework.common.valid.group.Page;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostCreateRequest;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostQueryRequest;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostUpdateRequest;
|
||||
import com.orion.ops.module.asset.entity.vo.HostConfigVO;
|
||||
import com.orion.ops.module.asset.entity.vo.HostVO;
|
||||
import com.orion.ops.module.asset.service.HostConfigService;
|
||||
import com.orion.ops.module.asset.service.HostService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -41,6 +43,9 @@ public class HostController {
|
||||
@Resource
|
||||
private HostService hostService;
|
||||
|
||||
@Resource
|
||||
private HostConfigService hostConfigService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建主机")
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:create')")
|
||||
@@ -51,7 +56,7 @@ public class HostController {
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "通过 id 更新主机")
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:update')")
|
||||
public Integer updateHost(@Validated(Id.class) @RequestBody HostUpdateRequest request) {
|
||||
public Integer updateHost(@Validated @RequestBody HostUpdateRequest request) {
|
||||
return hostService.updateHostById(request);
|
||||
}
|
||||
|
||||
@@ -96,5 +101,33 @@ public class HostController {
|
||||
return hostService.deleteHostById(id);
|
||||
}
|
||||
|
||||
@IgnoreLog(IgnoreLogMode.RET)
|
||||
@GetMapping("/get-config")
|
||||
@Operation(summary = "查询主机配置")
|
||||
@Parameter(name = "hostId", description = "hostId", required = true)
|
||||
@Parameter(name = "type", description = "配置类型", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:query')")
|
||||
public HostConfigVO getHostConfig(@RequestParam("hostId") Long hostId,
|
||||
@RequestParam(name = "type") String type) {
|
||||
return hostConfigService.getHostConfig(hostId, type);
|
||||
}
|
||||
|
||||
@IgnoreLog(IgnoreLogMode.RET)
|
||||
@GetMapping("/get-config-all")
|
||||
@Operation(summary = "查询主机配置-全部")
|
||||
@Parameter(name = "hostId", description = "hostId", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:query')")
|
||||
public List<HostConfigVO> getHostConfig(@RequestParam("hostId") Long hostId) {
|
||||
return hostConfigService.getHostConfig(hostId);
|
||||
}
|
||||
|
||||
@PutMapping("/update-config")
|
||||
@Operation(summary = "更新主机配置")
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:update-config')")
|
||||
public boolean updateHostConfig(@Validated @RequestBody HostConfigUpdateRequest request) {
|
||||
hostConfigService.updateHostConfig(request);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.orion.ops.module.asset.convert;
|
||||
|
||||
import com.orion.ops.module.asset.entity.domain.HostConfigDO;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
|
||||
import com.orion.ops.module.asset.entity.vo.HostConfigVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
@@ -17,6 +19,9 @@ public interface HostConfigConvert {
|
||||
|
||||
HostConfigConvert MAPPER = Mappers.getMapper(HostConfigConvert.class);
|
||||
|
||||
@Mapping(target = "config", ignore = true)
|
||||
HostConfigVO to(HostConfigDO domain);
|
||||
|
||||
HostConfigDO to(HostConfigUpdateRequest request);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.orion.ops.module.asset.entity.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
@@ -44,6 +41,7 @@ public class HostConfigDO extends BaseDO {
|
||||
|
||||
@Schema(description = "配置版本号")
|
||||
@TableField("version")
|
||||
private String version;
|
||||
@Version
|
||||
private Integer version;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.orion.ops.module.asset.entity.dto.host;
|
||||
|
||||
/**
|
||||
* 主机配置父类
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023/9/13 14:47
|
||||
*/
|
||||
public interface HostConfigContent {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.orion.ops.module.asset.entity.dto.host;
|
||||
|
||||
/**
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023/9/13 16:26
|
||||
*/
|
||||
public class HostSftpConfig implements HostConfigContent {
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.orion.ops.module.asset.entity.dto.host;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* ssh 连接配置
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023/9/13 16:18
|
||||
*/
|
||||
@Data
|
||||
public class HostSshConnectConfig implements HostConfigContent {
|
||||
|
||||
// proxy port username password authType keyId
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.orion.ops.module.asset.entity.dto.host;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* ssh 环境变量配置
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023/9/13 16:18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class HostSshEnvConfig extends HashMap<String, Object> implements HostConfigContent {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.orion.ops.module.asset.entity.request.host;
|
||||
|
||||
import com.orion.ops.framework.common.entity.PageRequest;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
/**
|
||||
* 主机配置 查询请求对象
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023-9-13 14:31
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(name = "HostConfigQueryRequest", description = "主机配置 查询请求对象")
|
||||
public class HostConfigQueryRequest extends PageRequest {
|
||||
|
||||
@Schema(description = "主机id")
|
||||
private Long hostId;
|
||||
|
||||
@Size(max = 255)
|
||||
@Schema(description = "连接类型")
|
||||
private String type;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.orion.ops.module.asset.entity.request.host;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 主机配置 更新请求对象
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023-9-13 14:31
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "HostConfigUpdateRequest", description = "主机配置 更新请求对象")
|
||||
public class HostConfigUpdateRequest implements Serializable {
|
||||
|
||||
@NotNull
|
||||
@Schema(description = "hostId")
|
||||
private Long hostId;
|
||||
|
||||
@NotNull
|
||||
@Schema(description = "配置类型")
|
||||
private String type;
|
||||
|
||||
@NotBlank
|
||||
@Schema(description = "配置详情")
|
||||
private String config;
|
||||
|
||||
@NotNull
|
||||
@Schema(description = "配置版本号")
|
||||
private Integer version;
|
||||
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public class HostConfigVO {
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "version")
|
||||
private String version;
|
||||
private Integer version;
|
||||
|
||||
@Schema(description = "config")
|
||||
private Map<String, Object> config;
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package com.orion.ops.module.asset.enums;
|
||||
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostConfigContent;
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostSftpConfig;
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostSshConnectConfig;
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostSshEnvConfig;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 主机配置类型枚举
|
||||
*
|
||||
@@ -7,31 +14,67 @@ package com.orion.ops.module.asset.enums;
|
||||
* @version 1.0.0
|
||||
* @since 2023/9/11 14:37
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum HostConfigTypeEnum {
|
||||
|
||||
/**
|
||||
* ssh 配置
|
||||
* SSH 连接配置
|
||||
*/
|
||||
SSH,
|
||||
SSH_CONNECT(HostSshConnectConfig.class) {
|
||||
},
|
||||
|
||||
/**
|
||||
* SSH 环境变量
|
||||
*/
|
||||
SSH_ENV(HostSshEnvConfig.class),
|
||||
|
||||
/**
|
||||
* sftp 配置
|
||||
*/
|
||||
SFTP,
|
||||
SFTP(HostSftpConfig.class),
|
||||
|
||||
/**
|
||||
* rdp 配置
|
||||
*/
|
||||
RDP,
|
||||
|
||||
/**
|
||||
* 环境变量
|
||||
*/
|
||||
ENV,
|
||||
RDP(null),
|
||||
|
||||
/**
|
||||
* 普通配置
|
||||
*/
|
||||
CONFIG,
|
||||
CONFIG(null),
|
||||
|
||||
;
|
||||
|
||||
private final Class<? extends HostConfigContent> type;
|
||||
|
||||
public static HostConfigTypeEnum of(String type) {
|
||||
if (type == null) {
|
||||
return null;
|
||||
}
|
||||
for (HostConfigTypeEnum value : values()) {
|
||||
if (value.name().equals(type)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入填充
|
||||
*
|
||||
* @param o o
|
||||
*/
|
||||
public <T extends HostConfigContent> void insertFill(T o) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新填充
|
||||
*
|
||||
* @param before before
|
||||
* @param after after
|
||||
*/
|
||||
public <T extends HostConfigContent> void updateFill(T before, T after) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package com.orion.ops.module.asset.service;
|
||||
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostConfigContent;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
|
||||
import com.orion.ops.module.asset.entity.vo.HostConfigVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 主机配置 服务类
|
||||
*
|
||||
@@ -9,4 +15,38 @@ package com.orion.ops.module.asset.service;
|
||||
*/
|
||||
public interface HostConfigService {
|
||||
|
||||
/**
|
||||
* 获取配置
|
||||
*
|
||||
* @param hostId hostId
|
||||
* @param type type
|
||||
* @return 配置
|
||||
*/
|
||||
HostConfigVO getHostConfig(Long hostId, String type);
|
||||
|
||||
/**
|
||||
* 获取配置
|
||||
*
|
||||
* @param hostId hostId
|
||||
* @param type type
|
||||
* @param clazz class
|
||||
* @return 配置
|
||||
*/
|
||||
<T extends HostConfigContent> T getHostConfig(Long hostId, String type, Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 获取配置
|
||||
*
|
||||
* @param hostId hostId
|
||||
* @return 配置
|
||||
*/
|
||||
List<HostConfigVO> getHostConfig(Long hostId);
|
||||
|
||||
/**
|
||||
* 更新配置
|
||||
*
|
||||
* @param request request
|
||||
*/
|
||||
void updateHostConfig(HostConfigUpdateRequest request);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
package com.orion.ops.module.asset.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.orion.ops.framework.common.constant.ErrorMessage;
|
||||
import com.orion.ops.framework.common.utils.Valid;
|
||||
import com.orion.ops.module.asset.convert.HostConfigConvert;
|
||||
import com.orion.ops.module.asset.dao.HostConfigDAO;
|
||||
import com.orion.ops.module.asset.entity.domain.HostConfigDO;
|
||||
import com.orion.ops.module.asset.entity.dto.host.HostConfigContent;
|
||||
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
|
||||
import com.orion.ops.module.asset.entity.vo.HostConfigVO;
|
||||
import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
|
||||
import com.orion.ops.module.asset.service.HostConfigService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 主机配置 服务实现类
|
||||
@@ -21,4 +32,66 @@ public class HostConfigServiceImpl implements HostConfigService {
|
||||
@Resource
|
||||
private HostConfigDAO hostConfigDAO;
|
||||
|
||||
@Override
|
||||
public HostConfigVO getHostConfig(Long hostId, String type) {
|
||||
// 查询配置
|
||||
HostConfigDO config = hostConfigDAO.getHostConfigByHostId(hostId, type);
|
||||
Valid.notNull(config, ErrorMessage.CONFIG_ABSENT);
|
||||
// 转换
|
||||
HostConfigVO vo = HostConfigConvert.MAPPER.to(config);
|
||||
vo.setConfig(JSON.parseObject(config.getConfig()));
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends HostConfigContent> T getHostConfig(Long hostId, String type, Class<T> clazz) {
|
||||
// 查询配置
|
||||
HostConfigDO config = hostConfigDAO.getHostConfigByHostId(hostId, type);
|
||||
Valid.notNull(config, ErrorMessage.CONFIG_ABSENT);
|
||||
return JSON.parseObject(config.getConfig(), clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostConfigVO> getHostConfig(Long hostId) {
|
||||
List<HostConfigDO> configs = hostConfigDAO.getHostConfigByHostId(hostId);
|
||||
return configs.stream().map(config -> {
|
||||
HostConfigVO vo = HostConfigConvert.MAPPER.to(config);
|
||||
vo.setConfig(JSON.parseObject(config.getConfig()));
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateHostConfig(HostConfigUpdateRequest request) {
|
||||
String typeValue = request.getType();
|
||||
HostConfigTypeEnum type = HostConfigTypeEnum.of(typeValue);
|
||||
HostConfigContent requestConfig = JSON.parseObject(request.getConfig(), type.getType());
|
||||
// 查询原配置
|
||||
HostConfigDO record = hostConfigDAO.getHostConfigByHostId(request.getHostId(), typeValue);
|
||||
if (record == null) {
|
||||
// 填充
|
||||
type.insertFill(requestConfig);
|
||||
// 检查参数
|
||||
Valid.valid(requestConfig);
|
||||
// 新增配置
|
||||
HostConfigDO insert = HostConfigConvert.MAPPER.to(request);
|
||||
insert.setConfig(JSON.toJSONString(requestConfig));
|
||||
hostConfigDAO.insert(insert);
|
||||
} else {
|
||||
// 检查版本
|
||||
Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED);
|
||||
// 填充
|
||||
HostConfigContent beforeConfig = JSON.parseObject(record.getConfig(), type.getType());
|
||||
type.updateFill(beforeConfig, requestConfig);
|
||||
// 检查参数
|
||||
Valid.valid(requestConfig);
|
||||
// 修改配置
|
||||
HostConfigDO update = new HostConfigDO();
|
||||
update.setId(record.getId());
|
||||
update.setVersion(request.getVersion());
|
||||
update.setConfig(JSON.toJSONString(requestConfig));
|
||||
hostConfigDAO.updateById(update);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.orion.lang.define.wrapper.DataGrid;
|
||||
import com.orion.ops.framework.common.annotation.IgnoreLog;
|
||||
import com.orion.ops.framework.common.annotation.RestWrapper;
|
||||
import com.orion.ops.framework.common.constant.IgnoreLogMode;
|
||||
import com.orion.ops.framework.common.valid.group.Id;
|
||||
import com.orion.ops.framework.common.valid.group.Page;
|
||||
import com.orion.ops.module.infra.entity.request.menu.SystemRoleBindMenuRequest;
|
||||
import com.orion.ops.module.infra.entity.request.role.SystemRoleCreateRequest;
|
||||
@@ -57,14 +56,14 @@ public class SystemRoleController {
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "通过 id 更新角色")
|
||||
@PreAuthorize("@ss.hasPermission('infra:system-role:update')")
|
||||
public Integer updateSystemRole(@Validated(Id.class) @RequestBody SystemRoleUpdateRequest request) {
|
||||
public Integer updateSystemRole(@Validated @RequestBody SystemRoleUpdateRequest request) {
|
||||
return systemRoleService.updateSystemRoleById(request);
|
||||
}
|
||||
|
||||
@PutMapping("/update-status")
|
||||
@Operation(summary = "通过 id 更新角色状态")
|
||||
@PreAuthorize("@ss.hasPermission('infra:system-role:update-status')")
|
||||
public Integer updateRoleStatus(@Validated(Id.class) @RequestBody SystemRoleStatusRequest request) {
|
||||
public Integer updateRoleStatus(@Validated @RequestBody SystemRoleStatusRequest request) {
|
||||
return systemRoleService.updateRoleStatus(request);
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ public class SystemUserController {
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "通过 id 更新用户")
|
||||
@PreAuthorize("@ss.hasPermission('infra:system-user:update')")
|
||||
public Integer updateSystemUser(@Validated(Id.class) @RequestBody SystemUserUpdateRequest request) {
|
||||
public Integer updateSystemUser(@Validated @RequestBody SystemUserUpdateRequest request) {
|
||||
return systemUserService.updateSystemUserById(request);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user