From 0f4378b0db245bf0294666a5db27b4f8e59e600c Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 5 Nov 2021 11:10:17 -0400 Subject: [PATCH 01/13] Fixes #7750: Fix cable trace image link --- docs/core-functionality/devices.md | 10 ++++++++++ docs/models/dcim/cable.md | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/core-functionality/devices.md b/docs/core-functionality/devices.md index 67e3612b9..982ee3071 100644 --- a/docs/core-functionality/devices.md +++ b/docs/core-functionality/devices.md @@ -27,3 +27,13 @@ Device components represent discrete objects within a device which are used to t --- {!models/dcim/cable.md!} + +In the example below, three individual cables comprise a path between devices A and D: + +![Cable path](../media/models/dcim_cable_trace.png) + +Traced from Interface 1 on Device A, NetBox will show the following path: + +* Cable 1: Interface 1 to Front Port 1 +* Cable 2: Rear Port 1 to Rear Port 2 +* Cable 3: Front Port 2 to Interface 2 diff --git a/docs/models/dcim/cable.md b/docs/models/dcim/cable.md index 87ec68e03..43c0abfab 100644 --- a/docs/models/dcim/cable.md +++ b/docs/models/dcim/cable.md @@ -22,13 +22,3 @@ Each cable may be assigned a type, label, length, and color. Each cable is also ## Tracing Cables A cable may be traced from either of its endpoints by clicking the "trace" button. (A REST API endpoint also provides this functionality.) NetBox will follow the path of connected cables from this termination across the directly connected cable to the far-end termination. If the cable connects to a pass-through port, and the peer port has another cable connected, NetBox will continue following the cable path until it encounters a non-pass-through or unconnected termination point. The entire path will be displayed to the user. - -In the example below, three individual cables comprise a path between devices A and D: - -![Cable path](../media/models/dcim_cable_trace.png) - -Traced from Interface 1 on Device A, NetBox will show the following path: - -* Cable 1: Interface 1 to Front Port 1 -* Cable 2: Rear Port 1 to Rear Port 2 -* Cable 3: Front Port 2 to Interface 2 From a3adae71692e908c897abea462df32e65c5d3763 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 5 Nov 2021 13:26:18 -0400 Subject: [PATCH 02/13] Issues policy tweaks --- .github/ISSUE_TEMPLATE/bug_report.yaml | 5 +---- CONTRIBUTING.md | 12 ++++-------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 6c13631d9..fa773eb13 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -13,10 +13,7 @@ body: - type: input attributes: label: NetBox version - description: > - What version of NetBox are you currently running? (If you don't have access to the most - recent NetBox release, consider testing on our [demo instance](https://demo.netbox.dev/) - before opening a bug report to see if your issue has already been addressed.) + description: What version of NetBox are you currently running? placeholder: v3.0.9 validations: required: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a3b1f002..a3627a2b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -76,14 +76,10 @@ free to add a comment with any additional justification for the feature. (However, note that comments with no substance other than a "+1" will be deleted. Please use GitHub's reactions feature to indicate your support.) -* Due to a large backlog of feature requests, we are not currently accepting -any proposals which substantially extend NetBox's functionality beyond its -current feature set. This includes the introduction of any new views or models -which have not already been proposed in an existing feature request. - -* Before filing a new feature request, consider raising your idea on the -mailing list first. Feedback you receive there will help validate and shape the -proposed feature before filing a formal issue. +* Before filing a new feature request, consider raising your idea in a +[GitHub discussion](https://github.com/netbox-community/netbox/discussions) +first. Feedback you receive there will help validate and shape the proposed +feature before filing a formal issue. * Good feature requests are very narrowly defined. Be sure to thoroughly describe the functionality and data model(s) being proposed. The more effort From 4625122a10a140d66fba6fbfb0492d148984b20f Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 5 Nov 2021 13:31:36 -0400 Subject: [PATCH 03/13] Closes #7760: Add vid filter field to VLANs list --- docs/release-notes/version-3.0.md | 4 ++++ netbox/ipam/forms/filtersets.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index eaac82444..52ca0e5cf 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -2,6 +2,10 @@ ## v3.0.10 (FUTURE) +### Enhancements + +* [#7760](https://github.com/netbox-community/netbox/issues/7760) - Add `vid` filter field to VLANs list + ### Bug Fixes * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index 8bc0f10fb..02fac75b3 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -1,3 +1,4 @@ +import django_filters from django import forms from django.utils.translation import gettext as _ @@ -409,7 +410,7 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo field_groups = [ ['q', 'tag'], ['region_id', 'site_group_id', 'site_id'], - ['group_id', 'status', 'role_id'], + ['group_id', 'status', 'role_id', 'vid'], ['tenant_group_id', 'tenant_id'], ] q = forms.CharField( @@ -461,6 +462,10 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo label=_('Role'), fetch_trigger='open' ) + vid = forms.IntegerField( + required=False, + label='VLAN ID' + ) tag = TagFilterField(model) From f66f297feec84dc2159f6e18f5268f9ee8f8a9cc Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 5 Nov 2021 13:40:38 -0400 Subject: [PATCH 04/13] Allow bypassing the pre-commit script with NOVALIDATE=1 --- scripts/git-hooks/pre-commit | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/git-hooks/pre-commit b/scripts/git-hooks/pre-commit index 71b8cca6e..7a3d680a4 100755 --- a/scripts/git-hooks/pre-commit +++ b/scripts/git-hooks/pre-commit @@ -11,6 +11,7 @@ exec 1>&2 EXIT=0 RED='\033[0;31m' +YELLOW='\033[0;33m' NOCOLOR='\033[0m' if [ -d ./venv/ ]; then @@ -22,6 +23,11 @@ if [ -d ./venv/ ]; then fi fi +if [ ${NOVALIDATE} ]; then + echo "${YELLOW}Skipping validation checks${NOCOLOR}" + exit $EXIT +fi + echo "Validating PEP8 compliance..." pycodestyle --ignore=W504,E501 --exclude=node_modules netbox/ if [ $? != 0 ]; then From 16e7c1ed22a4e5413564671874ac5bf9ad8d0fd6 Mon Sep 17 00:00:00 2001 From: Nico Domino Date: Mon, 8 Nov 2021 14:15:26 +0100 Subject: [PATCH 05/13] feat: add outer_width to RackTable (#7766) * feat: add outer_width to RackTable * fix: add outer_units to column display * feat: add outer_depth to available columns --- netbox/dcim/tables/racks.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/tables/racks.py b/netbox/dcim/tables/racks.py index f3d1cb7f8..982e2a47f 100644 --- a/netbox/dcim/tables/racks.py +++ b/netbox/dcim/tables/racks.py @@ -72,12 +72,20 @@ class RackTable(BaseTable): tags = TagColumn( url_name='dcim:rack_list' ) + outer_width = tables.TemplateColumn( + template_code="{{ record.outer_width }} {{ record.outer_unit }}", + verbose_name='Outer Width' + ) + outer_depth = tables.TemplateColumn( + template_code="{{ record.outer_depth }} {{ record.outer_unit }}", + verbose_name='Outer Depth' + ) class Meta(BaseTable.Meta): model = Rack fields = ( 'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'serial', 'asset_tag', 'type', - 'width', 'u_height', 'comments', 'device_count', 'get_utilization', 'get_power_utilization', 'tags', + 'width', 'outer_width', 'outer_depth', 'u_height', 'comments', 'device_count', 'get_utilization', 'get_power_utilization', 'tags', ) default_columns = ( 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'u_height', 'device_count', From 00b2bde4d7aca039d1fed1fe64e5fb9412e77493 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 8 Nov 2021 08:24:14 -0500 Subject: [PATCH 06/13] Changelog for #7765 --- docs/release-notes/version-3.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 52ca0e5cf..ddf32c680 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -9,6 +9,7 @@ ### Bug Fixes * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 +* [#7766](https://github.com/netbox-community/netbox/issues/7766) - Add missing outer dimension columns to rack table --- From 4f07e056816c05d0be40864b260f05a48298b258 Mon Sep 17 00:00:00 2001 From: Flo <52775027+FloEisen@users.noreply.github.com> Date: Mon, 8 Nov 2021 17:50:13 +0100 Subject: [PATCH 07/13] Add Mini-DIN 8 Console-Port-Type --- netbox/dcim/choices.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index 2f6228751..5a732fa8d 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -185,6 +185,7 @@ class ConsolePortTypeChoices(ChoiceSet): TYPE_RJ11 = 'rj-11' TYPE_RJ12 = 'rj-12' TYPE_RJ45 = 'rj-45' + TYPE_MINI_DIN_8 = 'mini-din-8' TYPE_USB_A = 'usb-a' TYPE_USB_B = 'usb-b' TYPE_USB_C = 'usb-c' @@ -202,6 +203,7 @@ class ConsolePortTypeChoices(ChoiceSet): (TYPE_RJ11, 'RJ-11'), (TYPE_RJ12, 'RJ-12'), (TYPE_RJ45, 'RJ-45'), + (TYPE_MINI_DIN_8, 'Mini-DIN 8'), )), ('USB', ( (TYPE_USB_A, 'USB Type A'), From 5230efab811aa92880db80cf1f370fb4904be8b7 Mon Sep 17 00:00:00 2001 From: Jason Yates Date: Tue, 9 Nov 2021 15:18:46 +0000 Subject: [PATCH 08/13] Fixed #7783 - Site location visual changes Updating site location list to visually match the /dcim/locations list where child locations are "indtended" with mdi-circle-small. Also removes the padding-left attribute on each row as it is no longer functional. --- netbox/templates/dcim/site.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index 1ee8cfce0..2afa5376c 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -219,8 +219,8 @@ {% for location in locations %} - - + + {% for i in location.level|as_range %}{% endfor %} {{ location }} From 456d5d7548fb513940abd52805778b7c874327ad Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 9 Nov 2021 15:15:34 -0500 Subject: [PATCH 09/13] Changelog for #7783 --- docs/release-notes/version-3.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index ddf32c680..8c2d3cbad 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -10,6 +10,7 @@ * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 * [#7766](https://github.com/netbox-community/netbox/issues/7766) - Add missing outer dimension columns to rack table +* [#7783](https://github.com/netbox-community/netbox/issues/7783) - Fix indentation of locations under site view --- From 990c3f10300050c4e32d32a589c0e44d2d100f74 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 9 Nov 2021 15:24:21 -0500 Subject: [PATCH 10/13] Fixes #7780: Preserve mutli-line values during CSV file import --- docs/release-notes/version-3.0.md | 1 + netbox/utilities/forms/fields.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 8c2d3cbad..6fe9948a0 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -10,6 +10,7 @@ * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 * [#7766](https://github.com/netbox-community/netbox/issues/7766) - Add missing outer dimension columns to rack table +* [#7780](https://github.com/netbox-community/netbox/issues/7780) - Preserve mutli-line values during CSV file import * [#7783](https://github.com/netbox-community/netbox/issues/7783) - Fix indentation of locations under site view --- diff --git a/netbox/utilities/forms/fields.py b/netbox/utilities/forms/fields.py index 2561c2e22..d9f1719ec 100644 --- a/netbox/utilities/forms/fields.py +++ b/netbox/utilities/forms/fields.py @@ -224,7 +224,7 @@ class CSVFileField(forms.FileField): return None csv_str = file.read().decode('utf-8').strip() - reader = csv.reader(csv_str.splitlines()) + reader = csv.reader(StringIO(csv_str)) headers, records = parse_csv(reader) return headers, records From 59a800dbb9d7706413f7bcab661149743baf607f Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 9 Nov 2021 16:04:16 -0500 Subject: [PATCH 11/13] Fixes #7701: Fix conflation of assigned IP status & role in interface tables --- docs/release-notes/version-3.0.md | 1 + netbox/dcim/tables/template_code.py | 18 +++++++----------- netbox/project-static/dist/netbox-dark.css | Bin 788776 -> 788777 bytes netbox/project-static/dist/netbox-light.css | Bin 493600 -> 493601 bytes netbox/project-static/dist/netbox-print.css | Bin 1623462 -> 1623463 bytes netbox/project-static/styles/netbox.scss | 2 +- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 6fe9948a0..1f3716383 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -8,6 +8,7 @@ ### Bug Fixes +* [#7701](https://github.com/netbox-community/netbox/issues/7701) - Fix conflation of assigned IP status & role in interface tables * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 * [#7766](https://github.com/netbox-community/netbox/issues/7766) - Add missing outer dimension columns to rack table * [#7780](https://github.com/netbox-community/netbox/issues/7780) - Preserve mutli-line values during CSV file import diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 2f359e1b9..092fe3b95 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -40,17 +40,13 @@ DEVICEBAY_STATUS = """ INTERFACE_IPADDRESSES = """
- {% for ip in record.ip_addresses.all %} - - {{ ip }} - - {% endfor %} + {% for ip in record.ip_addresses.all %} + {% if ip.status != 'active' %} + {{ ip }} + {% else %} + {{ ip }} + {% endif %} + {% endfor %}
""" diff --git a/netbox/project-static/dist/netbox-dark.css b/netbox/project-static/dist/netbox-dark.css index b06cca0a11d640e5d728a81d25e0745825aa204a..bac0e589ac527f59e5f9cb369769f0e2c93501e1 100644 GIT binary patch delta 52 zcmV-40L%ZVk}#=~Fo1*sgaU*Egam{Iga(8Mgb0KQgbK6^(fgO5rU(U>r=ANVm(KkQ K47UXQ3nUE$+7q7u delta 46 zcmV+}0MY-ck}#-}Fo1*sgaU*Egam{Iga(8Mgb0KQgbK6^(fgC2s3(`t{R<4Y1^f#n E4VeHDumAu6 diff --git a/netbox/project-static/dist/netbox-light.css b/netbox/project-static/dist/netbox-light.css index cf06883a981bf8a07b403e0a852b2a0a12b620af..3ae6b577918c8c0e2ee575ae28d6e8002fd11ebb 100644 GIT binary patch delta 31 ncmZ25L2ls$xrP?T7N!>F7M2#)7Pc+y&+8bCwm+|9x8wu>wF7M2#)7Pc+y&+Df1+q1K7e_O|H!U+J_zYD?u diff --git a/netbox/project-static/dist/netbox-print.css b/netbox/project-static/dist/netbox-print.css index 7e565c3d5be6b900a59495cd008ed04c0bad79ad..7974e338d08659ae8a191e608fd831cf2d961d6a 100644 GIT binary patch delta 87 zcmV-d0I2__i({vYV}OJKgaU*Egam{Iga(8Mgb0KQgbIWUgbaiYgbsucgb;)ggc5`k tgcO7ogcgJsv=|Pnm#~5n1(!(g7ZjJxs~8WLXR8<;lQ0qnw^*wfP8tO?9UuSz delta 81 zcmZ49oxH3&xuJ!zg{g(Pg{6hHg{_6Xg` Date: Tue, 9 Nov 2021 16:08:11 -0500 Subject: [PATCH 12/13] Changelog for #7740 --- docs/release-notes/version-3.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 1f3716383..ef99c4a0e 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -4,6 +4,7 @@ ### Enhancements +* [#7740](https://github.com/netbox-community/netbox/issues/7740) - Add mini-DIN 8 console port type * [#7760](https://github.com/netbox-community/netbox/issues/7760) - Add `vid` filter field to VLANs list ### Bug Fixes From 1b858c2f2f066d4b1b8848ef493ebfd8e67fdf85 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 9 Nov 2021 16:46:58 -0500 Subject: [PATCH 13/13] Fixes #7741: Fix 404 when attaching multiple images in succession --- docs/release-notes/version-3.0.md | 1 + netbox/extras/models/models.py | 2 ++ netbox/extras/views.py | 6 +----- .../inc/image_attachments_panel.html | 2 +- netbox/utilities/templatetags/helpers.py | 20 +++++++++++++++++++ 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index ef99c4a0e..7a3005421 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -10,6 +10,7 @@ ### Bug Fixes * [#7701](https://github.com/netbox-community/netbox/issues/7701) - Fix conflation of assigned IP status & role in interface tables +* [#7741](https://github.com/netbox-community/netbox/issues/7741) - Fix 404 when attaching multiple images in succession * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10 * [#7766](https://github.com/netbox-community/netbox/issues/7766) - Add missing outer dimension columns to rack table * [#7780](https://github.com/netbox-community/netbox/issues/7780) - Preserve mutli-line values during CSV file import diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index 75f5242d3..2c56f2f0f 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -357,6 +357,8 @@ class ImageAttachment(BigIDModel): objects = RestrictedQuerySet.as_manager() + clone_fields = ('content_type', 'object_id') + class Meta: ordering = ('name', 'pk') # name may be non-unique diff --git a/netbox/extras/views.py b/netbox/extras/views.py index d39f50c79..b0387c73d 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -475,11 +475,7 @@ class ImageAttachmentEditView(generic.ObjectEditView): def alter_obj(self, instance, request, args, kwargs): if not instance.pk: # Assign the parent object based on URL kwargs - try: - app_label, model = request.GET.get('content_type').split('.') - except (AttributeError, ValueError): - raise Http404("Content type not specified") - content_type = get_object_or_404(ContentType, app_label=app_label, model=model) + content_type = get_object_or_404(ContentType, pk=request.GET.get('content_type')) instance.parent = get_object_or_404(content_type.model_class(), pk=request.GET.get('object_id')) return instance diff --git a/netbox/templates/inc/image_attachments_panel.html b/netbox/templates/inc/image_attachments_panel.html index ca7312901..9706a7ffe 100644 --- a/netbox/templates/inc/image_attachments_panel.html +++ b/netbox/templates/inc/image_attachments_panel.html @@ -44,7 +44,7 @@ {% if perms.extras.add_imageattachment %} diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py index 1695c8257..5b5534321 100644 --- a/netbox/utilities/templatetags/helpers.py +++ b/netbox/utilities/templatetags/helpers.py @@ -6,6 +6,7 @@ from typing import Dict, Any import yaml from django import template from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.template.defaultfilters import date from django.urls import NoReverseMatch, reverse from django.utils import timezone @@ -78,6 +79,25 @@ def meta(obj, attr): return getattr(obj._meta, attr, '') +@register.filter() +def content_type(obj): + """ + Return the ContentType for the given object. + """ + return ContentType.objects.get_for_model(obj) + + +@register.filter() +def content_type_id(obj): + """ + Return the ContentType ID for the given object. + """ + content_type = ContentType.objects.get_for_model(obj) + if content_type: + return content_type.pk + return None + + @register.filter() def viewname(model, action): """