一、概述
Patrol
创建Cluster
的流程
二、创建流程
1.页面流程
2.代码流程
ClusterController#createCluster
这里设置了创建和修改人为当前管理员,然后创建Cluster
@PreAuthorize(value = "@permissionValidator.hasCreateClusterPermission(#appId)")
@PostMapping(value = "apps/{appId}/envs/{env}/clusters")
public ClusterDTO createCluster(@PathVariable String appId, @PathVariable String env,
@Valid @RequestBody ClusterDTO cluster) {
//设置 ClusterDTO 的创建和修改人为当前管理员
String operator = userInfoHolder.getUser().getUserId();
cluster.setDataChangeLastModifiedBy(operator);
cluster.setDataChangeCreatedBy(operator);
//创建 Cluster 到 Admin Service
return clusterService.createCluster(Env.valueOf(env), cluster);
}
ClusterService#createCluster
这里就是直接远程调用admin server来进行保存了
public ClusterDTO createCluster(Env env, ClusterDTO cluster) {
//根据`appId` 和 `name` 校验 Cluster 的唯一性,这里是远程调用Admin Service的api
if (!clusterAPI.isClusterUnique(cluster.getAppId(), env, cluster.getName())) {
throw new BadRequestException(String.format("cluster %s already exists.", cluster.getName()));
}
//创建 Cluster 到 Admin Service
ClusterDTO clusterDTO = clusterAPI.create(env, cluster);
//Trace 日志
Tracer.logEvent(TracerEventType.CREATE_CLUSTER, cluster.getAppId(), "0", cluster.getName());
return clusterDTO;
}
- adminService服务下面的
ClusterController#create
这里就是一些业务代码,最终保存对应的cluster对象
@PostMapping("/apps/{appId}/clusters")
public ClusterDTO create(@PathVariable("appId") String appId,
@RequestParam(value = "autoCreatePrivateNamespace", defaultValue = "true") boolean autoCreatePrivateNamespace,
@Valid @RequestBody ClusterDTO dto) {
Cluster entity = BeanUtils.transform(Cluster.class, dto);
//判断 `name` 在 App 下是否已经存在对应的Cluster 对象。若已经存在,抛出异常
Cluster managedEntity = clusterService.findOne(appId, entity.getName());
if (managedEntity != null) {
throw new BadRequestException("cluster already exist.");
}
//保存 Cluster 对象,并创建起 Namespace
if (autoCreatePrivateNamespace) {
entity = clusterService.saveWithInstanceOfAppNamespaces(entity);
//保存 cluster 对象,不创建其 Namespace
} else {
entity = clusterService.saveWithoutInstanceOfAppNamespaces(entity);
}
//将保存的 Cluster 对象转换成 ClusterDTO
return BeanUtils.transform(ClusterDTO.class, entity);
}