Exemple #1
0
def tasklog(request, hostname):
    """
    Compute node related tasklog.
    """
    context = collect_view_data(request, 'node_list')
    context['node'] = node = get_node(request, hostname)
    context['nodes'] = (node, )
    context['submenu_auto'] = ''
    nss = node.nodestorage_set.all().extra(select={
        'strid': 'CAST(id AS text)'
    }).values_list('strid', flat=True)
    log_query = (
        (Q(content_type=ContentType.objects.get_for_model(node))
         & Q(object_pk=node.pk)) |
        (Q(content_type=ContentType.objects.get_for_model(NodeStorage))
         & Q(object_pk__in=nss)))
    log = get_tasklog(request,
                      context=context,
                      base_query=log_query,
                      filter_by_permissions=False)
    context['tasklog'] = context['pager'] = tasklog_items = get_pager(
        request, log, per_page=100)
    TaskLogEntry.prepare_queryset(tasklog_items)

    return render(request, 'gui/node/tasklog.html', context)
Exemple #2
0
def get_vm_snapshots(request, vm):
    """
    Return list of all snapshots and counts.
    """
    user_order_by, order_by = get_order_by(request,
                                           api_view=VmSnapshotList,
                                           db_default=('-id', ),
                                           user_default=('-created', ))
    snapshots = get_pager(request,
                          Snapshot.objects.select_related(
                              'vm',
                              'define').filter(vm=vm).order_by(*order_by),
                          per_page=50)

    return {
        'order_by':
        user_order_by,
        'pager':
        snapshots,
        'snapshots':
        snapshots,
        'snapshots_count':
        snapshots.paginator.count,
        'snapshots_count_manual':
        Snapshot.objects.filter(
            vm=vm, type=Snapshot.MANUAL).count(),  # TODO: check indexes
        'snapshots_count_auto':
        Snapshot.objects.filter(vm=vm, type=Snapshot.AUTO).count(),
    }
Exemple #3
0
def dc_subnet_ip_list(request, network, netmask, vlan_id):
    context = collect_view_data(request, 'dc_network_list')
    context['is_staff'] = request.user.is_staff

    try:
        context['ip_network'] = ip_network = Subnet.get_ip_network(network, netmask)  # Invalid IPv4 network
        context['vlan_id'] = int(vlan_id)
    except ValueError:
        raise Http404

    network, netmask = ip_network.with_netmask.split('/')
    context['netinfo'] = Subnet.get_ip_network_hostinfo(ip_network)
    nets = Subnet.objects.filter(network=network, netmask=netmask, vlan_id=vlan_id)
    context['num_networks'] = num_networks = nets.count()

    if not num_networks:
        raise Http404  # Invalid user input - made-up IPv4network

    context['order_by'], order_by = get_order_by(request, api_view=NetworkIPPlanView)
    ips = IPAddress.objects.select_related('vm', 'vm__dc', 'subnet')\
                           .prefetch_related('vms')\
                           .filter(subnet__in=nets)\
                           .order_by(*order_by).distinct()
    context['ips'] = context['pager'] = pager = get_pager(request, ips, per_page=50)
    context['total'] = pager.paginator.count
    context['free'] = ips.filter(usage=IPAddress.VM, vm__isnull=True, vms=None).count()

    return render(request, 'gui/dc/subnet_ip_list.html', context)
Exemple #4
0
def dc_domain_record_list(request):
    """
    List/filter DNS records for a DNS domain (domain parameter in querystring).
    """
    context = collect_view_data(request, 'dc_domain_list', dc_dns_only=True)
    context['is_staff'] = is_staff = request.user.is_staff
    qs = request.GET.copy()
    name = qs.get('flt-domain', None)
    context['all'] = _all = is_staff and request.GET.get(
        'all', request.GET.get('flt-all', False))
    qs['flt-all'] = '1' if _all else ''

    if not name:
        raise PermissionDenied

    context['domain'] = domain = get_domain(request, name)
    context['filters'] = filter_form = DnsRecordFilterForm(request,
                                                           qs,
                                                           _all=_all,
                                                           prefix='flt')
    context['qs'] = qs.urlencode()
    context['order_by'], order_by = get_order_by(request,
                                                 api_view=RecordView,
                                                 db_default=('-id', ),
                                                 user_default=('-id', ))
    records = domain.record_set.order_by(*order_by)

    if filter_form.is_valid() and filter_form.has_changed():
        q = filter_form.get_filters()

        if q:
            records = records.filter(q)

    context['records'] = context['pager'] = get_pager(request,
                                                      records,
                                                      per_page=50)
    context['form_record'] = DnsRecordForm(request,
                                           domain,
                                           None,
                                           initial={
                                               'prio': Record.PRIO,
                                               'ttl': Record.TTL,
                                               'type': Record.A,
                                               'id': 0,
                                               'disabled': False,
                                               'name': '.%s' % domain.name
                                           })
    context['form_records'] = MultiDnsRecordForm(request, domain, None)
    context['url_form_record'] = reverse('domain_record_form',
                                         name,
                                         query_string=qs)

    return render(request, 'gui/dc/domain_record_list.html', context)
Exemple #5
0
def index(request):
    """
    Display users tasklog.
    """
    context = collect_view_data(request, 'tasklog')

    tasklog = get_tasklog(request, context, form_cls=TaskLogFilterForm)
    context['tasklog'] = context['pager'] = tasklog_items = get_pager(
        request, tasklog, per_page=100)
    context['disable_cached_tasklog'] = True
    TaskLogEntry.prepare_queryset(tasklog_items)

    return render(request, 'gui/tasklog/tasklog.html', context)
Exemple #6
0
def get_vm_backups(request, vm):
    """
    Return QuerySet of all VM backups.
    """
    user_order_by, order_by = get_order_by(request, api_view=VmBackupList,
                                           db_default=('-id',), user_default=('-created',))
    bkps = get_pager(request, Backup.objects.select_related('node', 'vm', 'define').filter(vm=vm).order_by(*order_by),
                     per_page=50)

    return {
        'order_by': user_order_by,
        'pager': bkps,
        'backups': bkps,
        'backups_count': bkps.paginator.count,
    }
Exemple #7
0
def tasklog(request, hostname):
    """
    Page with server related tasklog.
    """
    context = collect_view_data(request, 'vm_list')
    context['vm'] = vm = get_vm(request, hostname)
    context['vms'] = (vm,)
    context['submenu_auto'] = ''
    context['vms_tag_filter_disabled'] = True
    log_query = Q(content_type=ContentType.objects.get_for_model(vm)) & Q(object_pk=vm.pk)
    log = get_tasklog(request, context, base_query=log_query)
    context['tasklog'] = context['pager'] = get_pager(request, log, per_page=100)
    context['can_edit'] = request.user.is_admin(request)

    view_vm_tasklog.send(sender='gui.vm.views.tasklog', request=request, context=context)
    return render(request, 'gui/vm/tasklog.html', context)
Exemple #8
0
def get_node_backups(request, queryset):
    """
    Return dict with backups attribute.
    """
    user_order_by, order_by = get_order_by(request,
                                           api_view=VmBackupList,
                                           db_default=('-id', ),
                                           user_default=('-created', ))
    bkps = get_pager(request, queryset.order_by(*order_by), per_page=50)

    return {
        'order_by':
        user_order_by,
        'pager':
        bkps,
        'backups':
        bkps,
        'backups_count':
        bkps.paginator.count,
        'backups_size':
        queryset.exclude(size__isnull=True).aggregate(
            Sum('size')).get('size__sum'),
    }
Exemple #9
0
def dc_network_ip_list(request, name):
    """
    List IP addresses in network.
    DC admin can only see server IP addresses of VMs used in current DC.
    SuperAdmin user is able to see all IP addresses, including not used and reserved for other devices.
    """
    context = collect_view_data(request, 'dc_network_list')
    context['is_staff'] = is_staff = request.user.is_staff
    net_filter = {'name': name}
    dc = request.dc

    if not is_staff:
        net_filter['dc'] = dc

    try:
        context['net'] = net = Subnet.objects.select_related('owner', 'dc_bound').get(**net_filter)
    except Subnet.DoesNotExist:
        raise Http404

    context['networks'] = Subnet.objects.filter(network=net.network, netmask=net.netmask, vlan_id=net.vlan_id).count()

    context['can_edit'] = can_edit = is_staff or (net.dc_bound and
                                                  request.user.has_permission(request, NetworkAdminPermission.name))
    context['all'] = _all = can_edit and request.GET.get('all', False)
    qs = get_query_string(request, all=_all, used=can_edit)
    qs['ips'] = 1
    context['qs'] = qs.urlencode()
    ips_used = Q(usage__in=[IPAddress.VM, IPAddress.VM_REAL])
    ips_vm = (Q(vm__isnull=False) | ~Q(vms=None))
    ips_vm_dc = (Q(vm__dc=dc) | Q(vms__dc=dc))

    if can_edit:
        if is_staff:
            ips_other = Q(usage__in=[IPAddress.OTHER, IPAddress.NODE])
        else:
            ips_other = Q(usage=IPAddress.OTHER)

        ips_node = Q(usage=IPAddress.NODE)
        ip_filter = [Q(subnet=net)]
        context['used'] = used = bool(request.GET.get('used', False))

        if _all:
            if used:
                ip_filter.append((ips_used & ips_vm) | ips_other)
            elif not is_staff:
                ip_filter.append(~ips_node)
        else:
            if used:
                ip_filter.append((ips_used & ips_vm & ips_vm_dc) | ips_other)
            else:
                ip_filter.append(ips_vm_dc)

        context['netinfo'] = netinfo = net.ip_network_hostinfo
        context['form_ip'] = NetworkIPForm(request, net, None, initial={'usage': IPAddress.VM, 'count': 1,
                                                                        'ip': netinfo['min']})
        context['form_ips'] = MultiNetworkIPForm(request, net, None)
        context['form_admin'] = AdminNetworkForm(request, None, prefix='adm', initial=net.web_data_admin)
        context['url_form_admin'] = reverse('admin_network_form', query_string=qs)
        context['url_form_ip'] = reverse('network_ip_form', name, query_string=qs)
        context['colspan'] = 8
        # Complex query according to user filter
        ip_filter = reduce(and_, ip_filter)

    else:
        context['colspan'] = 6
        # No manual filtering - we have to display only DC related objects and only VMs have a DC relationship
        ip_filter = Q(subnet=net) & ips_vm_dc & ips_used & ips_vm

    context['order_by'], order_by = get_order_by(request, api_view=NetworkIPView, db_default=('ip',))
    ips = IPAddress.objects.select_related('vm', 'vm__dc', 'subnet')\
                           .prefetch_related('vms')\
                           .filter(ip_filter)\
                           .order_by(*order_by).distinct()
    context['ips'] = context['pager'] = pager = get_pager(request, ips, per_page=50)
    context['free'] = net.ipaddress_set.filter(usage=IPAddress.VM, vm__isnull=True, vms=None).count()

    if can_edit:
        context['total'] = net.ipaddress_set.count()
    else:
        context['total'] = pager.paginator.count + context['free']

    return render(request, 'gui/dc/network_ip_list.html', context)