コード例 #1
0
def get_list(args):
    group_id = 'group_id' in args and args['group_id']
    cephpool_id = 'cephpool_id' in args and args['cephpool_id']
    user_id = 'user_id' in args and args['user_id']
    vm_uuid = 'vm_uuid' in args and args['vm_uuid']

    api = CephVolumeAPI()
    volume_list = api.get_volume_list(group_id=group_id, cephpool_id=cephpool_id, user_id=user_id, vm_uuid=vm_uuid)
    ret_list = []
    for volume in volume_list:
        if volume.managed_by(args['req_user']):
            ret_list.append({
                'id': volume.id,
                'user_id': volume.user_id,
                'user_name': volume.user_name,
                'group_id': volume.group_id,
                'group_name': volume.group_name,
                'create_time': volume.create_time,
                'size': volume.size,
                'remarks': volume.remarks,
                'vm': volume.vm,
                'attach_time': volume.attach_time,
                'dev': volume.dev,
                'enable': volume.enable,
                'cephpool_id': volume.cephpool_id
            })
    return {'res': True, 'list': ret_list}
コード例 #2
0
def create(args):
    api = CephVolumeAPI()
    group_api = GroupAPI()
    group = group_api.get_group_by_id(args['group_id'])
    if not group.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}
    volume_id = api.create(args['group_id'], args['size'])
    api.set_user_id(volume_id, args['req_user'].id)
    return {'res': True, 'volume_id': volume_id}
コード例 #3
0
def set_remark(args):
    api = CephVolumeAPI()

    volume = api.get_volume_by_id(args['volume_id'])
    if not volume.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}

    res = api.set_remark(args['volume_id'], args['remarks'])
    if res:
        return {'res': True}
    return {'res': False, 'err': ERR_VOLUME_REMARKS}
コード例 #4
0
def resize(args):
    api = CephVolumeAPI()

    volume = api.get_volume_by_id(args['volume_id'])
    if not volume.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}

    res = api.resize(args['volume_id'], args['size'])
    if res:
        return {'res': True}
    return {'res': False, 'err': ERR_VOLUME_RESIZE}
コード例 #5
0
def delete(args):
    api = CephVolumeAPI()

    volume = api.get_volume_by_id(args['volume_id'])
    if not volume.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}
    
    del_success = api.delete(args['volume_id'])
    if del_success:
        return {'res': True}
    else:
        return {'res': False, 'err': ERR_VOLUME_DELETE_DB}
コード例 #6
0
def mount(args):
    api = CephVolumeAPI()
    vm_api=  VmAPI()

    vm = vm_api.get_vm_by_uuid(args['vm_uuid'])
    if not vm.can_operate_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}
    if vm.is_running():
        return {'res': False, 'err': ERR_MOUNT_RUNNING}
    
    volume = api.get_volume_by_id(args['volume_id'])
    if not volume.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}

    res = api.mount(args['vm_uuid'], args['volume_id'])
    if res:
        return {'res': True}
    return {'res': False, 'err': ERR_VOLUME_MOUNT}
コード例 #7
0
def get(args):
    api = CephVolumeAPI()
    volume = api.get_volume_by_id(args['volume_id'])
    if not volume.managed_by(args['req_user']):
        return {'res': False, 'err': ERR_AUTH_PERM}
    return {
        'res': True,
        'info': {
            'id': volume.id,
            'user_id': volume.user_id,
            'user_name': volume.user_name,
            'group_id': volume.group_id,
            'create_time': volume.create_time,
            'size': volume.size,
            'remarks': volume.remarks,
            'vm': volume.vm,
            'attach_time': volume.attach_time,
            'dev': volume.dev,
            'enable': volume.enable,
            'cephpool_id': volume.cephpool_id
        }
    }
コード例 #8
0
ファイル: api.py プロジェクト: bobff/ev-cloud
    def delete_vm(self, vm_uuid):
        vm = self.manager.get_vm_by_uuid(vm_uuid)
        image_id = vm.image_id
        diskname = vm.disk
        host_id = vm.host_id
        vcpu = vm.vcpu
        mem = vm.mem
        mac = vm.mac
        
        from device.api import GPUAPI
        from volume.api import CephVolumeAPI
        
        gpuapi = GPUAPI()
        if len(gpuapi.get_gpu_list_by_vm_uuid(vm_uuid)) > 0:
            raise Error(ERR_VM_DEL_GPU_MOUNTED)

        volumeapi = CephVolumeAPI()
        if len(volumeapi.get_volume_list_by_vm_uuid(vm_uuid)) > 0:
            raise Error(ERR_VM_DEL_VOL_MOUNTED)

        deletion_permitted = False



        archive_disk_name = ''
        if self.image_api.disk_exists(image_id, diskname):
            archive_disk_name = self.image_api.archive_disk(image_id, diskname)
            if archive_disk_name != False:
                deletion_permitted = True
        else:
            deletion_permitted = True
        if deletion_permitted:
            if vm.delete(archive_disk_name):
                if not self.host_api.host_release(host_id, vcpu, mem):
                    print('[delete_vm]', '释放宿主机资源失败')
                if not self.network_api.mac_release(mac, vm_uuid):
                    print('[delete_vm]', '释放IP地址失败')
                return True
        return False
コード例 #9
0
    def delete_vm(self, vm_uuid):
        vm = self.manager.get_vm_by_uuid(vm_uuid)
        image_id = vm.image_id
        diskname = vm.disk
        host_id = vm.host_id
        vcpu = vm.vcpu
        mem = vm.mem
        mac = vm.mac

        from device.api import GPUAPI
        from volume.api import CephVolumeAPI

        gpuapi = GPUAPI()
        if len(gpuapi.get_gpu_list_by_vm_uuid(vm_uuid)) > 0:
            raise Error(ERR_VM_DEL_GPU_MOUNTED)

        volumeapi = CephVolumeAPI()
        if len(volumeapi.get_volume_list_by_vm_uuid(vm_uuid)) > 0:
            raise Error(ERR_VM_DEL_VOL_MOUNTED)

        deletion_permitted = False

        archive_disk_name = ''
        if self.image_api.disk_exists(image_id, diskname):
            archive_disk_name = self.image_api.archive_disk(image_id, diskname)
            if archive_disk_name != False:
                deletion_permitted = True
        else:
            deletion_permitted = True
        if deletion_permitted:
            if vm.delete(archive_disk_name):
                if not self.host_api.host_release(host_id, vcpu, mem):
                    print('[delete_vm]', '释放宿主机资源失败')
                if not self.network_api.mac_release(mac, vm_uuid):
                    print('[delete_vm]', '释放IP地址失败')
                return True
        return False