Beispiel #1
0
def filter_disk_id(vm, query_filter, data, default=None):
    """Validate disk_id and update dictionary used for queryset filtering"""
    disk_id = data.get('disk_id', default)

    if disk_id is not None:
        # noinspection PyBroadException
        try:
            disk_id = int(disk_id)
            if not disk_id > 0:
                raise ValueError
            if vm:
                query_filter['disk_id'] = Snapshot.get_disk_id(vm, disk_id)
            else:
                query_filter['vm_disk_id'] = disk_id - 1
        except:
            raise InvalidInput('Invalid disk_id')

    return query_filter
Beispiel #2
0
 def _get_real_disk_id(self):
     return Snapshot.get_disk_id(self._vm, self.cleaned_data['disk_id'])
Beispiel #3
0
def _task_cleanup(result, task_id, task_status, obj, **kwargs):
    """
    Cleanup after task is revoked.
    """
    apiview = result['meta']['apiview']
    view = apiview['view']

    if view == 'vm_snapshot':
        from vms.models import Snapshot
        from api.vm.snapshot.tasks import _vm_snapshot_cb_failed

        snap = Snapshot.objects.get(vm=obj,
                                    disk_id=Snapshot.get_disk_id(
                                        obj, apiview['disk_id']),
                                    name=apiview['snapname'])
        _vm_snapshot_cb_failed(result, task_id, snap, apiview['method'])

    elif view == 'vm_snapshot_list':
        from vms.models import Snapshot
        from api.vm.snapshot.tasks import _vm_snapshot_list_cb_failed

        snaps = Snapshot.objects.filter(vm=obj,
                                        disk_id=Snapshot.get_disk_id(
                                            obj, apiview['disk_id']),
                                        name__in=apiview['snapnames'])
        _vm_snapshot_list_cb_failed(result, task_id, snaps, apiview['method'])

    elif view == 'vm_backup':
        from vms.models import Backup
        from api.vm.backup.tasks import _vm_backup_cb_failed

        bkp = Backup.objects.get(vm_hostname=apiview['hostname'],
                                 vm_disk_id=apiview['disk_id'] - 1,
                                 name=apiview['bkpname'])
        _vm_backup_cb_failed(result, task_id, bkp, apiview['method'], vm=obj)

    elif view == 'vm_backup_list':
        from vms.models import Backup
        from api.vm.backup.tasks import _vm_backup_list_cb_failed

        bkps = Backup.objects.filter(vm_hostname=apiview['hostname'],
                                     vm_disk_id=apiview['disk_id'] - 1,
                                     name__in=apiview['bkpnames'])
        _vm_backup_list_cb_failed(result, task_id, bkps, apiview['method'])

    elif view == 'vm_manage':
        if apiview['method'] == 'POST':
            from api.vm.base.tasks import _vm_create_cb_failed
            result['message'] = ''
            _vm_create_cb_failed(result, task_id, obj)
        elif apiview['method'] == 'DELETE':
            from api.vm.base.tasks import _vm_delete_cb_failed
            _vm_delete_cb_failed(result, task_id, obj)
        elif apiview['method'] == 'PUT':
            from api.vm.base.tasks import _vm_update_cb_done
            _vm_update_cb_done(result, task_id, obj)

    elif view == 'vm_status':
        from api.vm.status.tasks import _vm_status_cb_failed

        if apiview['method'] == 'PUT':
            _vm_status_cb_failed(result, task_id, obj)

    elif view == 'vm_migrate':
        from vms.models import SlaveVm
        from api.vm.migrate.tasks import _vm_migrate_cb_failed

        ghost_vm = SlaveVm.get_by_uuid(apiview['slave_vm_uuid'])
        _vm_migrate_cb_failed(result, task_id, obj, ghost_vm)

    elif view == 'image_manage' or view == 'image_snapshot':
        # obj = Image
        from vms.models import Snapshot
        from api.image.base.tasks import _image_manage_cb_failed

        method = apiview['method']
        snap_id = obj.src_snap_id

        if method == 'POST' and snap_id:
            snap = Snapshot.objects.get(id=snap_id)
        else:
            snap = None

        _image_manage_cb_failed(result, task_id, obj, method, snap=snap)

    elif view == 'node_image':
        # obj = NodeStorage
        from vms.models import Image
        from api.node.image.tasks import _node_image_cb_failed

        img = Image.objects.get(name=apiview['name'])
        _node_image_cb_failed(result, task_id, obj, img)

    else:
        task_cleanup_signal.send(sender=view,
                                 apiview=apiview,
                                 result=result,
                                 task_id=task_id,
                                 status=task_status,
                                 obj=obj)