Apollo源码解析——创建Cluster


一、概述

Patrol创建Cluster的流程

在这里插入图片描述

二、创建流程

1.页面流程

在这里插入图片描述
在这里插入图片描述

2.代码流程

  1. 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);
  }
  1. 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;
  }
  1. 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);
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值