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}
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}
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}
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}
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}
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}
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 } }
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