git: 8b9888a61283 - main - net-mgmt/netbox: Update to 3.3.4

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Sat, 17 Sep 2022 10:50:14 UTC
The branch main has been updated by kai:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8b9888a6128391ae12076603d39548cc9361b569

commit 8b9888a6128391ae12076603d39548cc9361b569
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2022-09-17 10:45:00 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2022-09-17 10:45:00 +0000

    net-mgmt/netbox: Update to 3.3.4
    
    * Prune obsolete update instructions/notes for NetBox releases older
      than 3.0.
    
    * Add a directive to the netbox rc sample script that also simplifies
      the upgrade process. [1]
    
    * Fix a typo regarding the housekeeping script in the upgrade
      instructions. [1]
    
    Changelog since 3.2.9:
    
    It contains many bugfixes/enhancements and the following new features:
    
    * Multi-object Cable Terminations
    * L2VPN Modeling
    * PoE Interface Attributes
    * Half-Height Rack Units
    * Restrict API Tokens by Client IP
    * Reference User in Permission Constraints
    * Custom Field Grouping
    * Toggle Custom Field Visibility
    
    https://netbox.readthedocs.io/en/stable/release-notes/version-3.3/
    
    Reported by:    Thomas Kurschel (via e-mail) [1]
    MFH:            No (feature release)
---
 net-mgmt/netbox/Makefile                 |  17 ++--
 net-mgmt/netbox/distinfo                 |   6 +-
 net-mgmt/netbox/files/netboxrc.sample.in |  19 ++++
 net-mgmt/netbox/files/pkg-message.in     | 161 +++++++++++--------------------
 net-mgmt/netbox/pkg-plist                | 130 +++++++++++++++++--------
 5 files changed, 176 insertions(+), 157 deletions(-)

diff --git a/net-mgmt/netbox/Makefile b/net-mgmt/netbox/Makefile
index a9b500eaab9a..b69a8ec44c47 100644
--- a/net-mgmt/netbox/Makefile
+++ b/net-mgmt/netbox/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	netbox
 DISTVERSIONPREFIX=	v
-DISTVERSION=	3.2.9
+DISTVERSION=	3.3.4
 CATEGORIES=	net-mgmt python
 
 MAINTAINER=	kai@FreeBSD.org
@@ -25,35 +25,36 @@ LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 #
 RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django40>=4.0.7<4.1:www/py-django40@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-cors-headers>=3.13.0<4:www/py-dj40-django-cors-headers@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj40-django-debug-toolbar>=3.5.0<4:www/py-dj40-django-debug-toolbar@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-debug-toolbar>=3.6.0<4:www/py-dj40-django-debug-toolbar@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-filter>=22.1<23:www/py-dj40-django-filter@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-graphiql-debug-toolbar>=0.2.0<1:www/py-dj40-django-graphiql-debug-toolbar@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-mptt>=0.13.4<0.14:www/py-dj40-django-mptt@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-prometheus>=2.2.0<2.3:www/py-dj40-django-prometheus@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-redis>=5.2.0<6:www/py-dj40-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-rich>=1.4.0<2:www/py-dj40-django-rich@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-rq>=2.5.1<2.6:devel/py-dj40-django-rq@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-tables2>=2.4.1<2.5:www/py-dj40-django-tables2@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj40-django-taggit>=2.1.0<3:www/py-dj40-django-taggit@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-django-taggit>=3.0.0<4:www/py-dj40-django-taggit@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-django-timezone-field>=5.0<6:www/py-dj40-django-timezone-field@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-djangorestframework>=3.13.1<3.14.0:www/py-dj40-djangorestframework@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dj40-drf-yasg>=1.20.0<1.22:www/py-dj40-drf-yasg@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj40-drf-yasg>=1.21.3<1.22:www/py-dj40-drf-yasg@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}dj40-graphene-django>=2.15.0<3:devel/py-dj40-graphene-django@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}django-pglocks>=1.0.4<1.1:www/py-django-pglocks@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}bleach>=5.0.1<6:www/py-bleach@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0.1<4:devel/py-Jinja2@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.7<3.5:textproc/py-markdown@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}markdown-include>=0.6.0<1:textproc/py-markdown-include@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}markdown-include>=0.7.0<1:textproc/py-markdown-include@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocs-material>=8.2.11<9:textproc/py-mkdocs-material@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}mkdocstrings>=0.17.0<1:textproc/py-mkdocstrings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}netaddr>=0.8.0<1:net/py-netaddr@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}pillow>=9.1.1:graphics/py-pillow@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pillow>=9.2.0:graphics/py-pillow@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}psycopg2>=2.9.3<3:databases/py-psycopg2@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}sentry-sdk>=1.5.12<2:devel/py-sentry-sdk@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}social-auth-app-django>=5.0.0<6:www/py-social-auth-app-django@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.2.0<5:security/py-social-auth-core@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}social-auth-core>=4.3.0<5:security/py-social-auth-core@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}svgwrite>=1.4.3<2:graphics/py-svgwrite@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}tablib>=3.2.1<4:textproc/py-tablib@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}tzdata>=2022.1:devel/py-tzdata@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}tzdata>=2022.2:devel/py-tzdata@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}yaml>=5.4.1<7:devel/py-yaml@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}gunicorn>=20.1.0<21:www/py-gunicorn@${PY_FLAVOR}
 
diff --git a/net-mgmt/netbox/distinfo b/net-mgmt/netbox/distinfo
index a376ac85be58..ffc0da4ea2d1 100644
--- a/net-mgmt/netbox/distinfo
+++ b/net-mgmt/netbox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1660761613
-SHA256 (netbox-community-netbox-v3.2.9_GH0.tar.gz) = 4d22ed99ea9244b4c167b268eda0af2951f832a0a7b4e653c1b72ea4be2bcb3b
-SIZE (netbox-community-netbox-v3.2.9_GH0.tar.gz) = 4837923
+TIMESTAMP = 1663407064
+SHA256 (netbox-community-netbox-v3.3.4_GH0.tar.gz) = 88de5e90a7632572416bcd52327bd208b2a96f569cbd2987206bd9f5c841f8ab
+SIZE (netbox-community-netbox-v3.3.4_GH0.tar.gz) = 5217432
diff --git a/net-mgmt/netbox/files/netboxrc.sample.in b/net-mgmt/netbox/files/netboxrc.sample.in
index 2502f9c0b14e..7510729b0701 100644
--- a/net-mgmt/netbox/files/netboxrc.sample.in
+++ b/net-mgmt/netbox/files/netboxrc.sample.in
@@ -44,10 +44,12 @@
 name="netbox"
 rcvar=netbox_enable
 netbox_path=%%DATADIR%%
+extra_commands="upgrade"
 
 load_rc_config $name
 
 start_precmd="netbox_precmd"
+upgrade_cmd="netbox_upgrade"
 command=${netbox_program:-%%LOCALBASE%%/bin/gunicorn}
 procname=${netbox_procname:-%%PYTHON_CMD%%}
 netbox_chdir=${netbox_path}
@@ -88,4 +90,21 @@ netbox_precmd()
 	install -d -o ${netbox_user} `dirname ${pidfile}`
 }
 
+netbox_upgrade()
+{
+	if [ -f ${pidfile} ]; then
+		cd ${netbox_path}
+		%%PYTHON_CMD%% manage.py migrate
+		%%PYTHON_CMD%% manage.py trace_paths --no-input
+		%%LOCALBASE%%/bin/mkdocs build
+		%%PYTHON_CMD%% manage.py collectstatic --no-input
+		%%PYTHON_CMD%% manage.py remove_stale_contenttypes --no-input
+		%%PYTHON_CMD%% manage.py clearsessions
+		%%PYTHON_CMD%% manage.py clearcache
+		echo "Please restart NetBox and the WSGI environment."
+	else
+		echo "NetBox is not running!"
+	fi
+}
+
 run_rc_command "$1"
diff --git a/net-mgmt/netbox/files/pkg-message.in b/net-mgmt/netbox/files/pkg-message.in
index 9cff229b226b..490cbeb03501 100644
--- a/net-mgmt/netbox/files/pkg-message.in
+++ b/net-mgmt/netbox/files/pkg-message.in
@@ -33,110 +33,6 @@ The following steps are required to finish the upgrade:
 2. Restart WSGI/httpd environment (supervisord/apache/nginx/etc.)
 EOD
 }
-{ type: upgrade
-  maximum_version: 2.9.8
-  message: <<EOD
-Changes related to the NetBox configuration:
-
-1. If in use, LDAP authentication must be enabled by setting
-   REMOTE_AUTH_BACKEND to 'netbox.authentication.LDAPBackend'.  (The LDAP
-   configuration parameters in ldap_config.py remain unchanged.)
-
-2. REMOTE_AUTH_DEFAULT_PERMISSIONS now takes a dictionary rather than a list.
-   This is a mapping of permission names to a dictionary of constraining
-   attributes, or None.
-
-   For example, ['dcim.add_site', 'dcim.change_site'] would become
-   {'dcim.add_site': None, 'dcim.change_site': None}.
-
-3. Support for the DEFAULT_TIMEOUT parameter under REDIS database configuration
-   was removed.  Set RQ_DEFAULT_TIMEOUT as a global configuration parameter
-   instead.
-
-
-Changes related to permissions:
-
-1. Any permissions referencing the legacy ReportResult model (e.g.
-   'extras.view_reportresult') should be updated to reference the Report model.
-
-2. The 'secrets.activate_userkey' permission no longer exists.  Instead,
-   'secrets.change_userkey' is checked to determine whether a user has the
-   ability to activate a UserKey.
-
-3. The 'users.delete_token permission' is no longer enforced.  All users are
-   permitted to delete their own API tokens.
-
-
-Changes to the REST API:
-
-Numerous changes have been made to the REST API. Please check the changelogs
-for more details.
-
-
-Workaround for issues with invalid nested data:
-
-Users that are experiencing invalid nested data with regions, rack groups, or
-tenant groups can perform a one-time operation using the NetBox shell to
-rebuild the correct nested relationships after upgrading:
-
-# cd %%DATADIR%%
-# python%%PYTHON_VER%% manage.py nbshell
-### NetBox interactive shell (localhost)
-### Python 3.x.x | Django 3.1.x | NetBox 2.9.x
-### lsmodels() will show available models. Use help(<model>) for more info.
->>> Region.objects.rebuild()
->>> RackGroup.objects.rebuild()
->>> TenantGroup.objects.rebuild()
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.9.9
-  message: <<EOD
-An new sample rc script has been added to manage the RQ-worker service.  If the
-EXAMPLES option is enabled (which is the default) it can be found in the
-following directory:
-
-%%EXAMPLESDIR%%/netbox_rq.sample
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.10.3
-  message: <<EOD
-The Django templating language (DTL) is no longer supported for export
-templates.  Please ensure that all export templates use Jinja2 before
-upgrading.
-
-Also the support for embedded graphs was completely removed and several changes
-to the REST API were made.  Please check the changelogs for further details.
-EOD
-}
-{ type: upgrade
-  maximum_version: 2.11.9
-  message: <<EOD
-* All objects now use numeric IDs in their UI view URLs instead of slugs.  You
-  may need to update external references to NetBox objects.  (Note that this
-  does _not_ affect the REST API.)
-
-* The UI now uses numeric IDs when filtering object lists.  You may need to
-  update external links to filtered object lists.  (Note that the slug- and
-  name-based filters will continue to work, however the filter selection fields
-  within the UI will not be automatically populated.)
-
-* The RackGroup model has been renamed to "Location".  Its REST API endpoint
-  has changed from /api/dcim/rack-groups/ to /api/dcim/locations/.
-
-* The foreign key field "group" on dcim.Rack has been renamed to "location".
-
-* The foreign key field "site" on ipam.VLANGroup has been replaced with the
-  "scope" generic foreign key.
-
-* Custom script ObjectVars no longer support the "queryset" parameter:
-  Use "model" instead.
-
-Several changes to the REST API were made as well.  Please check the changelogs
-for further details.
-EOD
-}
 { type: upgrade
   maximum_version: 3.0.4
   message: <<EOD
@@ -202,8 +98,8 @@ The NetBox 3.0 release contains major changes, so at least items 1.), 2.) and
 
    Please run following commands to enable the new script:
 
-   # cp %%EXAMPLESDIR%%/850-netbox-housekeeping.sample %%LOCALBASE%%/etc/periodic/daily/850-netbox-housekeeping
-   # chmod 555 %%LOCALBASE%%/etc/periodic/daily/850-netbox-housekeeping
+   # cp %%EXAMPLESDIR%%/850.netbox-housekeeping.sample %%LOCALBASE%%/etc/periodic/daily/850.netbox-housekeeping
+   # chmod 555 %%LOCALBASE%%/etc/periodic/daily/850.netbox-housekeeping
    # sysrc -f /etc/periodic.conf daily_netbox_housekeeping_enable="YES"
 EOD
 }
@@ -331,4 +227,57 @@ to be issued after each update:
 # python%%PYTHON_VER%% manage.py clearcache
 EOD
 }
+{ type: upgrade
+  maximum_version: 3.3.4
+  message: <<EOD
+The NetBox 3.3 release contains some breaking API changes, so please check the
+following items before running the database migrations:
+
+* Device position, device type height, and rack unit values are now reported
+  as decimals (e.g. 1.0 or 1.5) to support modeling half-height rack units.
+
+* The "nat_outside" relation on the IP address model now returns a list of zero
+  or more related IP addresses, rather than a single instance (or None).
+
+* Several fields on the cable API serializers have been altered or removed to
+  support multiple-object cable terminations:
+
++------------------------------+------+-------------------------------+------+
+| Old Name                     | Type | New Name                      | Type |
++------------------------------+------+-------------------------------+------+
+| termination_a_type           | str  | Removed                       | -    |
+| termination_b_type           | str  | Removed                       | -    |
+| termination_a_id             | int  | Removed                       | -    |
+| termination_b_id             | int  | Removed                       | -    |
+| termination_a                | obj  | a_terminations                | list |
+| termination_b                | obj  | b_terminations                | list |
++------------------------------+------+-------------------------------+------+
+
+* As with the cable model, several API fields on all objects to which cables
+  can be connected (interfaces, circuit terminations, etc.) have been changed:
+
++------------------------------+------+-------------------------------+------+
+| Old Name                     | Type | New Name                      | Type |
++------------------------------+------+-------------------------------+------+
+| link_peer                    | obj  | link_peers                    | list |
+| link_peer_type               | str  | link_peers_type               | str  |
+| connected_endpoint           | obj  | connected_endpoints           | list |
+| connected_endpoint_type      | str  | connected_endpoints_type      | str  |
+| connected_endpoint_reachable | bool | connected_endpoints_reachable | bool |
++------------------------------+------+-------------------------------+------+
+
+* The cable path serialization returned by the "/paths/" endpoint for
+  pass-through ports has been simplified, and the following fields removed:
+
+  "origin_type", "origin", "destination_type", "destination". (Additionally,
+  "is_complete" has been added.)
+
+* Several changes to the REST API were made as well.  Please check the
+  changelogs for further details.
+
+* The netbox sample rc script got a new "upgrade" directive that also
+  simplifies the upgrade process (database migrations, building the embedded
+  documentation, etc.).
+EOD
+}
 ]
diff --git a/net-mgmt/netbox/pkg-plist b/net-mgmt/netbox/pkg-plist
index cea826a5998c..4ff53d8694e8 100644
--- a/net-mgmt/netbox/pkg-plist
+++ b/net-mgmt/netbox/pkg-plist
@@ -29,6 +29,9 @@
 %%DATADIR%%/circuits/migrations/0033_standardize_id_fields.py
 %%DATADIR%%/circuits/migrations/0034_created_datetimefield.py
 %%DATADIR%%/circuits/migrations/0035_provider_asns.py
+%%DATADIR%%/circuits/migrations/0036_circuit_termination_date_tags_custom_fields.py
+%%DATADIR%%/circuits/migrations/0037_new_cabling_models.py
+%%DATADIR%%/circuits/migrations/0038_cabling_cleanup.py
 %%DATADIR%%/circuits/migrations/__init__.py
 %%DATADIR%%/circuits/models/__init__.py
 %%DATADIR%%/circuits/models/circuits.py
@@ -68,6 +71,7 @@
 %%DATADIR%%/dcim/forms/object_create.py
 %%DATADIR%%/dcim/forms/object_import.py
 %%DATADIR%%/dcim/graphql/__init__.py
+%%DATADIR%%/dcim/graphql/mixins.py
 %%DATADIR%%/dcim/graphql/schema.py
 %%DATADIR%%/dcim/graphql/types.py
 %%DATADIR%%/dcim/lookups.py
@@ -100,6 +104,14 @@
 %%DATADIR%%/dcim/migrations/0151_interface_speed_duplex.py
 %%DATADIR%%/dcim/migrations/0152_standardize_id_fields.py
 %%DATADIR%%/dcim/migrations/0153_created_datetimefield.py
+%%DATADIR%%/dcim/migrations/0154_half_height_rack_units.py
+%%DATADIR%%/dcim/migrations/0155_interface_poe_mode_type.py
+%%DATADIR%%/dcim/migrations/0156_location_status.py
+%%DATADIR%%/dcim/migrations/0157_new_cabling_models.py
+%%DATADIR%%/dcim/migrations/0158_populate_cable_terminations.py
+%%DATADIR%%/dcim/migrations/0159_populate_cable_paths.py
+%%DATADIR%%/dcim/migrations/0160_populate_cable_ends.py
+%%DATADIR%%/dcim/migrations/0161_cabling_cleanup.py
 %%DATADIR%%/dcim/migrations/__init__.py
 %%DATADIR%%/dcim/models/__init__.py
 %%DATADIR%%/dcim/models/cables.py
@@ -110,9 +122,12 @@
 %%DATADIR%%/dcim/models/racks.py
 %%DATADIR%%/dcim/models/sites.py
 %%DATADIR%%/dcim/signals.py
-%%DATADIR%%/dcim/svg.py
+%%DATADIR%%/dcim/svg/__init__.py
+%%DATADIR%%/dcim/svg/cables.py
+%%DATADIR%%/dcim/svg/racks.py
 %%DATADIR%%/dcim/tables/__init__.py
 %%DATADIR%%/dcim/tables/cables.py
+%%DATADIR%%/dcim/tables/connections.py
 %%DATADIR%%/dcim/tables/devices.py
 %%DATADIR%%/dcim/tables/devicetypes.py
 %%DATADIR%%/dcim/tables/modules.py
@@ -131,11 +146,7 @@
 %%DATADIR%%/dcim/urls.py
 %%DATADIR%%/dcim/utils.py
 %%DATADIR%%/dcim/views.py
-%%DATADIR%%/docs/additional-features/change-logging.md
-%%DATADIR%%/docs/additional-features/journaling.md
-%%DATADIR%%/docs/additional-features/napalm.md
-%%DATADIR%%/docs/additional-features/prometheus-metrics.md
-%%DATADIR%%/docs/additional-features/webhooks.md
+%%DATADIR%%/docs/_theme/main.html
 %%DATADIR%%/docs/administration/authentication/microsoft-azure-ad.md
 %%DATADIR%%/docs/administration/authentication/okta.md
 %%DATADIR%%/docs/administration/authentication/overview.md
@@ -144,26 +155,21 @@
 %%DATADIR%%/docs/administration/netbox-shell.md
 %%DATADIR%%/docs/administration/permissions.md
 %%DATADIR%%/docs/administration/replicating-netbox.md
-%%DATADIR%%/docs/configuration/dynamic-settings.md
+%%DATADIR%%/docs/configuration/data-validation.md
+%%DATADIR%%/docs/configuration/date-time.md
+%%DATADIR%%/docs/configuration/default-values.md
+%%DATADIR%%/docs/configuration/development.md
 %%DATADIR%%/docs/configuration/error-reporting.md
 %%DATADIR%%/docs/configuration/index.md
-%%DATADIR%%/docs/configuration/optional-settings.md
+%%DATADIR%%/docs/configuration/miscellaneous.md
+%%DATADIR%%/docs/configuration/napalm.md
+%%DATADIR%%/docs/configuration/plugins.md
 %%DATADIR%%/docs/configuration/remote-authentication.md
-%%DATADIR%%/docs/configuration/required-settings.md
-%%DATADIR%%/docs/core-functionality/circuits.md
-%%DATADIR%%/docs/core-functionality/contacts.md
-%%DATADIR%%/docs/core-functionality/device-types.md
-%%DATADIR%%/docs/core-functionality/devices.md
-%%DATADIR%%/docs/core-functionality/ipam.md
-%%DATADIR%%/docs/core-functionality/modules.md
-%%DATADIR%%/docs/core-functionality/power.md
-%%DATADIR%%/docs/core-functionality/services.md
-%%DATADIR%%/docs/core-functionality/sites-and-racks.md
-%%DATADIR%%/docs/core-functionality/tenancy.md
-%%DATADIR%%/docs/core-functionality/virtualization.md
-%%DATADIR%%/docs/core-functionality/vlans.md
-%%DATADIR%%/docs/core-functionality/wireless.md
+%%DATADIR%%/docs/configuration/required-parameters.md
+%%DATADIR%%/docs/configuration/security.md
+%%DATADIR%%/docs/configuration/system.md
 %%DATADIR%%/docs/customization/custom-fields.md
+%%DATADIR%%/docs/customization/custom-links.md
 %%DATADIR%%/docs/customization/custom-scripts.md
 %%DATADIR%%/docs/customization/custom-validation.md
 %%DATADIR%%/docs/customization/export-templates.md
@@ -172,6 +178,7 @@
 %%DATADIR%%/docs/development/application-registry.md
 %%DATADIR%%/docs/development/extending-models.md
 %%DATADIR%%/docs/development/getting-started.md
+%%DATADIR%%/docs/development/git-cheat-sheet.md
 %%DATADIR%%/docs/development/index.md
 %%DATADIR%%/docs/development/models.md
 %%DATADIR%%/docs/development/release-checklist.md
@@ -180,7 +187,25 @@
 %%DATADIR%%/docs/development/user-preferences.md
 %%DATADIR%%/docs/development/web-ui.md
 %%DATADIR%%/docs/extra.css
-%%DATADIR%%/docs/graphql-api/overview.md
+%%DATADIR%%/docs/features/api-integration.md
+%%DATADIR%%/docs/features/authentication-permissions.md
+%%DATADIR%%/docs/features/change-logging.md
+%%DATADIR%%/docs/features/circuits.md
+%%DATADIR%%/docs/features/contacts.md
+%%DATADIR%%/docs/features/context-data.md
+%%DATADIR%%/docs/features/customization.md
+%%DATADIR%%/docs/features/devices-cabling.md
+%%DATADIR%%/docs/features/facilities.md
+%%DATADIR%%/docs/features/ipam.md
+%%DATADIR%%/docs/features/journaling.md
+%%DATADIR%%/docs/features/l2vpn-overlay.md
+%%DATADIR%%/docs/features/power-tracking.md
+%%DATADIR%%/docs/features/tenancy.md
+%%DATADIR%%/docs/features/virtualization.md
+%%DATADIR%%/docs/features/vlan-management.md
+%%DATADIR%%/docs/features/wireless.md
+%%DATADIR%%/docs/getting-started/planning.md
+%%DATADIR%%/docs/getting-started/populating-data.md
 %%DATADIR%%/docs/index.md
 %%DATADIR%%/docs/installation/1-postgresql.md
 %%DATADIR%%/docs/installation/2-redis.md
@@ -189,8 +214,13 @@
 %%DATADIR%%/docs/installation/5-http-server.md
 %%DATADIR%%/docs/installation/6-ldap.md
 %%DATADIR%%/docs/installation/index.md
-%%DATADIR%%/docs/installation/migrating-to-systemd.md
 %%DATADIR%%/docs/installation/upgrading.md
+%%DATADIR%%/docs/integrations/graphql-api.md
+%%DATADIR%%/docs/integrations/napalm.md
+%%DATADIR%%/docs/integrations/prometheus-metrics.md
+%%DATADIR%%/docs/integrations/rest-api.md
+%%DATADIR%%/docs/integrations/webhooks.md
+%%DATADIR%%/docs/introduction.md
 %%DATADIR%%/docs/media/admin_ui_run_permission.png
 %%DATADIR%%/docs/media/authentication/azure_ad_add_app_registration.png
 %%DATADIR%%/docs/media/authentication/azure_ad_add_client_secret.png
@@ -205,15 +235,18 @@
 %%DATADIR%%/docs/media/authentication/okta_integration_parameters.png
 %%DATADIR%%/docs/media/authentication/okta_login_portal.png
 %%DATADIR%%/docs/media/authentication/okta_web_app_integration.png
+%%DATADIR%%/docs/media/development/github.png
 %%DATADIR%%/docs/media/development/github_fork_button.png
 %%DATADIR%%/docs/media/development/github_fork_dialog.png
+%%DATADIR%%/docs/media/development/github_new_issue.png
 %%DATADIR%%/docs/media/installation/netbox_application_stack.png
+%%DATADIR%%/docs/media/installation/upgrade_paths.png
 %%DATADIR%%/docs/media/models/dcim_cable_trace.png
 %%DATADIR%%/docs/media/power_distribution.png
 %%DATADIR%%/docs/media/release-notes/netbox30_ui.png
 %%DATADIR%%/docs/media/screenshots/cable-trace.png
 %%DATADIR%%/docs/media/screenshots/home-dark.png
-%%DATADIR%%/docs/media/screenshots/home-light.png
+%%DATADIR%%/docs/media/screenshots/netbox-ui.png
 %%DATADIR%%/docs/media/screenshots/prefixes-list.png
 %%DATADIR%%/docs/media/screenshots/rack.png
 %%DATADIR%%/docs/models/circuits/circuit.md
@@ -265,6 +298,7 @@
 %%DATADIR%%/docs/models/extras/customlink.md
 %%DATADIR%%/docs/models/extras/exporttemplate.md
 %%DATADIR%%/docs/models/extras/imageattachment.md
+%%DATADIR%%/docs/models/extras/journalentry.md
 %%DATADIR%%/docs/models/extras/tag.md
 %%DATADIR%%/docs/models/extras/webhook.md
 %%DATADIR%%/docs/models/ipam/aggregate.md
@@ -273,6 +307,8 @@
 %%DATADIR%%/docs/models/ipam/fhrpgroupassignment.md
 %%DATADIR%%/docs/models/ipam/ipaddress.md
 %%DATADIR%%/docs/models/ipam/iprange.md
+%%DATADIR%%/docs/models/ipam/l2vpn.md
+%%DATADIR%%/docs/models/ipam/l2vpntermination.md
 %%DATADIR%%/docs/models/ipam/prefix.md
 %%DATADIR%%/docs/models/ipam/rir.md
 %%DATADIR%%/docs/models/ipam/role.md
@@ -287,8 +323,6 @@
 %%DATADIR%%/docs/models/tenancy/contactrole.md
 %%DATADIR%%/docs/models/tenancy/tenant.md
 %%DATADIR%%/docs/models/tenancy/tenantgroup.md
-%%DATADIR%%/docs/models/users/objectpermission.md
-%%DATADIR%%/docs/models/users/token.md
 %%DATADIR%%/docs/models/virtualization/cluster.md
 %%DATADIR%%/docs/models/virtualization/clustergroup.md
 %%DATADIR%%/docs/models/virtualization/clustertype.md
@@ -300,6 +334,7 @@
 %%DATADIR%%/docs/netbox_logo.png
 %%DATADIR%%/docs/netbox_logo.svg
 %%DATADIR%%/docs/plugins/development/background-tasks.md
+%%DATADIR%%/docs/plugins/development/exceptions.md
 %%DATADIR%%/docs/plugins/development/filtersets.md
 %%DATADIR%%/docs/plugins/development/forms.md
 %%DATADIR%%/docs/plugins/development/graphql-api.md
@@ -312,6 +347,7 @@
 %%DATADIR%%/docs/plugins/development/views.md
 %%DATADIR%%/docs/plugins/index.md
 %%DATADIR%%/docs/reference/conditions.md
+%%DATADIR%%/docs/reference/filtering.md
 %%DATADIR%%/docs/reference/markdown.md
 %%DATADIR%%/docs/release-notes/index.md
 %%DATADIR%%/docs/release-notes/version-2.0.md
@@ -329,9 +365,7 @@
 %%DATADIR%%/docs/release-notes/version-3.0.md
 %%DATADIR%%/docs/release-notes/version-3.1.md
 %%DATADIR%%/docs/release-notes/version-3.2.md
-%%DATADIR%%/docs/rest-api/authentication.md
-%%DATADIR%%/docs/rest-api/filtering.md
-%%DATADIR%%/docs/rest-api/overview.md
+%%DATADIR%%/docs/release-notes/version-3.3.md
 %%DATADIR%%/extras/__init__.py
 %%DATADIR%%/extras/admin.py
 %%DATADIR%%/extras/api/__init__.py
@@ -386,6 +420,10 @@
 %%DATADIR%%/extras/migrations/0071_standardize_id_fields.py
 %%DATADIR%%/extras/migrations/0072_created_datetimefield.py
 %%DATADIR%%/extras/migrations/0073_journalentry_tags_custom_fields.py
+%%DATADIR%%/extras/migrations/0074_customfield_extensions.py
+%%DATADIR%%/extras/migrations/0075_configcontext_locations.py
+%%DATADIR%%/extras/migrations/0076_tag_slug_unicode.py
+%%DATADIR%%/extras/migrations/0077_customlink_extend_text_and_url.py
 %%DATADIR%%/extras/migrations/__init__.py
 %%DATADIR%%/extras/models/__init__.py
 %%DATADIR%%/extras/models/change_logging.py
@@ -486,10 +524,14 @@
 %%DATADIR%%/ipam/migrations/0055_servicetemplate.py
 %%DATADIR%%/ipam/migrations/0056_standardize_id_fields.py
 %%DATADIR%%/ipam/migrations/0057_created_datetimefield.py
+%%DATADIR%%/ipam/migrations/0058_ipaddress_nat_inside_nonunique.py
+%%DATADIR%%/ipam/migrations/0059_l2vpn.py
+%%DATADIR%%/ipam/migrations/0060_alter_l2vpn_slug.py
 %%DATADIR%%/ipam/migrations/__init__.py
 %%DATADIR%%/ipam/models/__init__.py
 %%DATADIR%%/ipam/models/fhrp.py
 %%DATADIR%%/ipam/models/ip.py
+%%DATADIR%%/ipam/models/l2vpn.py
 %%DATADIR%%/ipam/models/services.py
 %%DATADIR%%/ipam/models/vlans.py
 %%DATADIR%%/ipam/models/vrfs.py
@@ -498,6 +540,7 @@
 %%DATADIR%%/ipam/tables/__init__.py
 %%DATADIR%%/ipam/tables/fhrp.py
 %%DATADIR%%/ipam/tables/ip.py
+%%DATADIR%%/ipam/tables/l2vpn.py
 %%DATADIR%%/ipam/tables/services.py
 %%DATADIR%%/ipam/tables/vlans.py
 %%DATADIR%%/ipam/tables/vrfs.py
@@ -528,6 +571,7 @@
 %%DATADIR%%/netbox/api/serializers/__init__.py
 %%DATADIR%%/netbox/api/serializers/base.py
 %%DATADIR%%/netbox/api/serializers/features.py
+%%DATADIR%%/netbox/api/serializers/generic.py
 %%DATADIR%%/netbox/api/serializers/nested.py
 %%DATADIR%%/netbox/api/views.py
 %%DATADIR%%/netbox/api/viewsets/__init__.py
@@ -539,6 +583,7 @@
 %%DATADIR%%/netbox/configuration_testing.py
 %%DATADIR%%/netbox/constants.py
 %%DATADIR%%/netbox/context_processors.py
+%%DATADIR%%/netbox/denormalized.py
 %%DATADIR%%/netbox/filtersets.py
 %%DATADIR%%/netbox/forms/__init__.py
 %%DATADIR%%/netbox/forms/base.py
@@ -574,7 +619,9 @@
 %%DATADIR%%/netbox/views/generic/base.py
 %%DATADIR%%/netbox/views/generic/bulk_views.py
 %%DATADIR%%/netbox/views/generic/feature_views.py
+%%DATADIR%%/netbox/views/generic/mixins.py
 %%DATADIR%%/netbox/views/generic/object_views.py
+%%DATADIR%%/netbox/views/generic/utils.py
 %%DATADIR%%/netbox/wsgi.py
 %%DATADIR%%/project-static/.eslintignore
 %%DATADIR%%/project-static/.eslintrc
@@ -703,11 +750,9 @@
 %%DATADIR%%/templates/circuits/providernetwork.html
 %%DATADIR%%/templates/dcim/bulk_disconnect.html
 %%DATADIR%%/templates/dcim/cable.html
-%%DATADIR%%/templates/dcim/cable_connect.html
 %%DATADIR%%/templates/dcim/cable_edit.html
 %%DATADIR%%/templates/dcim/cable_trace.html
 %%DATADIR%%/templates/dcim/component_create.html
-%%DATADIR%%/templates/dcim/component_template_create.html
 %%DATADIR%%/templates/dcim/connections_list.html
 %%DATADIR%%/templates/dcim/consoleport.html
 %%DATADIR%%/templates/dcim/consoleport_delete.html
@@ -729,7 +774,6 @@
 %%DATADIR%%/templates/dcim/device/powerports.html
 %%DATADIR%%/templates/dcim/device/rearports.html
 %%DATADIR%%/templates/dcim/device/status.html
-%%DATADIR%%/templates/dcim/device_component_edit.html
 %%DATADIR%%/templates/dcim/device_edit.html
 %%DATADIR%%/templates/dcim/device_import.html
 %%DATADIR%%/templates/dcim/device_import_child.html
@@ -743,8 +787,6 @@
 %%DATADIR%%/templates/dcim/devicetype/base.html
 %%DATADIR%%/templates/dcim/devicetype/component_templates.html
 %%DATADIR%%/templates/dcim/frontport.html
-%%DATADIR%%/templates/dcim/frontporttemplate_create.html
-%%DATADIR%%/templates/dcim/inc/cable_form.html
 %%DATADIR%%/templates/dcim/inc/cable_termination.html
 %%DATADIR%%/templates/dcim/inc/cable_toggle_buttons.html
 %%DATADIR%%/templates/dcim/inc/cabletermination.html
@@ -759,15 +801,12 @@
 %%DATADIR%%/templates/dcim/interface_edit.html
 %%DATADIR%%/templates/dcim/inventoryitem.html
 %%DATADIR%%/templates/dcim/inventoryitem_bulk_delete.html
-%%DATADIR%%/templates/dcim/inventoryitem_create.html
 %%DATADIR%%/templates/dcim/inventoryitem_delete.html
 %%DATADIR%%/templates/dcim/inventoryitemrole.html
-%%DATADIR%%/templates/dcim/inventoryitemtemplate_create.html
 %%DATADIR%%/templates/dcim/location.html
 %%DATADIR%%/templates/dcim/manufacturer.html
 %%DATADIR%%/templates/dcim/module.html
 %%DATADIR%%/templates/dcim/modulebay.html
-%%DATADIR%%/templates/dcim/modulebaytemplate_create.html
 %%DATADIR%%/templates/dcim/moduletype.html
 %%DATADIR%%/templates/dcim/moduletype/base.html
 %%DATADIR%%/templates/dcim/moduletype/component_templates.html
@@ -804,7 +843,6 @@
 %%DATADIR%%/templates/exceptions/programming_error.html
 %%DATADIR%%/templates/extras/admin/plugins_list.html
 %%DATADIR%%/templates/extras/configcontext.html
-%%DATADIR%%/templates/extras/configcontext_edit.html
 %%DATADIR%%/templates/extras/customfield.html
 %%DATADIR%%/templates/extras/customlink.html
 %%DATADIR%%/templates/extras/exporttemplate.html
@@ -850,6 +888,7 @@
 %%DATADIR%%/templates/inc/filter_list.html
 %%DATADIR%%/templates/inc/htmx_modal.html
 %%DATADIR%%/templates/inc/messages.html
+%%DATADIR%%/templates/inc/missing_prerequisites.html
 %%DATADIR%%/templates/inc/paginator.html
 %%DATADIR%%/templates/inc/paginator_htmx.html
 %%DATADIR%%/templates/inc/panel_table.html
@@ -880,6 +919,9 @@
 %%DATADIR%%/templates/ipam/iprange.html
 %%DATADIR%%/templates/ipam/iprange/base.html
 %%DATADIR%%/templates/ipam/iprange/ip_addresses.html
+%%DATADIR%%/templates/ipam/l2vpn.html
+%%DATADIR%%/templates/ipam/l2vpntermination.html
+%%DATADIR%%/templates/ipam/l2vpntermination_edit.html
 %%DATADIR%%/templates/ipam/prefix.html
 %%DATADIR%%/templates/ipam/prefix/base.html
 %%DATADIR%%/templates/ipam/prefix/ip_addresses.html
@@ -927,7 +969,6 @@
 %%DATADIR%%/templates/virtualization/virtualmachine/interfaces.html
 %%DATADIR%%/templates/virtualization/virtualmachine_list.html
 %%DATADIR%%/templates/virtualization/vminterface.html
-%%DATADIR%%/templates/virtualization/vminterface_edit.html
 %%DATADIR%%/templates/wireless/inc/authentication_attrs.html
 %%DATADIR%%/templates/wireless/inc/wirelesslink_interface.html
 %%DATADIR%%/templates/wireless/wirelesslan.html
@@ -991,9 +1032,11 @@
 %%DATADIR%%/users/graphql/types.py
 %%DATADIR%%/users/migrations/0001_squashed_0011.py
 %%DATADIR%%/users/migrations/0002_standardize_id_fields.py
+%%DATADIR%%/users/migrations/0003_token_allowed_ips_last_used.py
 %%DATADIR%%/users/migrations/__init__.py
 %%DATADIR%%/users/models.py
 %%DATADIR%%/users/preferences.py
+%%DATADIR%%/users/tables.py
 %%DATADIR%%/users/tests/__init__.py
 %%DATADIR%%/users/tests/test_api.py
 %%DATADIR%%/users/tests/test_filtersets.py
@@ -1033,9 +1076,11 @@
 %%DATADIR%%/utilities/permissions.py
 %%DATADIR%%/utilities/query_functions.py
 %%DATADIR%%/utilities/querysets.py
+%%DATADIR%%/utilities/request.py
 %%DATADIR%%/utilities/tables.py
 %%DATADIR%%/utilities/templates/builtins/badge.html
 %%DATADIR%%/utilities/templates/builtins/checkmark.html
+%%DATADIR%%/utilities/templates/builtins/customfield_value.html
 %%DATADIR%%/utilities/templates/builtins/tag.html
 %%DATADIR%%/utilities/templates/buttons/add.html
 %%DATADIR%%/utilities/templates/buttons/bulk_delete.html
@@ -1114,6 +1159,9 @@
 %%DATADIR%%/virtualization/migrations/0027_standardize_id_fields.py
 %%DATADIR%%/virtualization/migrations/0028_vminterface_vrf.py
 %%DATADIR%%/virtualization/migrations/0029_created_datetimefield.py
+%%DATADIR%%/virtualization/migrations/0030_cluster_status.py
+%%DATADIR%%/virtualization/migrations/0031_virtualmachine_site_device.py
+%%DATADIR%%/virtualization/migrations/0032_virtualmachine_update_sites.py
 %%DATADIR%%/virtualization/migrations/__init__.py
 %%DATADIR%%/virtualization/models.py
 %%DATADIR%%/virtualization/tables/__init__.py
@@ -1147,6 +1195,8 @@
 %%DATADIR%%/wireless/migrations/0001_wireless.py
 %%DATADIR%%/wireless/migrations/0002_standardize_id_fields.py
 %%DATADIR%%/wireless/migrations/0003_created_datetimefield.py
+%%DATADIR%%/wireless/migrations/0004_wireless_tenancy.py
+%%DATADIR%%/wireless/migrations/0005_wirelesslink_interface_types.py
 %%DATADIR%%/wireless/migrations/__init__.py
 %%DATADIR%%/wireless/models.py
 %%DATADIR%%/wireless/signals.py