Releases: nautobot/nautobot
v2.3.4 - 2024-09-18
What's Changed
Added
- #5795 - Added support for
NAUTOBOT_CACHES_TIMEOUT
environment variable. - #6207 - Added the ability to filter virtual machines by their
cluster
names or IDs.
Changed
- #5795 - Changed default cache timeout for Constance configuration from 1 day to 300 seconds to match other caches.
Fixed
- #6207 - Fixed incorrect link in ClusterTable for device count column.
- #6207 - Fixed incorrect link in PowerPanelTable for power feed count column.
- #6230 - Fixed an issue with Celery Scheduler around datetime imports.
Documentation
- #5795 - Consolidated "Required Settings" and "Optional Settings" docs into a single unified "Settings" document.
- #5795 - Consolidated "Administration: Installation Extras" docs section into the "Administration: Guides" section.
- #5795 - Moved "Caching" content from the "Administration: Guides" section into the "Administration: Configuration" section as a new "Redis" document.
- #5795 - Added
environment_variables
keys tosettings.yaml
to more accurately document settings that are influenced by multiple environment variables together. - #5795 - Removed
is_required_setting
keys fromsettings.yaml
as no longer relevant.
Housekeeping
- #5859 - Changed
--cache-test-fixtures
and--keepdb
flags from opt-in to opt-out forinvoke unittest
andinvoke integration-test
commands. - #5859 - Changed
invoke unittest
to automatically include--parallel
flag when running the entire unit test suite. - #6222 - Fixed
plugin_upstream_testing_base.yml
to work with app cookiecutter v2.3 Dockerfile. - #6227 - Fixed typo in app upstream testing workflow.
Contributors
New Contributors
- @mattmiller87 made their first contribution in #6230
Full Changelog: v2.3.3...v2.3.4
v2.3.3 - 2024-09-17
What's Changed
Security
- #6212 - Updated
Django
to~4.2.16
to addressCVE-2024-45230
andCVE-2024-45231
.
Fixed
- #6184 - Fixed an exception in
extras.models.groups._map_filter_fields
method when certain Appfilter_extensions
were present. - #6190 - Added
display
property to Prefix to display its namespace along with the prefix to allow differentiation between prefixes in the UI. - #6197 - Fixed an exception in
core.utils.lookup.get_model_for_view_name
function when rendering certain App object list views. - #6203 - Fixed a performance regression observed when change logging resulted in a large number of ObjectChange records (such as in an SSOT Job).
Dependencies
- #6084 - Updated
pyuwsgi
to~2.0.26
andPyYAML
to~6.0.2
.
Housekeeping
- #5376 - Disabled
coverage
during initial test database setup to improve test performance. - #6084 - Updated development dependencies
factory-boy
to~3.3.1
,ruff
to~0.5.7
, andwatchdog
to~4.0.2
. - #6084 - Updated documentation dependency
mkdocs-material
to~9.5.33
. - #6155 - Updated the invoke.yml.example dev file to use latest values.
- #6212 - Updated documentation dependencies
mkdocs
to~1.6.1
,mkdocs-material
to~9.5.34
, andmkdocstrings-python
to~1.10.9
. - #6212 - Updated development dependency
pylint
to~3.2.7
.
Contributors
New Contributors
- @brandomando made their first contribution in #6190
Full Changelog: v2.3.2...v2.3.3
v2.3.2 - 2024-09-04
What's Changed
Security
- #6182 - Updated
cryptography
to43.0.1
to addressGHSA-h4gh-qq45-vh27
. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.
Added
- #5180 - Add filtering Job Results by Scheduled Job.
- #5591 - Added
time_zone
field toScheduledJob
model. - #6120 - Added Status Field to VRF model.
- #6129 - Added collapsible icon rotation to homepage panels.
Fixed
- #5591 - Corrected several bugs around handling of
ScheduledJob
execution whensettings.TIME_ZONE
is other than "UTC". - #5591 - Added missing
Meta.ordering
definition toScheduledJob
model. - #6123 - Fixed cable status coloring for
DeviceModule*Table
rows in dark mode. - #6131 - Fixed a regression in which IP addresses and prefixes created through the
/api/ipam/prefixes/<uuid>/available-ips/
and/api/ipam/prefixes/<uuid>/available-prefixes/
REST API endpoints could not be assigned custom field data during their creation. - #6146 - Added missing DynamicGroup content to Device Detail View and Software Image File Detail View.
- #6175 - Prevented some
AttributeError
exceptions from being raised when an App contains a model that doesn't inherit fromBaseModel
.
Housekeeping
- #5591 - Added
watchmedo
tocelery_beat
development container. - #5591 - Added
time-machine
as a development environment (test execution) dependency. - #6147 - Fixed some points of non-determinism in the data generated by
nautobot-server generate_test_data
. - #6147 - Added
development/cleanup_factory_dump.py
helper script to aid in identifying other issues with test data.
Contributors
Full Changelog: v2.3.1...v2.3.2
v1.6.27 - 2024-09-04
What's Changed
Security
- #6182 - Updated
cryptography
to43.0.1
to addressGHSA-h4gh-qq45-vh27
. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.
Fixed
- #6081 - Fixed AttributeError during pre_migrate when permission constraints are applied to custom fields.
Contributor
Full Changelog: v1.6.26...v1.6.27
v2.3.1 - 2024-08-19
What's Changed
Added
- #5232 - Added support for groupings to computed fields.
- #5494 - Added validation logic to
DeviceForm
clean()
method to raise a validation error if there is any invalid software image file specified. - #5915 - Enhanced
IPAddress.objects.get_or_create
method to permit specifying a namespace as an alternative to a parent prefix.
Changed
- #5970 - Removed indentations for PrefixTable in various locations in the UI.
Fixed
- #5494 - Fixed
Device
modelclean()
validation logic to allow user to specify a software version on a device without specifying any software image files. - #6096 - Updated CloudAccount UI: Set the
secrets_group
form field to be optional. - #6097 - Updated ContactAssociation API: Set the role field to be required.
- #6116 - Added handling for an
OperationalError
that might be raised when runningpylint-nautobot
or similar linters that depend on successfully runningnautobot.setup()
.
Housekeeping
- #6107 - Updated documentation dependency
mkdocstrings-python
to~1.10.8
.
Contributors
New Contributors
Full Changelog: v2.3.0...v2.3.1
v2.3.0 - 2024-08-08
This document describes all new features and changes in Nautobot 2.3.
Upgrade Actions
Administrators
Administrators should plan to take these actions during or immediately after upgrade from a previous version. New installations should also take note of these actions where appropriate.
- Python 3.12 is now the default recommended version of Python.
!!! warning "Python 3.12"
Because Nautobot prior to 2.3.0 did not declare support for Python 3.12, most Apps similarly needed to previously declare an upper bound of Python 3.11 for their own compatibility. Therefore, older versions of most Apps will not be installable under Python 3.12. Before migrating your Nautobot environment to Python 3.12, it is your responsibility to confirm that all relevant Apps in your environment are also compatible and installable. There is a minor "chicken-and-egg" problem here in that Apps generally cannot declare support for a new Python version before Nautobot itself publishes a release that does so; therefore, as of the 2.3.0 Nautobot release day, most Apps have not yet been updated to declare support for Python 3.12. We'll be working in the following days to promptly update our supported Apps as needed, so stay tuned.
!!! warning "Docker images"
As has been Nautobot's policy since version 1.6.1, our published Docker images that are not tagged with a specific Python version implicitly always include the latest supported version of Python. This means that as of the release of Nautobot 2.3.0, the tags latest
, stable
, 2.3
, and 2.3.0
will all indicate Docker images that include Python 3.12, whereas previously these indicated Python 3.11 images. As noted above and below, updating to Python 3.12 may not be immediately desirable (or even possible, depending on the status of your Apps) as a "day one" action. If you need to stay with a given Python version for the time being, you must make sure that you're relying on an appropriately specific image tag, such as 2.3-py3.11
, stable-py3.10
, etc.
- As noted below, a new system job is provided for automated Dynamic Group cache updates. Administrators should schedule this system job to run on a recurring basis within the Jobs UI, after the upgrade, or on new install. Configuration referencing the
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT
setting can be safely removed, as it is no longer used. If this setting was being used previously, it is recommended to set the new scheduled job's interval to the same value. - As noted below, change logging retention cleanup is now handled via a system job. Administrators should schedule this job to run on a recurring basis to meet their needs. The
CHANGELOG_RETENTION
setting is still used to define the retention period, but the scheduled system job will perform the actual cleanup, if any needed.
Job Authors & App Developers
Job Authors and App Developers should take these actions to ensure compatibility with their Jobs and Apps.
- Job Authors and App Developers should carefully consider the updates to the DynamicGroup API and decide if their use cases dictate changing their group membership access patterns to use
DynamicGroup.update_cached_members()
to find the correct balance between Dynamic Group performance and membership updates. - Job Authors and App Developers should carefully consider the updates to the TreeManager default behavior and make necessary changes to their access of Tree based models.
- Django 4.2 is now required by Nautobot, replacing the previous Django 3.2 dependency. Job Authors and App Developers should carefully consider the updates and changes in the Django release-notes (4.0, 4.1, 4.2), especially the relevant "Backwards incompatible changes" sections, to proactively identify any impact to their Apps.
!!! warning "Django 4"
Django 4 includes a small number of breaking changes compared to Django 3. In our experience, most Apps have required few (or zero) updates to be Django 4 compatible, but your mileage may vary.
- Python 3.12 is now supported by Nautobot and is now the default recommended version of Python. Apps will likely need to update their packaging in order to explicitly declare support for Python 3.12.
Release Overview
Added
Cloud Models (#5716, #5719, #5721, #5872)
Added the new models CloudAccount
, CloudResourceType
, CloudNetwork
, and CloudService
to support recording of cloud provider accounts (AWS, Azure, GCP, DigitalOcean, etc.), cloud resource types (AWS EC2, Azure Virtual Machine Service, Google App Engine, etc.), cloud services (specific instances of services described by cloud resource types) and cloud network objects (such as VPCs) in Nautobot.
Device Modules (#2101)
Added new models for ModuleBay
, Module
, ModuleType
, and ModuleBayTemplate
to support modeling line cards and other modular components of a device. These models allow you to define a hierarchy of module bays and modules within a device, and to assign components (such as interfaces, power ports, etc.) to specific modules.
Dynamic Group Enhancements (#5472, #5786)
Dynamic Groups now have a group_type
field, which specifies whether this group is defined by an object filter, defined by aggregating other groups via set operations, or defined via static assignment of objects as group members (this third type is new in Nautobot 2.3). Additionally, you can now assign a tenant and/or tags to each Dynamic Group, and many more models now can be included in Dynamic Groups.
A new model, StaticGroupAssociation
, and associated REST API, have been added in support of the new "static" group type. See also "Dynamic Group Cache Changes" below.
For more details, refer to the Dynamic Group documentation.
Interface and VMInterface Roles (#4406)
Added an optional role
field to Interface and VMInterface models to track common interface configurations. Now the users can create Role instances that can be assigned to interfaces and vminterfaces.
Object Metadata Models (#5663)
Added a set of functionality for defining and managing object metadata, that is to say, data about the network data managed in Nautobot, such as data provenance, data ownership, and data classification. For more details, refer to the linked documentation.
Python 3.12 Support (#5429)
Nautobot now supports Python 3.12, and Python 3.12 is now the default Python version included in the nautobot
Docker images.
Saved Views (#1758)
Added the ability for users to save multiple configurations of list views (table columns, filtering, pagination and sorting) for ease of later use and reuse. Refer to the Saved View documentation for more details and on how to use saved views.
Worker Status Page (#5873)
User accounts with the is_staff
flag set can access a new worker status page at /worker-status/
to view the status of the Celery worker(s) and the configured queues. The link to this page appears in the "User" dropdown at the bottom of the navigation menu, under the link to the "Profile" page. Use this page with caution as it runs a live query against the Celery worker(s) and may impact performance of your web service.
Changed
Changed TreeManager Default Behavior (#5786)
The TreeManager
class (used for tree-models such as Location, RackGroup, and TenantGroup) default behavior has changed from with_tree_fields
to without_tree_fields
. This should improve performance in many cases but may impact Apps or Jobs that were relying on the old default; such code should be updated to explicitly call .with_tree_fields()
where appropriate.
Dynamic Group Cache Changes (#5473)
To improve performance of the Dynamic Groups feature, a number of changes have been made:
- Dynamic Groups now always use
StaticGroupAssociation
records as a database cache of their member objects, rather than optionally caching their members in Redis for a limited time period. For Dynamic Groups of types other than the new "static" group type, theseStaticGroupAssociation
records are hidden by default from the UI and REST API. - The
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT
setting variable is deprecated, as it no longer influences Dynamic Group cache behavior. - The APIs
DynamicGroup.members
,DynamicGroup.count
,DynamicGroup.has_member()
, andobject.dynamic_groups
now always use the database cache rather than being recalculated on the fly. - The APIs
DynamicGroup.members_cached
, `DynamicGroup.members_cac...
v2.2.9 - 2024-08-05
What's Changed
Added
- #5965 - Added missing controller references for DeviceRedundancyGroup in the UI.
- #5980 - Added caching to
FeatureQuery().get_choices()
andFeatureQuery().list_subclasses()
. - #6029 - Added environment variable support for setting
CELERY_WORKER_PREFETCH_MULTIPLIER
. - #6030 - Added links from the Job list and detail views to quickly filter the list of Job Results to the corresponding Job.
Fixed
- #5775 - Reintroduced
Add IP Address
button to VirtualMachine Interface table. - #5785 - Fixed Scheduled Jobs not respecting Job Soft / Hard Time Limit.
- #5796 - Added missing validation to ensure that a DeviceBay can only contain Devices with a
subdevice_role
ofchild
. - #5811 - Fixed broken UI and added error message when submitting IPAddressAssignForm without selecting any IPAddress.
- #5812 - Fixed CSV file upload handling of "UTF-8 with BOM" encoding.
- #5904 - Fixed performance of JobResults UI when thousands of JobLogEntries are present.
- #5904 - Fixed performance when Bulk Importing large csv files.
- #5912 - Fixed incorrect
clean()
behavior onIPAddress
that caused certain uniqueness violations to not be caught untilsave()
. - #5948 - Fixed table overflow.
- #5980 - Improved performance of GraphQL queries by no longer unnecessarily creating
FilterSet
instances when no filter is present. - #5992 - Added signal to clear relevant content-type caches after running migrations.
- #6022 - Fixed incorrect labels for derived filters (
tenant__n
,tenant__isw
, etc.) when the base filter (tenant
, etc.) has a custom label.
Dependencies
- #6010 - Pinned
django-storages
temporarily to 1.14.3 due to an incompatibility betweendjango-health-check
and version 1.14.4 ofdjango-storages
.
Documentation
- #5949 - Fixed NewBranch job code in documentation.
- #5958 - Added an example job that uses a custom template to render the job form.
- #5959 - Fixed documentation structure and added documentation on contributing documentation updates.
- #5971 - Added documentation for registering jobs from Git Repositories.
- #6024 - Added documentation for the
nautobot-server validate_models
command.
Contributors
- @gsnider2195
- @timizuoebideri1
- @MCDELTAT
- @HanlinMiao
- @glennmatthews
- @itdependsnetworks
- @jnmms
- @jvanderaa
- @abates
- @tsm1th
- @joewesch
New Contributors
Full Changelog: v2.2.8...v2.2.9
v2.3.0-beta.1
What's Changed
Added
Added an Optional role
field to Interface and VMInterface models (#4406)
Added an optional role
field to Interface and VMInterface models to track common interface configurations. Now the users can create Role instances that can be assigned to interfaces and vminterfaces.
Cloud Models (#5716, #5719, #5721, #5872)
Added the new models CloudAccount
, CloudResourceType
, CloudNetwork
, and CloudService
to support recording of cloud provider accounts (AWS, Azure, GCP, DigitalOcean, etc.), cloud resource types (AWS EC2, Azure Virtual Machine Service, Google App Engine, etc.), cloud services (specific instances of services described by cloud resource types) and cloud network objects (such as VPCs) in Nautobot.
Dynamic Group Enhancements
Dynamic Groups now have a group_type
field, which specifies whether this group is defined by an object filter, defined by aggregating other groups via set operations, or defined via static assignment of objects as group members (this third type is new in Nautobot 2.3). Additionally, you can now assign a tenant and/or tags to each Dynamic Group.
A new model, StaticGroupAssociation
, and associated REST API, have been added in support of the new "static" group type. See also "Dynamic Group Cache Changes" below.
For more details, refer to the Dynamic Group documentation.
Object Metadata Models (#5663)
Added a set of functionality for defining and managing object metadata, that is to say, data about the network data managed in Nautobot, such as data provenance, data ownership, and data classification. For more details, refer to the linked documentation.
Saved Views
Added the ability for users to save multiple configurations of list views (table columns, filtering, pagination and sorting) for ease of later use and reuse. Refer to the Saved View documentation for more details and on how to use saved views.
Device Modules (#2101)
Added new models for ModuleBay
, Module
, ModuleType
, and ModuleBayTemplate
to support modeling line cards and other modular components of a device. These models allow you to define a hierarchy of module bays and modules within a device, and to assign components (such as interfaces, power ports, etc.) to specific modules.
Changed
Dynamic Group Cache Changes
To improve performance of the Dynamic Groups feature, a number of changes have been made:
- Dynamic Groups now always use
StaticGroupAssociation
records as a database cache of their member objects, rather than optionally caching their members in Redis for a limited time period. For Dynamic Groups of types other than the new "static" group type, theseStaticGroupAssociation
records are hidden by default from the UI and REST API. - The
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT
setting variable is deprecated, as it no longer influences Dynamic Group cache behavior. - The APIs
DynamicGroup.members
,DynamicGroup.count
,DynamicGroup.has_member()
, andobject.dynamic_groups
now always use the database cache rather than being recalculated on the fly. - The APIs
DynamicGroup.members_cached
,DynamicGroup.members_cache_key
,object.dynamic_groups_cached
,object.dynamic_groups_list
, andobject.dynamic_groups_list_cached
are now deprecated. - Editing a Dynamic Group definition refreshes its cached members and those of any "parent" groups that use it.
- Viewing a Dynamic Group detail view in the UI refreshes its cached members (only).
- A new System Job,
Refresh Dynamic Group Caches
, can be run or scheduled as apprropriate to refresh Dynamic Group member caches on demand. - The existing API
DynamicGroup.update_cached_members()
can be called by Apps or Jobs needing to ensure that the cache is up-to-date for any given Dynamic Group.
Updated to Django 4.2
As Django 3.2 has reached end-of-life, Nautobot 2.3 requires Django 4.2, the next long-term-support (LTS) version of Django. There are a number of changes in Django itself as a result of this upgrade; Nautobot App maintainers are urged to review the Django release-notes (4.0, 4.1, 4.2), especially the relevant "Backwards incompatible changes" sections, to proactively identify any impact to their Apps.
Log Cleanup as System Job (#3749)
Cleanup of the change log (deletion of ObjectChange
records older than a given cutoff) is now handled by the new LogsCleanup
system Job, rather than occurring at random as a side effect of new change log records being created. Admins desiring automatic cleanup are encouraged to schedule this job to run at an appropriate interval suitable to your deployment's needs.
!!! info
Setting CHANGELOG_RETENTION
in your Nautobot configuration by itself no longer directly results in periodic cleanup of ObjectChange
records. You must run (or schedule to periodically run) the LogsCleanup
Job for this to occur.
As an additional enhancement, the LogsCleanup
Job can also be used to cleanup JobResult
records if desired as well.
Contributors
New Contributors
- @kvncampos made their first contribution in #5946
Full Changelog: v2.2.8...v2.3.0-beta.1
v2.2.8 - 2024-07-22
What's Changed
Security
- #5911 - Updated
zipp
to3.19.1
to addressCVE-2024-5569
. This is not a direct dependency so it will not auto-update when upgrading. Please be sure to upgrade your local environment.
Fixed
- #5569 - Fixed relationship required to ignore objects that do not match the related filter.
- #5613 - Fixed intermittent failure in integration test for dynamic groups.
- #5906 - Added support for filtering in GraphQL of objects identified by a many-to-many relation (
Location.prefixes
,Prefix.locations
, etc.) - #5935 - Fixed issue in which a save() could be called unnecessarily on child devices.
Dependencies
- #5833 - Updated dependency
social-auth-app-django
to~5.4.2
. - #5833 - Updated optional dependency
django-storages
to~1.14.4
.
Documentation
- #5833 - Updated documentation dependency
mkdocs-material
to~9.5.29
. - #5874 - Updated documentation regarding Nautobot on Ubuntu 24.04.
Housekeeping
- #5610 - Added integration test to do basic checking for static media failures caused by typos in template files.
Contributors
New Contributors
- @sdoiron0330 made their first contribution in #5570
Full Changelog: v2.2.7...v2.2.8
v1.6.26 - 2024-07-22
What's Changed
Fixed
- #5935 - Fixed issue in which a save() could be called unnecessarily on child devices.
Contributors
Full Changelog: v1.6.25...v1.6.26