From a8c57313d33adf53de0ff5691a17a2d19b4e118f Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 2 May 2019 13:56:30 -0400 Subject: [PATCH] Fixes #3140: Add bulk edit capability for power outlets and console server ports --- CHANGELOG.md | 1 + netbox/dcim/forms.py | 2 +- netbox/dcim/tables.py | 4 ++-- netbox/dcim/urls.py | 2 ++ netbox/dcim/views.py | 16 ++++++++++++++++ netbox/templates/dcim/device.html | 6 ++++++ netbox/templates/dcim/inc/poweroutlet.html | 4 +++- 7 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0022de728..1b2b7ee83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ v2.6.0 (FUTURE) * [#3130](https://github.com/digitalocean/netbox/issues/3130) - Fix exception when creating a new power outlet * [#3136](https://github.com/digitalocean/netbox/issues/3136) - Add power draw fields to power port creation form * [#3137](https://github.com/digitalocean/netbox/issues/3137) - Add `power_port` and `feed_leg` fields to power outlet creation form +* [#3140](https://github.com/digitalocean/netbox/issues/3140) - Add bulk edit capability for power outlets and console server ports --- diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 8704e87f5..98d0c3144 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -2066,7 +2066,7 @@ class PowerOutletBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm): class Meta: nullable_fields = [ - 'description', + 'feed_leg', 'description', ] diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 3682ab37a..c9bf8ac00 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -576,7 +576,7 @@ class ConsoleServerPortTable(BaseTable): class Meta(BaseTable.Meta): model = ConsoleServerPort - fields = ('name',) + fields = ('name', 'description') class PowerPortTable(BaseTable): @@ -590,7 +590,7 @@ class PowerOutletTable(BaseTable): class Meta(BaseTable.Meta): model = PowerOutlet - fields = ('name',) + fields = ('name', 'description') class InterfaceTable(BaseTable): diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index 220f4b405..01a8c4e42 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -170,6 +170,7 @@ urlpatterns = [ # Console server ports url(r'^devices/console-server-ports/add/$', views.DeviceBulkAddConsoleServerPortView.as_view(), name='device_bulk_add_consoleserverport'), url(r'^devices/(?P\d+)/console-server-ports/add/$', views.ConsoleServerPortCreateView.as_view(), name='consoleserverport_add'), + url(r'^devices/(?P\d+)/console-server-ports/edit/$', views.ConsoleServerPortBulkEditView.as_view(), name='consoleserverport_bulk_edit'), url(r'^devices/(?P\d+)/console-server-ports/delete/$', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'), url(r'^console-server-ports/(?P\d+)/connect/(?P[\w-]+)/$', views.CableCreateView.as_view(), name='consoleserverport_connect', kwargs={'termination_a_type': ConsoleServerPort}), url(r'^console-server-ports/(?P\d+)/edit/$', views.ConsoleServerPortEditView.as_view(), name='consoleserverport_edit'), @@ -190,6 +191,7 @@ urlpatterns = [ # Power outlets url(r'^devices/power-outlets/add/$', views.DeviceBulkAddPowerOutletView.as_view(), name='device_bulk_add_poweroutlet'), url(r'^devices/(?P\d+)/power-outlets/add/$', views.PowerOutletCreateView.as_view(), name='poweroutlet_add'), + url(r'^devices/(?P\d+)/power-outlets/edit/$', views.PowerOutletBulkEditView.as_view(), name='poweroutlet_bulk_edit'), url(r'^devices/(?P\d+)/power-outlets/delete/$', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'), url(r'^power-outlets/(?P\d+)/connect/(?P[\w-]+)/$', views.CableCreateView.as_view(), name='poweroutlet_connect', kwargs={'termination_a_type': PowerOutlet}), url(r'^power-outlets/(?P\d+)/edit/$', views.PowerOutletEditView.as_view(), name='poweroutlet_edit'), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 710ea2a7f..27d7d3ece 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1177,6 +1177,14 @@ class ConsoleServerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView): model = ConsoleServerPort +class ConsoleServerPortBulkEditView(PermissionRequiredMixin, BulkEditView): + permission_required = 'dcim.change_consoleserverport' + queryset = ConsoleServerPort.objects.all() + parent_model = Device + table = tables.ConsoleServerPortTable + form = forms.ConsoleServerPortBulkEditForm + + class ConsoleServerPortBulkRenameView(PermissionRequiredMixin, BulkRenameView): permission_required = 'dcim.change_consoleserverport' queryset = ConsoleServerPort.objects.all() @@ -1253,6 +1261,14 @@ class PowerOutletDeleteView(PermissionRequiredMixin, ObjectDeleteView): model = PowerOutlet +class PowerOutletBulkEditView(PermissionRequiredMixin, BulkEditView): + permission_required = 'dcim.change_poweroutlet' + queryset = PowerOutlet.objects.all() + parent_model = Device + table = tables.PowerOutletTable + form = forms.PowerOutletBulkEditForm + + class PowerOutletBulkRenameView(PermissionRequiredMixin, BulkRenameView): permission_required = 'dcim.change_poweroutlet' queryset = PowerOutlet.objects.all() diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index c12b31489..19a59a47a 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -625,6 +625,9 @@ + @@ -682,6 +685,9 @@ + diff --git a/netbox/templates/dcim/inc/poweroutlet.html b/netbox/templates/dcim/inc/poweroutlet.html index bebf677f9..69a9416e6 100644 --- a/netbox/templates/dcim/inc/poweroutlet.html +++ b/netbox/templates/dcim/inc/poweroutlet.html @@ -14,10 +14,12 @@ {{ po }} - {# Power port #} + {# Input/leg #} {% if po.power_port %} {{ po.power_port }}{% if po.feed_leg %} / {{ po.get_feed_leg_display }}{% endif %} + {% elif po.feed_leg %} + {{ po.get_feed_leg_display }} {% else %} None {% endif %}