Skip to content

Releases: nautobot/nautobot

v2.3.4 - 2024-09-18

18 Sep 17:02
50e9623
Compare
Choose a tag to compare

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 to settings.yaml to more accurately document settings that are influenced by multiple environment variables together.
  • #5795 - Removed is_required_setting keys from settings.yaml as no longer relevant.

Housekeeping

  • #5859 - Changed --cache-test-fixtures and --keepdb flags from opt-in to opt-out for invoke unittest and invoke 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

Full Changelog: v2.3.3...v2.3.4

v2.3.3 - 2024-09-17

17 Sep 14:56
ddf7987
Compare
Choose a tag to compare

What's Changed

Security

  • #6212 - Updated Django to ~4.2.16 to address CVE-2024-45230 and CVE-2024-45231.

Fixed

  • #6184 - Fixed an exception in extras.models.groups._map_filter_fields method when certain App filter_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 and PyYAML 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, and watchdog 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, and mkdocstrings-python to ~1.10.9.
  • #6212 - Updated development dependency pylint to ~3.2.7.

Contributors

New Contributors

Full Changelog: v2.3.2...v2.3.3

v2.3.2 - 2024-09-04

04 Sep 18:18
fdfff39
Compare
Choose a tag to compare

What's Changed

Security

  • #6182 - Updated cryptography to 43.0.1 to address GHSA-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 to ScheduledJob 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 when settings.TIME_ZONE is other than "UTC".
  • #5591 - Added missing Meta.ordering definition to ScheduledJob 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 from BaseModel.

Housekeeping

  • #5591 - Added watchmedo to celery_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

04 Sep 16:44
e90f411
Compare
Choose a tag to compare

What's Changed

Security

  • #6182 - Updated cryptography to 43.0.1 to address GHSA-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

19 Aug 19:52
b871e82
Compare
Choose a tag to compare

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 model clean() 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 running pylint-nautobot or similar linters that depend on successfully running nautobot.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

08 Aug 19:48
8fc76d1
Compare
Choose a tag to compare

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, these StaticGroupAssociation 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(), and object.dynamic_groups now always use the database cache rather than being recalculated on the fly.
  • The APIs DynamicGroup.members_cached, `DynamicGroup.members_cac...
Read more

v2.2.9 - 2024-08-05

05 Aug 13:36
8f95d53
Compare
Choose a tag to compare

What's Changed

Added

  • #5965 - Added missing controller references for DeviceRedundancyGroup in the UI.
  • #5980 - Added caching to FeatureQuery().get_choices() and FeatureQuery().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 of child.
  • #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 on IPAddress that caused certain uniqueness violations to not be caught until save().
  • #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 between django-health-check and version 1.14.4 of django-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

New Contributors

Full Changelog: v2.2.8...v2.2.9

v2.3.0-beta.1

26 Jul 00:15
3f110d3
Compare
Choose a tag to compare
v2.3.0-beta.1 Pre-release
Pre-release

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, these StaticGroupAssociation 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(), and object.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, and object.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

Full Changelog: v2.2.8...v2.3.0-beta.1

v2.2.8 - 2024-07-22

22 Jul 20:25
5dd10bc
Compare
Choose a tag to compare

What's Changed

Security

  • #5911 - Updated zipp to 3.19.1 to address CVE-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

Full Changelog: v2.2.7...v2.2.8

v1.6.26 - 2024-07-22

22 Jul 22:06
28d12b2
Compare
Choose a tag to compare

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