修改资源池状态
This commit is contained in:
parent
028deeae71
commit
17c8a98f56
|
@ -3,11 +3,14 @@ package io.metersphere.controller;
|
||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import io.metersphere.base.domain.TestResourcePool;
|
import io.metersphere.base.domain.TestResourcePool;
|
||||||
|
import io.metersphere.commons.constants.RoleConstants;
|
||||||
import io.metersphere.commons.utils.PageUtils;
|
import io.metersphere.commons.utils.PageUtils;
|
||||||
import io.metersphere.commons.utils.Pager;
|
import io.metersphere.commons.utils.Pager;
|
||||||
import io.metersphere.controller.request.resourcepool.QueryResourcePoolRequest;
|
import io.metersphere.controller.request.resourcepool.QueryResourcePoolRequest;
|
||||||
import io.metersphere.dto.TestResourcePoolDTO;
|
import io.metersphere.dto.TestResourcePoolDTO;
|
||||||
import io.metersphere.service.TestResourcePoolService;
|
import io.metersphere.service.TestResourcePoolService;
|
||||||
|
import org.apache.shiro.authz.annotation.Logical;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
@ -15,6 +18,7 @@ import java.util.List;
|
||||||
|
|
||||||
@RequestMapping("testresourcepool")
|
@RequestMapping("testresourcepool")
|
||||||
@RestController
|
@RestController
|
||||||
|
@RequiresRoles(RoleConstants.ADMIN)
|
||||||
public class TestResourcePoolController {
|
public class TestResourcePoolController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
|
@ -35,6 +39,11 @@ public class TestResourcePoolController {
|
||||||
testResourcePoolService.updateTestResourcePool(testResourcePoolDTO);
|
testResourcePoolService.updateTestResourcePool(testResourcePoolDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/update/{poolId}/{status}")
|
||||||
|
public void updateTestResourcePoolStatus(@PathVariable String poolId, @PathVariable String status) {
|
||||||
|
testResourcePoolService.updateTestResourcePoolStatus(poolId, status);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("list/{goPage}/{pageSize}")
|
@PostMapping("list/{goPage}/{pageSize}")
|
||||||
public Pager<List<TestResourcePoolDTO>> listResourcePools(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryResourcePoolRequest request) {
|
public Pager<List<TestResourcePoolDTO>> listResourcePools(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryResourcePoolRequest request) {
|
||||||
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
|
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
|
||||||
|
@ -42,6 +51,7 @@ public class TestResourcePoolController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("list/all/valid")
|
@GetMapping("list/all/valid")
|
||||||
|
@RequiresRoles(value = {RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER, RoleConstants.TEST_VIEWER}, logical = Logical.OR)
|
||||||
public List<TestResourcePool> listValidResourcePools() {
|
public List<TestResourcePool> listValidResourcePools() {
|
||||||
return testResourcePoolService.listValidResourcePools();
|
return testResourcePoolService.listValidResourcePools();
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,36 @@ public class TestResourcePoolService {
|
||||||
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void updateTestResourcePoolStatus(String poolId, String status) {
|
||||||
|
TestResourcePool testResourcePool = testResourcePoolMapper.selectByPrimaryKey(poolId);
|
||||||
|
if (testResourcePool == null) {
|
||||||
|
MSException.throwException("Resource Pool not found.");
|
||||||
|
}
|
||||||
|
testResourcePool.setUpdateTime(System.currentTimeMillis());
|
||||||
|
testResourcePool.setStatus(status);
|
||||||
|
// 禁用资源池
|
||||||
|
if (INVALID.name().equals(status)) {
|
||||||
|
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
TestResourcePoolDTO testResourcePoolDTO = new TestResourcePoolDTO();
|
||||||
|
try {
|
||||||
|
BeanUtils.copyProperties(testResourcePoolDTO, testResourcePool);
|
||||||
|
TestResourceExample example2 = new TestResourceExample();
|
||||||
|
example2.createCriteria().andTestResourcePoolIdEqualTo(poolId);
|
||||||
|
List<TestResource> testResources = testResourceMapper.selectByExampleWithBLOBs(example2);
|
||||||
|
testResourcePoolDTO.setResources(testResources);
|
||||||
|
if (validateTestResourcePool(testResourcePoolDTO)) {
|
||||||
|
testResourcePoolMapper.updateByPrimaryKeySelective(testResourcePool);
|
||||||
|
} else {
|
||||||
|
MSException.throwException("Resource Pool is invalid.");
|
||||||
|
}
|
||||||
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||||
|
LogUtil.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public List<TestResourcePoolDTO> listResourcePools(QueryResourcePoolRequest request) {
|
public List<TestResourcePoolDTO> listResourcePools(QueryResourcePoolRequest request) {
|
||||||
TestResourcePoolExample example = new TestResourcePoolExample();
|
TestResourcePoolExample example = new TestResourcePoolExample();
|
||||||
TestResourcePoolExample.Criteria criteria = example.createCriteria();
|
TestResourcePoolExample.Criteria criteria = example.createCriteria();
|
||||||
|
@ -96,15 +126,14 @@ public class TestResourcePoolService {
|
||||||
return testResourcePoolDTOS;
|
return testResourcePoolDTOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateTestResourcePool(TestResourcePoolDTO testResourcePool) {
|
private boolean validateTestResourcePool(TestResourcePoolDTO testResourcePool) {
|
||||||
if (StringUtils.equalsIgnoreCase(testResourcePool.getType(), ResourcePoolTypeEnum.K8S.name())) {
|
if (StringUtils.equalsIgnoreCase(testResourcePool.getType(), ResourcePoolTypeEnum.K8S.name())) {
|
||||||
validateK8s(testResourcePool);
|
return validateK8s(testResourcePool);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
validateNodes(testResourcePool);
|
return validateNodes(testResourcePool);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateNodes(TestResourcePoolDTO testResourcePool) {
|
private boolean validateNodes(TestResourcePoolDTO testResourcePool) {
|
||||||
if (CollectionUtils.isEmpty(testResourcePool.getResources())) {
|
if (CollectionUtils.isEmpty(testResourcePool.getResources())) {
|
||||||
MSException.throwException(Translator.get("no_nodes_message"));
|
MSException.throwException(Translator.get("no_nodes_message"));
|
||||||
}
|
}
|
||||||
|
@ -121,19 +150,21 @@ public class TestResourcePoolService {
|
||||||
MSException.throwException(Translator.get("duplicate_node_ip"));
|
MSException.throwException(Translator.get("duplicate_node_ip"));
|
||||||
}
|
}
|
||||||
testResourcePool.setStatus(VALID.name());
|
testResourcePool.setStatus(VALID.name());
|
||||||
|
boolean isValid = true;
|
||||||
for (TestResource resource : testResourcePool.getResources()) {
|
for (TestResource resource : testResourcePool.getResources()) {
|
||||||
NodeDTO nodeDTO = JSON.parseObject(resource.getConfiguration(), NodeDTO.class);
|
NodeDTO nodeDTO = JSON.parseObject(resource.getConfiguration(), NodeDTO.class);
|
||||||
boolean isValidate = validateNode(nodeDTO);
|
boolean isValidate = validateNode(nodeDTO);
|
||||||
if (!isValidate) {
|
if (!isValidate) {
|
||||||
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
resource.setStatus(ResourceStatusEnum.INVALID.name());
|
resource.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
|
isValid = false;
|
||||||
} else {
|
} else {
|
||||||
resource.setStatus(VALID.name());
|
resource.setStatus(VALID.name());
|
||||||
}
|
}
|
||||||
resource.setTestResourcePoolId(testResourcePool.getId());
|
resource.setTestResourcePoolId(testResourcePool.getId());
|
||||||
updateTestResource(resource);
|
updateTestResource(resource);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return isValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateNode(NodeDTO node) {
|
private boolean validateNode(NodeDTO node) {
|
||||||
|
@ -145,7 +176,7 @@ public class TestResourcePoolService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateK8s(TestResourcePoolDTO testResourcePool) {
|
private boolean validateK8s(TestResourcePoolDTO testResourcePool) {
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(testResourcePool.getResources()) || testResourcePool.getResources().size() != 1) {
|
if (CollectionUtils.isEmpty(testResourcePool.getResources()) || testResourcePool.getResources().size() != 1) {
|
||||||
throw new RuntimeException(Translator.get("only_one_k8s"));
|
throw new RuntimeException(Translator.get("only_one_k8s"));
|
||||||
|
@ -153,18 +184,21 @@ public class TestResourcePoolService {
|
||||||
|
|
||||||
TestResource testResource = testResourcePool.getResources().get(0);
|
TestResource testResource = testResourcePool.getResources().get(0);
|
||||||
testResource.setTestResourcePoolId(testResourcePool.getId());
|
testResource.setTestResourcePoolId(testResourcePool.getId());
|
||||||
|
boolean isValid;
|
||||||
try {
|
try {
|
||||||
KubernetesProvider provider = new KubernetesProvider(testResource.getConfiguration());
|
KubernetesProvider provider = new KubernetesProvider(testResource.getConfiguration());
|
||||||
provider.validateCredential();
|
provider.validateCredential();
|
||||||
testResource.setStatus(VALID.name());
|
testResource.setStatus(VALID.name());
|
||||||
testResourcePool.setStatus(VALID.name());
|
testResourcePool.setStatus(VALID.name());
|
||||||
|
isValid = true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
testResource.setStatus(ResourceStatusEnum.INVALID.name());
|
testResource.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
testResourcePool.setStatus(ResourceStatusEnum.INVALID.name());
|
||||||
|
isValid = false;
|
||||||
}
|
}
|
||||||
deleteTestResource(testResourcePool.getId());
|
deleteTestResource(testResourcePool.getId());
|
||||||
updateTestResource(testResource);
|
updateTestResource(testResource);
|
||||||
|
return isValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTestResource(TestResource testResource) {
|
private void updateTestResource(TestResource testResource) {
|
||||||
|
@ -191,7 +225,7 @@ public class TestResourcePoolService {
|
||||||
for (TestResourcePoolDTO pool : testResourcePools) {
|
for (TestResourcePoolDTO pool : testResourcePools) {
|
||||||
// 手动设置成无效的, 排除
|
// 手动设置成无效的, 排除
|
||||||
if (INVALID.name().equals(pool.getStatus())) {
|
if (INVALID.name().equals(pool.getStatus())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
updateTestResourcePool(pool);
|
updateTestResourcePool(pool);
|
||||||
|
@ -205,4 +239,5 @@ public class TestResourcePoolService {
|
||||||
example.createCriteria().andStatusEqualTo(ResourceStatusEnum.VALID.name());
|
example.createCriteria().andStatusEqualTo(ResourceStatusEnum.VALID.name());
|
||||||
return testResourcePoolMapper.selectByExample(example);
|
return testResourcePoolMapper.selectByExample(example);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -413,9 +413,13 @@
|
||||||
this.form = {};
|
this.form = {};
|
||||||
},
|
},
|
||||||
changeSwitch(row) {
|
changeSwitch(row) {
|
||||||
this.result = this.$post('/testresourcepool/update', row).then(() => {
|
this.result = this.$get('/testresourcepool/update/' + row.id + '/' + row.status)
|
||||||
this.$success(this.$t('test_resource_pool.status_change_success'));
|
.then(() => {
|
||||||
})
|
this.$success(this.$t('test_resource_pool.status_change_success'));
|
||||||
|
}).catch(() => {
|
||||||
|
this.$error(this.$t('test_resource_pool.status_change_failed'));
|
||||||
|
row.status = 'INVALID';
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,6 +314,7 @@ export default {
|
||||||
'fill_the_data': 'Please complete the data',
|
'fill_the_data': 'Please complete the data',
|
||||||
'delete_prompt': 'This operation will permanently delete the resource pool, continue?',
|
'delete_prompt': 'This operation will permanently delete the resource pool, continue?',
|
||||||
'status_change_success': 'Successfully changed the status!',
|
'status_change_success': 'Successfully changed the status!',
|
||||||
|
'status_change_failed': 'Failed to change the status!',
|
||||||
},
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
'home': 'Home'
|
'home': 'Home'
|
||||||
|
|
|
@ -359,6 +359,7 @@ export default {
|
||||||
'fill_the_data': '请完善数据',
|
'fill_the_data': '请完善数据',
|
||||||
'delete_prompt': '此操作将永久删除该资源池, 是否继续?',
|
'delete_prompt': '此操作将永久删除该资源池, 是否继续?',
|
||||||
'status_change_success': '状态修改成功!',
|
'status_change_success': '状态修改成功!',
|
||||||
|
'status_change_failed': '状态修改失败!',
|
||||||
},
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
'home': '首页'
|
'home': '首页'
|
||||||
|
|
Loading…
Reference in New Issue