def get_quota_list(args): # if not args['req_user'].is_superuser: # return {'res': False, 'err': ERR_AUTH_PERM} group_id = 'group_id' in args and args['group_id'] group = GroupAPI().get_group_by_id(group_id) if not group.managed_by(args['req_user']): return {'res': False, 'err': ERR_AUTH_PERM} api = VolumeAPI() quota_list = api.quota.get_quota_list_by_group_id(group_id=group_id) ret_list = [] for q in quota_list: ret_list.append({ 'id': q['id'], 'group_id': q['group_id'], 'cephpool_id': q['cephpool_id'], 'total_g': q['total_g'], 'volume_g': q['volume_g'] }) return {'res': True, 'list': ret_list}
def _get_pool_list_by_group_id(args): '''获取指定计算集群(group)可使用的ceph资源池列表,即根据group可用的quota进行筛选''' ret_list = [] storage_api = StorageAPI() center_api = CenterAPI() volume_api = VolumeAPI() group_id = 'group_id' in args and args['group_id'] print(group_id) group = GroupAPI().get_group_by_id(group_id) if not group.managed_by(args['req_user']): return {'res': False, 'err': ERR_AUTH_PERM} quota_list = volume_api.quota.get_quota_list_by_group_id(group_id=group_id) print(quota_list) pool_list = [] for q in quota_list: if not q['cephpool_id']: continue try: pool = storage_api.get_pool_by_id(q['cephpool_id']) pool_list.append(pool) except Exception as e: print(e) for pool in pool_list: ret_list.append({ 'id': pool.id, 'pool': pool.pool, 'type': pool.type, 'center_id': pool.center_id, 'host': pool.host, 'port': pool.port, 'uuid': pool.uuid }) return {'res': True, 'list': ret_list}
def create(args): # TODO: 乱 backend = 'CEPH' #args.get('backend', 'CEPH') host_id = args.get('host_id') size = args.get('size') req_user = args['req_user'] pool_id = args.get('pool_id') storage_api = get_storage_api(backend) api = VolumeAPI(storage_api=storage_api) res = True err = '' if backend == 'CEPH': group_id = args.get('group_id') group = GroupAPI().get_group_by_id(group_id) if not group.managed_by(req_user): err = '无权限操作' res = False if pool_id: pool = storage_api.get_pool_by_id(pool_id) else: pool = storage_api.get_volume_pool_by_center_id(group.center_id) # elif backend == 'GFS': # host = HostAPI().get_host_by_id(host_id) # if not host.managed_by(req_user): # err = '无权限操作' # res = False # group_id = host.group_id # # TODO: bad # from storage.models import CephHost, CephPool # h = CephHost.objects.filter(host=host.ipv4).first() # p = CephPool.objects.filter(host=h).first() # if p: # pool = storage_api.get_pool_by_id(p.id) # else: # err = '宿主机无存储资源池' # res = False else: err = '存储后端参数有误' res = False if res: # if not api.quota.group_quota_validate(group_id, size): # err = '集群存储用量达到上限' # res = False if not api.quota.group_pool_quota_validate(group_id, pool.id, size): err = '集群在存储卷上的存储用量达到上限' res = False # if not api.quota.volume_quota_validate(group_id, size): # err = '超过单个云硬盘最大容量限制' # res = False if not api.quota.volume_pool_quota_validate(group_id, pool.id, size): err = '超过存储卷允许的单个云硬盘最大容量限制' res = False if res: volume_id = api.create(pool.id, size, group_id) api.set_user_id(volume_id, args['req_user'].id) return {'res': True, 'volume_id': volume_id} return {'res': False, 'err': err}