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)
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
def validate_category(self, category): project_kind = self.context.get('project_kind') return to_bcs_res_name(project_kind, category)