Sfoglia il codice sorgente

12596 Add Allocated Resources to Cluster API (#17956)

* 12596 Add Allocated Resources to Cluster API

* 12596 Add Allocated Resources to Cluster API

* 12596 Add Allocated Resources to Cluster API

* 12596 Add Allocated Resources to Cluster API

* 12596 review changes

* 12596 review changes
Arthur Hanson 1 anno fa
parent
commit
75aeaab8ee

+ 9 - 1
netbox/virtualization/api/serializers_/clusters.py

@@ -59,6 +59,14 @@ class ClusterSerializer(NetBoxModelSerializer):
     )
     )
     scope_id = serializers.IntegerField(allow_null=True, required=False, default=None)
     scope_id = serializers.IntegerField(allow_null=True, required=False, default=None)
     scope = serializers.SerializerMethodField(read_only=True)
     scope = serializers.SerializerMethodField(read_only=True)
+    allocated_vcpus = serializers.DecimalField(
+        read_only=True,
+        max_digits=8,
+        decimal_places=2,
+
+    )
+    allocated_memory = serializers.IntegerField(read_only=True)
+    allocated_disk = serializers.IntegerField(read_only=True)
 
 
     # Related object counts
     # Related object counts
     device_count = RelatedObjectCountField('devices')
     device_count = RelatedObjectCountField('devices')
@@ -69,7 +77,7 @@ class ClusterSerializer(NetBoxModelSerializer):
         fields = [
         fields = [
             'id', 'url', 'display_url', 'display', 'name', 'type', 'group', 'status', 'tenant', 'scope_type', 'scope_id', 'scope',
             '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',
             'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'device_count',
-            'virtualmachine_count',
+            'virtualmachine_count', 'allocated_vcpus', 'allocated_memory', 'allocated_disk'
         ]
         ]
         brief_fields = ('id', 'url', 'display', 'name', 'description', 'virtualmachine_count')
         brief_fields = ('id', 'url', 'display', 'name', 'description', 'virtualmachine_count')
 
 

+ 6 - 1
netbox/virtualization/api/views.py

@@ -1,3 +1,4 @@
+from django.db.models import Sum
 from rest_framework.routers import APIRootView
 from rest_framework.routers import APIRootView
 
 
 from extras.api.mixins import ConfigContextQuerySetMixin, RenderConfigMixin
 from extras.api.mixins import ConfigContextQuerySetMixin, RenderConfigMixin
@@ -33,7 +34,11 @@ class ClusterGroupViewSet(NetBoxModelViewSet):
 
 
 
 
 class ClusterViewSet(NetBoxModelViewSet):
 class ClusterViewSet(NetBoxModelViewSet):
-    queryset = Cluster.objects.all()
+    queryset = Cluster.objects.prefetch_related('virtual_machines').annotate(
+        allocated_vcpus=Sum('virtual_machines__vcpus'),
+        allocated_memory=Sum('virtual_machines__memory'),
+        allocated_disk=Sum('virtual_machines__disk'),
+    )
     serializer_class = serializers.ClusterSerializer
     serializer_class = serializers.ClusterSerializer
     filterset_class = filtersets.ClusterFilterSet
     filterset_class = filtersets.ClusterFilterSet