diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 7b8ea1ed3..7a2ea50ba 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -506,6 +506,9 @@ class BaseInterfaceTable(NetBoxTable): verbose_name='Tagged VLANs' ) + def value_ip_addresses(self, value): + return ",".join([str(obj.address) for obj in value.all()]) + class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpointTable): device = tables.Column( diff --git a/netbox/ipam/tables/fhrp.py b/netbox/ipam/tables/fhrp.py index 89aa16e65..7d7b03bb8 100644 --- a/netbox/ipam/tables/fhrp.py +++ b/netbox/ipam/tables/fhrp.py @@ -33,6 +33,9 @@ class FHRPGroupTable(NetBoxTable): url_name='ipam:fhrpgroup_list' ) + def value_ip_addresses(self, value): + return ",".join([str(obj.address) for obj in value.all()]) + class Meta(NetBoxTable.Meta): model = FHRPGroup fields = ( 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 %}
+
+
Allocated Resources
+
+ + + + + + + + + + + + + +
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):