From e5d757866364a55795ca060f2fa4ecb5aed3cf2b 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 79f2f03fb241f35ff74bbd034df7ff26aa0be025 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 3eda8d84821cafcf8170f52be8300bdabdedb3ee 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 e04402ed570ad702f8f7f32ba5e2ecc3d51829f1 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 9c2514fce4d8d6c46fddae8e79afe66631b468ae 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 7b7afd3e7b75b810a48c1fe84f601f98ed2fef14 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 b7aa44837fe5e152becda03ee1401c04766bc3dc 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 3f72492a59550469bc621df8071948f26c3fbacb 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 82210cc116bb54d63a80cf54ec431d14b32da7c8 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 d08ed9fe5f69d736d566f8f5f6ebba7c3b25951a 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 9dad7e4daf22bce29ce9318f849a81dac2647c33 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 3ad773beb3bfadf2b6ecaa5dd843acba3a2fb49e 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): """