def delete_single(self, request, data, project_id, muster_id, show_version_name, res_name, muster_name):
        """删除单个类型"""
        ns_id_list = data.get("namespace_list")
        category = data.get("category")
        if not (ns_id_list and category):
            raise error_codes.CheckFailed(_("参数不能为空!"))

        project_kind = request.project.kind
        category = to_bcs_res_name(project_kind, category)

        if category not in MODULE_DICT:
            raise error_codes.CheckFailed(f'category: {category} does not exist')
        # 获取要删除的实例的信息
        inst_info = self.get_instance_info(ns_id_list, [res_name], category=category)
        # 获取项目信息
        flag, project_kind = self.get_project_kind(request, project_id)
        if not flag:
            return project_kind
        with client.ContextActivityLogClient(
            project_id=project_id,
            user=request.user.username,
            resource_type="instance",
            resource=res_name,
            resource_id=res_name,
            extra=json.dumps(
                {
                    "muster_id": muster_id,
                    "show_version_name": show_version_name,
                    "res_name": res_name,
                    "category": category,
                }
            ),
            description=_("删除模板集实例"),
        ).log_delete():
            return self.delete_handler(request, inst_info, project_id, project_kind)
Exemple #2
0
    def get(self, request, project_id, muster_id):
        """获取命名空间
        """
        # 获取参数
        group_by = request.GET.get('group_by') or "env_type"
        category = request.GET.get("category")
        show_version_name = request.GET.get('show_version_name')
        res_name = request.GET.get('res_name')
        perm_can_use = request.GET.get('perm_can_use')
        if perm_can_use == '1':
            perm_can_use = True
        else:
            perm_can_use = False

        # 前端的category转换为后台需要的类型
        if category != 'ALL':
            project_kind = request.project.kind
            category = to_bcs_res_name(project_kind, category)

        if category != 'ALL' and category not in MODULE_DICT:
            raise error_codes.CheckFailed(
                f'category: {category} does not exist')
        # 获取被占用的ns,没有处于删除中和已删除
        ns_id_list = self.get_active_ns(muster_id, show_version_name, category,
                                        res_name)
        # 查询ns信息
        results = self.get_ns_info(request, project_id, ns_id_list)
        # 解析&排序
        cluster_env_map = self.get_cluster_env_map(request, project_id)
        results = filter(lambda x: x["id"] in ns_id_list, results)
        results = [{
            'name':
            k,
            'cluster_name':
            cluster_env_map.get(k, {}).get('cluster_name', k),
            'environment_name':
            "正式" if cluster_env_map.get(k, {}).get('cluster_env_str', '')
            == 'prod' else "测试",
            'results':
            sorted(list(v), key=lambda x: x['id'], reverse=True)
        } for k, v in groupby(sorted(results, key=lambda x: x[group_by]),
                              key=lambda x: x[group_by])]
        # ordering = [i.value for i in constants.EnvType]
        # results = sorted(results, key=lambda x: ordering.index(x['name']))
        ret_data = []
        for info in results:
            for item in (info["results"] or []):
                item["muster_id"] = muster_id
                item["environment"] = cluster_env_map.get(
                    item["cluster_id"], {}).get("cluster_env_str")
            info["results"] = self.bcs_perm_handler(request,
                                                    project_id,
                                                    info["results"],
                                                    filter_use=perm_can_use,
                                                    ns_id_flag="id",
                                                    ns_name_flag="name")
            if info["results"]:
                ret_data.append(info)
        return APIResponse({"data": ret_data})
 def validate_instance_entity(self, instance_entity):
     new_entity = {}
     project_kind = self.context['project_kind']
     for cate in instance_entity:
         # 将前台的模板类型转换为db存储的类型
         real_cate = to_bcs_res_name(project_kind, cate)
         new_entity[real_cate] = instance_entity[cate]
     return new_entity
    def to_internal_value(self, data):
        data = super().to_internal_value(data)
        if "instance_entity" not in data:
            return data

        instance_entity = {}
        project_kind = self.context["project_kind"]
        for res_name, res_info in data["instance_entity"].items():
            bcs_res_name = to_bcs_res_name(project_kind, res_name)
            instance_entity[bcs_res_name] = res_info
        data["instance_entity"] = instance_entity
        return data
Exemple #5
0
 def validate_category(self, category):
     project_kind = self.context.get('project_kind')
     return to_bcs_res_name(project_kind, category)