diff --git a/netbox/templates/virtualization/virtualdisk.html b/netbox/templates/virtualization/virtualdisk.html index 222e97146..413491085 100644 --- a/netbox/templates/virtualization/virtualdisk.html +++ b/netbox/templates/virtualization/virtualdisk.html @@ -7,9 +7,7 @@ {% block breadcrumbs %} {{ block.super }} {% endblock %} diff --git a/netbox/templates/virtualization/virtualmachine.html b/netbox/templates/virtualization/virtualmachine.html index 27f5ea114..86d4dfba0 100644 --- a/netbox/templates/virtualization/virtualmachine.html +++ b/netbox/templates/virtualization/virtualmachine.html @@ -139,7 +139,7 @@ - {% trans "Disk Space" %} + {% trans "Disk Space (deprecated)" %} {% if object.disk %} {{ object.disk }} {% trans "GB" context "Abbreviation for gigabyte" %} @@ -148,6 +148,16 @@ {% endif %} + + {% trans "Virtual Disk Space" %} + + {% if object.disk_size %} + {{ object.disk_size }} {% trans "GB" context "Abbreviation for gigabyte" %} + {% else %} + {{ ''|placeholder }} + {% endif %} + + diff --git a/netbox/virtualization/models/virtualmachines.py b/netbox/virtualization/models/virtualmachines.py index 0fdddf9be..c264bb2db 100644 --- a/netbox/virtualization/models/virtualmachines.py +++ b/netbox/virtualization/models/virtualmachines.py @@ -124,7 +124,8 @@ class VirtualMachine(ContactsMixin, RenderConfigMixin, ConfigContextModel, Prima disk = models.PositiveIntegerField( blank=True, null=True, - verbose_name=_('disk (GB)') + verbose_name=_('disk (GB)'), + help_text=_('deprecated - use Virtual Disks') ) # Counter fields diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index a9c815e10..caf22369d 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -93,16 +93,19 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable) verbose_name=_('Config Template'), linkify=True ) + disk_size = tables.Column( + verbose_name=_('Disk Size (GB)'), + ) class Meta(NetBoxTable.Meta): model = VirtualMachine fields = ( 'pk', 'id', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'tenant_group', 'platform', - 'vcpus', 'memory', 'disk', 'primary_ip4', 'primary_ip6', 'primary_ip', 'description', 'comments', + 'vcpus', 'memory', 'disk', 'disk_size', 'primary_ip4', 'primary_ip6', 'primary_ip', 'description', 'comments', 'config_template', 'contacts', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'status', 'site', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip', + 'pk', 'name', 'status', 'site', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk_size', 'primary_ip', ) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 4d12dcdd1..f7f7612e9 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -3,7 +3,7 @@ from collections import defaultdict from django.contrib import messages from django.db import transaction -from django.db.models import Prefetch, Sum +from django.db.models import F, Prefetch, Sum from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse @@ -341,7 +341,8 @@ class ClusterContactsView(ObjectContactsView): # class VirtualMachineListView(generic.ObjectListView): - queryset = VirtualMachine.objects.prefetch_related('primary_ip4', 'primary_ip6') + queryset = VirtualMachine.objects.annotate( + disk_size=Sum('virtualdisks__size')).prefetch_related('primary_ip4', 'primary_ip6') filterset = filtersets.VirtualMachineFilterSet filterset_form = forms.VirtualMachineFilterForm table = tables.VirtualMachineTable @@ -350,7 +351,8 @@ class VirtualMachineListView(generic.ObjectListView): @register_model_view(VirtualMachine) class VirtualMachineView(generic.ObjectView): - queryset = VirtualMachine.objects.all() + queryset = VirtualMachine.objects.all().annotate( + disk_size=Sum('virtualdisks__size')) @register_model_view(VirtualMachine, 'interfaces')