diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index 0b36d37f0..7ffe92984 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -85,6 +85,7 @@ class VirtualMachineSerializer(NetBoxModelSerializer): # Counter fields interface_count = serializers.IntegerField(read_only=True) virtual_disk_count = serializers.IntegerField(read_only=True) + virtual_disk_size = serializers.IntegerField(read_only=True) class Meta: model = VirtualMachine @@ -92,7 +93,7 @@ class VirtualMachineSerializer(NetBoxModelSerializer): 'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'config_template', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated', - 'interface_count', 'virtual_disk_count', + 'interface_count', 'virtual_disk_count', 'virtual_disk_size', ] validators = [] @@ -105,7 +106,7 @@ class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer): 'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated', - 'interface_count', 'virtual_disk_count', + 'interface_count', 'virtual_disk_count', 'virtual_disk_size', ] @extend_schema_field(serializers.JSONField(allow_null=True)) diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index df106774c..ff6932f54 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -1,6 +1,7 @@ from rest_framework.routers import APIRootView from dcim.models import Device +from django.db.models import Sum from extras.api.mixins import ConfigContextQuerySetMixin from netbox.api.viewsets import NetBoxModelViewSet from utilities.utils import count_related @@ -53,7 +54,9 @@ class ClusterViewSet(NetBoxModelViewSet): # class VirtualMachineViewSet(ConfigContextQuerySetMixin, NetBoxModelViewSet): - queryset = VirtualMachine.objects.prefetch_related( + queryset = VirtualMachine.objects.annotate( + virtual_disk_size=Sum('virtualdisks__size') + ).prefetch_related( 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'tags' ) filterset_class = filtersets.VirtualMachineFilterSet