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] })
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)
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)
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或释放资源!"))
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')
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
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
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 {}
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
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
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}"
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
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})
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("没有足够的内存资源")
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 {}
def get_cluster(access_token, project_id, cluster_id): return paas_cc.get_cluster(access_token, project_id, cluster_id)
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']