From 3edff89a4dd141d9e448c6625eaa056947589428 Mon Sep 17 00:00:00 2001 From: Alex Gittings Date: Mon, 14 Mar 2022 17:57:33 +0000 Subject: [PATCH 01/26] Fixes: #8866 - Does not perform API Select Search if a django peramiter has not been replaced --- netbox/project-static/dist/netbox.js | Bin 375602 -> 375655 bytes netbox/project-static/dist/netbox.js.map | Bin 344930 -> 344977 bytes .../src/select/api/apiSelect.ts | 9 ++++++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 45abd19e6209158d93fbe083fce3e1de985a9f5e..be807c2deebe794c033929da381b3550b567e34e 100644 GIT binary patch delta 95 zcmdn=P3-wMv4$4L7N!>F7M3lnFC#^Y^7JzEl5xJ*lrQU pYQQ3poS#>mpOdPWlb^1Un5U^TJtK})jb8^@I4^H|Zyf8=7y!DbBCG%a delta 53 zcmaFEOQv4$4L7N!>F7M3lnFC(Y_jbshj?iaf=$L}B`xNLGdI JFXLG2VgN{H6gmI^ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index c7e20fe9ae4893f6bbbbd26ccb95f35b556214cb..40cfad2fc5a029c9ae3415cce7db65a19da7e1b5 100644 GIT binary patch delta 126 zcmaFVCOWZQw4sHug{g&k3rpD_F-J#7Zyk3>M^Bw#N5^0te@EvGCmrAE<$qXgSt1>S z{kHG;!;-r-lnd7uIh&7ajv!ueQ${A=@ U>GlmQtbXi_Ronk_vnHDZ0P_qc+W-In delta 79 zcmbQ(F8ZiVw4sHug{g&k3rpD_M(^o8e^_i;!X5p+wx9jOlEKX4=;-J<)tOb3HPO-2 j+<9vwYbXn6R)tfQvyQ)G_V)WMtbXi_1>5y_Sd+~GU;Y`< diff --git a/netbox/project-static/src/select/api/apiSelect.ts b/netbox/project-static/src/select/api/apiSelect.ts index 5cd2c0055..be8a86631 100644 --- a/netbox/project-static/src/select/api/apiSelect.ts +++ b/netbox/project-static/src/select/api/apiSelect.ts @@ -557,9 +557,12 @@ export class APISelect { private async handleSearch(event: Event) { const { value: q } = event.target as HTMLInputElement; const url = queryString.stringifyUrl({ url: this.queryUrl, query: { q } }); - await this.fetchOptions(url, 'merge'); - this.slim.data.search(q); - this.slim.render(); + if (!url.includes(`{{`)) { + await this.fetchOptions(url, 'merge'); + this.slim.data.search(q); + this.slim.render(); + } + return; } /** From f45e64c756050d947aa8c5196b516fff8b5dcb08 Mon Sep 17 00:00:00 2001 From: fmlshai <82157941+fmlshai@users.noreply.github.com> Date: Wed, 23 Mar 2022 14:38:26 +0100 Subject: [PATCH 02/26] Fix #8785 - allow wildcard dns records Added * to the DNSValidator regex to allow wildcard domains like *.example.com --- netbox/ipam/validators.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox/ipam/validators.py b/netbox/ipam/validators.py index 879e20e6a..08f62ad35 100644 --- a/netbox/ipam/validators.py +++ b/netbox/ipam/validators.py @@ -24,7 +24,7 @@ class MinPrefixLengthValidator(BaseValidator): DNSValidator = RegexValidator( - regex='^[0-9A-Za-z._-]+$', - message='Only alphanumeric characters, hyphens, periods, and underscores are allowed in DNS names', + regex='^[0-9A-Za-z*._-]+$', + message='Only alphanumeric characters, asterisks, hyphens, periods, and underscores are allowed in DNS names', code='invalid' ) From 934493bf5f4ca36e255012d24e0d9f35e300dfd5 Mon Sep 17 00:00:00 2001 From: neope <58367950+apellini@users.noreply.github.com> Date: Fri, 25 Mar 2022 08:35:57 +0100 Subject: [PATCH 03/26] #8830 Adding ClusterXL Adding ClusterCL Choice to FHRP Group --- netbox/ipam/choices.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netbox/ipam/choices.py b/netbox/ipam/choices.py index 647a82810..b95a77a5b 100644 --- a/netbox/ipam/choices.py +++ b/netbox/ipam/choices.py @@ -100,6 +100,7 @@ class IPAddressRoleChoices(ChoiceSet): ROLE_HSRP = 'hsrp' ROLE_GLBP = 'glbp' ROLE_CARP = 'carp' + ROLE_CLUSTERXL = 'clusterxl' CHOICES = ( (ROLE_LOOPBACK, 'Loopback'), @@ -108,6 +109,7 @@ class IPAddressRoleChoices(ChoiceSet): (ROLE_VIP, 'VIP'), (ROLE_VRRP, 'VRRP'), (ROLE_HSRP, 'HSRP'), + (ROLE_CLUSTERXL, 'ClusterXL'), (ROLE_GLBP, 'GLBP'), (ROLE_CARP, 'CARP'), ) @@ -119,6 +121,7 @@ class IPAddressRoleChoices(ChoiceSet): ROLE_VIP: 'success', ROLE_VRRP: 'success', ROLE_HSRP: 'success', + ROLE_CLUSTERXL: 'success', ROLE_GLBP: 'success', ROLE_CARP: 'success', } From 57759aa4a3dec8f5bc098f28e9cde0cb3c28699c Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 25 Mar 2022 10:29:44 -0400 Subject: [PATCH 04/26] PRVB --- docs/release-notes/version-3.1.md | 4 ++++ netbox/netbox/settings.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 1051d6bb2..df9c9c7bb 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -1,5 +1,9 @@ # NetBox v3.1 +## v3.1.11 (FUTURE) + +--- + ## v3.1.10 (2022-03-25) ### Enhancements diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 0ae386343..decb7cea8 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -19,7 +19,7 @@ from netbox.config import PARAMS # Environment setup # -VERSION = '3.1.10' +VERSION = '3.1.11-dev' # Hostname HOSTNAME = platform.node() From 1cef513f6c2584a3b2961f135b8e5ad3d6336536 Mon Sep 17 00:00:00 2001 From: neope <58367950+apellini@users.noreply.github.com> Date: Fri, 25 Mar 2022 19:41:35 +0100 Subject: [PATCH 05/26] Adding ClusterXL as FHRPGroupProtocolChoices Adding in choices group standard, checkpoint and cisco and ungroupped other. --- netbox/ipam/choices.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/netbox/ipam/choices.py b/netbox/ipam/choices.py index b95a77a5b..7e704a975 100644 --- a/netbox/ipam/choices.py +++ b/netbox/ipam/choices.py @@ -100,7 +100,6 @@ class IPAddressRoleChoices(ChoiceSet): ROLE_HSRP = 'hsrp' ROLE_GLBP = 'glbp' ROLE_CARP = 'carp' - ROLE_CLUSTERXL = 'clusterxl' CHOICES = ( (ROLE_LOOPBACK, 'Loopback'), @@ -109,7 +108,6 @@ class IPAddressRoleChoices(ChoiceSet): (ROLE_VIP, 'VIP'), (ROLE_VRRP, 'VRRP'), (ROLE_HSRP, 'HSRP'), - (ROLE_CLUSTERXL, 'ClusterXL'), (ROLE_GLBP, 'GLBP'), (ROLE_CARP, 'CARP'), ) @@ -121,7 +119,6 @@ class IPAddressRoleChoices(ChoiceSet): ROLE_VIP: 'success', ROLE_VRRP: 'success', ROLE_HSRP: 'success', - ROLE_CLUSTERXL: 'success', ROLE_GLBP: 'success', ROLE_CARP: 'success', } @@ -138,14 +135,22 @@ class FHRPGroupProtocolChoices(ChoiceSet): PROTOCOL_HSRP = 'hsrp' PROTOCOL_GLBP = 'glbp' PROTOCOL_CARP = 'carp' + PROTOCOL_CLUSTERXL = 'clusterxl' PROTOCOL_OTHER = 'other' CHOICES = ( - (PROTOCOL_VRRP2, 'VRRPv2'), - (PROTOCOL_VRRP3, 'VRRPv3'), - (PROTOCOL_HSRP, 'HSRP'), - (PROTOCOL_GLBP, 'GLBP'), - (PROTOCOL_CARP, 'CARP'), + ('Standard', ( + (PROTOCOL_VRRP2, 'VRRPv2'), + (PROTOCOL_VRRP3, 'VRRPv3'), + (PROTOCOL_CARP, 'CARP'), + ), + ('CheckPoint', ( + (PROTOCOL_CLUSTERXL, 'ClusterXL'), + ), + ('Cisco', ( + (PROTOCOL_HSRP, 'HSRP'), + (PROTOCOL_GLBP, 'GLBP'), + ), (PROTOCOL_OTHER, 'Other'), ) From a1808a54a492f5cb710bbcfe75b57ffa7e387b9a Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 28 Mar 2022 09:13:15 -0400 Subject: [PATCH 06/26] Fixes #8974: Use monospace font for text areas in config revision form --- docs/release-notes/version-3.1.md | 4 ++++ netbox/extras/admin.py | 3 +++ netbox/netbox/config/parameters.py | 26 +++++++++++++++++++++----- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index df9c9c7bb..13e2161b4 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -2,6 +2,10 @@ ## v3.1.11 (FUTURE) +### Enhancements + +* [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form + --- ## v3.1.10 (2022-03-25) diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index b6ee01db9..047f723ad 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -23,15 +23,18 @@ class ConfigRevisionAdmin(admin.ModelAdmin): }), ('Banners', { 'fields': ('BANNER_LOGIN', 'BANNER_TOP', 'BANNER_BOTTOM'), + 'classes': ('monospace',), }), ('Pagination', { 'fields': ('PAGINATE_COUNT', 'MAX_PAGE_SIZE'), }), ('Validation', { 'fields': ('CUSTOM_VALIDATORS',), + 'classes': ('monospace',), }), ('NAPALM', { 'fields': ('NAPALM_USERNAME', 'NAPALM_PASSWORD', 'NAPALM_TIMEOUT', 'NAPALM_ARGS'), + 'classes': ('monospace',), }), ('Miscellaneous', { 'fields': ('MAINTENANCE_MODE', 'GRAPHQL_ENABLED', 'CHANGELOG_RETENTION', 'MAPS_URL'), diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py index 22dbac143..7da40e063 100644 --- a/netbox/netbox/config/parameters.py +++ b/netbox/netbox/config/parameters.py @@ -22,7 +22,9 @@ PARAMS = ( default='', description="Additional content to display on the login page", field_kwargs={ - 'widget': forms.Textarea(), + 'widget': forms.Textarea( + attrs={'class': 'vLargeTextField'} + ), }, ), ConfigParam( @@ -31,7 +33,9 @@ PARAMS = ( default='', description="Additional content to display at the top of every page", field_kwargs={ - 'widget': forms.Textarea(), + 'widget': forms.Textarea( + attrs={'class': 'vLargeTextField'} + ), }, ), ConfigParam( @@ -40,7 +44,9 @@ PARAMS = ( default='', description="Additional content to display at the bottom of every page", field_kwargs={ - 'widget': forms.Textarea(), + 'widget': forms.Textarea( + attrs={'class': 'vLargeTextField'} + ), }, ), @@ -109,7 +115,12 @@ PARAMS = ( label='Custom validators', default={}, description="Custom validation rules (JSON)", - field=forms.JSONField + field=forms.JSONField, + field_kwargs={ + 'widget': forms.Textarea( + attrs={'class': 'vLargeTextField'} + ), + }, ), # NAPALM @@ -137,7 +148,12 @@ PARAMS = ( label='NAPALM arguments', default={}, description="Additional arguments to pass when invoking a NAPALM driver (as JSON data)", - field=forms.JSONField + field=forms.JSONField, + field_kwargs={ + 'widget': forms.Textarea( + attrs={'class': 'vLargeTextField'} + ), + }, ), # Miscellaneous From e0344e92511a42caf31d15ae9688ecf5e9db3e2a Mon Sep 17 00:00:00 2001 From: fmlshai <82157941+fmlshai@users.noreply.github.com> Date: Mon, 28 Mar 2022 15:20:19 +0200 Subject: [PATCH 07/26] Update validators.py Updated DNSValidator regex --- netbox/ipam/validators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/ipam/validators.py b/netbox/ipam/validators.py index 08f62ad35..50faea8b8 100644 --- a/netbox/ipam/validators.py +++ b/netbox/ipam/validators.py @@ -24,7 +24,7 @@ class MinPrefixLengthValidator(BaseValidator): DNSValidator = RegexValidator( - regex='^[0-9A-Za-z*._-]+$', + regex=r'^([0-9A-Za-z_-]+|\*)(\.[0-9A-Za-z_-]+)*\.?$', message='Only alphanumeric characters, asterisks, hyphens, periods, and underscores are allowed in DNS names', code='invalid' ) From 37781bd2087250806173a10dc15a8e412bcf7eb3 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 28 Mar 2022 09:37:33 -0400 Subject: [PATCH 08/26] Fix parentheses --- netbox/ipam/choices.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netbox/ipam/choices.py b/netbox/ipam/choices.py index 7e704a975..6c23dd8c0 100644 --- a/netbox/ipam/choices.py +++ b/netbox/ipam/choices.py @@ -143,14 +143,14 @@ class FHRPGroupProtocolChoices(ChoiceSet): (PROTOCOL_VRRP2, 'VRRPv2'), (PROTOCOL_VRRP3, 'VRRPv3'), (PROTOCOL_CARP, 'CARP'), - ), + )), ('CheckPoint', ( (PROTOCOL_CLUSTERXL, 'ClusterXL'), - ), + )), ('Cisco', ( (PROTOCOL_HSRP, 'HSRP'), (PROTOCOL_GLBP, 'GLBP'), - ), + )), (PROTOCOL_OTHER, 'Other'), ) From 48b7294ff1227172fbc8667ba84bd22793d52d5f Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 28 Mar 2022 10:35:00 -0400 Subject: [PATCH 09/26] #8785: Tweak regex validator to avoid creating no-op migration file --- netbox/ipam/migrations/0001_squashed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/ipam/migrations/0001_squashed.py b/netbox/ipam/migrations/0001_squashed.py index 17d2f8123..545fd46c6 100644 --- a/netbox/ipam/migrations/0001_squashed.py +++ b/netbox/ipam/migrations/0001_squashed.py @@ -50,7 +50,7 @@ class Migration(migrations.Migration): ('status', models.CharField(default='active', max_length=50)), ('role', models.CharField(blank=True, max_length=50)), ('assigned_object_id', models.PositiveIntegerField(blank=True, null=True)), - ('dns_name', models.CharField(blank=True, max_length=255, validators=[django.core.validators.RegexValidator(code='invalid', message='Only alphanumeric characters, hyphens, periods, and underscores are allowed in DNS names', regex='^[0-9A-Za-z._-]+$')])), + ('dns_name', models.CharField(blank=True, max_length=255, validators=[django.core.validators.RegexValidator(code='invalid', message='Only alphanumeric characters, asterisks, hyphens, periods, and underscores are allowed in DNS names', regex='^([0-9A-Za-z_-]+|\\*)(\\.[0-9A-Za-z_-]+)*\\.?$')])), ('description', models.CharField(blank=True, max_length=200)), ], options={ From 894665b067616cb7b29c4522460f55daf53f3e61 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 28 Mar 2022 10:35:49 -0400 Subject: [PATCH 10/26] Changelog for #8785, #8830 --- docs/release-notes/version-3.1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 13e2161b4..303a05cae 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -4,6 +4,8 @@ ### Enhancements +* [#8785](https://github.com/netbox-community/netbox/issues/8785) - Permit wildcard values in IP address DNS names +* [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups * [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form --- From b7e2ea1ca5ad734373fe442425cd9b0b019b7467 Mon Sep 17 00:00:00 2001 From: Stephan Blanke Date: Mon, 28 Mar 2022 20:37:00 +0200 Subject: [PATCH 11/26] Closes #8163: Add bridge members panel to interface view --- netbox/dcim/models/device_components.py | 4 ++++ netbox/dcim/views.py | 9 +++++++++ netbox/templates/dcim/interface.html | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index e105bd804..b20df82b7 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -762,6 +762,10 @@ class Interface(ComponentModel, BaseInterface, LinkTermination, PathEndpoint): def is_lag(self): return self.type == InterfaceTypeChoices.TYPE_LAG + @property + def is_bridge(self): + return self.type == InterfaceTypeChoices.TYPE_BRIDGE + @property def link(self): return self.cable or self.wireless_link diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 6697a44cc..f5e71fd23 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1776,6 +1776,14 @@ class InterfaceView(generic.ObjectView): orderable=False ) + # Get bridge interfaces + bridge_interfaces = Interface.objects.restrict(request.user, 'view').filter(bridge=instance) + bridge_interfaces_tables = tables.InterfaceTable( + bridge_interfaces, + exclude=('device', 'parent'), + orderable=False + ) + # Get child interfaces child_interfaces = Interface.objects.restrict(request.user, 'view').filter(parent=instance) child_interfaces_tables = tables.InterfaceTable( @@ -1800,6 +1808,7 @@ class InterfaceView(generic.ObjectView): return { 'ipaddress_table': ipaddress_table, + 'bridge_interfaces_table': bridge_interfaces_tables, 'child_interfaces_table': child_interfaces_tables, 'vlan_table': vlan_table, } diff --git a/netbox/templates/dcim/interface.html b/netbox/templates/dcim/interface.html index 5eaa99c3f..bf1445a1c 100644 --- a/netbox/templates/dcim/interface.html +++ b/netbox/templates/dcim/interface.html @@ -467,6 +467,13 @@ {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %} + {% if object.is_bridge %} +
+
+ {% include 'inc/panel_table.html' with table=bridge_interfaces_table heading="Bridge Interfaces" %} +
+
+ {% endif %}
{% include 'inc/panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %} From ff780177d0810652b102e91dbd25006091e81305 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 29 Mar 2022 16:01:10 -0400 Subject: [PATCH 12/26] Clean up exception templates --- netbox/templates/exceptions/import_error.html | 30 +++++++++---------- .../exceptions/permission_error.html | 16 +++++----- .../exceptions/programming_error.html | 26 ++++++++-------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/netbox/templates/exceptions/import_error.html b/netbox/templates/exceptions/import_error.html index e8ee7ae2c..3e25b5369 100644 --- a/netbox/templates/exceptions/import_error.html +++ b/netbox/templates/exceptions/import_error.html @@ -1,19 +1,19 @@ {% extends '500.html' %} {% block message %} -

- A module import error occurred during this request. Common causes include the following: -

-

- Missing required packages - This installation of NetBox might be - missing one or more required Python packages. These packages are listed in requirements.txt and - local_requirements.txt, and are normally installed as part of the installation or upgrade process. - To verify installed packages, run pip freeze from the console and compare the output to the list of - required packages. -

-

- WSGI service not restarted after upgrade - If this installation - has recently been upgraded, check that the WSGI service (e.g. gunicorn or uWSGI) has been restarted. This - ensures that the new code is running. -

+

+ A module import error occurred during this request. Common causes include the following: +

+

+ Missing required packages - This installation of NetBox might be + missing one or more required Python packages. These packages are listed in requirements.txt and + local_requirements.txt, and are normally installed as part of the installation or upgrade process. To + verify installed packages, run pip freeze from the console and compare the output to the list of + required packages. +

+

+ WSGI service not restarted after upgrade - If this installation has + recently been upgraded, check that the WSGI service (e.g. gunicorn or uWSGI) has been restarted. This ensures that + the new code is running. +

{% endblock message %} diff --git a/netbox/templates/exceptions/permission_error.html b/netbox/templates/exceptions/permission_error.html index dcff62bf9..6108fde52 100644 --- a/netbox/templates/exceptions/permission_error.html +++ b/netbox/templates/exceptions/permission_error.html @@ -1,12 +1,12 @@ {% extends '500.html' %} {% block message %} -

- A file permission error was detected while processing this request. Common causes include the following: -

-

- Insufficient write permission to the media root - The configured - media root is {{ settings.MEDIA_ROOT }}. Ensure that the user NetBox runs as has access to write - files to all locations within this path. -

+

+ A file permission error was detected while processing this request. Common causes include the following: +

+

+ Insufficient write permission to the media root - The configured + media root is {{ settings.MEDIA_ROOT }}. Ensure that the user NetBox runs as has access to write files + to all locations within this path. +

{% endblock message %} diff --git a/netbox/templates/exceptions/programming_error.html b/netbox/templates/exceptions/programming_error.html index 3b9e84567..38175b187 100644 --- a/netbox/templates/exceptions/programming_error.html +++ b/netbox/templates/exceptions/programming_error.html @@ -1,17 +1,17 @@ {% extends '500.html' %} {% block message %} -

- A database programming error was detected while processing this request. Common causes include the following: -

-

- Database migrations missing - When upgrading to a new NetBox release, the upgrade script must - be run to apply any new database migrations. You can run migrations manually by executing - python3 manage.py migrate from the command line. -

-

- Unsupported PostgreSQL version - Ensure that PostgreSQL version 9.6 or higher is in use. You - can check this by connecting to the database using NetBox's credentials and issuing a query for - SELECT VERSION(). -

+

+ A database programming error was detected while processing this request. Common causes include the following: +

+

+ Database migrations missing - When upgrading to a new NetBox release, + the upgrade script must be run to apply any new database migrations. You can run migrations manually by executing + python3 manage.py migrate from the command line. +

+

+ Unsupported PostgreSQL version - Ensure that PostgreSQL version 10 + or later is in use. You can check this by connecting to the database using NetBox's credentials and issuing a query + for SELECT VERSION(). +

{% endblock message %} From dadec9d3cb1d2fffa788e83fd1754a7c7bedc823 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 30 Mar 2022 13:03:08 -0400 Subject: [PATCH 13/26] Add instruction for checking out an older release --- docs/installation/upgrading.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/installation/upgrading.md b/docs/installation/upgrading.md index d7f7156c8..c619cf241 100644 --- a/docs/installation/upgrading.md +++ b/docs/installation/upgrading.md @@ -6,7 +6,7 @@ Prior to upgrading your NetBox instance, be sure to carefully review all [releas ## Update Dependencies to Required Versions -NetBox v3.0 and later requires the following: +NetBox v3.0 and later require the following: | Dependency | Minimum Version | |------------|-----------------| @@ -67,6 +67,11 @@ sudo git checkout master sudo git pull origin master ``` +!!! info "Checking out an older release" + If you need to upgrade to an older version rather than the current stable release, you can check out any valid [git tag](https://github.com/netbox-community/netbox/tags), each of which represents a release. For example, to checkout the code for NetBox v2.11.11, do: + + sudo git checkout v2.11.11 + ## Run the Upgrade Script Once the new code is in place, verify that any optional Python packages required by your deployment (e.g. `napalm` or `django-auth-ldap`) are listed in `local_requirements.txt`. Then, run the upgrade script: From db535e6453a1502e67630fb7795e5126ae601212 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 30 Mar 2022 14:05:27 -0400 Subject: [PATCH 14/26] Closes #8436: Update token permissions documentation --- docs/models/users/token.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/models/users/token.md b/docs/models/users/token.md index d0e0f8609..d98b51369 100644 --- a/docs/models/users/token.md +++ b/docs/models/users/token.md @@ -3,7 +3,7 @@ A token is a unique identifier mapped to a NetBox user account. Each user may have one or more tokens which he or she can use for authentication when making REST API requests. To create a token, navigate to the API tokens page under your user profile. !!! note - The creation and modification of API tokens can be restricted per user by an administrator. If you don't see an option to create an API token, ask an administrator to grant you access. + All users can create and manage REST API tokens under the user control panel in the UI. The ability to view, add, change, or delete tokens via the REST API itself is controlled by the relevant model permissions, assigned to users and/or groups in the admin UI. These permissions should be used with great care to avoid accidentally permitting a user to create tokens for other user accounts. Each token contains a 160-bit key represented as 40 hexadecimal characters. When creating a token, you'll typically leave the key field blank so that a random key will be automatically generated. However, NetBox allows you to specify a key in case you need to restore a previously deleted token to operation. From 1eaf55c555875eab9b2c3b1255f6f2d53678701a Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 30 Mar 2022 14:14:49 -0400 Subject: [PATCH 15/26] Closes #8336: Add note about referening object in custom link template --- docs/models/extras/customlink.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/models/extras/customlink.md b/docs/models/extras/customlink.md index 7fd510841..b9b731751 100644 --- a/docs/models/extras/customlink.md +++ b/docs/models/extras/customlink.md @@ -2,7 +2,7 @@ Custom links allow users to display arbitrary hyperlinks to external content within NetBox object views. These are helpful for cross-referencing related records in systems outside NetBox. For example, you might create a custom link on the device view which links to the current device in a Network Monitoring System (NMS). -Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the Netbox item being viewed can be included in the link using [Jinja2 template code](https://jinja2docs.readthedocs.io/en/stable/) through the variable `obj`, and custom fields through `obj.cf`. +Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja2 template code](https://jinja2docs.readthedocs.io/en/stable/) through the variable `obj`, and custom fields through `obj.cf`. For example, you might define a link like this: @@ -32,6 +32,10 @@ The following context data is available within the template when rendering a cus | `user` | The current user (if authenticated) | | `perms` | The [permissions](https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions) assigned to the user | +While most of the context variables listed above will have consistent attributes, the object will be an instance of the specific object being viewed when the link is rendered. Different models have different fields and properties, so you may need to some research to determine the attributes available for use within your template for a specific object type. + +Checking the REST API representation of an object is generally a convenient way to determine what attributes are available. You can also reference the NetBox source code directly for a comprehensive list. + ## Conditional Rendering Only links which render with non-empty text are included on the page. You can employ conditional Jinja2 logic to control the conditions under which a link gets rendered. From 2d09a40663039bdd33c427f65b945272d10eafd3 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 30 Mar 2022 15:04:13 -0400 Subject: [PATCH 16/26] Closes #8601: Include group when displaying tenant assigned to cluster --- netbox/templates/virtualization/cluster.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html index b7af89bb2..b05ba3f8f 100644 --- a/netbox/templates/virtualization/cluster.html +++ b/netbox/templates/virtualization/cluster.html @@ -33,6 +33,9 @@ Tenant {% if object.tenant %} + {% if object.tenant.group %} + {{ object.tenant.group }} / + {% endif %} {{ object.tenant }} {% else %} None From 91e8f57afb7fd257533ed30e30c86ed3cd87c111 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 30 Mar 2022 15:39:28 -0400 Subject: [PATCH 17/26] Change log & cleanup for #8163, #8866 --- docs/release-notes/version-3.1.md | 5 +++++ netbox/project-static/dist/netbox.js | Bin 375655 -> 375623 bytes netbox/project-static/dist/netbox.js.map | Bin 344977 -> 344951 bytes 3 files changed, 5 insertions(+) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 303a05cae..5092d18ed 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -4,10 +4,15 @@ ### Enhancements +* [#8163](https://github.com/netbox-community/netbox/issues/8163) - Show bridge interface members under interface view * [#8785](https://github.com/netbox-community/netbox/issues/8785) - Permit wildcard values in IP address DNS names * [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups * [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form +### Bug Fixes + +* [#8866](https://github.com/netbox-community/netbox/issues/8866) - Prevent exception when searching for a rack position with no rack specified under device edit view + --- ## v3.1.10 (2022-03-25) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index be807c2deebe794c033929da381b3550b567e34e..136135ce76f1a844cd776f6f357dfe783c819959 100644 GIT binary patch delta 42 ycmaFF7M3lnwQF7M3lnwQ&N;`FX|pIjMR%`RN*od73)YYvWke#B`8_^YSz` Vt#eXK6sE6DT||{qvup-R!!DKM^AI-t&OaqESv=uPF2o2{*Hy) S@3XM_u``x!*W+PLHU|J+^Ac15 delta 88 zcmey~COWZQw4sHug{g(Pg=Gq>DPN$YW1xF8YMtb>s7cJ$0~ i+M3Q9%EDPv;Z)_U Date: Wed, 30 Mar 2022 15:51:12 -0400 Subject: [PATCH 18/26] Closes #8790: Include site and prefixes columns in VLAN group VLANs table --- docs/release-notes/version-3.1.md | 1 + netbox/ipam/views.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 5092d18ed..7e8e93632 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -6,6 +6,7 @@ * [#8163](https://github.com/netbox-community/netbox/issues/8163) - Show bridge interface members under interface view * [#8785](https://github.com/netbox-community/netbox/issues/8785) - Permit wildcard values in IP address DNS names +* [#8790](https://github.com/netbox-community/netbox/issues/8790) - Include site and prefixes columns in VLAN group VLANs table * [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups * [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index aab9a6249..e32cf4d96 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -795,7 +795,7 @@ class VLANGroupView(generic.ObjectView): vlans_count = vlans.count() vlans = add_available_vlans(vlans, vlan_group=instance) - vlans_table = tables.VLANTable(vlans, exclude=('site', 'group', 'prefixes')) + vlans_table = tables.VLANTable(vlans, exclude=('group',)) if request.user.has_perm('ipam.change_vlan') or request.user.has_perm('ipam.delete_vlan'): vlans_table.columns.show('pk') paginate_table(vlans_table, request) From a84ae88214b88a81af9ed96e9022d6e5a837f969 Mon Sep 17 00:00:00 2001 From: kkthxbye <> Date: Fri, 1 Apr 2022 09:34:16 +0200 Subject: [PATCH 19/26] Annotate rack search queryset with device count --- netbox/netbox/constants.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index 45de4d5b2..bc58ee5e4 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -65,7 +65,9 @@ DCIM_TYPES = OrderedDict( 'url': 'dcim:site_list', }), ('rack', { - 'queryset': Rack.objects.prefetch_related('site', 'location', 'tenant', 'role'), + 'queryset': Rack.objects.prefetch_related('site', 'location', 'tenant', 'role').annotate( + device_count=count_related(Device, 'rack') + ), 'filterset': RackFilterSet, 'table': RackTable, 'url': 'dcim:rack_list', From 35f3a42e7f8d6eb82448d73f25145a7a7f335de2 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 1 Apr 2022 08:31:53 -0400 Subject: [PATCH 20/26] Remove 2022 survey announcement --- README.md | 2 -- docs/index.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/README.md b/README.md index 42bf8b619..8429cd4b3 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ NetBox logo
-:loudspeaker: The **[2022 NetBox community survey](https://forms.gle/KR8YbR8GiJ9EYXM28)** is now open! We collect this feedback and demographic data from NetBox users around the world to help shape the project's long-term development goals. Please take a few minutes to share your responses! - ![Master branch build status](https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master) NetBox is an infrastructure resource modeling (IRM) tool designed to empower diff --git a/docs/index.md b/docs/index.md index 5742c0ab6..943f1d7ab 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,5 @@ ![NetBox](netbox_logo.svg "NetBox logo"){style="height: 100px; margin-bottom: 3em"} -:loudspeaker: The **[2022 NetBox community survey](https://forms.gle/KR8YbR8GiJ9EYXM28)** is now open! We collect this feedback and demographic data from NetBox users around the world to help shape the project's long-term development goals. Please take a few minutes to share your responses! - # What is NetBox? NetBox is an infrastructure resource modeling (IRM) application designed to empower network automation. Initially conceived by the network engineering team at [DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically to address the needs of network and infrastructure engineers. NetBox is made available as open source under the Apache 2 license. It encompasses the following aspects of network management: From 99a01207bcf3202d04986862398d3934bb5e912a Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 1 Apr 2022 09:06:44 -0400 Subject: [PATCH 21/26] Closes #9012: Linkify circuits count in providers list --- docs/release-notes/version-3.1.md | 2 ++ netbox/circuits/tables.py | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 7e8e93632..bab66f2ad 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -9,10 +9,12 @@ * [#8790](https://github.com/netbox-community/netbox/issues/8790) - Include site and prefixes columns in VLAN group VLANs table * [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups * [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form +* [#9012](https://github.com/netbox-community/netbox/issues/9012) - Linkify circuits count in providers list ### Bug Fixes * [#8866](https://github.com/netbox-community/netbox/issues/8866) - Prevent exception when searching for a rack position with no rack specified under device edit view +* [#9009](https://github.com/netbox-community/netbox/issues/9009) - Fix device count for racks in global search results --- diff --git a/netbox/circuits/tables.py b/netbox/circuits/tables.py index b4e0c7d2d..76fb96aaf 100644 --- a/netbox/circuits/tables.py +++ b/netbox/circuits/tables.py @@ -2,7 +2,9 @@ import django_tables2 as tables from django_tables2.utils import Accessor from tenancy.tables import TenantColumn -from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, MarkdownColumn, TagColumn, ToggleColumn +from utilities.tables import ( + BaseTable, ButtonsColumn, ChoiceFieldColumn, LinkedCountColumn, MarkdownColumn, TagColumn, ToggleColumn, +) from .models import * @@ -53,8 +55,10 @@ class ProviderTable(BaseTable): name = tables.Column( linkify=True ) - circuit_count = tables.Column( + circuit_count = LinkedCountColumn( accessor=Accessor('count_circuits'), + viewname='circuits:circuit_list', + url_params={'provider_id': 'pk'}, verbose_name='Circuits' ) comments = MarkdownColumn() From 780459d2bfd76d12c4125a31a20c6c0cee26ee09 Mon Sep 17 00:00:00 2001 From: Stephan Blanke Date: Sat, 2 Apr 2022 18:08:48 +0200 Subject: [PATCH 22/26] Closes #8365: Filtering for child devices by parent device --- netbox/dcim/filtersets.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index 504ad69ca..534a71762 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -639,6 +639,11 @@ class DeviceFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilte to_field_name='slug', label='Role (slug)', ) + parent_device_id = django_filters.ModelMultipleChoiceFilter( + field_name='parent_bay__device', + queryset=Device.objects.all(), + label='Parent Device (ID)', + ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label='Platform (ID)', From e575279738c65b659fe68919174c29c00816473d Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 4 Apr 2022 15:58:54 -0400 Subject: [PATCH 23/26] Changelog for #8365 --- docs/release-notes/version-3.1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index bab66f2ad..e3d75269a 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -5,6 +5,7 @@ ### Enhancements * [#8163](https://github.com/netbox-community/netbox/issues/8163) - Show bridge interface members under interface view +* [#8365](https://github.com/netbox-community/netbox/issues/8365) - Enable filtering child devices by parent device ID * [#8785](https://github.com/netbox-community/netbox/issues/8785) - Permit wildcard values in IP address DNS names * [#8790](https://github.com/netbox-community/netbox/issues/8790) - Include site and prefixes columns in VLAN group VLANs table * [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups From a7fc8621a87961e2ae91b373106cf1f91b9d2df7 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 5 Apr 2022 10:18:20 -0400 Subject: [PATCH 24/26] Closes #9036: Add bulk edit capability for site contact fields --- docs/release-notes/version-3.1.md | 1 + netbox/dcim/forms/bulk_edit.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index e3d75269a..3214ea002 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -11,6 +11,7 @@ * [#8830](https://github.com/netbox-community/netbox/issues/8830) - Add Checkpoint ClusterXL protocol for FHRP groups * [#8974](https://github.com/netbox-community/netbox/issues/8974) - Use monospace font for text areas in config revision form * [#9012](https://github.com/netbox-community/netbox/issues/9012) - Linkify circuits count in providers list +* [#9036](https://github.com/netbox-community/netbox/issues/9036) - Add bulk edit capability for site contact fields ### Bug Fixes diff --git a/netbox/dcim/forms/bulk_edit.py b/netbox/dcim/forms/bulk_edit.py index 3b604d79d..a48b1d8b2 100644 --- a/netbox/dcim/forms/bulk_edit.py +++ b/netbox/dcim/forms/bulk_edit.py @@ -122,6 +122,18 @@ class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm): label=_('ASNs'), required=False ) + contact_name = forms.CharField( + max_length=50, + required=False + ) + contact_phone = forms.CharField( + max_length=20, + required=False + ) + contact_email = forms.EmailField( + required=False, + label='Contact E-mail' + ) description = forms.CharField( max_length=100, required=False @@ -134,7 +146,8 @@ class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm): class Meta: nullable_fields = [ - 'region', 'group', 'tenant', 'asn', 'asns', 'description', 'time_zone', + 'region', 'group', 'tenant', 'asn', 'asns', 'contact_name', 'contact_phone', 'contact_email', 'description', + 'time_zone', ] From 0f5fe746e05f0a888fe3c823470bd6131d9349d1 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 5 Apr 2022 10:22:42 -0400 Subject: [PATCH 25/26] Add warning for legacy ASN field on site --- netbox/templates/dcim/site.html | 91 +++++++++++++++++---------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index aa17fd57f..cf03fbf2e 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -80,7 +80,14 @@ AS Number - {{ object.asn|placeholder }} + + {% if object.asn %} +
+ +
+ {% endif %} + {{ object.asn|placeholder }} + Time Zone @@ -128,50 +135,44 @@ {# Legacy contact fields #} - {% with deprecation_warning="This field will be removed in a future release. Please migrate this data to contact objects." %} - {% if object.contact_name %} - - Contact Name - - {% if object.contact_name %} -
- -
- {% endif %} - {{ object.contact_name|placeholder }} - - - {% endif %} - {% if object.contact_phone %} - - Contact Phone - - {% if object.contact_phone %} -
- -
- {{ object.contact_phone }} - {% else %} - - {% endif %} - - - {% endif %} - {% if object.contact_email %} - - Contact E-Mail - - {% if object.contact_email %} -
- -
- {{ object.contact_email }} - {% else %} - - {% endif %} - - - {% endif %} + {% with deprecation_warning="This field will be removed in NetBox v3.2. Please migrate this data to contact objects." %} + + Contact Name + + {% if object.contact_name %} +
+ +
+ {% endif %} + {{ object.contact_name|placeholder }} + + + + Contact Phone + + {% if object.contact_phone %} +
+ +
+ {{ object.contact_phone }} + {% else %} + + {% endif %} + + + + Contact E-Mail + + {% if object.contact_email %} +
+ +
+ {{ object.contact_email }} + {% else %} + + {% endif %} + + {% endwith %}
From 631de20a8d09bff5adf94fa91b21375431d7820d Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 5 Apr 2022 14:35:27 -0400 Subject: [PATCH 26/26] Release v3.1.11 --- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yaml | 2 +- docs/release-notes/version-3.1.md | 2 +- netbox/netbox/settings.py | 2 +- requirements.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 21dc72545..0757c7283 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.1.10 + placeholder: v3.1.11 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index f64f5ccba..eb1e216cd 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.1.10 + placeholder: v3.1.11 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 3214ea002..27ba4e69e 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -1,6 +1,6 @@ # NetBox v3.1 -## v3.1.11 (FUTURE) +## v3.1.11 (2022-04-05) ### Enhancements diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index decb7cea8..aee9ebc83 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -19,7 +19,7 @@ from netbox.config import PARAMS # Environment setup # -VERSION = '3.1.11-dev' +VERSION = '3.1.11' # Hostname HOSTNAME = platform.node() diff --git a/requirements.txt b/requirements.txt index b331fb17e..801902b3c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ gunicorn==20.1.0 Jinja2==3.0.3 Markdown==3.3.6 markdown-include==0.6.0 -mkdocs-material==8.2.7 +mkdocs-material==8.2.8 netaddr==0.8.0 Pillow==9.0.1 psycopg2-binary==2.9.3