예제 #1
0
파일: views.py 프로젝트: coocla/eonboard
def volume_create_view(request):
    try:
        serializer = VolumeSerializer(data=request.data,
                                      context={"request": request})
        if not serializer.is_valid():
            return fail(msg=_('Data is not valid.'),
                        status=status.HTTP_400_BAD_REQUEST)

        volume = serializer.save()
        Operation.log(volume, obj_name=volume.name, action="create", result=1)
        workflow = Workflow.get_default(ResourceType.VOLUME)

        if settings.SITE_CONFIG['WORKFLOW_ENABLED'] and workflow:

            volume.status = VOLUME_STATE_APPLYING
            volume.save()

            FlowInstance.create(volume, request.user, workflow, None)
            msg = _("Your application for %(size)d GB volume is successful, "
                    "please waiting for approval result!") \
                % {'size': volume.size}
            return success(msg=msg)
        else:
            try:
                volume_create_task.delay(volume)
                return success(msg=_('Creating volume'),
                               status=status.HTTP_201_CREATED)
            except Exception as e:
                LOG.exception("Failed to create volume, msg: %s", e)
                volume.status = VOLUME_STATE_ERROR
                volume.save()
                return error()
    except Exception as e:
        LOG.exception("create volume error, msg:[%s]", e)
        return error()
예제 #2
0
파일: views.py 프로젝트: young8/eonboard
def volume_create_view(request):
    try:
        serializer = VolumeSerializer(data=request.data,
                                      context={"request": request})
        if not serializer.is_valid():
            return fail(msg=_('Data is not valid.'),
                        status=status.HTTP_400_BAD_REQUEST)

        volume = serializer.save()
        Operation.log(volume, obj_name=volume.name, action="create", result=1)
        workflow = Workflow.get_default(ResourceType.VOLUME)

        if settings.SITE_CONFIG['WORKFLOW_ENABLED'] and workflow:

            volume.status = VOLUME_STATE_APPLYING
            volume.save()

            FlowInstance.create(volume, request.user, workflow, None)
            msg = _("Your application for %(size)d GB volume is successful, "
                    "please waiting for approval result!") \
                % {'size': volume.size}
            return success(msg=msg)
        else:
            try:
                volume_create_task.delay(volume)
                return success(msg=_('Creating volume'),
                               status=status.HTTP_201_CREATED)
            except Exception as e:
                LOG.exception("Failed to create volume, msg: %s", e)
                volume.status = VOLUME_STATE_ERROR
                volume.save()
                return error()
    except Exception as e:
        LOG.exception("create volume error, msg:[%s]", e)
        return error()
예제 #3
0
    def workflow_approve_callback(self, flow_instance):
        from cloud.volume_task import volume_create_task

        try:
            self.status = VOLUME_STATE_CREATING
            self.save()

            volume_create_task.delay(self)

            content = title = _('Your application for %(size)d GB volume named %(name)s is approved! ') \
                % {'size': self.size, 'name': self.name}
            Notification.info(flow_instance.owner,
                              title,
                              content,
                              is_auto=True)
        except:

            self.status = VOLUME_STATE_ERROR
            self.save()
            title = _('Error happened to your application for volume')

            content = _(
                'Your application for %(size)d GB volume named %(name)s is approved, '
                'but an error happened when creating it.') % {
                    'size': self.size,
                    'name': self.name
                }

            Notification.error(flow_instance.owner,
                               title,
                               content,
                               is_auto=True)
예제 #4
0
def volume_create_view(request):
    try:

        os_volume_type = request.data['os_volume_type']
        os_volume_type = ast.literal_eval(os_volume_type)
        os_volume_type = os_volume_type['name']

        LOG.info("********** os volume type is ************" +
                 str(os_volume_type))
        request.data['os_volume_type'] = os_volume_type
        LOG.info("********** os volume type is ************" +
                 str(os_volume_type))

        serializer = VolumeSerializer(data=request.data,
                                      context={"request": request})
        if not serializer.is_valid():
            #return fail(msg=_('Data is not valid.'),
            return fail(msg='{}'.format(serializer.errors),
                        status=status.HTTP_400_BAD_REQUEST)

        pay_type = request.data['pay_type']
        LOG.info("********** os volume type is ************" +
                 str(os_volume_type))
        pay_num = int(request.data['pay_num'])

        volume = serializer.save()
        Operation.log(volume, obj_name=volume.name, action="create", result=1)
        workflow = Workflow.get_default(ResourceType.VOLUME)

        if settings.SITE_CONFIG['WORKFLOW_ENABLED'] and workflow:

            volume.status = VOLUME_STATE_APPLYING
            volume.save()

            FlowInstance.create(volume, request.data.user, workflow,
                                None)  # TODO test this
            msg = _("Your application for %(size)d GB volume is successful, "
                    "please waiting for approval result!") \
                % {'size': volume.size}
            return success(msg=msg)
        else:
            try:
                volume_create_task.delay(volume, os_volume_type)
                Order.for_volume(volume, pay_type=pay_type, pay_num=pay_num)
                return success(msg=_('Creating volume'),
                               status=status.HTTP_201_CREATED)
            except Exception as e:
                LOG.exception("Failed to create volume, msg: %s", e)
                volume.status = VOLUME_STATE_ERROR
                volume.save()
                return error()
    except Exception as e:
        LOG.exception("create volume error, msg:[%s]", e)
        return error()
예제 #5
0
파일: views.py 프로젝트: bluven/eonboard
def volume_create_view(request, format=None):
    try:
        serializer = VolumeSerializer(data=request.data, context={"request": request})
        if serializer.is_valid():
            volume = serializer.save()
            volume_create_task.delay(volume)
            Operation.log(volume, obj_name=volume.name, action="create", result=1)
            return Response({"OPERATION_STATUS": 1, "MSG": _('Creating Volume')}, status=status.HTTP_201_CREATED)
        else:
            return Response({"OPERATION_STATUS": 0, "MSG": _('Data valid error')}, status=status.HTTP_400_BAD_REQUEST)
    except Exception as e:
        LOG.error("create volume  error ,msg:[%s]" % e)
        return Response({"OPERATION_STATUS": 0, "MSG": _('Volume create error')})
예제 #6
0
파일: models.py 프로젝트: coocla/eonboard
    def workflow_approve_callback(self, flow_instance):
        from cloud.volume_task import volume_create_task

        try:
            self.status = VOLUME_STATE_CREATING
            self.save()

            volume_create_task.delay(self)

            content = title = _('Your application for %(size)d GB volume named %(name)s is approved! ') \
                % {'size': self.size, 'name': self.name}
            Notification.info(flow_instance.owner, title, content, is_auto=True)
        except:

            self.status = VOLUME_STATE_ERROR
            self.save()
            title = _('Error happened to your application for volume')

            content = _('Your application for %(size)d GB volume named %(name)s is approved, '
                        'but an error happened when creating it.') % {'size': self.size, 'name': self.name}

            Notification.error(flow_instance.owner, title, content, is_auto=True)