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)
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(), }
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)
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)
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)
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, }
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)
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'), }
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)