def is_name_duplicate(resource_name, resource_id, name, version_id): """同一类资源的名称不能重复 """ # 判断新名称与老名称是否一致,如果一致,则不会重复 model_class = get_model_class_by_resource_name(resource_name) try: resource = model_class.objects.get(id=resource_id) if name == resource.name: return False except model_class.DoesNotExist: pass # 只校验当前版本内是否重复 try: version_entity = VersionedEntity.objects.get(id=version_id) except VersionedEntity.DoesNotExist: return False else: entity = version_entity.get_entity() resource_ids = entity.get(resource_name, '') if not resource_ids: return False if model_class.objects.filter(name=name, id__in=resource_ids.split(',')): return True return False
def generate_manifest(access_token, username, release_data): release_id = release_data["release_id"] namespace_id = release_data["namespace_id"] template_id = release_data["template_id"] v_inst = VersionInstance.objects.get(id=release_id, ns_id=namespace_id, template_id=template_id) params = { "instance_id": release_id, "version_id": v_inst.version_id, "show_version_id": v_inst.show_version_id, "template_id": template_id, "project_id": release_data["project_id"], "access_token": access_token, "username": username, "lb_info": {}, "variable_dict": release_data["variable_info"].get(namespace_id) or {}, "is_preview": False, } resource_name = release_data["resource_name"] instance_entity = json.loads(v_inst.instance_entity) resource_id_list = instance_entity.get(resource_name) res_model_cls = get_model_class_by_resource_name(resource_name) res_qsets = res_model_cls.objects.filter(name=release_data["name"], id__in=resource_id_list) configuration = generate_namespace_config( namespace_id, {resource_name: [res_qsets[0].id]}, is_save=False, **params) return configuration[resource_name][0]["config"]
def _create_resource_entity(self, resource_name, template_id, create_data): resource_class = get_model_class_by_resource_name(resource_name) resource = resource_class.perform_create(**create_data) # 创建新的模板集版本, 只保存各类资源的第一个 resource_entity = {resource_name: str(resource.id)} ventity = VersionedEntity.objects.create( template_id=template_id, version=get_default_version(), entity=resource_entity, creator=self.request.user.username) return { 'id': resource.id, 'version': ventity.id, 'template_id': template_id, 'resource_data': resource.get_res_config(is_simple=True) }
def put(self, request, project_id, version_id, resource_name, resource_id): """模板集中有 version 信息时,从 version 版本创建新的版本信息 """ validate_resource_name(resource_name) serializer = serializers_new.VentityWithTemplateSLZ(data=self.kwargs) serializer.is_valid(raise_exception=True) validated_data = serializer.validated_data ventity = validated_data['ventity'] template = validated_data['template'] self.can_edit_template(request, template) data = request.data or {} data.update({ 'version_id': version_id, 'resource_id': resource_id, 'project_id': project_id }) serializer_class = serializers_new.get_slz_class_by_resource_name( resource_name) serializer = serializer_class(data=data) serializer.is_valid(raise_exception=True) update_data = self._compose_update_data(serializer.validated_data) resource_class = get_model_class_by_resource_name(resource_name) if int(resource_id): robj = resource_class.perform_update(resource_id, **update_data) else: robj = resource_class.perform_create(**update_data) new_ventity = VersionedEntity.update_for_new_ventity( ventity.id, resource_name, resource_id, str(robj.id), **{'creator': self.request.user.username}) # model Template updated field need change when update resource template.save(update_fields=['updated']) return Response({ 'id': robj.id, 'version': new_ventity.id, 'resource_data': robj.get_res_config(is_simple=True) })