diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html
index 510c5a48e..5f34a82c5 100644
--- a/netbox/templates/virtualization/cluster.html
+++ b/netbox/templates/virtualization/cluster.html
@@ -55,6 +55,37 @@
{% plugin_left_page object %}
+
+
+
+
+
+ Virtual CPUs |
+ {{ vcpus_sum|placeholder }} |
+
+
+ Memory |
+
+ {% if memory_sum %}
+ {{ memory_sum|humanize_megabytes }}
+ {% else %}
+ {{ ''|placeholder }}
+ {% endif %}
+ |
+
+
+ Disk Space |
+
+ {% if disk_sum %}
+ {{ disk_sum }} GB
+ {% else %}
+ {{ ''|placeholder }}
+ {% endif %}
+ |
+
+
+
+
{% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %}
{% include 'inc/panels/contacts.html' %}
diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py
index b97b966b4..af130fcce 100644
--- a/netbox/virtualization/views.py
+++ b/netbox/virtualization/views.py
@@ -1,6 +1,6 @@
from django.contrib import messages
from django.db import transaction
-from django.db.models import Prefetch
+from django.db.models import Prefetch, Sum
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils.translation import gettext as _
@@ -169,6 +169,9 @@ class ClusterListView(generic.ObjectListView):
class ClusterView(generic.ObjectView):
queryset = Cluster.objects.all()
+ def get_extra_context(self, request, instance):
+ return instance.virtual_machines.aggregate(vcpus_sum=Sum('vcpus'), memory_sum=Sum('memory'), disk_sum=Sum('disk'))
+
@register_model_view(Cluster, 'virtualmachines', path='virtual-machines')
class ClusterVirtualMachinesView(generic.ObjectChildrenView):