8356 add total virtual disk size to api

This commit is contained in:
Arthur 2023-10-24 09:27:39 -07:00
parent b82647dc74
commit d75fd03488
2 changed files with 7 additions and 3 deletions

View File

@ -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))

View File

@ -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