예제 #1
0
    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
예제 #2
0
 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", "")
예제 #3
0
    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
예제 #4
0
    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)
예제 #5
0
 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))