⚡ 复制主机.
This commit is contained in:
@@ -84,6 +84,17 @@ public class HostController {
|
|||||||
return hostService.updateHostById(request);
|
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
|
@DemoDisableApi
|
||||||
@OperatorLog(HostOperatorType.UPDATE_STATUS)
|
@OperatorLog(HostOperatorType.UPDATE_STATUS)
|
||||||
@PutMapping("/update-status")
|
@PutMapping("/update-status")
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ public interface HostConvert {
|
|||||||
|
|
||||||
HostBaseVO toBase(HostDO domain);
|
HostBaseVO toBase(HostDO domain);
|
||||||
|
|
||||||
|
HostCreateRequest toCreate(HostUpdateRequest request);
|
||||||
|
|
||||||
List<HostVO> toList(List<HostDO> domain);
|
List<HostVO> toList(List<HostDO> domain);
|
||||||
|
|
||||||
List<HostBaseVO> toBaseList(List<HostDO> domain);
|
List<HostBaseVO> toBaseList(List<HostDO> domain);
|
||||||
|
|||||||
@@ -57,6 +57,20 @@ public interface HostConfigDAO extends IMapper<HostConfigDO> {
|
|||||||
.getOne();
|
.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.HostConfigQueryRequest;
|
||||||
import org.dromara.visor.module.asset.entity.request.host.HostConfigUpdateRequest;
|
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);
|
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);
|
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);
|
Long createHost(HostCreateRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 复制主机
|
||||||
|
*
|
||||||
|
* @param originId originId
|
||||||
|
* @param request request
|
||||||
|
* @return id
|
||||||
|
*/
|
||||||
|
Long copyHost(Long originId, HostUpdateRequest request);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 id 更新主机
|
* 通过 id 更新主机
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.dromara.visor.module.asset.service.impl;
|
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 com.alibaba.fastjson.JSON;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.visor.common.constant.ErrorMessage;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
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
|
@Override
|
||||||
public <T extends GenericsDataModel> T getHostConfig(Long hostId, String type) {
|
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());
|
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.HostExtraItemEnum;
|
||||||
import org.dromara.visor.module.asset.enums.HostStatusEnum;
|
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.handler.host.extra.model.HostSpecExtraModel;
|
||||||
import org.dromara.visor.module.asset.service.ExecJobHostService;
|
import org.dromara.visor.module.asset.service.*;
|
||||||
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.infra.api.DataExtraApi;
|
import org.dromara.visor.module.infra.api.DataExtraApi;
|
||||||
import org.dromara.visor.module.infra.api.DataGroupRelApi;
|
import org.dromara.visor.module.infra.api.DataGroupRelApi;
|
||||||
import org.dromara.visor.module.infra.api.FavoriteApi;
|
import org.dromara.visor.module.infra.api.FavoriteApi;
|
||||||
@@ -91,6 +88,9 @@ public class HostServiceImpl implements HostService {
|
|||||||
@Resource
|
@Resource
|
||||||
private HostConfigDAO hostConfigDAO;
|
private HostConfigDAO hostConfigDAO;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private HostConfigService hostConfigService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HostExtraService hostExtraService;
|
private HostExtraService hostExtraService;
|
||||||
|
|
||||||
@@ -138,6 +138,23 @@ public class HostServiceImpl implements HostService {
|
|||||||
return id;
|
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
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Integer updateHostById(HostUpdateRequest request) {
|
public Integer updateHostById(HostUpdateRequest request) {
|
||||||
|
|||||||
Reference in New Issue
Block a user