Example #1
0
def volume_mount_ceph_ajax(req):
    vm_uuid = req.POST.get('vm_uuid', None)
    volume_id = req.POST.get('volume_id', None)
    volume = _get_volume_by_id(req.user, volume_id)
    dicts = {}
    dicts['res'] = False
    if not volume:
        dicts['alert_msg'] = '参数错误'
    else:
        if volume['vm']:
            dicts['alert_msg'] = '云硬盘已挂载'
        else:
            res = api_volume_mount({
                'req_user': req.user,
                'vm_uuid': vm_uuid,
                'volume_id': volume_id
            })
            if res['res']:
                dicts['res'] = True
                dicts['alert_msg'] = '挂载成功!'
            elif res['err'] in ERROR_CN:
                dicts['alert_msg'] = ERROR_CN[res['err']]
            else:
                dicts['alert_msg'] = '挂载失败'
    return HttpResponse(json.dumps(dicts), content_type='application/json')
Example #2
0
def volume_vm_create_view(req):
    vmid = req.GET.get('vmid')
    obj_res = api_vm_get({'req_user': req.user, 'uuid': vmid})
    if obj_res['res']:
        obj = obj_res['info']
    else:
        return HttpResponseRedirect('/vmadmin/vm/list/')

    dicts = {}
    if req.method == 'POST':
        size = req.POST.get('size', None)
        group_id = obj['group_id']
        backend = req.POST.get('backend', 'GFS')
        remarks = req.POST.get('remarks', None)
        if not size or not size.isdigit() or float(size) <= 0:
            dicts['alert_msg'] = '参数错误'
        size = int(float(size) * 1024)
        res = api_volume_create({
            'req_user': req.user,
            'host_id': obj['host_id'],
            'group_id': int(group_id),
            'size': size,
            'backend': backend
        })

        if res['res']:
            mount_res = api_volume_mount({
                'req_user': req.user,
                'vm_uuid': vmid,
                'volume_id': res['volume_id']
            })
            if not mount_res['res']:
                messages.error(
                    req,
                    '挂载失败:' + ERROR_CN.get(mount_res['err'], mount_res['err']))
            return HttpResponseRedirect('/vmadmin/vm/list/')
        else:
            if res['err'] in ERROR_CN:
                dicts['alert_msg'] = ERROR_CN[res['err']]
            else:
                dicts['alert_msg'] = res['err']

    dicts['vmobj'] = obj

    return render(req, 'vmadmin_volume_vm_create.html', dicts)
Example #3
0
def volume_mount_ceph_view(req):
    dicts = {}
    if req.method == 'POST':
        print(req.POST)
        vm_uuid = req.POST.get('vm_uuid', None)
        volume_id = req.POST.get('volume_id', None)
        volume = _get_volume_by_id(req.user, volume_id)
        if not volume:
            dicts['alert_msg'] = '参数错误'
        else:
            if volume['vm']:
                dicts['alert_msg'] = '云硬盘已挂载'
            else:
                res = api_volume_mount({'req_user': req.user, 'vm_uuid':vm_uuid, 'volume_id':volume_id})
                if res['res']:
                    dicts['alert_msg'] = '挂载成功!'
                elif res['err'] in ERROR_CN:
                    dicts['alert_msg'] = ERROR_CN[res['err']]
                else:
                    dicts['alert_msg'] = '挂载失败'

    volume_id = req.GET.get('volume_id', None)
    vm_id = req.GET.get('vm_id', None)
    volume = None
    vm = None
    
    if volume_id != None:
        volume = _get_volume_by_id(req.user, volume_id)
    if vm_id != None:
        vm = _get_vm_by_id(req.user, vm_id)

    volume_list = []
    vm_list = []
    if vm:
        volume_list_info = api_volume_get_list({'req_user': req.user, 'group_id': vm['group_id']})
        if volume_list_info['res']:
            for vol in volume_list_info['list']:
                if not vol['enable']:
                    continue
                if vol['group_id'] != vm['group_id']:
                    continue
                if vol['vm']:
                    continue
                if req.user.is_superuser or vol['user_name'] == req.user.username:
                    volume_list.append(vol)
        # cephpool_list = _get_cephpool_list_by_center_id(req.user, vm['center_id'])
        # for cephpool in cephpool_list:
        #     volume_list_info = api_volume_get_list({'req_user': req.user, 'cephpool_id': cephpool['id']})
        #     if volume_list_info['res']:
        #         volume_list += volume_list_info['list']
        mounted_volume_list_info = api_volume_get_list({'req_user': req.user, 'vm_uuid':vm['uuid']})
        if mounted_volume_list_info['res']:
            vm['volumes'] = mounted_volume_list_info['list']
    elif volume:
        vm_list_info = api_vm_get_list({'req_user': req.user, 'group_id': volume['group_id']})
        if vm_list_info['res']:
            if req.user.is_superuser:
                vm_list += vm_list_info['list']
            else:
                for vm_info in vm_list_info['list']:
                    if vm_info['creator'] == req.user.username:
                        vm_list.append(vm_info)

        # volume_cephpool_info = api_ceph_get({'req_user': req.user, 'cephpool_id': volume['cephpool_id']})
        # if volume_cephpool_info['res']:
        #     group_list_info = api_group_get_list({'req_user': req.user, 'center_id': volume_cephpool_info['info']['center_id']})
        #     if group_list_info['res']:
        #         for group in group_list_info['list']:
        #             vm_list_info = api_vm_get_list({'req_user': req.user, 'group_id': group['id']})
        #             if vm_list_info['res']:
        #                 if req.user.is_superuser:
        #                     vm_list += vm_list_info['list']
        #                 else:
        #                     for vm_info in vm_list_info['list']:
        #                         if vm_info['creator'] == req.user.username:
        #                             vm_list.append(vm_info)
    
    dicts['volume'] = volume
    dicts['vm'] = vm
    dicts['volume_list'] = volume_list
    dicts['vm_list'] = vm_list

    if volume and volume['enable'] == False:
        dicts['alert_msg'] = '该设备不可用'

    return render_to_response('vmadmin_volume_mount_ceph.html', dicts, context_instance=RequestContext(req))  
Example #4
0
def volume_mount_ceph_view(req):
    dicts = {}
    if req.method == 'POST':
        print(req.POST)
        vm_uuid = req.POST.get('vm_uuid', None)
        volume_id = req.POST.get('volume_id', None)
        volume = _get_volume_by_id(req.user, volume_id)
        if not volume:
            dicts['alert_msg'] = '参数错误'
        else:
            if volume['vm']:
                dicts['alert_msg'] = '云硬盘已挂载'
            else:
                res = api_volume_mount({
                    'req_user': req.user,
                    'vm_uuid': vm_uuid,
                    'volume_id': volume_id
                })
                if res['res']:
                    dicts['alert_msg'] = '挂载成功!'
                elif res['err'] in ERROR_CN:
                    dicts['alert_msg'] = ERROR_CN[res['err']]
                else:
                    dicts['alert_msg'] = '挂载失败'

    volume_id = req.GET.get('volume_id', None)
    vm_id = req.GET.get('vm_id', None)
    volume = None
    vm = None

    if volume_id != None:
        volume = _get_volume_by_id(req.user, volume_id)
    if vm_id != None:
        vm = _get_vm_by_id(req.user, vm_id)

    volume_list = []
    vm_list = []
    if vm:
        volume_list_info = api_volume_get_list({
            'req_user': req.user,
            'group_id': vm['group_id']
        })
        if volume_list_info['res']:
            for vol in volume_list_info['list']:
                if not vol['enable']:
                    continue
                if vol['group_id'] != vm['group_id']:
                    continue
                if vol['vm']:
                    continue
                if req.user.is_superuser or vol[
                        'user_name'] == req.user.username:
                    volume_list.append(vol)
        # cephpool_list = _get_cephpool_list_by_center_id(req.user, vm['center_id'])
        # for cephpool in cephpool_list:
        #     volume_list_info = api_volume_get_list({'req_user': req.user, 'cephpool_id': cephpool['id']})
        #     if volume_list_info['res']:
        #         volume_list += volume_list_info['list']
        mounted_volume_list_info = api_volume_get_list({
            'req_user': req.user,
            'vm_uuid': vm['uuid']
        })
        if mounted_volume_list_info['res']:
            vm['volumes'] = mounted_volume_list_info['list']
    elif volume:
        vm_list_info = api_vm_get_list({
            'req_user': req.user,
            'group_id': volume['group_id']
        })
        if vm_list_info['res']:
            if req.user.is_superuser:
                vm_list += vm_list_info['list']
            else:
                for vm_info in vm_list_info['list']:
                    if vm_info['creator'] == req.user.username:
                        vm_list.append(vm_info)

        # volume_cephpool_info = api_ceph_get({'req_user': req.user, 'cephpool_id': volume['cephpool_id']})
        # if volume_cephpool_info['res']:
        #     group_list_info = api_group_get_list({'req_user': req.user, 'center_id': volume_cephpool_info['info']['center_id']})
        #     if group_list_info['res']:
        #         for group in group_list_info['list']:
        #             vm_list_info = api_vm_get_list({'req_user': req.user, 'group_id': group['id']})
        #             if vm_list_info['res']:
        #                 if req.user.is_superuser:
        #                     vm_list += vm_list_info['list']
        #                 else:
        #                     for vm_info in vm_list_info['list']:
        #                         if vm_info['creator'] == req.user.username:
        #                             vm_list.append(vm_info)

    dicts['volume'] = volume
    dicts['vm'] = vm
    dicts['volume_list'] = volume_list
    dicts['vm_list'] = vm_list

    if volume and volume['enable'] == False:
        dicts['alert_msg'] = '该设备不可用'

    return render_to_response('vmadmin_volume_mount_ceph.html',
                              dicts,
                              context_instance=RequestContext(req))
Example #5
0
def volume_mount_ceph_view(req):
    dicts = {}
    if req.method == 'POST':
        print(req.POST)
        vm_uuid = req.POST.get('vm_uuid', None)
        volume_id = req.POST.get('volume_id', None)
        volume = _get_volume_by_id(req.user, volume_id)
        if not volume:
            dicts['alert_msg'] = '参数错误'
        else:
            if volume['vm']:
                dicts['alert_msg'] = '云硬盘已挂载'
            else:
                res = api_volume_mount({
                    'req_user': req.user,
                    'vm_uuid': vm_uuid,
                    'volume_id': volume_id
                })
                if res['res']:
                    dicts['alert_msg'] = '挂载成功!'
                elif res['err'] in ERROR_CN:
                    dicts['alert_msg'] = ERROR_CN[res['err']]
                else:
                    dicts['alert_msg'] = '挂载失败'

    volume_id = req.GET.get('volume_id', None)
    vm_id = req.GET.get('vm_id', None)
    volume = None
    vm = None

    if volume_id != None:
        volume = _get_volume_by_id(req.user, volume_id)
    if vm_id != None:
        vm = _get_vm_by_id(req.user, vm_id)

    volume_list = []
    vm_list = []
    if vm:
        template = 'vmadmin_volume_mount_ceph.html'
        volume_list_info = api_volume_get_list({
            'req_user': req.user,
            'group_id': vm['group_id']
        })
        if volume_list_info['res']:
            for vol in volume_list_info['list']:
                if not vol['enable']:
                    continue
                if vol['group_id'] != vm['group_id']:
                    continue
                if vol['vm']:
                    continue
                if req.user.is_superuser or vol[
                        'user_name'] == req.user.username:
                    volume_list.append(vol)
        # cephpool_list = _get_cephpool_list_by_center_id(req.user, vm['center_id'])
        # for cephpool in cephpool_list:
        #     volume_list_info = api_volume_get_list({'req_user': req.user, 'cephpool_id': cephpool['id']})
        #     if volume_list_info['res']:
        #         volume_list += volume_list_info['list']
        mounted_volume_list_info = api_volume_get_list({
            'req_user': req.user,
            'vm_uuid': vm['uuid']
        })
        if mounted_volume_list_info['res']:
            vm['volumes'] = mounted_volume_list_info['list']
    elif volume:
        template = 'vmadmin_volume_mount_to_vm.html'
        vm_list_info = api_vm_get_list({
            'req_user': req.user,
            'group_id': volume['group_id']
        })
        if vm_list_info['res']:
            if req.user.is_superuser:
                vm_list += vm_list_info['list']
            else:
                for vm_info in vm_list_info['list']:
                    if vm_info['creator'] == req.user.username:
                        vm_list.append(vm_info)
    else:
        raise Http404()

    def attach_mounted_volumes(vm_info):
        mounted_volume_info = api_volume_get_list({
            'req_user': req.user,
            'vm_uuid': vm_info['uuid']
        })
        if mounted_volume_info['res']:
            vm_info['volumes'] = mounted_volume_info['list']
        return vm_info

    vm_list = filter(attach_mounted_volumes, vm_list)

    dicts['volume'] = volume
    dicts['vm'] = vm
    dicts['volume_list'] = volume_list
    dicts['vm_list'] = vm_list

    if volume and volume['enable'] == False:
        dicts['alert_msg'] = '该设备不可用'

    return render(req, template, dicts)