def provide(user, config): from backend.bcs_k8s.app.models import App from backend.utils.client import get_kubectl_config_context if not App.objects.filter(project_id=config.get("project_id"), cluster_id=config.get("cluster_id"), id=config.get("app_id")).exists(): raise PermissionDenied() check_cluster_perm(user, config.get("project_id"), config.get("cluster_id")) # bke_client = get_bke_client( # project_id=config.get("project_id"), # cluster_id=config.get("cluster_id"), # access_token=user.token.access_token # ) # bke_client.active_admin() kubeconfig = get_kubectl_config_context( access_token=user.token.access_token, project_id=config.get("project_id"), cluster_id=config.get("cluster_id")) kubeconfig_obj = yaml_load(kubeconfig) kubeconfig_obj["users"][0]["user"]["token"] = settings.BKE_ADMIN_TOKEN config["kubeconfig"] = yaml_dump(kubeconfig_obj) return config
def create(self, request, project_id, *args, **kwargs): serializer = ClusterKubeConfigSLZ(data=request.data) serializer.is_valid(raise_exception=True) cluster_id = serializer.data["cluster_id"] check_cluster_perm(user=request.user, project_id=project_id, cluster_id=cluster_id, request=request) kubeconfig = bcs_utils_client.get_kubectl_config_context( access_token=self.access_token, project_id=project_id, cluster_id=cluster_id ) response = HttpResponse(content=kubeconfig, content_type='text/plain; charset=UTF-8') response['Content-Disposition'] = 'attachment; filename="bcs-%s-kubeconfig.yaml"' % cluster_id return response
def retrieve(self, request, app_id, *args, **kwargs): app = App.objects.get(id=self.app_id) project_code_cache_key = "helm_project_cache_key:%s" % self.project_id if project_code_cache_key in cache: resp = cache.get(project_code_cache_key) else: # get_project_name resp = paas_cc.get_project(self.access_token, self.project_id) if resp.get('code') != 0: logger.error( "查询project的信息出错(project_id:{project_id}):{message}".format( project_id=self.project_id, message=resp.get('message'))) return Response({ "code": 500, "message": _("后台接口异常,根据项目ID获取项目英文名失败!") }) cache.set(project_code_cache_key, resp, 60 * 15) project_code = resp["data"]["english_name"] check_cluster_perm(user=request.user, project_id=app.project_id, cluster_id=app.cluster_id, request=request) kubeconfig = bcs_utils_client.get_kubectl_config_context( access_token=self.access_token, project_id=app.project_id, cluster_id=app.cluster_id) base_url = get_base_url(request) try: with tempfile.NamedTemporaryFile("w") as f: f.write(kubeconfig) f.flush() data = collect_resource_status(base_url=base_url, kubeconfig=f.name, app=app, project_code=project_code) except DashboardExecutionError as e: message = "get helm app status failed, error_no: {error_no}\n{output}".format( error_no=e.error_no, output=e.output) return Response({ "code": 400, "message": message, }) except DashboardError as e: message = "get helm app status failed, dashboard ctl error: {err}".format( err=e) logger.exception(message) return Response({ "code": 400, "message": message, }) except Exception as e: message = "get helm app status failed, {err}".format(err=e) logger.exception(message) return Response({ "codee": 500, "message": message, }) response = { "status": data, "app": { "transitioning_action": app.transitioning_action, "transitioning_on": app.transitioning_on, "transitioning_result": app.transitioning_result, "transitioning_message": app.transitioning_message, }, } return Response(response)