⚡ 复制主机.
This commit is contained in:
@@ -84,6 +84,17 @@ public class HostController {
|
||||
return hostService.updateHostById(request);
|
||||
}
|
||||
|
||||
@DemoDisableApi
|
||||
@OperatorLog(HostOperatorType.CREATE)
|
||||
@PostMapping("/copy")
|
||||
@Operation(summary = "复制主机")
|
||||
@PreAuthorize("@ss.hasPermission('asset:host:create')")
|
||||
public Long copyHost(@Validated @RequestBody HostUpdateRequest request) {
|
||||
Long id = request.getId();
|
||||
request.setId(null);
|
||||
return hostService.copyHost(id, request);
|
||||
}
|
||||
|
||||
@DemoDisableApi
|
||||
@OperatorLog(HostOperatorType.UPDATE_STATUS)
|
||||
@PutMapping("/update-status")
|
||||
|
||||
@@ -61,6 +61,8 @@ public interface HostConvert {
|
||||
|
||||
HostBaseVO toBase(HostDO domain);
|
||||
|
||||
HostCreateRequest toCreate(HostUpdateRequest request);
|
||||
|
||||
List<HostVO> toList(List<HostDO> domain);
|
||||
|
||||
List<HostBaseVO> toBaseList(List<HostDO> domain);
|
||||
|
||||
@@ -57,6 +57,20 @@ public interface HostConfigDAO extends IMapper<HostConfigDO> {
|
||||
.getOne();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过 hostId 查询
|
||||
*
|
||||
* @param hostId hostId
|
||||
* @return config
|
||||
*/
|
||||
default List<HostConfigDO> selectByHostId(Long hostId) {
|
||||
return this.of()
|
||||
.createWrapper()
|
||||
.eq(HostConfigDO::getHostId, hostId)
|
||||
.then()
|
||||
.list();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新配置状态
|
||||
*
|
||||
|
||||
@@ -26,6 +26,8 @@ import org.dromara.visor.common.handler.data.model.GenericsDataModel;
|
||||
import org.dromara.visor.module.asset.entity.request.host.HostConfigQueryRequest;
|
||||
import org.dromara.visor.module.asset.entity.request.host.HostConfigUpdateRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 主机配置 服务类
|
||||
*
|
||||
@@ -43,6 +45,15 @@ public interface HostConfigService {
|
||||
*/
|
||||
Integer updateHostConfig(HostConfigUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 复制主机配置
|
||||
*
|
||||
* @param originId originId
|
||||
* @param newId newId
|
||||
* @param types types
|
||||
*/
|
||||
void copyHostConfig(Long originId, Long newId, List<String> types);
|
||||
|
||||
/**
|
||||
* 获取主机配置
|
||||
*
|
||||
|
||||
@@ -75,4 +75,12 @@ public interface HostExtraService {
|
||||
*/
|
||||
Integer updateHostExtra(HostExtraUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 复制主机拓展信息
|
||||
*
|
||||
* @param originId originId
|
||||
* @param newId newId
|
||||
*/
|
||||
void copyHostExtra(Long originId, Long newId);
|
||||
|
||||
}
|
||||
|
||||
@@ -47,6 +47,15 @@ public interface HostService {
|
||||
*/
|
||||
Long createHost(HostCreateRequest request);
|
||||
|
||||
/**
|
||||
* 复制主机
|
||||
*
|
||||
* @param originId originId
|
||||
* @param request request
|
||||
* @return id
|
||||
*/
|
||||
Long copyHost(Long originId, HostUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 通过 id 更新主机
|
||||
*
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
*/
|
||||
package org.dromara.visor.module.asset.service.impl;
|
||||
|
||||
import cn.orionsec.kit.lang.function.Functions;
|
||||
import cn.orionsec.kit.lang.utils.Strings;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.visor.common.constant.ErrorMessage;
|
||||
@@ -42,6 +44,10 @@ import org.dromara.visor.module.asset.service.HostConfigService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 主机配置 服务实现类
|
||||
@@ -102,6 +108,34 @@ public class HostConfigServiceImpl implements HostConfigService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyHostConfig(Long originId, Long newId, List<String> types) {
|
||||
// 查询原始主机配置
|
||||
Map<String, String> originHostConfigMap = hostConfigDAO.selectByHostId(originId)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(HostConfigDO::getType,
|
||||
HostConfigDO::getConfig,
|
||||
Functions.right()));
|
||||
// 新增
|
||||
List<HostConfigDO> records = new ArrayList<>();
|
||||
for (String type : types) {
|
||||
// 获取原始配置
|
||||
String configValue = originHostConfigMap.get(type);
|
||||
if (Strings.isBlank(configValue)) {
|
||||
// 获取默认值
|
||||
configValue = HostTypeEnum.of(type).getDefault().serial();
|
||||
}
|
||||
HostConfigDO newConfig = HostConfigDO.builder()
|
||||
.hostId(newId)
|
||||
.type(type)
|
||||
.status(EnableStatus.ENABLED.name())
|
||||
.config(configValue)
|
||||
.build();
|
||||
records.add(newConfig);
|
||||
}
|
||||
hostConfigDAO.insertBatch(records);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends GenericsDataModel> T getHostConfig(Long hostId, String type) {
|
||||
// 查询配置信息
|
||||
|
||||
@@ -123,6 +123,29 @@ public class HostExtraServiceImpl implements HostExtraService {
|
||||
return dataExtraApi.updateExtraValue(beforeExtraItem.getId(), newExtra.serial());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyHostExtra(Long originId, Long newId) {
|
||||
// 查询原始配置
|
||||
DataExtraQueryDTO query = DataExtraQueryDTO.builder()
|
||||
.userId(Const.SYSTEM_USER_ID)
|
||||
.relId(originId)
|
||||
.build();
|
||||
List<DataExtraDTO> items = dataExtraApi.getExtraItems(query, DataExtraTypeEnum.HOST);
|
||||
if (items.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 插入新配置
|
||||
List<DataExtraSetDTO> newItems = items.stream()
|
||||
.map(s -> DataExtraSetDTO.builder()
|
||||
.userId(Const.SYSTEM_USER_ID)
|
||||
.relId(newId)
|
||||
.item(s.getItem())
|
||||
.value(s.getValue())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
dataExtraApi.addExtraItems(newItems, DataExtraTypeEnum.HOST);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查配置项并且转为视图 (不存在则初始化默认值)
|
||||
*
|
||||
|
||||
@@ -49,10 +49,7 @@ import org.dromara.visor.module.asset.entity.vo.HostVO;
|
||||
import org.dromara.visor.module.asset.enums.HostExtraItemEnum;
|
||||
import org.dromara.visor.module.asset.enums.HostStatusEnum;
|
||||
import org.dromara.visor.module.asset.handler.host.extra.model.HostSpecExtraModel;
|
||||
import org.dromara.visor.module.asset.service.ExecJobHostService;
|
||||
import org.dromara.visor.module.asset.service.ExecTemplateHostService;
|
||||
import org.dromara.visor.module.asset.service.HostExtraService;
|
||||
import org.dromara.visor.module.asset.service.HostService;
|
||||
import org.dromara.visor.module.asset.service.*;
|
||||
import org.dromara.visor.module.infra.api.DataExtraApi;
|
||||
import org.dromara.visor.module.infra.api.DataGroupRelApi;
|
||||
import org.dromara.visor.module.infra.api.FavoriteApi;
|
||||
@@ -91,6 +88,9 @@ public class HostServiceImpl implements HostService {
|
||||
@Resource
|
||||
private HostConfigDAO hostConfigDAO;
|
||||
|
||||
@Resource
|
||||
private HostConfigService hostConfigService;
|
||||
|
||||
@Resource
|
||||
private HostExtraService hostExtraService;
|
||||
|
||||
@@ -138,6 +138,23 @@ public class HostServiceImpl implements HostService {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long copyHost(Long originId, HostUpdateRequest request) {
|
||||
log.info("HostService-copyHost originId: {}, request: {}", originId, JSON.toJSONString(request));
|
||||
// 查询原始主机
|
||||
HostDO originHost = hostDAO.selectById(originId);
|
||||
Valid.notNull(originHost, ErrorMessage.HOST_ABSENT);
|
||||
// 创建主机
|
||||
Long newId = SpringHolder.getBean(HostService.class)
|
||||
.createHost(HostConvert.MAPPER.toCreate(request));
|
||||
// 复制主机额外信息
|
||||
hostExtraService.copyHostExtra(originId, newId);
|
||||
// 复制主机配置信息
|
||||
hostConfigService.copyHostConfig(originId, newId, request.getTypes());
|
||||
return newId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Integer updateHostById(HostUpdateRequest request) {
|
||||
|
||||
Reference in New Issue
Block a user