From 3b0ab78a99a2f340d366981a1eb780dcf026c721 Mon Sep 17 00:00:00 2001 From: Julio-Oliveira-Encora Date: Tue, 23 Apr 2024 10:36:21 -0300 Subject: [PATCH 1/3] Added devices instances column for config templates. --- netbox/extras/tables/tables.py | 9 +++++++-- netbox/extras/views.py | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 8482c5e24a9..8656349cfe9 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -414,15 +414,20 @@ class ConfigTemplateTable(NetBoxTable): tags = columns.TagColumn( url_name='extras:configtemplate_list' ) + instance_count = columns.LinkedCountColumn( + viewname='dcim:device_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Instances') + ) class Meta(NetBoxTable.Meta): model = ConfigTemplate fields = ( 'pk', 'id', 'name', 'description', 'data_source', 'data_file', 'data_synced', 'created', 'last_updated', - 'tags', + 'tags', 'instance_count', ) default_columns = ( - 'pk', 'name', 'description', 'is_synced', + 'pk', 'name', 'description', 'is_synced', 'instance_count' ) diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 2bf5f349bdf..75ff4f0531c 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -13,6 +13,7 @@ from core.forms import ManagedFileForm from core.models import Job from core.tables import JobTable +from dcim.models import Device from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm from extras.dashboard.utils import get_widget_class from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -624,7 +625,9 @@ def get_extra_context(self, request, instance): # class ConfigTemplateListView(generic.ObjectListView): - queryset = ConfigTemplate.objects.all() + queryset = ConfigTemplate.objects.annotate( + instance_count=count_related(Device, 'config_template') + ) filterset = filtersets.ConfigTemplateFilterSet filterset_form = forms.ConfigTemplateFilterForm table = tables.ConfigTemplateTable From 5148d4f3981539f7c6b613d6a28d2df947aaea15 Mon Sep 17 00:00:00 2001 From: Julio-Oliveira-Encora Date: Tue, 23 Apr 2024 12:06:57 -0300 Subject: [PATCH 2/3] Added devices instances column for config templates. --- netbox/extras/tables/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 8656349cfe9..b707f495997 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -417,7 +417,7 @@ class ConfigTemplateTable(NetBoxTable): instance_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'config_template_id': 'pk'}, - verbose_name=_('Instances') + verbose_name=_('Devices') ) class Meta(NetBoxTable.Meta): From 74e1fb1202a9af362b068652e21db03590a3a358 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 29 Apr 2024 13:35:49 -0400 Subject: [PATCH 3/3] Add counts for VMs, roles, and platforms --- netbox/extras/tables/tables.py | 23 +++++++++++++++++++---- netbox/extras/views.py | 8 ++++++-- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index b707f495997..621dfd26ae7 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -414,20 +414,35 @@ class ConfigTemplateTable(NetBoxTable): tags = columns.TagColumn( url_name='extras:configtemplate_list' ) - instance_count = columns.LinkedCountColumn( + role_count = columns.LinkedCountColumn( + viewname='dcim:devicerole_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Device Roles') + ) + platform_count = columns.LinkedCountColumn( + viewname='dcim:platform_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Platforms') + ) + device_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'config_template_id': 'pk'}, verbose_name=_('Devices') ) + vm_count = columns.LinkedCountColumn( + viewname='virtualization:virtualmachine_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Virtual Machines') + ) class Meta(NetBoxTable.Meta): model = ConfigTemplate fields = ( - 'pk', 'id', 'name', 'description', 'data_source', 'data_file', 'data_synced', 'created', 'last_updated', - 'tags', 'instance_count', + 'pk', 'id', 'name', 'description', 'data_source', 'data_file', 'data_synced', 'role_count', + 'platform_count', 'device_count', 'vm_count', 'created', 'last_updated', 'tags', ) default_columns = ( - 'pk', 'name', 'description', 'is_synced', 'instance_count' + 'pk', 'name', 'description', 'is_synced', 'device_count', 'vm_count', ) diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 75ff4f0531c..6938ccf4140 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -13,7 +13,7 @@ from core.forms import ManagedFileForm from core.models import Job from core.tables import JobTable -from dcim.models import Device +from dcim.models import Device, DeviceRole, Platform from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm from extras.dashboard.utils import get_widget_class from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -25,6 +25,7 @@ from utilities.templatetags.builtins.filters import render_markdown from utilities.utils import copy_safe_request, count_related, get_viewname, normalize_querydict, shallow_compare_dict from utilities.views import ContentTypePermissionRequiredMixin, register_model_view +from virtualization.models import VirtualMachine from . import filtersets, forms, tables from .forms.reports import ReportForm from .models import * @@ -626,7 +627,10 @@ def get_extra_context(self, request, instance): class ConfigTemplateListView(generic.ObjectListView): queryset = ConfigTemplate.objects.annotate( - instance_count=count_related(Device, 'config_template') + device_count=count_related(Device, 'config_template'), + vm_count=count_related(VirtualMachine, 'config_template'), + role_count=count_related(DeviceRole, 'config_template'), + platform_count=count_related(Platform, 'config_template'), ) filterset = filtersets.ConfigTemplateFilterSet filterset_form = forms.ConfigTemplateFilterForm