Example #1
0
    def get_detail(self, request, project_id, lb_id):
        access_token = request.user.token.access_token
        data = self.get_project_lb(project_id, lb_id=lb_id)
        namespace = paas_cc.get_namespace_list(
            access_token, project_id, limit=constants.ALL_LIMIT)
        namespace = namespace.get('data', {}).get('results') or []
        namespace = {i['id']: i['name'] for i in namespace}

        merge_data = self.merge_data(data, namespace)

        # 获取集群名称
        cluster_id = merge_data[0].get('cluster_id')
        cls_res = paas_cc.get_cluster(access_token, project_id, cluster_id)
        cluster_data = cls_res.get('data', {})
        cluster_name = cluster_data.get('name') or cluster_id
        cluster_dict = {cluster_id: cluster_name}
        cluster_envs = {cluster_id: cluster_data.get('environment', '')}

        # 按前端需要二次处理数据
        data = self.handle_lb_dtail_data(
            request, access_token, project_id, merge_data, cluster_dict, namespace, cluster_envs)
        return Response({
            "code": 0,
            "results": data[0]
        })
Example #2
0
    def retrieve(self, request, project_id, *args, **kwargs):
        cluster_id = request.query_params.get("cluster_id")

        check_cluster_perm(user=request.user,
                           project_id=project_id,
                           cluster_id=cluster_id,
                           request=request)

        # 获取镜像地址
        jfrog_domain = paas_cc.get_jfrog_domain(access_token=self.access_token,
                                                project_id=self.project_id,
                                                cluster_id=cluster_id)

        cluster_info = paas_cc.get_cluster(request.user.token.access_token,
                                           project_id, cluster_id)["data"]

        context = dict(cluster_id=cluster_id,
                       cluster_name=cluster_info["name"],
                       jfrog_domain=jfrog_domain,
                       expr="{{ .Values.__BCS__.SYS_JFROG_DOMAIN }}",
                       link=settings.HELM_DOC_TRICKS)
        note = _('''集群: {cluster}({cluster_id})的容器仓库域名为:{dept_domain},
        可在Chart直接引用 {expr} 更加方便, [详细说明]({link})''').format(
            cluster=context['cluster_name'],
            cluster_id=context['cluster_id'],
            dept_domain=context['jfrog_domain'],
            expr=context['expr'],
            link=context['link'])
        context["note"] = note
        return Response(data=context)
Example #3
0
    def retrieve(self, request, project_id, *args, **kwargs):
        cluster_id = request.query_params.get("cluster_id")

        check_cluster_perm(user=request.user,
                           project_id=project_id,
                           cluster_id=cluster_id,
                           request=request)

        # 获取镜像地址
        jfrog_domain = paas_cc.get_jfrog_domain(access_token=self.access_token,
                                                project_id=self.project_id,
                                                cluster_id=cluster_id)

        cluster_info = paas_cc.get_cluster(request.user.token.access_token,
                                           project_id, cluster_id)["data"]

        context = dict(cluster_id=cluster_id,
                       cluster_name=cluster_info["name"],
                       jfrog_domain=jfrog_domain,
                       expr="{{ .Values.__BCS__.SYS_JFROG_DOMAIN }}",
                       link=settings.HELM_DOC_TRICKS)
        note = '{pre_msg}: {cluster}({cluster_id}){dept_key}:{dept_domain},{chart} {expr} {suf_msg} {link}'.format(
            pre_msg=_("集群"),
            cluster=context['cluster_name'],
            cluster_id=context['cluster_id'],
            dept_key=_("的容器仓库域名为"),
            dept_domain=context['jfrog_domain'],
            chart=_("可在Chart直接引用"),
            expr=repr(context['expr']),
            suf_msg=_("更加方便, [详细说明]"),
            link=context['link'])
        context["note"] = note
        return Response(data=context)
Example #4
0
    def check_resource(self, request, project_id, config, cluster_id,
                       req_instance_num):
        """校验资源是否满足
        """
        conf = config.copy()
        pre_instance_num = int(conf["spec"]["instance"])
        if int(req_instance_num) > pre_instance_num:
            result = paas_cc.get_cluster(request.user.token.access_token,
                                         project_id, cluster_id)
            if result.get("code") != 0:
                raise error_codes.APIError(_("获取资源失败,请联系蓝鲸管理员解决"))

            data = result.get('data') or {}
            remain_cpu = data.get('remain_cpu') or 0
            remain_mem = data.get('remain_mem') or 0

            cpu_require = 0
            mem_require = 0
            # CPU单位是核心,有小数点,内存单位是M,和paas-cc返回一致
            for info in conf["spec"]["template"]["spec"]["containers"]:
                cpu_require += float(info["resources"]["limits"]["cpu"])
                mem_require += float(info["resources"]["limits"]["memory"])
            diff_instance_num = int(req_instance_num) - pre_instance_num
            if remain_cpu < (diff_instance_num * cpu_require):
                raise error_codes.CheckFailed(_("没有足够的CPU资源,请添加node或释放资源!"))
            if remain_mem < (diff_instance_num * mem_require):
                raise error_codes.CheckFailed(_("没有足够的内存资源,请添加node或释放资源!"))
Example #5
0
def get_cluster_name(access_token, project_id, cluster_id):
    resp = paas_cc.get_cluster(access_token, project_id, cluster_id)
    if resp.get('code') != ErrorCode.NoError:
        raise error_codes.APIError(
            f'get cluster detail error, {resp.get("message")}')
    data = resp.get('data') or {}
    return data.get('name')
Example #6
0
 def get_cluster_info(self):
     cluster_info = paas_cc.get_cluster(self.access_token, self.project_id, self.cluster_id)
     if cluster_info.get('code') != ErrorCode.NoError:
         raise error_codes.APIError(cluster_info.get('message'))
     if not cluster_info.get('data'):
         raise error_codes.APIError(_("查询集群: {} 对应的信息为空").format(self.cluster_id))
     return cluster_info
Example #7
0
 def get_cluster(self, request, project_id, cluster_id):
     """get cluster info"""
     cluster_resp = paas_cc.get_cluster(request.user.token.access_token, project_id, cluster_id)
     if cluster_resp.get("code") != ErrorCode.NoError:
         raise error_codes.APIErrorf(cluster_resp.get("message"))
     cluster_data = cluster_resp.get("data") or {}
     return cluster_data
Example #8
0
 def get_cluster(self, request, project_id, cluster_id):
     cluster_resp = paas_cc.get_cluster(
         request.user.token.access_token,
         project_id, cluster_id
     )
     if cluster_resp.get('code') != ErrorCode.NoError:
         raise error_codes.APIError.f(cluster_resp.get('message'))
     return cluster_resp.get('data') or {}
Example #9
0
 def get_cluster_info(self, request, project_id, cluster_id):
     cluster_resp = paas_cc.get_cluster(request.user.token.access_token,
                                        project_id, cluster_id)
     if cluster_resp.get('code') != ErrorCode.NoError:
         raise error_codes.APIError(
             _("获取集群信息失败,{}").format(cluster_resp.get('message')))
     data = cluster_resp.get('data')
     if not data:
         raise error_codes.APIError(_("查询集群信息为空"))
     return data
Example #10
0
 def __init__(self, request, project_id, resource_id, resource_type=None):
     super(Cluster, self).__init__(request, project_id, resource_id)
     if resource_id != NO_RES:
         cluster = paas_cc.get_cluster(self.access_token, self.project_id, resource_id)
         if cluster.get('code') != 0:
             raise error_codes.ResNotFoundError(cluster.get('message', ''))
         # 通过接口判断资源类型
         self.res = cluster['data']
         self.resource_name = cluster['data']['name']
     else:
         self.res = None
Example #11
0
def cache_api_host(access_token, project_id, cluster_id, env):
    """cached api host
    cache performance, importance, cluster id shoud be unique
    参数在实例化MesosClient时检查
    """
    if cluster_id:
        cluster = paas_cc.get_cluster(access_token, project_id, cluster_id)
        if cluster.get('code') != 0:
            raise exceptions.ComponentError(cluster.get('message'))
        environment = cluster['data']['environment']
        stag = settings.BCS_API_ENV[environment]
    else:
        stag = env

    return f"{BCS_API_PRE_URL}/{stag}"
Example #12
0
    def _query_api_env_name(self) -> str:
        """通过 PaaS-CC 服务查询查询集群环境名称,然后找到其对应的 API 网关环境名称

        :raises ComponentError: 从 PaaS-CC 返回了错误响应
        """
        # Cache
        if hasattr(self, '_api_env_name'):
            return self._api_env_name

        cluster = paas_cc.get_cluster(self.access_token, self.project_id,
                                      self.cluster_id)
        # TODO: 封装异常,不使用模糊的 ComponentError
        if cluster.get('code') != ErrorCode.NoError:
            raise exceptions.ComponentError(cluster.get('message'))

        environment = cluster['data']['environment']
        self._api_env_name = settings.BCS_API_ENV[environment]
        return self._api_env_name
Example #13
0
 def get(self, request, project_id, lb_id):
     access_token = request.user.token.access_token
     data_list = self.get_project_lb(project_id, lb_id=lb_id)
     if not data_list:
         raise error_codes.CheckFailed.f("记录不存在!", replace=True)
     data = data_list[0]
     ip_list = json.loads(data.get('ip_list', '[]'))
     cluster_id = data.get('cluster_id')
     constraints = json.loads(data.get('data'))
     # 获取集群名称
     cls_res = paas_cc.get_cluster(access_token, project_id, cluster_id)
     cluster_data = cls_res.get('data') or {}
     cluster_name = cluster_data.get('name') or cluster_id
     ret_data = {
         'name': data.get('name'),
         'ip_list': ip_list,
         'cluster_name': cluster_name,
         'constraints': constraints
     }
     return Response({"code": 0, "data": ret_data})
Example #14
0
    def resources_ready(self, cluster_id, config):
        """CPU,内存检查
        """
        result = paas_cc.get_cluster(self.access_token, self.project_id,
                                     cluster_id)
        if result.get('code') != 0:
            raise ClusterNotReady("获取资源失败,请联系蓝鲸管理员解决")

        data = result.get('data') or {}
        remain_cpu = data.get('remain_cpu') or 0
        remain_mem = data.get('remain_mem') or 0

        cpu_require = 0
        mem_require = 0
        # CPU单位是核心,有小数点,内存单位是M,和paas-cc返回一致
        for i in self.get_limits(config):
            cpu_require += float(i['cpu']) * i['num']
            mem_require += float(i['memory']) * i['num']
        if remain_cpu < cpu_require:
            raise ClusterNotReady("没有足够的CPU资源")
        if remain_mem < mem_require:
            raise ClusterNotReady("没有足够的内存资源")
Example #15
0
def get_cluster_info(access_token, project_id, cluster_id):
    resp = paas_cc.get_cluster(access_token, project_id, cluster_id)
    if resp.get("code") != ErrorCode.NoError:
        raise error_codes.APIError(
            _("获取集群信息失败,{}").format(resp.get("message")))
    return resp.get("data") or {}
Example #16
0
def get_cluster(access_token, project_id, cluster_id):
    return paas_cc.get_cluster(access_token, project_id, cluster_id)
Example #17
0
 def get_cluster_info(self):
     resp = paas_cc.get_cluster(self.access_token, self.project_id,
                                self.cluster_id)
     if resp.get('code') != ErrorCode.NoError or not resp.get('data'):
         raise error_codes.APIError(resp.get('message', _("获取集群信息为空")))
     return resp['data']