Ejemplo n.º 1
0
    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
        })
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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({})
Ejemplo n.º 5
0
def get_upload_status_api(request, project_id, task_id):
    """查询上传状态
    TODO: API 暂未提供该功能
    """
    raise error_codes.NotOpen(_("上传镜像功能正在建设中"))
Ejemplo n.º 6
0
def upload_image_api(request, project_id, image_data):
    """
    上传镜像
    TODO: API 暂未提供该功能
    """
    raise error_codes.NotOpen(_("上传镜像功能正在建设中"))
Ejemplo n.º 7
0
 def create_k8s_namespace(self, access_token, username, project_id,
                          cluster_id, ns_name):
     raise error_codes.NotOpen()