def get_k8s_context(self, request, project_id_or_code, cluster_id): """获取docker监控信息""" access_token = paas_auth.get_access_token().get("access_token") result = paas_cc.get_project(access_token, project_id_or_code) if result.get("code") != ErrorCode.NoError: raise error_codes.APIError( _("项目Code或者ID不正确: {}").format(result.get("message", ""))) project_id = result["data"]["project_id"] client = K8SClient(access_token, project_id, cluster_id, None) slz = K8SWebConsoleOpenSLZ(data=request.data, context={"client": client}) slz.is_valid(raise_exception=True) try: bcs_context = utils.get_k8s_cluster_context( client, project_id, cluster_id) except Exception as error: logger.exception("get access cluster context failed: %s", error) message = _("获取集群{}【{}】WebConsole session 信息失败").format( cluster_id, cluster_id) # 返回前端消息 raise error_codes.APIError(message) bcs_context["mode"] = k8s.ContainerDirectClient.MODE bcs_context["user_pod_name"] = slz.validated_data["pod_name"] bcs_context["project_id"] = project_id bcs_context.update(slz.validated_data) return bcs_context
def _get_task_result(self, record: ModelLogRecord) -> Tuple[List, str, str]: """解析任务状态 兼容先前的逻辑, 返回日志格式{"state": "任务总状态", "node_tasks": "子步骤logs"} """ token = paas_auth.get_access_token() task_result = get_task_result(token["access_token"], record) # 获取状态及步骤 data = task_result.get("data") or {} return self._parse_steps(data), data.get("status", ""), data.get( "extra_cluster_id", "")
def has_permission(self, request, view): has_perm = super().has_permission(request, view) if not has_perm: return False access_token = request.META.get(ACCESS_TOKEN_KEY_NAME, "") request.user.token = FancyDict(user_access_token=access_token) access_token = get_access_token().get("access_token") request.user.token.access_token = access_token return True
def authenticate_token(self, request, user: JWTUser): """生成有效的request.user.token.access_token""" access_token = request.META.get(constants.ACCESS_TOKEN_KEY_NAME, "") # 通过头部传入access_token if access_token: self._validate_access_token(request, access_token) user.token = FancyDict(access_token=access_token) else: # 如果客户端未传入有效access_token, 平台注入系统access_token user.token = FancyDict(access_token=get_access_token().get("access_token")) return (user, None)
def _bcs_cc_client(self) -> comp_base.BkApiClient: token = paas_auth.get_access_token() access_token = token["access_token"] return paas_cc.PaaSCCClient( comp_base.ComponentAuth(access_token=access_token))