From 1f6208443c4eaa638da3b17ee62f60a217cb4b30 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Sat, 14 Jan 2023 00:48:52 +0530 Subject: [PATCH 1/4] added vm tab on device role --- netbox/dcim/views.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 794d58d1e23..512d245eaba 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -21,7 +21,9 @@ from utilities.permissions import get_permission_for_model from utilities.utils import count_related from utilities.views import GetReturnURLMixin, ObjectPermissionRequiredMixin, ViewTab, register_model_view +from virtualization.filtersets import VirtualMachineFilterSet from virtualization.models import VirtualMachine +from virtualization.tables import VirtualMachineTable from . import filtersets, forms, tables from .choices import DeviceFaceChoices from .constants import NONCONNECTABLE_IFACE_TYPES @@ -1735,6 +1737,22 @@ def get_extra_context(self, request, instance): 'virtualmachine_count': VirtualMachine.objects.filter(role=instance).count(), } +@register_model_view(DeviceRole, 'virtual_machines', path='virtual-machines') +class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView): + queryset = DeviceRole.objects.all() + child_model = VirtualMachine + table = VirtualMachineTable + filterset = VirtualMachineFilterSet + template_name = 'virtualization/cluster/virtual_machines.html' + tab = ViewTab( + label=_('Virtual machines'), + badge=lambda obj: obj.virtual_machines.count(), + permission='virtualization.view_virtualmachine', + weight=500 + ) + + def get_children(self, request, parent): + return VirtualMachine.objects.restrict(request.user, 'view').filter(role=parent) @register_model_view(DeviceRole, 'edit') class DeviceRoleEditView(generic.ObjectEditView): From f419a8b922bac141e8dc44bf552deaa6dfe88fad Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Sat, 14 Jan 2023 19:48:39 +0530 Subject: [PATCH 2/4] added blank lines --- netbox/dcim/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 512d245eaba..3ba24b35182 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1737,6 +1737,7 @@ def get_extra_context(self, request, instance): 'virtualmachine_count': VirtualMachine.objects.filter(role=instance).count(), } + @register_model_view(DeviceRole, 'virtual_machines', path='virtual-machines') class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView): queryset = DeviceRole.objects.all() @@ -1754,6 +1755,7 @@ class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView): def get_children(self, request, parent): return VirtualMachine.objects.restrict(request.user, 'view').filter(role=parent) + @register_model_view(DeviceRole, 'edit') class DeviceRoleEditView(generic.ObjectEditView): queryset = DeviceRole.objects.all() From 1ba6f50db25321f2a89d35620200b498f96c0dbd Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Wed, 18 Jan 2023 17:04:10 +0530 Subject: [PATCH 3/4] updated templates --- netbox/dcim/views.py | 19 +++++++++++++++++- netbox/templates/dcim/devicerole.html | 7 ------- netbox/templates/dcim/devicerole/devices.html | 20 +++++++++++++++++++ .../dcim/devicerole/virtual_machines.html | 20 +++++++++++++++++++ 4 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 netbox/templates/dcim/devicerole/devices.html create mode 100644 netbox/templates/dcim/devicerole/virtual_machines.html diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 3ba24b35182..585237be02e 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1738,13 +1738,30 @@ def get_extra_context(self, request, instance): } +@register_model_view(DeviceRole, 'devices', path='devices') +class DeviceRoleDevicesView(generic.ObjectChildrenView): + queryset = DeviceRole.objects.all() + child_model = Device + table = tables.DeviceTable + filterset = filtersets.DeviceFilterSet + template_name = 'dcim/devicerole/devices.html' + tab = ViewTab( + label=_('Devices'), + badge=lambda obj: obj.devices.count(), + permission='dcim.view_device', + weight=400 + ) + + def get_children(self, request, parent): + return Device.objects.restrict(request.user, 'view').filter(device_role=parent) + @register_model_view(DeviceRole, 'virtual_machines', path='virtual-machines') class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView): queryset = DeviceRole.objects.all() child_model = VirtualMachine table = VirtualMachineTable filterset = VirtualMachineFilterSet - template_name = 'virtualization/cluster/virtual_machines.html' + template_name = 'dcim/devicerole/virtual_machines.html' tab = ViewTab( label=_('Virtual machines'), badge=lambda obj: obj.virtual_machines.count(), diff --git a/netbox/templates/dcim/devicerole.html b/netbox/templates/dcim/devicerole.html index 610c53071a4..6724333d91b 100644 --- a/netbox/templates/dcim/devicerole.html +++ b/netbox/templates/dcim/devicerole.html @@ -71,13 +71,6 @@
-
-
Devices
-
- {% render_table devices_table 'inc/table.html' %} - {% include 'inc/paginator.html' with paginator=devices_table.paginator page=devices_table.page %} -
-
{% plugin_full_width_page object %}
diff --git a/netbox/templates/dcim/devicerole/devices.html b/netbox/templates/dcim/devicerole/devices.html new file mode 100644 index 00000000000..d7a69f013fa --- /dev/null +++ b/netbox/templates/dcim/devicerole/devices.html @@ -0,0 +1,20 @@ +{% extends 'dcim/devicerole.html' %} +{% load helpers %} +{% load render_table from django_tables2 %} + +{% block content %} + {% include 'inc/table_controls_htmx.html' with table_modal='DeviceTable_config' %} +
+ {% csrf_token %} +
+
+ {% include 'htmx/table.html' %} +
+
+
+{% endblock content %} + +{% block modals %} + {{ block.super }} + {% table_config_form table %} +{% endblock modals %} \ No newline at end of file diff --git a/netbox/templates/dcim/devicerole/virtual_machines.html b/netbox/templates/dcim/devicerole/virtual_machines.html new file mode 100644 index 00000000000..d94e868394b --- /dev/null +++ b/netbox/templates/dcim/devicerole/virtual_machines.html @@ -0,0 +1,20 @@ +{% extends 'dcim/devicerole.html' %} +{% load helpers %} +{% load render_table from django_tables2 %} + +{% block content %} + {% include 'inc/table_controls_htmx.html' with table_modal='VirtualMachineTable_config' %} +
+ {% csrf_token %} +
+
+ {% include 'htmx/table.html' %} +
+
+
+{% endblock content %} + +{% block modals %} + {{ block.super }} + {% table_config_form table %} +{% endblock modals %} \ No newline at end of file From 953e533a10d874703fcbde2d5634cbc5d2ba1360 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Wed, 18 Jan 2023 20:55:20 +0530 Subject: [PATCH 4/4] fixed lint issues --- netbox/dcim/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 585237be02e..46d12937b03 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1755,6 +1755,7 @@ class DeviceRoleDevicesView(generic.ObjectChildrenView): def get_children(self, request, parent): return Device.objects.restrict(request.user, 'view').filter(device_role=parent) + @register_model_view(DeviceRole, 'virtual_machines', path='virtual-machines') class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView): queryset = DeviceRole.objects.all()