Beispiel #1
0
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()
Beispiel #2
0
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()
Beispiel #3
0
def volume_attach_or_detach(data, volume, action):

    if 'attach' == action:
        instance = Instance.objects.get(pk=data.get('instance_id'))
        volume.change_status(VOLUME_STATE_ATTACHING)

        Operation.log(volume, obj_name=volume.name, action="attach_volume")
        try:
            tasks.attach_volume_to_instance.delay(instance=instance,
                                                  volume=volume)
        except Exception:
            volume.change_status(VOLUME_STATE_AVAILABLE)
            LOG.exception("Attach volume error")
            return error()
        else:
            return success(msg=_('Attaching volume'),
                           status=status.HTTP_201_CREATED)

    elif 'detach' == action:
        volume.change_status(VOLUME_STATE_DETACHING)
        Operation.log(volume, obj_name=volume.name, action="detach_volume")
        try:
            tasks.detach_volume_from_instance.delay(volume)
        except Exception:
            LOG.exception("Detach volume error")
            volume.change_status(VOLUME_STATE_IN_USE)
            return error()
        else:
            return success(msg=_('Detaching volume'),
                           status=status.HTTP_201_CREATED)
Beispiel #4
0
def volume_attach_or_detach(data, volume, action):

    if 'attach' == action:
        instance = Instance.objects.get(pk=data.get('instance_id'))
        volume.change_status(VOLUME_STATE_ATTACHING)

        Operation.log(volume, obj_name=volume.name, action="attach_volume")
        try:
            tasks.attach_volume_to_instance.delay(
                instance=instance, volume=volume)
        except Exception:
            volume.change_status(VOLUME_STATE_AVAILABLE)
            LOG.exception("Attach volume error")
            return error()
        else:
            return success(msg=_('Attaching volume'),
                           status=status.HTTP_201_CREATED)

    elif 'detach' == action:
        volume.change_status(VOLUME_STATE_DETACHING)
        Operation.log(volume, obj_name=volume.name, action="detach_volume")
        try:
            tasks.detach_volume_from_instance.delay(volume)
        except Exception:
            LOG.exception("Detach volume error")
            volume.change_status(VOLUME_STATE_IN_USE)
            return error()
        else:
            return success(msg=_('Detaching volume'),
                           status=status.HTTP_201_CREATED)
Beispiel #5
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()
Beispiel #6
0
def create_pool_vip(request):

    pool_id = request.data['pool_id']
    try:
        pool = BalancerPool.objects.get(
            pk=pool_id, user=request.user,
            user_data_center=request.session["UDC_ID"])
    except BalancerPool.DoesNotExist:
        return fail(_("No balancer pool found!"))

    serializer = BalancerVIPSerializer(data=request.data,
                                       context={'request': request})

    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    vip = serializer.save()
    Operation.log(vip, obj_name=vip.name, action='create')

    pool.status = POOL_UPDATING
    pool.save()

    try:
        pool_vip_create_task.delay(vip, pool)
    except Exception:
        vip.delete()
        return error()

    return success(_('Creating balancer vip.'))
Beispiel #7
0
def delete_pool(request):

    pool_id = request.data['pool_id']

    try:
        pool = BalancerPool.objects.get(
            pk=pool_id, user=request.user,
            user_data_center=request.session["UDC_ID"])
    except BalancerPool.DoesNotExist:
        return fail(_('No balancer found.'))

    if not pool.pool_uuid:
        pool.deleted = True
        pool.save()
        return success(_('Balancer pool %(name)s is deleted')
                       % {'name': pool.name})

    pool.status = POOL_DELETING
    pool.save()
    Operation.log(pool, obj_name=pool.name, action='delete')

    try:
        pool_delete_task.delay(pool)
    except Exception:
        LOG.exception("Failed to delete balancer pool[%s]", pool)
        return error()

    return success(_('Deleting balancer pool %(name)s') % {'name': pool.name})
Beispiel #8
0
def delete_action(volume):
    if volume.instance is not None:
        msg = _('Operation Failed. '
                'Volume %(volume)s is attached to instance: %(instance)s') \
            % {'instance': volume.instance.name, 'volume': volume.name}

        return fail(msg=msg)

    if BackupItem.living.filter(resource_id=volume.id,
                                resource_type=Volume.__name__).exists():
        return fail(_("This volume has backups, please delete them first."))

    if volume.volume_id:
        volume.change_status(VOLUME_STATE_DELETING)

        try:
            volume_delete_task.delay(volume)
            Operation.log(volume,
                          obj_name=volume.name,
                          action="terminate",
                          result=1)
            return success(msg=_('Deleting volume'))
        except Exception:
            LOG.exception("Delete volume error")
            volume.change_status(VOLUME_STATE_ERROR)
            return error()
    else:
        volume.fake_delete()
        return success(msg=_('Volume is deleted.'))
Beispiel #9
0
def delete_backup_item(request, pk):

    backup_item = BackupItem.objects.get(pk=pk)

    if backup_item.status == BACKUP_STATE_ERROR or \
            backup_item.rbd_image is None:
        backup_item.deleted = True
        backup_item.change_status(BACKUP_STATE_DELETED)
        backup_item.save()
        return success(_("Backup item Deleted."))

    if BackupItem.is_any_node_untable(backup_item.chain_id):
        return fail(_("There is one task running on this chain."))

    BackupItem.mark_chain_delete(backup_item)

    Operation.log(backup_item, obj_name=backup_item.name, action="delete")

    try:
        tasks.delete_backup.delay(backup_item.id)
    except Exception:
        LOG.exception("Failed to delete backup item. %s", backup_item)
        return error()
    else:
        return success(_("Deleting"))
Beispiel #10
0
def instance_change_firewall_view(request):
    data = request.data

    try:
        instance = Instance.objects.get(pk=data['instance_id'])
    except Instance.DoesNotExist:
        return fail(_("Instance is not found"))

    try:
        firewall = Firewall.objects.get(pk=data.get('firewall_id'))
    except Firewall.DoesNotExist:
        return fail(_("Firewall is not found"))

    Operation.log(instance, obj_name=instance.name, action="change_firewall")

    try:
        server_update_security_groups_task.delay(instance, firewall)
    except Exception:
        LOG.exception("Failed to change firewall group of instance. %s",
                      instance)
        return error()

    return success(
        _("Instance %(name)s's firewall is changed.") %
        {'name': instance.name})
Beispiel #11
0
def delete_action(volume):
    if volume.instance is not None:
        msg = _('Operation Failed. '
                'Volume %(volume)s is attached to instance:%(instance)s') \
            % {'instance': volume.instance.name, 'volume': volume.name}

        return fail(msg=msg)

    if volume.volume_id:
        volume.status = VOLUME_STATE_DELETING
        volume.save()

        try:
            volume_delete_action_task.delay(volume)
            Operation.log(volume,
                          obj_name=volume.name,
                          action="terminate",
                          result=1)
            return success(msg=_('Deleting volume'))
        except Exception as e:
            LOG.exception("Delete volume error, msg:%s", e)
            volume.status = VOLUME_STATE_ERROR
            volume.save()
            return error()
    else:
        volume.deleted = True
        volume.save()
        return success(msg=_('Volume is deleted.'))
Beispiel #12
0
def delete_pool(request):

    pool_id = request.data['pool_id']

    try:
        pool = BalancerPool.objects.get(
            pk=pool_id,
            user=request.user,
            user_data_center=request.session["UDC_ID"])
    except BalancerPool.DoesNotExist:
        return fail(_('No balancer found.'))

    if not pool.pool_uuid:
        pool.deleted = True
        pool.save()
        return success(
            _('Balancer pool %(name)s is deleted') % {'name': pool.name})

    pool.status = POOL_DELETING
    pool.save()
    Operation.log(pool, obj_name=pool.name, action='delete')

    try:
        pool_delete_task.delay(pool)
    except Exception:
        LOG.exception("Failed to delete balancer pool[%s]", pool)
        return error()

    return success(_('Deleting balancer pool %(name)s') % {'name': pool.name})
Beispiel #13
0
def delete_backup_item(request, pk):

    backup_item = BackupItem.objects.get(pk=pk)

    if backup_item.status == BACKUP_STATE_ERROR or \
            backup_item.rbd_image is None:
        backup_item.deleted = True
        backup_item.change_status(BACKUP_STATE_DELETED)
        backup_item.save()
        return success(_("Backup item Deleted."))

    if BackupItem.is_any_node_untable(backup_item.chain_id):
        return fail(_("There is one task running on this chain."))

    BackupItem.mark_chain_delete(backup_item)

    Operation.log(backup_item, obj_name=backup_item.name, action="delete")

    try:
        tasks.delete_backup.delay(backup_item.id)
    except Exception:
        LOG.exception("Failed to delete backup item. %s", backup_item)
        return error()
    else:
        return success(_("Deleting"))
Beispiel #14
0
def update_pool_monitor(request):

    monitor_id = request.data['id']

    try:
        monitor = BalancerMonitor.objects.get(pk=monitor_id, user=request.user)
    except BalancerMonitor.DoesNotExist:
        return fail(_("No monitor found!"))

    serializer = BalancerMonitorSerializer(data=request.data,
                                           instance=monitor,
                                           context={'request': request})

    if not serializer.is_valid():
        return fail(_("Monitor data is not valid"))

    monitor.delay = int(request.data['delay'])
    monitor.timeout = int(request.data['timeout'])
    monitor.max_retries = int(request.data['max_retries'])

    if pool_monitor_update(monitor):
        monitor.save()
        Operation.log(monitor, obj_name=monitor.get_type_display(),
                      action='update')
        return success(_('Balancer monitor is updated!'))
    else:
        return error()
Beispiel #15
0
def update_pool_monitor(request):

    monitor_id = request.data['id']

    try:
        monitor = BalancerMonitor.objects.get(pk=monitor_id, user=request.user)
    except BalancerMonitor.DoesNotExist:
        return fail(_("No monitor found!"))

    serializer = BalancerMonitorSerializer(data=request.data,
                                           instance=monitor,
                                           context={'request': request})

    if not serializer.is_valid():
        return fail(_("Monitor data is not valid"))

    monitor.delay = int(request.data['delay'])
    monitor.timeout = int(request.data['timeout'])
    monitor.max_retries = int(request.data['max_retries'])

    if pool_monitor_update(monitor):
        monitor.save()
        Operation.log(monitor,
                      obj_name=monitor.get_type_display(),
                      action='update')
        return success(_('Balancer monitor is updated!'))
    else:
        return error()
Beispiel #16
0
def delete_action(volume):
    if volume.instance is not None:
        msg = _('Operation Failed. '
                'Volume %(volume)s is attached to instance:%(instance)s') \
            % {'instance': volume.instance.name, 'volume': volume.name}

        return fail(msg=msg)

    if volume.volume_id:
        volume.status = VOLUME_STATE_DELETING
        volume.save()

        try:
            volume_delete_action_task.delay(volume)
            Operation.log(volume, obj_name=volume.name,
                          action="terminate", result=1)
            return success(msg=_('Deleting volume'))
        except Exception as e:
            LOG.exception("Delete volume error, msg:%s", e)
            volume.status = VOLUME_STATE_ERROR
            volume.save()
            return error()
    else:
        volume.deleted = True
        volume.save()
        return success(msg=_('Volume is deleted.'))
Beispiel #17
0
def create_pool_vip(request):

    pool_id = request.data['pool_id']
    try:
        pool = BalancerPool.objects.get(
            pk=pool_id,
            user=request.user,
            user_data_center=request.session["UDC_ID"])
    except BalancerPool.DoesNotExist:
        return fail(_("No balancer pool found!"))

    serializer = BalancerVIPSerializer(data=request.data,
                                       context={'request': request})

    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    vip = serializer.save()
    Operation.log(vip, obj_name=vip.name, action='create')

    pool.status = POOL_UPDATING
    pool.save()

    try:
        pool_vip_create_task.delay(vip, pool)
    except Exception:
        vip.delete()
        return error()

    return success(_('Creating balancer vip.'))
Beispiel #18
0
def delete_action(volume):
    if volume.instance is not None:
        msg = _('Operation Failed. '
                'Volume %(volume)s is attached to instance: %(instance)s') \
            % {'instance': volume.instance.name, 'volume': volume.name}

        return fail(msg=msg)

    if BackupItem.living.filter(resource_id=volume.id,
                                resource_type=Volume.__name__).exists():
        return fail(_("This volume has backups, please delete them first."))

    if volume.volume_id:
        volume.change_status(VOLUME_STATE_DELETING)

        try:
            volume_delete_task.delay(volume)
            Operation.log(volume, obj_name=volume.name,
                          action="terminate", result=1)
            return success(msg=_('Deleting volume'))
        except Exception:
            LOG.exception("Delete volume error")
            volume.change_status(VOLUME_STATE_ERROR)
            return error()
    else:
        volume.fake_delete()
        return success(msg=_('Volume is deleted.'))
Beispiel #19
0
def detach_monitor_from_pool(pool, monitor):

    Operation.log(pool, obj_name=pool.name, action='detach', result=1)

    if pool_monitor_association_delete(pool, monitor):
        return success(_('Monitor is detached'))
    else:
        return error()
Beispiel #20
0
def attach_monitor_to_pool(pool, monitor):

    Operation.log(pool, obj_name=pool.name, action='attach')

    if pool_monitor_association_create(pool, monitor):
        return success(_('Monitor is attached.'))
    else:
        return error()
Beispiel #21
0
def attach_monitor_to_pool(pool, monitor):

    Operation.log(pool, obj_name=pool.name, action='attach')

    if pool_monitor_association_create(pool, monitor):
        return success(_('Monitor is attached.'))
    else:
        return error()
Beispiel #22
0
def detach_monitor_from_pool(pool, monitor):

    Operation.log(pool, obj_name=pool.name, action='detach', result=1)

    if pool_monitor_association_delete(pool, monitor):
        return success(_('Monitor is detached'))
    else:
        return error()
Beispiel #23
0
def pool_vip_delete_view(request):
    pool_id = request.data['id']

    pool = BalancerPool.objects.get(pk=pool_id, user=request.user)
    vip = BalancerVIP.objects.get(pk=pool.vip.id, user=request.user,
                                  user_data_center=request.session["UDC_ID"])

    try:
        pool_vip_delete_task.delay(vip, pool)
    except Exception:
        return error()
    else:
        Operation.log(vip, obj_name=vip.name, action='delete', result=1)
        return success(_('Deleting balancer vip '))
Beispiel #24
0
def volume_action_view(request):
    data = request.data
    action = data.get("action")

    try:
        volume = Volume.objects.get(pk=data.get('volume_id'))
        if action in ('attach', 'detach'):
            return volume_attach_or_detach(data, volume, action)
        elif 'delete' == action:
            return delete_action(volume)
        return fail(msg=_('Unknown volume action'))
    except Exception as e:
        LOG.exception("Volume action[%s] error, msg:[%s]", action, e)
        return error()
Beispiel #25
0
def volume_action_view(request):
    data = request.data
    action = data.get("action")

    try:
        volume = Volume.objects.get(pk=data.get('volume_id'))
        if action in ('attach', 'detach'):
            return volume_attach_or_detach(data, volume, action)
        elif 'delete' == action:
            return delete_action(volume)
        return fail(msg=_('Unknown volume action'))
    except Exception as e:
        LOG.exception("Volume action[%s] error, msg:[%s]", action, e)
        return error()
Beispiel #26
0
def firewall_rule_delete_view(request):
    data = request.data

    try:
        firewall_rule = FirewallRules.objects.get(pk=data.get('id'))
    except FirewallRules.DoesNotExist:
        return fail(_("Firewall rule not exists."))

    obj_name = firewall_rule.protocol if firewall_rule.protocol else ""
    Operation.log(firewall_rule, obj_name=obj_name.upper(), action="terminate")

    if security_group_rule_delete_task(firewall_rule):
        return success(_("Firewall Rule is deleted."))
    else:
        return error()
Beispiel #27
0
def delete_pool_monitor(request):

    monitor_id = request.data['id']

    monitor = BalancerMonitor.objects.get(pk=monitor_id, user=request.user)

    if BalancerPoolMonitor.objects.filter(monitor=monitor).exists():
        return fail(_("Monitor %(name)s is being used, can not be deleted.")
                    % {'name': monitor.name})

    if pool_monitor_delete(monitor):
        Operation.log(monitor, obj_name=monitor.get_type_display(), action='delete')
        return success(_('Balancer monitor is deleted.'))
    else:
        return error()
Beispiel #28
0
def pool_vip_delete_view(request):
    pool_id = request.data['id']

    pool = BalancerPool.objects.get(pk=pool_id, user=request.user)
    vip = BalancerVIP.objects.get(pk=pool.vip.id,
                                  user=request.user,
                                  user_data_center=request.session["UDC_ID"])

    try:
        pool_vip_delete_task.delay(vip, pool)
    except Exception:
        return error()
    else:
        Operation.log(vip, obj_name=vip.name, action='delete', result=1)
        return success(_('Deleting balancer vip '))
Beispiel #29
0
def firewall_rule_delete_view(request):
    data = request.data

    try:
        firewall_rule = FirewallRules.objects.get(pk=data.get('id'))
    except FirewallRules.DoesNotExist:
        return fail(_("Firewall rule not exists."))

    obj_name = firewall_rule.protocol if firewall_rule.protocol else ""
    Operation.log(firewall_rule, obj_name=obj_name.upper(), action="terminate")

    if security_group_rule_delete_task(firewall_rule):
        return success(_("Firewall Rule is deleted."))
    else:
        return error()
Beispiel #30
0
def restore_backup_item(request, pk):

    backup_item = BackupItem.objects.get(pk=pk)

    if BackupItem.is_any_unstable(resource_id=backup_item.resource_id,
                                  resource_type=backup_item.resource_type):

        return fail(
            _("Resource %(name)s has one backup task now.") %
            {'name': backup_item.resource.name})

    if backup_item.status == BACKUP_STATE_ERROR:
        return fail(_("This backup item is available."))

    if backup_item.is_instance_backup:
        instance = Instance.objects.get(pk=backup_item.resource_id)

        if instance.deleted:
            return fail(
                _("Cannot restore, because target resource has "
                  "already been deleted"))

        if instance.is_running:
            return fail(
                _("Cannot restore, because target instance is running"))

    else:
        volume = Volume.objects.get(pk=backup_item.resource_id)
        if volume.deleted:
            return fail(
                _("Cannot restore, because target resource has "
                  "already been deleted"))

        if volume.instance and volume.instance.is_running:
            return fail(
                _("Cannot restore, because target volume is attached to"
                  " a running instance, stop the instance or "
                  "detach the volume"))

    Operation.log(backup_item, obj_name=backup_item.name, action="restore")

    backup_item.change_status(BACKUP_STATE_PENDING_RESTORE)

    if tasks.restore_snap(backup_item.id):
        return success(_("Restoring"))
    else:
        LOG.error("Failed to restore backup item. %s", backup_item)
        return error()
Beispiel #31
0
def update_pool_member(request):
    member_id = request.data['id']

    try:
        member = BalancerMember.objects.get(pk=member_id, user=request.user)
    except BalancerMember.DoesNotExist:
        return fail(_("Member not found."))

    member.weight = int(request.data['weight'])

    if pool_member_update(member):
        Operation.log(member, obj_name=member.instance.name, action='update')
        member.save()
        return success(_("Member is updated!"))
    else:
        return error()
Beispiel #32
0
def create_pool_monitor(request):
    serializer = BalancerMonitorSerializer(data=request.data,
                                           context={'request': request})

    if not serializer.is_valid():
        return fail(_("Monitor Data is not valid"))

    monitor = serializer.save()
    Operation.log(monitor, obj_name=monitor.get_type_display(),
                  action='create')

    if pool_monitor_create(monitor):
        return success(_("Balancer monitor is created."))
    else:
        monitor.delete()
        return error()
Beispiel #33
0
def volume_update_view(request):
    try:
        data = request.data
        if data.get('id') is not None:
            volume = Volume.objects.get(pk=data.get('id'))
            Operation.log(volume, obj_name=volume.name, action="update", result=1)
            volume.name = data.get('name')
            volume.save()
            return success(msg=_('Volume update success'),
                           status=status.HTTP_201_CREATED)
        else:
            return fail(msg=_('No volume found!'),
                        status=status.HTTP_404_NOT_FOUND)
    except Exception as e:
        LOG.exception("Failed to update volume, msg:[%s]", e)
        return error()
Beispiel #34
0
def update_pool_member(request):
    member_id = request.data['id']

    try:
        member = BalancerMember.objects.get(pk=member_id, user=request.user)
    except BalancerMember.DoesNotExist:
        return fail(_("Member not found."))

    member.weight = int(request.data['weight'])

    if pool_member_update(member):
        Operation.log(member, obj_name=member.instance.name, action='update')
        member.save()
        return success(_("Member is updated!"))
    else:
        return error()
Beispiel #35
0
def volume_update_view(request):
    try:
        data = request.data
        if data.get('id') is not None:
            volume = Volume.objects.get(pk=data.get('id'))
            Operation.log(volume, obj_name=volume.name, action="update", result=1)
            volume.name = data.get('name')
            volume.save()
            return success(msg=_('Volume update success'),
                           status=status.HTTP_201_CREATED)
        else:
            return fail(msg=_('No volume found!'),
                        status=status.HTTP_404_NOT_FOUND)
    except Exception as e:
        LOG.exception("Failed to update volume, msg:[%s]", e)
        return error()
Beispiel #36
0
def firewall_create_view(request):
    serializer = FirewallSerializer(data=request.data,
                                    context={"request": request})
    if not serializer.is_valid():
        return fail(_('Data is not valid.'))

    firewall = serializer.save()
    Operation.log(firewall, obj_name=firewall.name, action="create")

    try:
        security_group_create_task.delay(firewall)
    except Exception:
        LOG.exception("Failed to create firewall")
        firewall.delete()
        return error()

    return success(_('Creating firewall'))
Beispiel #37
0
def firewall_create_view(request):
    serializer = FirewallSerializer(data=request.data,
                                    context={"request": request})
    if not serializer.is_valid():
        return fail(_('Data is not valid.'))

    firewall = serializer.save()
    Operation.log(firewall, obj_name=firewall.name, action="create")

    try:
        security_group_create_task.delay(firewall)
    except Exception:
        LOG.exception("Failed to create firewall")
        firewall.delete()
        return error()

    return success(_('Creating firewall'))
Beispiel #38
0
def create_pool_monitor(request):
    serializer = BalancerMonitorSerializer(data=request.data,
                                           context={'request': request})

    if not serializer.is_valid():
        return fail(_("Monitor Data is not valid"))

    monitor = serializer.save()
    Operation.log(monitor,
                  obj_name=monitor.get_type_display(),
                  action='create')

    if pool_monitor_create(monitor):
        return success(_("Balancer monitor is created."))
    else:
        monitor.delete()
        return error()
Beispiel #39
0
def create_pool(request):

    serializer = BalancerPoolSerializer(data=request.data,
                                        context={"request": request})
    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    pool = serializer.save()
    Operation.log(pool, obj_name=pool.name, action='create', result=1)

    try:
        pool_create_task.delay(pool)
        return success(_('Creating balancer pool.'))
    except Exception:
        LOG.exception("Failed to create balancer pool")
        pool.status = POOL_ERROR
        pool.save()
        return error()
Beispiel #40
0
def create_pool(request):

    serializer = BalancerPoolSerializer(data=request.data,
                                        context={"request": request})
    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    pool = serializer.save()
    Operation.log(pool, obj_name=pool.name, action='create', result=1)

    try:
        pool_create_task.delay(pool)
        return success(_('Creating balancer pool.'))
    except Exception:
        LOG.exception("Failed to create balancer pool")
        pool.status = POOL_ERROR
        pool.save()
        return error()
Beispiel #41
0
def delete_pool_monitor(request):

    monitor_id = request.data['id']

    monitor = BalancerMonitor.objects.get(pk=monitor_id, user=request.user)

    if BalancerPoolMonitor.objects.filter(monitor=monitor).exists():
        return fail(
            _("Monitor %(name)s is being used, can not be deleted.") %
            {'name': monitor.name})

    if pool_monitor_delete(monitor):
        Operation.log(monitor,
                      obj_name=monitor.get_type_display(),
                      action='delete')
        return success(_('Balancer monitor is deleted.'))
    else:
        return error()
Beispiel #42
0
def volume_action_view(request):
    data = request.data
    action = data.get("action")

    volume = Volume.objects.get(pk=data.get('volume_id'))

    if BackupItem.is_any_unstable(resource=volume):
        return fail(_("This volume has one backup task running now."))

    try:
        if action in ('attach', 'detach'):
            return volume_attach_or_detach(data, volume, action)
        elif 'delete' == action:
            return delete_action(volume)
        return fail(msg=_('Unknown volume action'))
    except Exception as e:
        LOG.exception("Volume action[%s] error, msg:[%s]", action, e)
        return error()
Beispiel #43
0
def volume_action_view(request):
    data = request.data
    action = data.get("action")

    volume = Volume.objects.get(pk=data.get('volume_id'))

    if BackupItem.is_any_unstable(resource=volume):
        return fail(_("This volume has one backup task running now."))

    try:
        if action in ('attach', 'detach'):
            return volume_attach_or_detach(data, volume, action)
        elif 'delete' == action:
            return delete_action(volume)
        return fail(msg=_('Unknown volume action'))
    except Exception as e:
        LOG.exception("Volume action[%s] error, msg:[%s]", action, e)
        return error()
Beispiel #44
0
def restore_backup_item(request, pk):

    backup_item = BackupItem.objects.get(pk=pk)

    if BackupItem.is_any_unstable(resource_id=backup_item.resource_id,
                                  resource_type=backup_item.resource_type):

        return fail(_("Resource %(name)s has one backup task now.")
                    % {'name': backup_item.resource.name})

    if backup_item.status == BACKUP_STATE_ERROR:
        return fail(_("This backup item is available."))

    if backup_item.is_instance_backup:
        instance = Instance.objects.get(pk=backup_item.resource_id)

        if instance.deleted:
            return fail(_("Cannot restore, because target resource has "
                          "already been deleted"))

        if instance.is_running:
            return fail(_("Cannot restore, because target instance is running"))

    else:
        volume = Volume.objects.get(pk=backup_item.resource_id)
        if volume.deleted:
            return fail(_("Cannot restore, because target resource has "
                          "already been deleted"))

        if volume.instance and volume.instance.is_running:
            return fail(_("Cannot restore, because target volume is attached to"
                          " a running instance, stop the instance or "
                          "detach the volume"))

    Operation.log(backup_item, obj_name=backup_item.name, action="restore")

    backup_item.change_status(BACKUP_STATE_PENDING_RESTORE)

    if tasks.restore_snap(backup_item.id):
        return success(_("Restoring"))
    else:
        LOG.error("Failed to restore backup item. %s", backup_item)
        return error()
Beispiel #45
0
def delete_pool_member(request):
    member_id = request.data['id']
    try:
        member = BalancerMember.objects.get(pk=member_id)
    except BalancerMember.DoesNotExist:
        return success(_("Member is deleted."))

    if not member.member_uuid:
        member.deleted = True
        member.save()
        Operation.log(member, obj_name=member.instance.name, action='delete')
        return success(_("Member is deleted."))

    member.status = POOL_DELETING
    member.save()

    try:
        pool_member_delete_task.delay(member)
    except Exception:
        member.status = POOL_ACTIVE
        return error()
    else:
        return success(_("Deleting member"))
Beispiel #46
0
def firewall_delete_view(request):
    data = request.data
    firewall = Firewall.objects.get(pk=data.get('id'))

    if firewall.is_default:
        return fail(_("Firewall %(name)s is the default firewall, "
                      "cannot be deleted.") % {'name': firewall.name})

    if firewall.is_in_use:
        msg = _('Firewall %(name)s is being used.') % {'name': firewall.name}
        return fail(msg)

    Operation.log(firewall, obj_name=firewall.name, action="terminate")
    if firewall.firewall_id:
        try:
            security_group_delete_task(firewall)
        except Exception:
            LOG.exception("Failed to delete firewall. %s", firewall)
            return error()

    firewall.deleted = True
    firewall.save()
    return success(_("Firewall %(name)s is deleted") % {'name': firewall.name})
Beispiel #47
0
def delete_pool_member(request):
    member_id = request.data['id']
    try:
        member = BalancerMember.objects.get(pk=member_id)
    except BalancerMember.DoesNotExist:
        return success(_("Member is deleted."))

    if not member.member_uuid:
        member.deleted = True
        member.save()
        Operation.log(member, obj_name=member.instance.name, action='delete')
        return success(_("Member is deleted."))

    member.status = POOL_DELETING
    member.save()

    try:
        pool_member_delete_task.delay(member)
    except Exception:
        member.status = POOL_ACTIVE
        return error()
    else:
        return success(_("Deleting member"))
Beispiel #48
0
def instance_change_firewall_view(request):
    data = request.data

    try:
        instance = Instance.objects.get(pk=data['instance_id'])
    except Instance.DoesNotExist:
        return fail(_("Instance is not found"))

    try:
        firewall = Firewall.objects.get(pk=data.get('firewall_id'))
    except Firewall.DoesNotExist:
        return fail(_("Firewall is not found"))

    Operation.log(instance, obj_name=instance.name, action="change_firewall")

    try:
        server_update_security_groups_task.delay(instance, firewall)
    except Exception:
        LOG.exception("Failed to change firewall group of instance. %s",
                      instance)
        return error()

    return success(_("Instance %(name)s's firewall is changed.")
                   % {'name': instance.name})
Beispiel #49
0
def firewall_delete_view(request):
    data = request.data
    firewall = Firewall.objects.get(pk=data.get('id'))

    if firewall.is_default:
        return fail(
            _("Firewall %(name)s is the default firewall, "
              "cannot be deleted.") % {'name': firewall.name})

    if firewall.is_in_use:
        msg = _('Firewall %(name)s is being used.') % {'name': firewall.name}
        return fail(msg)

    Operation.log(firewall, obj_name=firewall.name, action="terminate")
    if firewall.firewall_id:
        try:
            security_group_delete_task(firewall)
        except Exception:
            LOG.exception("Failed to delete firewall. %s", firewall)
            return error()

    firewall.deleted = True
    firewall.save()
    return success(_("Firewall %(name)s is deleted") % {'name': firewall.name})
Beispiel #50
0
def update_pool(request):
    pool_id = request.data['id']

    pool = BalancerPool.objects.get(pk=pool_id,
                                    user=request.user,
                                    user_data_center=request.session["UDC_ID"])

    serializer = BalancerPoolSerializer(data=request.data,
                                        instance=pool,
                                        context={"request": request})

    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    pool.status = POOL_UPDATING
    pool = serializer.save()

    Operation.log(pool, obj_name=pool.name, action='update')
    try:
        pool_update_task.delay(pool)
        return success(_('Updating balancer pool.'))
    except Exception:
        LOG.exception("Failed to update balancer pool.")
        return error()
Beispiel #51
0
def update_pool(request):
    pool_id = request.data['id']

    pool = BalancerPool.objects.get(
        pk=pool_id, user=request.user,
        user_data_center=request.session["UDC_ID"])

    serializer = BalancerPoolSerializer(data=request.data,
                                        instance=pool,
                                        context={"request": request})

    if not serializer.is_valid():
        return fail(_('Data is not valid'))

    pool.status = POOL_UPDATING
    pool = serializer.save()

    Operation.log(pool, obj_name=pool.name, action='update')
    try:
        pool_update_task.delay(pool)
        return success(_('Updating balancer pool.'))
    except Exception:
        LOG.exception("Failed to update balancer pool.")
        return error()