From 2ac38e3d326b5a82b10ea3dca1b28c24d6297c6a Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Thu, 7 Nov 2024 10:08:47 -0800 Subject: [PATCH] 12596 Add Allocated Resources to Cluster API --- netbox/virtualization/api/serializers_/clusters.py | 8 +++++++- netbox/virtualization/api/views.py | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/netbox/virtualization/api/serializers_/clusters.py b/netbox/virtualization/api/serializers_/clusters.py index 101a5b5a3..8f48f016d 100644 --- a/netbox/virtualization/api/serializers_/clusters.py +++ b/netbox/virtualization/api/serializers_/clusters.py @@ -59,6 +59,12 @@ class ClusterSerializer(NetBoxModelSerializer): ) scope_id = serializers.IntegerField(allow_null=True, required=False, default=None) scope = serializers.SerializerMethodField(read_only=True) + allocated_virtual_cpus = serializers.DecimalField( + max_digits=8, + decimal_places=2, + ) + allocated_memory = serializers.IntegerField() + allocated_disk_space = serializers.IntegerField() # Related object counts device_count = RelatedObjectCountField('devices') @@ -69,7 +75,7 @@ class ClusterSerializer(NetBoxModelSerializer): fields = [ 'id', 'url', 'display_url', 'display', 'name', 'type', 'group', 'status', 'tenant', 'scope_type', 'scope_id', 'scope', 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'device_count', - 'virtualmachine_count', + 'virtualmachine_count', 'allocated_virtual_cpus', 'allocated_memory', 'allocated_disk_space' ] brief_fields = ('id', 'url', 'display', 'name', 'description', 'virtualmachine_count') diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index fdf1d71be..37cacf056 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -1,3 +1,4 @@ +from django.db.models import Sum from rest_framework.routers import APIRootView from extras.api.mixins import ConfigContextQuerySetMixin, RenderConfigMixin @@ -33,11 +34,10 @@ class ClusterGroupViewSet(NetBoxModelViewSet): class ClusterViewSet(NetBoxModelViewSet): - queryset = Cluster.objects.all() + queryset = Cluster.objects.prefetch_related('virtual_machines').annotate(allocated_virtual_cpus=Sum('virtual_machines__vcpus'), allocated_memory=Sum('virtual_machines__memory'), allocated_disk_space=Sum('virtual_machines__disk')) serializer_class = serializers.ClusterSerializer filterset_class = filtersets.ClusterFilterSet - # # Virtual machines #