2
0
Эх сурвалжийг харах

Feature #15428 - Show all devices with configuration template attached (#15822)

* Added devices instances column for config templates.

* Added devices instances column for config templates.

* Add counts for VMs, roles, and platforms

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
Julio Oliveira at Encora 1 жил өмнө
parent
commit
79b9dc2013

+ 23 - 3
netbox/extras/tables/tables.py

@@ -414,15 +414,35 @@ class ConfigTemplateTable(NetBoxTable):
     tags = columns.TagColumn(
         url_name='extras:configtemplate_list'
     )
+    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',
+            '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',
+            'pk', 'name', 'description', 'is_synced', 'device_count', 'vm_count',
         )
 
 

+ 8 - 1
netbox/extras/views.py

@@ -13,6 +13,7 @@ from core.choices import JobStatusChoices, ManagedFileRootPathChoices
 from core.forms import ManagedFileForm
 from core.models import Job
 from core.tables import JobTable
+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
@@ -24,6 +25,7 @@ from utilities.rqworker import get_workers_for_queue
 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 *
@@ -624,7 +626,12 @@ class ObjectConfigContextView(generic.ObjectView):
 #
 
 class ConfigTemplateListView(generic.ObjectListView):
-    queryset = ConfigTemplate.objects.all()
+    queryset = ConfigTemplate.objects.annotate(
+        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
     table = tables.ConfigTemplateTable