Commit 88ed8d76 authored by 黎博's avatar 黎博

Merge branch 'master' into pipline

parents f278aa17 02cbd22e
package cn.qg.holmes.controller.k8s;
import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.config.annotation.RequiresPermissions;
import cn.qg.holmes.entity.k8s.EnvTemplate;
import cn.qg.holmes.entity.k8s.EnvTemplateDetail;
import cn.qg.holmes.entity.k8s.EnvTemplateVo;
import cn.qg.holmes.service.k8s.EnvTemplateDetailService;
import cn.qg.holmes.service.k8s.EnvTemplateService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/env/template")
public class EnvTemplateController {
@Autowired
EnvTemplateService envTemplateService;
@Autowired
EnvTemplateDetailService envTemplateDetailService;
@GetMapping("/list")
public JsonResult getTemplateList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
IPage<EnvTemplate> envTemplateIPage = new Page<>(pageNum, pageSize);
IPage<EnvTemplate> IPage = envTemplateService.page(envTemplateIPage);
List<EnvTemplate> envTemplateList = IPage.getRecords();
List<EnvTemplateVo> envTemplateVoList = new ArrayList<>();
QueryWrapper<EnvTemplateDetail> queryWrapper = new QueryWrapper<>();
for (EnvTemplate envTemplate: envTemplateList) {
EnvTemplateVo envTemplateVo = new EnvTemplateVo();
envTemplateVo.setEnvTemplate(envTemplate);
queryWrapper.eq("template_id", envTemplate.getId());
List<EnvTemplateDetail> envTemplateDetailList = envTemplateDetailService.list(queryWrapper);
envTemplateVo.setEnvTemplateDetailList(envTemplateDetailList);
envTemplateVoList.add(envTemplateVo);
queryWrapper.clear();
}
Map<String, Object> map = new HashMap<>();
map.put("total", IPage.getTotal());
map.put("list", envTemplateVoList);
return JsonResult.buildSuccessResult(map);
}
/**
* 获取所有的模板及其关联的服务
* @return
*/
@GetMapping("/getAll")
public JsonResult getTemplateByName() {
List<Map<String, Object>> resultList = new ArrayList<>();
List<EnvTemplate> envTemplateList = envTemplateService.list();
QueryWrapper<EnvTemplateDetail> queryWrapper = new QueryWrapper<>();
for (EnvTemplate envTemplate: envTemplateList) {
Map<String, Object> map = new HashMap<>();
map.put("id", envTemplate.getId());
map.put("name", envTemplate.getName());
map.put("updateTime", envTemplate.getUpdateTime());
queryWrapper.eq("template_id", envTemplate.getId());
List<EnvTemplateDetail> envTemplateDetailList = envTemplateDetailService.list(queryWrapper);
for (EnvTemplateDetail envTemplateDetail: envTemplateDetailList) {
List<EnvTemplateDetail> envTemplateDetailListTemp;
if (map.containsKey(envTemplateDetail.getLabel())) {
envTemplateDetailListTemp = (List<EnvTemplateDetail>) map.get(envTemplateDetail.getLabel());
} else {
envTemplateDetailListTemp = new ArrayList<>();
}
envTemplateDetailListTemp.add(envTemplateDetail);
map.put(envTemplateDetail.getLabel(), envTemplateDetailListTemp);
}
queryWrapper.clear();
resultList.add(map);
}
return JsonResult.buildSuccessResult(resultList);
}
/**
* 新建模板
* @param envTemplateVo 模板虚拟实体类
* @return
*/
@RequiresPermissions("docker:envTemplate:create")
@PostMapping("/create")
public JsonResult saveEnvTemplate(@RequestBody EnvTemplateVo envTemplateVo) {
EnvTemplate envTemplate = envTemplateVo.getEnvTemplate();
QueryWrapper<EnvTemplate> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", envTemplate.getName());
if (envTemplateService.getOne(queryWrapper) != null) {
return JsonResult.buildErrorStateResult("模板已存在!", false);
}
// 保存模板
if (!envTemplateService.save(envTemplate)) {
return JsonResult.buildErrorStateResult("模板创建失败!", false);
}
// 模板详情列表设置模板id
Integer templateId = envTemplateService.getOne(queryWrapper).getId();
List<EnvTemplateDetail> envTemplateDetailList = envTemplateVo.getEnvTemplateDetailList();
for (EnvTemplateDetail envTemplateDetail: envTemplateDetailList) {
envTemplateDetail.setTemplateId(templateId);
}
// 保存模板详情
if (!envTemplateDetailService.saveBatch(envTemplateDetailList)) {
return JsonResult.buildErrorStateResult("模板详情保存失败!", false);
}
return JsonResult.buildSuccessResult(true);
}
/**
* 编辑模板及模板详情
* @param envTemplateVo 模板列表
* @return
*/
@RequiresPermissions("docker:envTemplate:modify")
@PostMapping("/modify")
public JsonResult modifyEnvTemplate(@RequestBody EnvTemplateVo envTemplateVo) {
EnvTemplate envTemplate = envTemplateVo.getEnvTemplate();
if (!envTemplateService.updateById(envTemplate)) {
return JsonResult.buildErrorStateResult("模板更新失败!", false);
}
// 参数传过来的列表
List<EnvTemplateDetail> envTemplateDetailList = envTemplateVo.getEnvTemplateDetailList();
// 查询出数据库里该模板的所有条目
QueryWrapper<EnvTemplateDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("template_id", envTemplate.getId());
List<EnvTemplateDetail> envTemplateDetailListDb = envTemplateDetailService.list(queryWrapper);
// 删除传参里没有的
for (EnvTemplateDetail envTemplateDetailDb: envTemplateDetailListDb) {
boolean delete = true;
for (EnvTemplateDetail envTemplateDetail: envTemplateDetailList) {
if (envTemplateDetail.getId() != null) {
if (envTemplateDetail.getId().equals(envTemplateDetailDb.getId())) {
delete = false;
break;
}
}
}
if (delete) {
envTemplateDetailService.removeById(envTemplateDetailDb.getId());
}
}
// 设置一下templateId
envTemplateDetailList.forEach(envTemplateDetail -> {
envTemplateDetail.setTemplateId(envTemplate.getId());
});
// 剩余的批量新增/修改
if (!envTemplateDetailService.saveOrUpdateBatch(envTemplateDetailList)) {
return JsonResult.buildErrorStateResult("更新模板详情失败!", false);
}
return JsonResult.buildSuccessResult("模板更新成功");
}
/**
*
* @param templateId 模板id
* @return
*/
@RequiresPermissions("docker:envTemplate:delete")
@PostMapping("/delete")
public JsonResult deleteEnvTemplate(@RequestParam Integer templateId) {
if (!envTemplateService.removeById(templateId)) {
return JsonResult.buildErrorStateResult("模板删除失败!", false);
}
QueryWrapper<EnvTemplateDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("template_id", templateId);
if (!envTemplateDetailService.remove(queryWrapper)) {
return JsonResult.buildErrorStateResult("模板详情删除失败", false);
}
return JsonResult.buildSuccessResult("模板删除成功!");
}
}
package cn.qg.holmes.entity.k8s;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 环境模板实体类
* @author libo
*/
@TableName(value = "env_template")
@Data
public class EnvTemplate {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.holmes.entity.k8s;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
@TableName(value = "env_template_detail")
public class EnvTemplateDetail {
@TableId(type = IdType.AUTO)
private Integer id;
private String serviceName;
private String serviceType;
private String label;
private String domain;
private String tag;
private Integer templateId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.holmes.entity.k8s;
import lombok.Data;
import java.util.List;
/**
* 创建环境模板虚拟实体类
*/
@Data
public class EnvTemplateVo {
private EnvTemplate envTemplate;
private List<EnvTemplateDetail> envTemplateDetailList;
}
package cn.qg.holmes.mapper.k8s;
import cn.qg.holmes.entity.k8s.EnvTemplateDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface EnvTemplateDetailMapper extends BaseMapper<EnvTemplateDetail> {
}
package cn.qg.holmes.mapper.k8s;
import cn.qg.holmes.entity.k8s.EnvTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface EnvTemplateMapper extends BaseMapper<EnvTemplate> {
}
package cn.qg.holmes.service.k8s;
import cn.qg.holmes.entity.k8s.EnvTemplateDetail;
import com.baomidou.mybatisplus.extension.service.IService;
public interface EnvTemplateDetailService extends IService<EnvTemplateDetail> {
}
package cn.qg.holmes.service.k8s;
import cn.qg.holmes.entity.k8s.EnvTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
public interface EnvTemplateService extends IService<EnvTemplate> {
}
......@@ -45,12 +45,13 @@ public class ImageService {
* @param repoName 服务名
* @return
*/
public Map<String, Object> getImageListByService(String repoName) {
public TagInfoResp getImageListByService(String repoName) {
try {
DescribeImagePersonalRequest request = new DescribeImagePersonalRequest();
request.setRepoName(repoName);
DescribeImagePersonalResponse response = tcrClient.DescribeImagePersonal(request);
return JSON.parseObject(DescribeImagePersonalResponse.toJsonString(response.getData()), Map.class);
// return JSON.parseObject(DescribeImagePersonalResponse.toJsonString(response.getData()), Map.class);
return response.getData();
} catch (Exception e) {
e.printStackTrace();
return null;
......@@ -97,7 +98,8 @@ public class ImageService {
public static void main(String[] args) {
ImageService imageService = new ImageService();
System.out.println(JSON.toJSONString(imageService.getRepoInfoList("qa-test")));
// System.out.println(JSON.toJSONString(imageService.getRepoInfoList("qa-base")));
System.out.println(JSON.toJSONString(imageService.getImageListByService("qa-base/mongodb")));
}
}
......@@ -324,7 +324,7 @@ public class K8sService {
// 对象转列表
List<Map<String, Object>> resultList = new ArrayList<>();
for (Map<String, Object> map: podServiceMap.values()) {
if (map != null) {
if ((map != null) && (map.get("serviceName") != null)) {
resultList.add(map);
}
}
......@@ -1402,7 +1402,7 @@ public class K8sService {
public Service createMongodbService(String namespace) {
Service mongodbService = new Service();
ObjectMeta objectMeta = buildObjectMeta("fe", "mongodb", "base");
ObjectMeta objectMeta = buildObjectMeta(namespace, "mongodb", "base");
ServiceSpec serviceSpec = new ServiceSpec();
serviceSpec.setType("NodePort");
......@@ -1507,7 +1507,7 @@ public class K8sService {
cpuRequest.setFormat("m");
memoryRequest.setAmount("256");
memoryRequest.setFormat("Mi");
cpuLimit.setAmount("250");
cpuLimit.setAmount("1024");
cpuLimit.setFormat("m");
memoryLimit.setAmount("512");
memoryLimit.setFormat("Mi");
......@@ -2200,7 +2200,8 @@ public class K8sService {
* @param owner
* @return
*/
public Namespace createNewNamespace(String name, String desc, String owner) {
public boolean createNewNamespace(String name, String desc, String owner) {
try {
Namespace namespace = new Namespace();
ObjectMeta objectMeta = new ObjectMeta();
Map<String, String> annotations = new HashMap<>();
......@@ -2223,7 +2224,57 @@ public class K8sService {
namespace.setSpec(namespaceSpec);
namespace.setStatus(namespaceStatus);
log.info("创建新的环境: {}", namespace.toString());
return kubernetesClient.namespaces().create(namespace);
kubernetesClient.namespaces().create(namespace);
createQcloudRegistryKeySecret(name);
createTencenthHubKeySecret(name);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public Secret createQcloudRegistryKeySecret(String namespace) {
Secret secret = new Secret();
ObjectMeta objectMeta = new ObjectMeta();
Map<String, String> labels = new HashMap<>();
labels.put("qcloud-app", "qcloudregistrykey");
objectMeta.setLabels(labels);
objectMeta.setName("qcloudregistrykey");
objectMeta.setNamespace(namespace);
Map<String, String> data = new HashMap<>();
data.put(".dockercfg", "eyJjY3IuY2NzLnRlbmNlbnR5dW4uY29tIjp7InVzZXJuYW1lIjoiMTAwMDA4NjMyMjY5IiwicGFzc3dvcmQiOiJ7QXBwbGljYXRpb25Ub2tlbjo0MTM1NWY2OWQyY2U3ZWUyYmE2YjQxZmMxNzJlNzM0MH0iLCJlbWFpbCI6IjEwMDAwODYzMjI2OUBxcS5jb20iLCJhdXRoIjoiTVRBd01EQTROak15TWpZNU9udEJjSEJzYVdOaGRHbHZibFJ2YTJWdU9qUXhNelUxWmpZNVpESmpaVGRsWlRKaVlUWmlOREZtWXpFM01tVTNNelF3ZlE9PSJ9fQ==");
secret.setApiVersion("v1");
secret.setKind("Secret");
secret.setType("kubernetes.io/dockercfg");
secret.setMetadata(objectMeta);
secret.setData(data);
log.info("{}环境,创建新的secret:qcloudregistrykey", namespace);
return kubernetesClient.secrets().inNamespace(namespace).create(secret);
}
public Secret createTencenthHubKeySecret(String namespace) {
Secret secret = new Secret();
ObjectMeta objectMeta = new ObjectMeta();
Map<String, String> labels = new HashMap<>();
labels.put("qcloud-app", "tencenthubkey");
objectMeta.setLabels(labels);
objectMeta.setName("tencenthubkey");
objectMeta.setNamespace(namespace);
Map<String, String> data = new HashMap<>();
data.put(".dockercfg", "eyJodWIudGVuY2VudHl1bi5jb20iOnsidXNlcm5hbWUiOiIxMDAwMDg2MzIyNjkiLCJwYXNzd29yZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpsZUhBaU9qRTROell5T1RFME9EVXNJbXAwYVNJNklqVTVPVGRqTmpkaExUWmpaV1l0TkRGbE55MDVPRGsyTFdGaE16TTFPRGRpWW1ReE1TSXNJbWxoZENJNk1UVTJNRGt6TVRRNE5Td2libUptSWpveE5UWXdPVE14TkRnMUxDSnpkV0lpT2lJeE1EQXdNRGcyTXpJeU5qa2lmUS5ZWEl4TzBaWTg3QmNzSktLdW9lQ3gzYllLZ1RzMktNVElSeDd5dWVRdDZNIiwiZW1haWwiOiIxMDAwMDg2MzIyNjlAcXEuY29tIiwiYXV0aCI6Ik1UQXdNREE0TmpNeU1qWTVPbVY1U21oaVIyTnBUMmxLU1ZWNlNURk9hVWx6U1c1U05XTkRTVFpKYTNCWVZrTktPUzVsZVVwc1pVaEJhVTlxUlRST2VsbDVUMVJGTUU5RVZYTkpiWEF3WVZOSk5rbHFWVFZQVkdScVRtcGthRXhVV21wYVYxbDBUa1JHYkU1NU1EVlBSR3N5VEZkR2FFMTZUVEZQUkdScFdXMVJlRTFUU1hOSmJXeG9aRU5KTmsxVVZUSk5SR3Q2VFZSUk5FNVRkMmxpYlVwdFNXcHZlRTVVV1hkUFZFMTRUa1JuTVV4RFNucGtWMGxwVDJsSmVFMUVRWGROUkdjeVRYcEplVTVxYTJsbVVTNVpXRWw0VHpCYVdUZzNRbU56U2t0TGRXOWxRM2d6WWxsTFoxUnpNa3ROVkVsU2VEZDVkV1ZSZERaTiJ9fQ==");
secret.setApiVersion("v1");
secret.setKind("Secret");
secret.setType("kubernetes.io/dockercfg");
secret.setMetadata(objectMeta);
secret.setData(data);
log.info("{}环境,创建新的secret:qcloudregistrykey", namespace);
return kubernetesClient.secrets().inNamespace(namespace).create(secret);
}
/**
......@@ -2257,13 +2308,14 @@ public class K8sService {
}
public static void main(String[] args) {
// K8sService k8sService = new K8sService();
// k8sService.createNewNamespace("test6", "dev", "黎博");
K8sService k8sService = new K8sService();
k8sService.createNewNamespace("test6", "dev", "黎博");
// k8sService.podTest();
// k8sService.getPodList("k8s");
// System.out.println(JSON.toJSONString(k8sService.getPodListNew("fe")));
// if (!k8sService.queryIfServiceExistByName("fe", "lxq-ui")) {
// k8sService.createUIAndNodeService("fe", "lxq-ui", "ui", "ui");
// }
}
}
......@@ -16,6 +16,7 @@ public class MqService {
/**
* 获取MQ信息
*
* @param host
* @param auth
* @return
......@@ -29,6 +30,7 @@ public class MqService {
/**
* 同步线上MQ到测试
*
* @param host
* @return
*/
......@@ -39,7 +41,7 @@ public class MqService {
Map<String, Object> onlineDefinitions = getDefinitionsOfHost(ONLINE_MQ_URL, ONLINE_MQ_AUTH);
List<Map<String, String>> permissionList = (List<Map<String, String>>) onlineDefinitions.get("permissions");
List<Map<String, String>> qaPermissionList = new ArrayList<>();
for (Map<String, String> permission: permissionList) {
for (Map<String, String> permission : permissionList) {
if (permission.get("user").equals("rabbit_admin")) {
qaPermissionList.add(permission);
permission.put("user", "qa");
......@@ -65,6 +67,71 @@ public class MqService {
}
}
/**
* 获取 sourceMapList 比 targetMapList 多出的元素
*
* @param sourceMapList
* @param targetMapList
* @return
*/
public List<String> mqListCompare(List<Map<String, String>> sourceMapList, List<Map<String, String>> targetMapList) {
List<String> resultList = new ArrayList<>();
for (Map<String, String> sourceMap : sourceMapList) {
boolean flag = false;
for (Map<String, String> targetMap : targetMapList) {
if (sourceMap.get("name").equals(targetMap.get("name"))) {
flag = true;
}
}
if (!flag) {
resultList.add(sourceMap.get("name"));
}
}
return resultList;
}
/**
* 比较测试环境与线上mq
* @param host 测试环境mq地址:ip+端口
* @return
*/
public Map<String, Object> getMqDiff(String host) {
String ONLINE_MQ_URL = "http://172.30.3.140:15672";
String ONLINE_MQ_AUTH = "Basic cmFiYml0X2FkbWluOmFiYzEyMzQ=";
Map<String, Object> onlineDefinitions = getDefinitionsOfHost(ONLINE_MQ_URL, ONLINE_MQ_AUTH);
String qaMqUrl = "http://" + host;
String QA_MQ_AUTH = "Basic cWE6cWF0ZXN0";
Map<String, Object> qaDefinitions = getDefinitionsOfHost(qaMqUrl, QA_MQ_AUTH);
List<Map<String, String>> onlineHostList = (List<Map<String, String>>) onlineDefinitions.get("vhosts");
List<Map<String, String>> qaHostList = (List<Map<String, String>>) qaDefinitions.get("vhosts");
List<Map<String, String>> onlineQueueList = (List<Map<String, String>>) onlineDefinitions.get("queues");
List<Map<String, String>> qaQueueList = (List<Map<String, String>>) qaDefinitions.get("queues");
List<String> lostVhostList = mqListCompare(onlineHostList, qaHostList);
List<String> moreVhostList = mqListCompare(qaHostList, onlineHostList);
List<String> lostQueueList = mqListCompare(onlineQueueList, qaQueueList);
List<String> moreQueueList = mqListCompare(qaQueueList, onlineQueueList);
Map<String, Object> map = new HashMap<>();
Map<String, Object> lostMap = new HashMap<>();
lostMap.put("vhost", lostVhostList);
lostMap.put("queue", lostQueueList);
Map<String, Object> moreMap = new HashMap<>();
moreMap.put("vhost", moreVhostList);
moreMap.put("queue", moreQueueList);
if (lostVhostList.size() > 0 || lostQueueList.size() > 0) {
lostMap.put("show", true);
} else {
lostMap.put("show", false);
}
if (moreVhostList.size() > 0 || moreQueueList.size() > 0) {
moreMap.put("show", true);
} else {
moreMap.put("show", false);
}
map.put("lost", lostMap);
map.put("more", moreMap);
return map;
}
public static void main(String[] args) {
MqService mqService = new MqService();
mqService.setDefinitions("172.17.5.17:31426");
......
package cn.qg.holmes.service.k8s.impl;
import cn.qg.holmes.entity.k8s.EnvTemplateDetail;
import cn.qg.holmes.mapper.k8s.EnvTemplateDetailMapper;
import cn.qg.holmes.service.k8s.EnvTemplateDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class EnvTemplateDetailServiceImpl extends ServiceImpl<EnvTemplateDetailMapper, EnvTemplateDetail> implements EnvTemplateDetailService {
}
package cn.qg.holmes.service.k8s.impl;
import cn.qg.holmes.entity.k8s.EnvTemplate;
import cn.qg.holmes.mapper.k8s.EnvTemplateMapper;
import cn.qg.holmes.service.k8s.EnvTemplateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class EnvTemplateServiceImpl extends ServiceImpl<EnvTemplateMapper, EnvTemplate> implements EnvTemplateService {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment