diff --git a/netbox/netbox/utils.py b/netbox/netbox/utils.py
index f27d1b5f7..27f67744b 100644
--- a/netbox/netbox/utils.py
+++ b/netbox/netbox/utils.py
@@ -24,3 +24,21 @@ def register_data_backend():
return cls
return _wrapper
+
+
+def convert_byte_size(value, unit="mega"):
+ """
+ Convert a size value to unit.
+ """
+ factors = {
+ "kilo": 1024,
+ "mega": 1024 ** 2,
+ "giga": 1024 ** 3,
+ "tera": 1024 ** 4,
+ }
+ if value:
+ if len(str(value)) < 6:
+ return value
+ value_converted = float(value) / factors[unit]
+ return value_converted
+ return 0
diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html
index 264a275e9..d74ead0fa 100644
--- a/netbox/templates/virtualization/cluster.html
+++ b/netbox/templates/virtualization/cluster.html
@@ -59,9 +59,9 @@
{% trans "Memory" %} |
{% if memory_sum %}
- {{ memory_sum|humanize_megabytes }}
+ {{ memory_sum }} {% trans "MB" context "Abbreviation for megabyte" %}
{% else %}
- {{ ''|placeholder }}
+ {{ ''|placeholder }}
{% endif %}
|
diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py
index 1ddd2c92d..775561e95 100644
--- a/netbox/virtualization/views.py
+++ b/netbox/virtualization/views.py
@@ -16,6 +16,7 @@ from extras.views import ObjectConfigContextView
from ipam.models import IPAddress
from ipam.tables import InterfaceVLANTable
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
+from netbox.utils import convert_byte_size
from netbox.views import generic
from tenancy.views import ObjectContactsView
from utilities.query import count_related
@@ -172,7 +173,17 @@ 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'))
+ vm_memory = [convert_byte_size(item.memory, 'mega') for item in instance.virtual_machines.all() if item.memory]
+ vm_disk = [convert_byte_size(item.disk, 'giga') for item in instance.virtual_machines.all() if item.disk]
+
+ memory_sum = sum(vm_memory)
+ disk_sum = sum(vm_disk)
+
+ extra_content = instance.virtual_machines.aggregate(vcpus_sum=Sum('vcpus'))
+ extra_content['memory_sum'] = f"{memory_sum:.0f}"
+ extra_content['disk_sum'] = f"{disk_sum:.0f}"
+
+ return extra_content
@register_model_view(Cluster, 'virtualmachines', path='virtual-machines')