Nautobot v2.3¶
This document describes all new features and changes in Nautobot 2.3.
Release Overview¶
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.
v2.3.0-beta.1 (2024-07-25)¶
Security¶
- #5889 - Updated
Django
to~4.2.14
due toCVE-2024-38875
,CVE-2024-39329
,CVE-2024-39330
, andCVE-2024-39614
.
Added¶
- #1758 - Implemented SavedView model.
- #2101 - Added ModuleBay, Module, ModuleType and ModuleBayTemplate models to support modeling line cards and other modular components of a device.
- #3749 - Added "Logs Cleanup" system Job, which can be run to delete ObjectChange and/or JobResult records older than a given cutoff.
- #4406 - Added
role
field toInterface
andVMInterface
models. - #5212 - Added
contacts
andteams
filters to appropriate FilterSets and filter forms. - #5348 - Enhanced UI to include arrow indicators for sorted table columns.
- #5429 - Added Python 3.12 support.
- #5442 - Added
JobResultFactory
,JobLogEntryFactory
, andObjectChangeFactory
classes and added creation of fakeJobResult
,JobLogEntry
, andObjectChange
records to thenautobot-server generate_test_data
command. - #5471 - Added the ability to set Global and User default saved view.
- #5471 - Added the ability to set public and private saved view.
- #5472 - Added
StaticGroup
andStaticGroupAssociation
data models, used for statically defining groups of Nautobot objects. - #5472 - Added
feature
filter to/api/extras/content-types/
. - #5472 - Added
static_groups
filter to all applicable models via theBaseFilterSet
class. - #5472 - Added
static_groups
field to applicable model create/edit forms via theStaticGroupModelFormMixin
class (included inNautobotModelForm
class automatically). - #5472 - Added
Static Groups
column to applicable model tables. - #5472 - Added
static_groups
andassociated_contacts
to applicable GraphQL types. - #5472 - Enhanced
BaseTable
class to automatically apply appropriatecount_related
annotations for anyLinkedCountColumn
. - #5473 - Added support for objects to "opt out" of change logging by returning
None
from theirto_objectchange()
method. - #5473 - Added
description
strings to all system Jobs. - #5473 - Added
Refresh Dynamic Group Caches
system Job. - #5631 - Added
ContactMixin
andStaticGroupMixin
abstract model mixin classes. Models that inherit fromOrganizationalModel
orPrimaryModel
will automatically include these mixins. - #5663 - Added
MetadataType
andMetadataChoice
data models, REST API, and UI. - #5664 - Added
ObjectMetadata
data models, UI and REST API. - #5687 - Added
setup_structlog_logging()
to allow using structlog fromnautobot_config.py
file. - #5716 - Added CloudNetwork model, UI, GraphQL and REST API.
- #5716 - Added CloudNetwork to CircuitTermination model, UI, and REST API.
- #5716 - Added CloudNetwork to Prefix View.
- #5719 - Added CloudAccount Model, UI, GraphQL and REST API.
- #5721 - Added ~
CloudType
~CloudResourceType
Model, UI, GraphQL and REST API. - #5730 - Added a feature that replaces
{module}
,{module.parent}
,{module.parent.parent}
, etc. with the selected module's parent_module_bayposition
when creating a component in a module. - #5732 - Added indices on
StaticGroupAssociation
table for common lookup patterns. - #5786 - Added
DynamicGroup.group_type
field with optionsdynamic-filter
,dynamic-set
, andstatic
. Existing DynamicGroups will automatically be set to eitherdynamic-filter
ordynamic-set
as befits their definitions. - #5786 - Added
DynamicGroup.tenant
andDynamicGroup.tags
fields. - #5786 - Added Dynamic Group support to many more Nautobot models.
- #5791 - Added support for specifying a Device's Primary IP from an interface on a child Module.
- #5792 - Added display of components from installed modules to the Device Component tabs.
- #5817 - Added Celery Worker details to the Job Result Advanced Tab.
- #5817 - Added
advanced_content_left_page
block to the Advanced Tab. - #5872 - Added CloudService Model, UI, GraphQL and REST API.
- #5873 - Added worker status page for staff users.
- #5890 - Add CSS class to pagination dropdown to resolve issue with color-scheme.
- #5895 - Added missing model documentation for
CloudNetwork
,CloudNetworkPrefixAssignment
,CloudService
and ~CloudType
~CloudResourceType
. - #5923 - Added
prefers_id
keyword argument to NaturalKeyOrPKMultipleChoiceFilter initialization to use the object ID instead of theto_field_name
when automatically generating a form field for the filter. - #5933 - Added tables of related
CloudService
and/orCloudNetwork
instances to theCloudResourceType
detail view. - #5933 - Added
description
field toCloudService
model.
Changed¶
- #2101 - Updated device interfaces filter to support filtering by interface name as well as by ID.
- #3749 - Changed behavior of the
CHANGELOG_RETENTION
setting; it no longer applies automatically to force cleanup of ObjectChange records over a certain age cutoff, but instead serves as the default cutoff age whenever running the new "Logs Cleanup" system Job. - #5429 - Changed default Docker image Python version to 3.12.
- #5473 - Changed object "detail" views to only show
Dynamic Groups
tab if the object belongs to at least one such group. - #5473 - Replaced Redis implementation of Dynamic Group membership caches with a database cache implementation using the StaticGroupAssociation model.
- #5473 - Changed
DynamicGroup.members
,DynamicGroup.has_member()
, andDynamicGroupMixin.dynamic_groups
APIs to always use the database cache. - #5631 - Changed behavior of models that inherit directly from
BaseModel
(notOrganizationalModel
orPrimaryModel
) to default tois_contact_associable_model = False
. - #5786 - Changed
TreeManager
class (used for tree-models such as Location, RackGroup, and TenantGroup) default behavior fromwith_tree_fields
towithout_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. - #5786 - Merged the
StaticGroup
model added in #5472 into the existingDynamicGroup
model as a special type of group. - #5786 - Replaced
static_groups
filter added in #5472 with adynamic_groups
filter. - #5786 - Replaced
static_groups
model form field added in #5472 with adynamic_groups
field. - #5786 - Replaced
Static Groups
object table column added in #5472 with aDynamic Groups
column. - #5786 - Replaced
static_groups
GraphQL field added in #5472 with adynamic_groups
field. - #5786 - Replaced
StaticGroupMixin
model mixin class added in #5631 with aDynamicGroupsModelMixin
class. Still included by default inOrganizationalModel
andPrimaryModel
. - #5790 - Updated Cable table to display the parent Device of Cables connected to Modules in a Device.
- #5790 - Updated device and device_id filters for Cables, Interfaces, and other modular device components to recognize components that are nested in Modules in a Device.
- #5790 - Updated Cable connect form to allow connecting to Console Ports, Console Server Ports, Interfaces, Power Ports, Power Outlets, Front Ports, and Rear Ports that are nested in Modules in a Device.
- #5790 - Updated Interface
device
filter to allow filtering on Devicename
orid
. - #5790 - Updated
Cable._termination_a_device
andCable._termination_b_device
to cache the Device when cables are connected to an Interface or Port of a Module in a Device. - #5817 - Removed Additional Data tab on Job Result view and collapsed the data into Advanced Tab.
- #5826 - Moved
SavedView
model fromusers
app toextras
app. - #5841 - Added role field as a default column for Device Interface tab and VirtualMachine VMInterface table.
- #5869 - Combined bulk-edit/bulk-delete/bulk-group-update buttons into a single button with a pop-up menu when appropriate.
- #5870 - Consolidated List View Action buttons into a single button with a dropdown menu.
- #5871 - Consolidated Detail View Action buttons into a single button with a dropdown menu.
- #5873 - Updated the job run form to use more of the horizontal whitespace on the page.
- #5933 - Renamed
CloudType
model toCloudResourceType
for improved clarity. - #5977 - Changed the provider field help text of CloudAccount and CloudResourceType model classes and forms.
- #5978 - Changed CloudService
cloud_network
field from a ForeignKey to a ManyToMany calledcloud_networks
.
Deprecated¶
- #5473 - Deprecated the properties
DynamicGroup.members_cached
,DynamicGroup.members_cache_key
,DynamicGroupMixin.dynamic_groups_cached
,DynamicGroupMixin.dynamic_groups_list
, andDynamicGroupMixin.dynamic_groups_list_cached
. - #5786 - Deprecated the
DynamicGroupMixin
model mixin class. Models supporting Dynamic Groups should useDynamicGroupsModelMixin
instead. - #5870 - Deprecated the blocks
block export_button
andblock import_button
ingeneric/object_list.html
. Apps and templates should migrate to usingblock export_list_element
andblock import_list_element
respectively.
Removed¶
- #3749 - Removed automatic random cleanup of ObjectChange records when processing requests and signals.
- #5473 - Removed
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT
setting as it is no longer relevant after refactoring the Dynamic Group membership caching implementation. - #5786 - Removed the
StaticGroup
model added in #5472, replacing it with a subtype of theDynamicGroup
model.
Fixed¶
- #2352 - Fixed random deadlocks in long-running Jobs resulting from the ObjectChange automatic cleanup signal.
- #5123 - Fixed an unhandled
ValueError
when filtering onvlans
by their UUID rather than their VLAN ID. - #5442 - Replaced overly broad
invalidate_models_cache
signal handler with two more narrowly scoped handlers, preventing the signal handler from being invoked for operations on irrelevant models. - #5442 - Fixed incorrect linkification of JobLogEntry table rows when a record had a
log_object
but noabsolute_url
. - #5473 - Significantly improved performance of Dynamic Group UI views.
- #5774 - Fixed the bug that required users and administrators to manage additional permission to be able to use saved views.
- #5814 - Fixed style issues with Saved Views and other language code blocks.
- #5818 - Fixed broken table configure buttons in device and module component tabs.
- #5842 - Fixed missing classes when importing
*
from nautobot.ipam.models. - #5877 - Resolved issue with tags not saving on Dynamic Groups.
- #5880 - Fixed overflowing device component tables in device and module component tabs.
- #5880 - Fixed an exception when trying to edit an IPAddress that had a NAT Inside IPAddress that was related to a component attached to a module.
- #5880 - Fixed incorrect sort order of interfaces in the device and module interface tabs.
- #5898 - Replaced
object-metadatas
in UI and REST API urls withobject-metadata
. - #5932 - Fixed visual bug in consolidated action button for list views.
- #5933 - Fixed missing
cloud.cloudservice
content-type option onCloudResourceType
model. - #5933 - Fixed incorrect submenu heading in
Cloud
navigation menu. - #5933 - Fixed incorrect rendering of
Tags
column in Cloud object tables. - #5939 - Fixed the usage of incorrect model in Cloud Service list view action buttons.
- #5951 - Removed unused consolidated action button on job list view.
- #5952 - Changed generic "Bulk Actions" dropup button styling to match generic "Actions" dropdown button.
Dependencies¶
- #1758 - Updated
materialdesignicons
to version 7.4.47. - #4616 - Updated
django-taggit
to~5.0.0
. - #4616 - Updated
netaddr
to~1.3.0
. - #5160 - Updated
Django
to version~4.2.13
. - #5160 - Updated
django-db-file-storage
to version~0.5.6.1
. - #5160 - Updated
django-timezone-field
to version~6.1.0
. - #5429 - Updated Docker build and CI to use
poetry
1.8.2
. - #5429 - Removed development dependency on
mkdocs-include-markdown-plugin
as it's no longer used in Nautobot's documentation. - #5518 - Updated
drf-spectacular
to version0.27.2
. - #5687 - Added django-structlog dependency.
- #5734 - Updated
django-auth-ldap
dependency to~4.8
. - #5734 - Updated
django-tree-queries
dependency to~0.19
. - #5734 - Updated
Markdown
dependency to~3.6
. - #5735 - Updated
django-constance
dependency to~3.1.0
- #5735 - Updated
emoji
dependency to~2.12.1
. - #5735 - Widened
napalm
dependency to permit version 5.x. - #5865 - Updated
celery
to~5.3.6
. - #5865 - Updated
django-cors-headers
to~4.4.0
. - #5865 - Updated
django-health-check
to~3.18.3
. - #5865 - Updated
django-structlog
to^8.1.0
. - #5865 - Updated
djangorestframework
to~3.15.2
. - #5889 - Updated
django-filter
to version~24.2
. - #5889 - Updated
django-timezone-field
to version~7.0
.
Documentation¶
- #5699 - Updated to
mkdocs~1.6.0
andmkdocs-material~9.5.23
. - #5699 - Fixed a number of broken links within the documentation.
- #5735 - Updated
mkdocstrings
to~0.25.1
andmkdocstrings-python
to~1.10.2
.
Housekeeping¶
- #5160 - Replaced references to
pytz
withzoneinfo
in keeping with Django 4. - #5212 - Enhanced
nautobot.core.testing.filters.FilterTestCases.BaseFilterTestCase.test_filters_generic()
test case to test for the presence and proper functioning of thecontacts
andteams
filters on any appropriate model FilterSet. - #5429 - Added Python 3.12 to CI.
- #5429 - Updated CI to use
poetry
1.8.2 and use actionnetworktocode/gh-action-setup-poetry-environment@v6
. - #5429 - Removed CI workaround for old Poetry versions.
- #5473 - Added
assertApproximateNumQueries
test-case helper method. - #5524 - Deleted unnecessary special case handling for
test_view_with_content_types
. - #5663 - Added support for
django_get_or_create
property inBaseModelFactory
. - #5725 - Updated development dependencies
pylint
to3.2.0
,ruff
to0.4.0
, andselenium
to4.21
. - #5786 - Substantially reduced the setup overhead (time/memory) of
OpenAPISchemaTestCases
tests. - #5842 - Fixed missing mysqldump client when trying to run tests with --parallel on mysql.
- #5865 - Updated
django-debug-toolbar
development dependency to~4.4.0
. - #5865 - Updated
mkdocs-include-markdown-plugin
documentation dependency to6.2.1
. - #5865 - Updated
mkdocs-material
documentation dependency to9.5.27
. - #5865 - Updated
mkdocs-section-index
documentation dependency to0.3.9
. - #5865 - Updated
mkdocstrings-python
documentation dependency to1.10.5
. - #5865 - Updated
pylint
development dependency to~3.2.5
. - #5865 - Updated
ruff
development dependency to~0.5.0
. - #5865 - Updated
selenium
development dependency to~4.22.0
. - #5934 - Add Cloud Model Example and Entity Diagram.
- #5986 - Fixed multiple intermittent failures in unit tests.