Example #1
0
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
Example #2
0
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"]
Example #3
0
 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)
     }
Example #4
0
    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)
        })