def list_labels(self, request, project_id): # TODO: 现阶段仅针对mesos if request.project.kind == ProjectKind.K8S.value: raise error_codes.NotOpen() access_token = request.user.token.access_token cluster_id = request.query_params.get("cluster_id") # cluster_id 为None时,查询项目下的所有集群的节点 nodes = node_utils.get_cluster_nodes(access_token, project_id, cluster_id, raise_exception=False) # 排除状态为已删除的节点 nodes = [ node for node in nodes if node["status"] not in [NodeStatus.Removed] ] project_kind_name = ProjectKind.get_choice_label(request.project.kind) labels = getattr(self, f"_{project_kind_name.lower()}_node_labels")( access_token, project_id, nodes) cluster_id_map = self._cluster_id_map(access_token, project_id) self.compose_node_data(nodes, labels, cluster_id_map) # 添加权限 nodes_results = bcs_perm.Cluster.hook_perms(request, project_id, nodes) return response.Response({ 'count': len(nodes_results), 'results': nodes_results })
def batch_delete(self, request, project_id): """批量删除资源 """ username = request.user.username if request.project.kind != ProjectKind.K8S.value: raise error_codes.NotOpen("HPA暂时只支持K8S集群") slz = BatchResourceSLZ(data=request.data) slz.is_valid(raise_exception=True) data = slz.data['data'] # 检查用户是否有命名空间的使用权限 namespace_list = set([_d.get('namespace') for _d in data]) namespace_dict = self.check_namespace_use_perm(request, project_id, namespace_list) success_list = [] failed_list = [] for _d in data: cluster_id = _d.get('cluster_id') name = _d.get('name') ns_name = _d.get('namespace') ns_id = namespace_dict.get(ns_name) # 删除 hpa result, message = utils.delete_hpa(request, project_id, cluster_id, ns_name, ns_id, name) if result is False: failed_list.append({ 'name': name, 'desc': f'{name}[命名空间:{ns_name}]:{message}' }) else: success_list.append({ 'name': name, 'desc': f'{name}[命名空间:{ns_name}]' }) # 添加操作审计 if success_list: name_list = [_s.get('name') for _s in success_list] desc_list = [_s.get('desc') for _s in success_list] desc_list_msg = ";".join(desc_list) message = f"以下{self.category}删除成功:{desc_list_msg}" utils.activity_log(project_id, username, ';'.join(name_list), message, True) if failed_list: name_list = [_s.get('name') for _s in failed_list] desc_list = [_s.get('desc') for _s in failed_list] desc_list_msg = ";".join(desc_list) message = f"以下{self.category}删除失败:{desc_list_msg}" utils.activity_log(project_id, username, ';'.join(name_list), message, False) # 有一个失败,则返回失败 if failed_list: raise error_codes.APIError(message) return BKAPIResponse({}, message=message)
def delete(self, request, project_id, namespace_id, is_validate_perm=True): # NOTE: open mesos delete namespace, when mesos api ready if request.project.kind == ProjectKind.MESOS.value: raise error_codes.NotOpen('mesos api not ready') access_token = request.user.token.access_token # perm perm = bcs_perm.Namespace(request, project_id, namespace_id) perm.can_delete(raise_exception=is_validate_perm) # start delete oper client = Namespace(access_token, project_id, request.project.kind) resp = client.delete(namespace_id) # delete ns registered perm perm.delete() return response.Response(resp)
def delete(self, request, project_id, cluster_id, ns_name, name): # 检查用户是否有命名空间的使用权限 if request.project.kind != ProjectKind.K8S.value: raise error_codes.NotOpen("HPA暂时只支持K8S集群") username = request.user.username namespace_dict = self.check_namespace_use_perm(request, project_id, [ns_name]) namespace_id = namespace_dict.get(ns_name) result, message = utils.delete_hpa(request, project_id, cluster_id, ns_name, namespace_id, name) if result is False: message = f'删除HPA:{name}失败[命名空间:{ns_name}], {message}' utils.activity_log(project_id, username, name, message, result) raise error_codes.APIError(message) message = f'删除HPA:{name}成功[命名空间:{ns_name}]' utils.activity_log(project_id, username, name, message, result) return Response({})
def get_upload_status_api(request, project_id, task_id): """查询上传状态 TODO: API 暂未提供该功能 """ raise error_codes.NotOpen(_("上传镜像功能正在建设中"))
def upload_image_api(request, project_id, image_data): """ 上传镜像 TODO: API 暂未提供该功能 """ raise error_codes.NotOpen(_("上传镜像功能正在建设中"))
def create_k8s_namespace(self, access_token, username, project_id, cluster_id, ns_name): raise error_codes.NotOpen()