nautobot

Network Source of Truth & Network Automation Platform

APACHE-2.0 License

Downloads
16K
Stars
1K
Committers
251

Bot releases are visible (Hide)

nautobot - v1.6.2 - 2023-09-05

Published by gsnider2195 about 1 year ago

Added

  • #3289 - Added documentation on factory data caching.
  • #3913 - Added url field to GraphQL objects.
  • #4201 - Added docs for InterfaceRedundancyGroup.
  • #4316 - Added management command "nautobot-server populate_platform_network_driver" to help update the Platform.network_driver field in bulk.
  • #4317 - Added tests for GraphQL url field.

Changed

  • #3212 - Updated Dynamic Group field filter/child group exclusivity error to be more noticeable.
  • #3949 - Moved DynamicGroup clean_filter() call from clean() to clean_fields(), which has the impact that it will still be called by full_clean() and validated_save() but no longer called on a simple clean().
  • #4216 - Changed the rendering of TagFilterField to prevent very slow rendering of pages when large numbers of tags are defined.
  • #4217 - Added a restriction that two Git repositories with the same remote_url cannot overlap in their provided_contents, as such cases are highly likely to introduce data conflicts.

Fixed

  • #3949 - Fixed a ValueError when editing an existing DynamicGroup that has invalid filter data.
  • #3949 - Fixed DynamicGroup.clean_fields() so that it will respect an exclude=["filter"] kwarg by not validating the filter field.
  • #4262 - Fixed warning message when trying to use bulk edit with no items selected.

Housekeeping

  • #4331 - Added a "housekeeping" subsection to the release-notes via towncrier.

Contributors

  • @timizuoebideri1
  • @joewesch
  • @whitej6
  • @jamesharr
  • @gsnider2195
  • @glennmatthews
  • @DistantVoyager

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.1...v1.6.2

nautobot - v2.0.0-rc.2 - 2023-08-24

Published by HanlinMiao about 1 year ago

Added

  • #3794 - Added support for multi-column keys for CSV Import.

Changed

  • #2807 - Renamed IPAddress vrf filter to vrfs.
  • #2807 - Renamed Prefix mask_length filter to prefix_length and vrf filter to vrfs.
  • #2807 - Enhanced Prefix vlan_vid filter to permit multiple query values.
  • #2807 - Renamed RouteTarget exporting_vrf filter to exporting_vrfs and importing_vrf filter to importing_vrfs.
  • #2807 - Renamed Service port filter to ports.
  • #2807 - Renamed VRF export_target filter to export_targets and import_target filter to import_targets.
  • #2853 - Renamed JobView to JobRunView and JobDetailView to JobView.
  • #2853 - Rename url lookups job to job_run_by_class_path and job_detail to job.
  • #2853 - Changed as_form_class, as_form and validate_data functions on BaseJob Model to classmethods.
  • #4305 - Merged develop back into next after release 1.6.1

Fixed

  • #2807 - Fixed misnamed tag fields on various filter forms (correct filter name is now tags).
  • #4299 - Added missing to_field_name attribute on TagFilterField, which was causing dynamic-group filtering failures.
  • #4300 - Fixed a permission issue when using final-dev containers by switching to root user before exposing port and entrypoint.

Removed

  • #2807 - Removed RouteTarget exporting_vrf_id and importing_vrf_id filters as they are redundant with the exporting_vrfs and importing_vrfs filters.
  • #2807 - Removed Service device_id and virtual_machine_id filters as they are redundant with the device and virtual_machine filters.
  • #2807 - Removed VRF export_target_id and import_target_id filters as they are redundant with the export_targets and import_targets filters.
  • #2853 - Removed /extras/jobs/results/<uuid:pk>/ URL endpoint.

Contributors

  • @gsnider2195
  • @jvanderaa
  • @glennmatthews
  • @jathanism
  • @timizuoebideri1
  • @joewesch
  • @whitej6
  • @jamesharr
  • @HanlinMiao

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-rc.1...v2.0.0-rc.2

nautobot - v1.6.1 (2023-08-21)

Published by timizuoebideri1 about 1 year ago

v1.6.1

Changed

  • #4242 - Changed development/nautobot_config.py to disable installation metrics for developer environments by default.
  • #4242 - Changed behavior of dev and final-dev Docker images to disable installation metrics by default.

Fixed

  • #4028 - Fixed CI integration workflow to publish 'final-dev', and build only final images.
  • #4028 - Fixed CI integration workflow set-output warnings.
  • #4093 - Fixed dependencies required for saml support missing in final docker image.
  • #4149 - Fixed a bug that prevented renaming a Rack if it contained any devices whose names were not globally unique.
  • #4241 - Added a timeout and exception handling to the nautobot-server send_installation_metrics command.
  • #4256 - Introduced new mkdocs setting of tabbed.
  • #4256 - Updated docs at nautobot/docs/installation/nautobot.md and nautobot/docs/installation/http-server.md to adopt tabbed interfaces.
  • #4258 - Re-enabled copy-to-clipboard button in mkdocs theme.

Contributors

  • @glennmatthews
  • @snaselj
  • @gsnider2195
  • @jvanderaa
  • @jathanism

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.0...v1.6.1

nautobot - v2.0.0-rc.1 - 2023-08-18

Published by gsnider2195 about 1 year ago

Added

  • #1175 - Added "Submit Feedback" functionality to the new UI.
  • #3330 - Added UI configuration documentation.
  • #3386 - Added documentation linking to best practices for database backup.
  • #3386 - Added missing files to the documentation table of contents.
  • #3387 - Added an app developer migration guide on how to upgrade an Nautobot App from v1.x to v2.0.
  • #3394 - Added Developer migration guide.
  • #3582 - The 'GetFilterSetFieldDOMElementAPIView' now has the option to return the filterset field's DOM element in JSON format.
  • #3690 - Added an IPAM Migration Guide for users upgrading to Nautobot 2.0.
  • #3904 - Added Input component for changing the page number, in addition to using the arrows.
  • #3904 - Added total number of rows to footer.
  • #3976 - Added support for related-object specification by PK (UUID) in CSV imports as an alternative to composite-keys.
  • #3976 - Added support for related-object specification by composite-key in JSON REST API data.
  • #3977 - Added DEVICE_NAME_AS_NATURAL_KEY and LOCATION_NAME_AS_NATURAL_KEY optional config settings to allow the use of simplified natural keys for Device and Location models.
  • #3978 - Added data migration for JobResult to migrate old status to its equivalent new status.
  • #3983 - Added FiltersPanel UI component.
  • #4042 - Added additional documentations and references for how CustomField, ComputedField, and Relationship behave in Nautobot v2.0.
  • #4052 - Added the option for models to specify a documentation_static_path attribute if a non-default path is needed.
  • #4081 - Added data migration to ensure Note objects' created timestamps are unique.
  • #4091 - Added information about installing and running Node.js as a part of the Nautobot installation documentation.
  • #4100 - Added columns for interface count, device count, VM interface count and virtual machine count to the IP address list view.
  • #4154 - Added handleOnKeyDown to Pagination to now update the page number when Enter key is pressed.
  • #4154 - Added double arrow icons to Pagination for navigating to first/last page.
  • #4197 - Added Bulk Import View for Namespace.
  • #4225 - Added Namespace to IPAddressDetailTable.
  • #4228 - Incorporated all code changes from Nautobot 1.6.0.

Changed

  • #3229 - Rename JobResult.data to JobResult.result and delete the original JobResult.result.
  • #3636 - Reintroduced "Assign IP Address" button to Device Interfaces list view.
  • #3892 - Removed logger kwarg from JobResult.log(). Jobs' self.logger logging instance automatically logs to both the console and database and should be used instead of this method.
  • #3892 - Changed the function signatures for nautobot.extras.datasources.git methods get_repo_from_url_to_path_and_from_branch, ensure_git_repository, git_repository_dry_run, import_config_context, import_local_config_context, and import_config_context_schema.
  • #3904 - Restyled the pagination section.
  • #3904 - Modified the back "<" and next ">" arrows to navigate to the previous/next page, respectively, rather than the first/last page.
  • #3904 - The back "<" and next ">" arrows no longer show when they aren't relevant (i.e. when on the first/last page).
  • #3904 - Changed Pagination component from Class to function.
  • #3906 - Changed visual loading behavior of object list views in new UI.
  • #3928 - Updated settings documentation for Nautobot 2.0 Celery changes.
  • #3972 - Changed the natural-key for ComponentModel to ["name", "device"].
  • #3972 - Re-ordered the natural-key fields for PowerOutlet and PowerPanel.
  • #3972 - Changed the natural-key fields for Cable, CablePath, and TaggedItem to merely "pk".
  • #3972 - Changed the natural-key for RackReservation to ["units", "racks"].
  • #3972 - Changed the natural-key of VirtualChassis to "name".
  • #3976 - Moved NautobotHyperlinkedRelatedField from nautobot.core.api.serializers to nautobot.core.api.fields.
  • #4013 - Refined the Device Detail View in the New UI.
  • #4061 - Changed development nodejs Docker container to use Nautobot dev image instead of generic node image.
  • #4061 - Changed the dev and final-dev Docker images to install and run Nautobot as a nautobot user instead of as root.
  • #4061 - Updated poetry version included in dev and final-dev Docker images from 1.3.1 to 1.5.1.
  • #4061 - Updated markdownlint-cli to version 0.35.0.
  • #4061 - Changed all Docker images to install Nautobot and its dependencies to a virtualenv in /opt/nautobot/ instead of the system Python.
  • #4061 - Changed Docker build to install dependencies for and then build the new UI as a separate set of stages from the installation of Python dependencies and build of the Python package.
  • #4061 - Consolidated development/non-development package.json and package-lock.json files into a single set of files.
  • #4164 - Modified docker dev stage to run as root user to prevent permission issues with bind mounts.
  • #4242 - Changed development/nautobot_config.py to disable installation metrics for developer environments by default.
  • #4242 - Changed behavior of dev and final-dev Docker images to disable installation metrics by default.

Dependencies

  • #4125 - Added support for Python 3.11.
  • #4125 - Updated django-auth-ldap optional dependency to ~4.3.0.
  • #4125 - Updated django-cors-headers dependency to ~4.2.0.
  • #4125 - Updated django-storages optional dependency to ~1.13.2.
  • #4125 - Updated django-tables2 dependency to ~2.6.0.
  • #4125 - Updated django-tree-queries dependency to ~0.15.0.
  • #4125 - Updated drf-spectacular dependency to ~0.26.3.
  • #4125 - Updated napalm optional dependency to ~4.1.0.
  • #4125 - Updated Pillow dependency to ~10.0.0.
  • #4125 - Updated prometheus-client dependency to ~0.17.1.
  • #4125 - Updated social-auth-core optional dependency to ~4.4.2.
  • #4125 - Updated various development-only dependencies to the latest available versions.
  • #4143 - Updated celery dependency to ~5.3.1.
  • #4143 - Updated django-celery-beat dependency to ~2.5.0.
  • #4143 - Updated django-constance dependency to ~2.9.1.
  • #4143 - Updated django-extensions dependency to ~3.2.3.
  • #4143 - Updated django-prometheus dependency to ~2.3.1.
  • #4143 - Updated django-redis dependency to ~5.3.0.
  • #4143 - Updated django-taggit dependency to ~4.0.0.
  • #4143 - Updated django-timezone-field dependency to ~5.1.
  • #4143 - Updated GitPython dependency to ~3.1.32.
  • #4143 - Updated graphene-django dependency to ~2.16.0.
  • #4143 - Updated Jinja2 dependency to ~3.1.2.
  • #4143 - Updated jsonschema dependency to permit versions up to 4.18.x. Note that versions back to 4.7.0 are still permitted, so this dependency may not necessarily auto-upgrade when updating Nautobot.
  • #4143 - Updated MarkupSafe dependency to ~2.1.3.
  • #4143 - Updated mysqlclient optional dependency to ~2.2.0.
  • #4143 - Updated packaging dependency to ~23.1.
  • #4143 - Updated psycopg2-binary dependency to ~2.9.6.
  • #4143 - Updated various development-only dependencies to the latest available versions.

Fixed

  • #3904 - Added proper spacing/alignment to pagination section.
  • #3974 - Corrected the natural-key definitions for ComputedField, CustomField, FileAttachment, ImageAttachment, ObjectChange, Relationship, RelationshipAssociation, and Token models.
  • #3976 - Fixed an error when creating VRF or Prefix records via the REST API without specifying a namespace value.
  • #4013 - Fixed incorrect related model url rendering in ObjectRetrieve view.
  • #4028 - Fixed CI integration workflow to publish 'final-dev', and build only final images.
  • #4028 - Fixed CI integration workflow set-output warnings.
  • #4061 - Fixed error when running 'invoke markdownlint' with Docker Compose workflow.
  • #4061 - Fixed a few broken links in the documentation.
  • #4083 - Fixed a issue that was causing the build process of react to be slow.
  • #4100 - Fixed assigned column in the IP address list view.
  • #4115 - Fixed missing data validation in IPAddressForm and PrefixForm.
  • #4124 - Fixed inability to start nodejs development container due to missing files.
  • #4131 - Fixed inability to filter most models with .exclude(composite_key="...").
  • #4131 - Fixed inability to call Prefix.objects.exclude(prefix="...").
  • #4131 - Fixed inability to call IPAddress.objects.exclude(address="...").
  • #4149 - Fixed a bug that prevented renaming a Rack if it contained any devices whose names were not globally unique.
  • #4154 - Added useEffect to fix the last_page in Pagination from not updating dynamically.
  • #4241 - Added a timeout and exception handling to the nautobot-server send_installation_metrics command.
  • #4254 - Fixed CI container builds failing on npm install steps.
  • #4285 - Fixed next container build workflow.

Removed

  • #3761 - Remove remaining Site and Region references from core docs.
  • #3892 - Removed unused method get_job_result_and_repository_record in nautobot.extras.datasources.git.
  • #4061 - Removed node_modules shared volume from Docker development environment as no longer needed.
  • #4104 - Removed unused primary_for_device from Interface data migration.
  • #4115 - Removed temporary code from ObjectEditView that was working around some IPAddress/Prefix form validation gaps.

Contributors

  • @timizuoebideri1
  • @glennmatthews
  • @gsnider2195
  • @lampwins
  • @DistantVoyager
  • @whitej6
  • @Kircheneer
  • @itdependsnetworks
  • @bryanculver
  • @grelleum
  • @jathanism
  • @norbert-mieczkowski-codilime

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-beta.2...v2.0.0-rc.1

nautobot - v1.6.0 - 2023-08-08

Published by jathanism about 1 year ago

Nautobot v1.6

This document describes all new features and changes in Nautobot 1.6.

Release Overview

Added

Custom Field "Markdown" Type (#4006)

A new Custom Field type, "Markdown", has been added. Custom fields of this type can store Markdown-formatted text which will be rendered in the web UI.

Caching of Dynamic Groups and Content Types (#4092)

APIs have been added to allow for caching of the results of looking up an object's content-type or Dynamic Group memberships, as well as for looking up the members of a Dynamic Group itself. These caches are disabled by default but can be enabled by configuring the DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT and CONTENT_TYPE_CACHE_TIMEOUT settings respectively. Apps (plugins) that make use of dynamic groups should review the documentation for the APIs to determine how and when to make use of the cache for improved performance.

Interface Redundancy Group (#2825)

Interface Redundancy Group model and related views have been added to allow logical grouping of multiple interfaces under a specific interface redundancy protocol (HSRP, VRRP, CARP, and etc).

Installation Metrics (#4047)

A new setting, INSTALLATION_METRICS_ENABLED, has been added to allow Nautobot to send anonymous installation metrics to the Nautobot maintainers. This setting is True by default but can be changed in nautobot_config.py or the NAUTOBOT_INSTALLATION_METRICS_ENABLED environment variable.

If the INSTALLATION_METRICS_ENABLED setting is True, running the post_upgrade or send_installation_metrics management commands will send a list of all installed plugins and their versions, as well as the currently installed Nautobot and Python versions, to the Nautobot maintainers. A randomized UUID will be generated and saved in the DEPLOYMENT_ID setting to anonymously and uniquely identify each installation. The plugin names will be one-way hashed with SHA256 to further anonymize the data sent. This enables tracking the installation metrics of publicly released plugins without disclosing the names of any private plugins.

The following is an example of the data that is sent:

{
    "deployment_id": "1de3dacf-f046-4a98-8d4a-17419080db79",
    "nautobot_version": "1.6.0b1",
    "python_version": "3.10.12",
    "installed_apps": {
        # "example_plugin" hashed by sha256
        "3ffee4622af3aad6f78257e3ae12da99ca21d71d099f67f4a2e19e464453bee7": "1.0.0"
    },
    "debug": true
}

Platform.network_driver and related fields (4136)

The Platform model has been enhanced to include a network_driver database field and a network_driver_mappings derived property based on the netutils library. For example, if you set a Platform to have a network_driver value of "cisco_ios", the platform.network_driver_mappings property will return a dictionary containing ansible, hier_config, napalm, netmiko, ntc_templates, pyats, pyntc, and scrapli keys corresponding to this entry. These properties can be referenced via the REST API and GraphQL to assist in developing and maintaining Apps, Jobs, or third-party code that interact with devices by using any of these libraries.

If the default derivations provided by netutils are not suitable for your purposes, you can extend or override them by configuring the NETWORK_DRIVERS system setting.

Python 3.11 Support (#3561)

Nautobot 1.6.0 formally adds support for installation and operation under Python 3.11.

Changed

Additional HIDE_RESTRICTED_UI Effects for Unauthenticated Users (#3646)

When HIDE_RESTRICTED_UI is enabled, unauthenticated users are no longer able to view the OpenAPI (Swagger) UI, the GraphiQL UI, or any configured top/bottom banners. Additionally, the page footer on the login page will not display the Nautobot server hostname in this case.

Increased Device.asset_tag maximum length (#3693)

The maximum length of the Device.asset_tag field has been increased from 50 to 100 characters.

Changed Default Python Version for Docker Images (#4029)

The default Python version for Nautobot Docker images has been changed from 3.7 to 3.11.

Removed

Removed Python 3.7 Support (#3561)

As Python 3.7 has reached end-of-life, Nautobot 1.6 and later do not support installation or operation under Python 3.7.

v1.6.0 (2023-08-08)

Added

  • #4169 - Added environment variable NAUTOBOT_SESSION_EXPIRE_AT_BROWSER_CLOSE to set the SESSION_EXPIRE_AT_BROWSER_CLOSE Django setting which expires session cookies when the user closes their browser.
  • #4184 - Added documentation detailing rack power utilization calculation.

Dependencies

  • #4208 - Updated django-rq to 2.8.1.
  • #4209 - Relaxed constraint on prometheus-client minimum version to 0.14.1.
  • #4173 - Updated drf-spectacular to 0.26.4.
  • #4199 - Updated cryptography to ~41.0.3. As this is not a direct dependency of Nautobot, it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4215 - Broadened the range of acceptable packaging dependency versions.

Fixed

  • #3985 - Added error handling in JobResult.log() for the case where an object's get_absolute_url() raises an exception.
  • #3985 - Added missing get_absolute_url() implementation on CustomFieldChoice model.
  • #4222 - Fixed a bug in which Job ChoiceVars could sometimes get rendered incorrectly in the UI as multiple-choice fields.
  • #4175 - Changed custom field clean to not populate null default values.
  • #4204 - Fixed failing Apps CI by downgrading jsonschema<4.18.
  • #4205 - Fixed failing Apps CI due to missing dependency of toml.

v1.6.0-rc.1 (2023-08-02)

Added

  • #2825 - Added InterfaceRedundancyGroup and related views, forms, filtersets and table.
  • #3269 - Added ability to cache DynamicGroup memberships in Redis to improve reverse lookup performance.
  • #3269 - Added ability to cache ContentType lookups in Redis to improve performance.
  • #3561 - Added support for Python 3.11.
  • #4006 - Added Markdown custom field type.
  • #4044 - Added ability to use @action(detail=True) decorator for registering additional non-standard GET views to a NautobotUIViewSet.
  • #4047 - Added ability for Nautobot to send installation metrics.
  • #4118 - Added documentation for troubleshooting integration test failures via VNC.
  • #4136 - Added network_driver database field to the Platform model.
  • #4136 - Added network_driver_mappings derived attribute on the Platform model.
  • #4136 - Added CONSTANCE_DATABASE_CACHE_BACKEND = 'default' to settings.py, which should improve performance a bit.
  • #4136 - Added support for NETWORK_DRIVERS config setting to override or extend default network driver mappings from netutils library.
  • #4161 - Enhanced NautobotUIViewSet to allow Create and Update methods to have their own form classes.

Changed

  • #3646 - Redirect unauthenticated users on all views to login page if HIDE_RESTRICTED_UI is True.
  • #3646 - Only time is shown on the footer if a user is unauthenticated and HIDE_RESTRICTED_UI is True.
  • #3693 - Increased Device model's asset_tag size limit to 100.

Dependencies

  • #3561 - Updated celery dependency to ~5.3.1.
  • #3561 - Updated django-auth-ldap optional dependency to ~4.3.0.
  • #3561 - Updated django-cacheops dependency to ~6.2.
  • #3561 - Updated django-celery-beat dependency to ~2.5.0.
  • #3561 - Updated django-constance dependency to ~2.9.1.
  • #3561 - Updated django-cors-headers dependency to ~4.2.0.
  • #3561 - Updated django-cryptography dependency to ~1.1. Note that this dependency will be removed in Nautobot 2.0.
  • #3561 - Updated django-extensions dependency to ~3.2.3.
  • #3561 - Updated django-filter dependency to ~23.1.
  • #3561 - Updated django-health-check dependency to ~3.17.0
  • #3561 - Updated django-prometheus dependency to ~2.3.1.`
  • #3561 - Updated django-redis dependency to ~5.3.0.
  • #3561 - Updated django-storages optional dependency to ~1.13.2.
  • #3561 - Updated django-tables2 dependency to ~2.6.0.
  • #3561 - Updated django-taggit dependency to ~4.0.0.
  • #3561 - Updated django-timezone-field dependency to ~5.1.
  • #3561 - Updated django-tree-queries dependency to ~0.15.0.
  • #3561 - Updated drf-spectacular dependency to ~0.26.3.
  • #3561 - Updated graphene-django dependency to ~2.16.0.
  • #3561 - Updated Jinja2 dependency to ~3.1.2.
  • #3561 - Updated jsonschema dependency to permit versions up to 4.18.x. Note that versions back to 4.7.0 are still permitted, so this dependency may not necessarily auto-upgrade when updating Nautobot.
  • #3561 - Updated MarkupSafe dependency to ~2.1.3.
  • #3561 - Updated mysqlclient optional dependency to ~2.2.0.
  • #3561 - Updated napalm optional dependency to ~4.1.0. Note that as a result of this update, the following indirect package dependencies are no longer included by default when installing Nautobot with NAPALM: ciscoconfparse, dnspython, loguru, passlib, tenacity, toml, win32-setctime.
  • #3561 - Updated packaging dependency to ~23.1.
  • #3561 - Updated Pillow dependency to ~10.0.0.
  • #3561 - Updated prometheus-client dependency to ~0.17.1.
  • #3561 - Updated social-auth-core optional dependency to ~4.4.2.
  • #3561 - Updated social-auth-app-django dependency to ~5.2.0.
  • #3561 - Updated various development-only dependencies to the latest available versions.

Fixed

  • #4178 - Fixed JSON serialization of overloaded/non-default FilterForm fields on Dynamic Groups.

Removed

  • #3561 - Dropped support for Python 3.7. Python 3.8 is now the minimum version required by Nautobot.
  • #3561 - Removed direct dependency on importlib-metadata.
  • #3561 - Removed direct dependency on pycryptodome as Nautobot does not currently use this library and hasn't for some time.

Contributors

  • @MeganerdDev
  • @timizuoebideri1
  • @whitej6
  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @itdependsnetworks
  • @bryanculver
  • @snaselj
  • @grelleum
  • @jfach

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.24...v1.6.0

nautobot - v1.6.0-rc.1 - 2023-08-02

Published by jathanism about 1 year ago

Nautobot v1.6

This document describes all new features and changes in Nautobot 1.6.

Release Overview

Added

Custom Field "Markdown" Type (#4006)

A new Custom Field type, "Markdown", has been added. Custom fields of this type can store Markdown-formatted text which will be rendered in the web UI.

Caching of Dynamic Groups and Content Types (#4092)

APIs have been added to allow for caching of the results of looking up an object's content-type or Dynamic Group memberships, as well as for looking up the members of a Dynamic Group itself. These caches are disabled by default but can be enabled by configuring the DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT and CONTENT_TYPE_CACHE_TIMEOUT settings respectively. Apps (plugins) that make use of dynamic groups should review the documentation for the APIs to determine how and when to make use of the cache for improved performance.

Installation Metrics (#4047)

A new setting, INSTALLATION_METRICS_ENABLED, has been added to allow Nautobot to send anonymous installation metrics to the Nautobot maintainers. This setting is True by default but can be changed in nautobot_config.py or the NAUTOBOT_INSTALLATION_METRICS_ENABLED environment variable.

If the INSTALLATION_METRICS_ENABLED setting is True, running the post_upgrade or send_installation_metrics management commands will send a list of all installed plugins and their versions, as well as the currently installed Nautobot and Python versions, to the Nautobot maintainers. A randomized UUID will be generated and saved in the DEPLOYMENT_ID setting to anonymously and uniquely identify each installation. The plugin names will be one-way hashed with SHA256 to further anonymize the data sent. This enables tracking the installation metrics of publicly released plugins without disclosing the names of any private plugins.

The following is an example of the data that is sent:

{
    "deployment_id": "1de3dacf-f046-4a98-8d4a-17419080db79",
    "nautobot_version": "1.6.0b1",
    "python_version": "3.10.12",
    "installed_apps": {
        # "example_plugin" hashed by sha256
        "3ffee4622af3aad6f78257e3ae12da99ca21d71d099f67f4a2e19e464453bee7": "1.0.0"
    },
    "debug": true
}

Platform.network_driver and related fields (4136)

The Platform model has been enhanced to include a network_driver database field and a network_driver_mappings derived property based on the netutils library. For example, if you set a Platform to have a network_driver value of "cisco_ios", the platform.network_driver_mappings property will return a dictionary containing ansible, hier_config, napalm, netmiko, ntc_templates, pyats, pyntc, and scrapli keys corresponding to this entry. These properties can be referenced via the REST API and GraphQL to assist in developing and maintaining Apps, Jobs, or third-party code that interact with devices by using any of these libraries.

If the default derivations provided by netutils are not suitable for your purposes, you can extend or override them by configuring the NETWORK_DRIVERS system setting.

Python 3.11 Support (#3561)

Nautobot 1.6.0 formally adds support for installation and operation under Python 3.11.

Changed

Additional HIDE_RESTRICTED_UI Effects for Unauthenticated Users (#3646)

When HIDE_RESTRICTED_UI is enabled, unauthenticated users are no longer able to view the OpenAPI (Swagger) UI, the GraphiQL UI, or any configured top/bottom banners. Additionally, the page footer on the login page will not display the Nautobot server hostname in this case.

Increased Device.asset_tag maximum length (#3693)

The maximum length of the Device.asset_tag field has been increased from 50 to 100 characters.

Removed

Removed Python 3.7 Support (#3561)

As Python 3.7 has reached end-of-life, Nautobot 1.6 and later do not support installation or operation under Python 3.7.

v1.6.0-rc.1 (2023-08-02)

Added

  • #2825 - Added InterfaceRedundancyGroup and related views, forms, filtersets and table.
  • #3269 - Added ability to cache DynamicGroup memberships in Redis to improve reverse lookup performance.
  • #3269 - Added ability to cache ContentType lookups in Redis to improve performance.
  • #3561 - Added support for Python 3.11.
  • #4006 - Added Markdown custom field type.
  • #4044 - Added ability to use @action(detail=True) decorator for registering additional non-standard GET views to a NautobotUIViewSet.
  • #4047 - Added ability for Nautobot to send installation metrics.
  • #4118 - Added documentation for troubleshooting integration test failures via VNC.
  • #4136 - Added network_driver database field to the Platform model.
  • #4136 - Added network_driver_mappings derived attribute on the Platform model.
  • #4136 - Added CONSTANCE_DATABASE_CACHE_BACKEND = 'default' to settings.py, which should improve performance a bit.
  • #4136 - Added support for NETWORK_DRIVERS config setting to override or extend default network driver mappings from netutils library.
  • #4161 - Enhanced NautobotUIViewSet to allow Create and Update methods to have their own form classes.

Changed

  • #3646 - Redirect unauthenticated users on all views to login page if HIDE_RESTRICTED_UI is True.
  • #3646 - Only time is shown on the footer if a user is unauthenticated and HIDE_RESTRICTED_UI is True.
  • #3693 - Increased Device model's asset_tag size limit to 100.

Dependencies

  • #3561 - Updated celery dependency to ~5.3.1.
  • #3561 - Updated django-auth-ldap optional dependency to ~4.3.0.
  • #3561 - Updated django-cacheops dependency to ~6.2.
  • #3561 - Updated django-celery-beat dependency to ~2.5.0.
  • #3561 - Updated django-constance dependency to ~2.9.1.
  • #3561 - Updated django-cors-headers dependency to ~4.2.0.
  • #3561 - Updated django-cryptography dependency to ~1.1. Note that this dependency will be removed in Nautobot 2.0.
  • #3561 - Updated django-extensions dependency to ~3.2.3.
  • #3561 - Updated django-filter dependency to ~23.1.
  • #3561 - Updated django-health-check dependency to ~3.17.0
  • #3561 - Updated django-prometheus dependency to ~2.3.1.`
  • #3561 - Updated django-redis dependency to ~5.3.0.
  • #3561 - Updated django-storages optional dependency to ~1.13.2.
  • #3561 - Updated django-tables2 dependency to ~2.6.0.
  • #3561 - Updated django-taggit dependency to ~4.0.0.
  • #3561 - Updated django-timezone-field dependency to ~5.1.
  • #3561 - Updated django-tree-queries dependency to ~0.15.0.
  • #3561 - Updated drf-spectacular dependency to ~0.26.3.
  • #3561 - Updated graphene-django dependency to ~2.16.0.
  • #3561 - Updated Jinja2 dependency to ~3.1.2.
  • #3561 - Updated jsonschema dependency to permit versions up to 4.18.x. Note that versions back to 4.7.0 are still permitted, so this dependency may not necessarily auto-upgrade when updating Nautobot.
  • #3561 - Updated MarkupSafe dependency to ~2.1.3.
  • #3561 - Updated mysqlclient optional dependency to ~2.2.0.
  • #3561 - Updated napalm optional dependency to ~4.1.0. Note that as a result of this update, the following indirect package dependencies are no longer included by default when installing Nautobot with NAPALM: ciscoconfparse, dnspython, loguru, passlib, tenacity, toml, win32-setctime.
  • #3561 - Updated packaging dependency to ~23.1.
  • #3561 - Updated Pillow dependency to ~10.0.0.
  • #3561 - Updated prometheus-client dependency to ~0.17.1.
  • #3561 - Updated social-auth-core optional dependency to ~4.4.2.
  • #3561 - Updated social-auth-app-django dependency to ~5.2.0.
  • #3561 - Updated various development-only dependencies to the latest available versions.

Fixed

  • #4178 - Fixed JSON serialization of overloaded/non-default FilterForm fields on Dynamic Groups.

Removed

  • #3561 - Dropped support for Python 3.7. Python 3.8 is now the minimum version required by Nautobot.
  • #3561 - Removed direct dependency on importlib-metadata.
  • #3561 - Removed direct dependency on pycryptodome as Nautobot does not currently use this library and hasn't for some time.

Contributors

  • @MeganerdDev
  • @timizuoebideri1
  • @whitej6
  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @itdependsnetworks
  • @bryanculver
  • @snaselj
  • @grelleum
  • @jfach

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.24...v1.6.0-rc.1

nautobot - v1.5.24 - 2023-07-24

Published by gsnider2195 about 1 year ago

v1.5.24 (2023-07-24)

Fixed

  • #3312 - Fixed custom fields not auto-populating when creating objects through the ORM.
  • #4127 - Fixed JavaScript error with 'Check Secret' button introduced in the previous patch release.

Security

  • #4126 - Updated cryptography to 41.0.2 due to CVE-2023-38325. As this is not a direct dependency of Nautobot, it will not auto-update when upgrading. Please be sure to upgrade your local environment.

Contributors

  • @bryanculver
  • @Kircheneer
  • @glennmatthews

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.23...v1.5.24

nautobot - v1.5.23 - 2023-07-10

Published by bryanculver over 1 year ago

Added

  • #3235 - Added a warning notifying users when the requested per_page on a list page exceeds the MAX_PAGE_SIZE set.
  • #3937 - Added a Nautobot 2.0 pre-migration management command aptly named pre_migrate.

Changed

  • #1854 - When sorting tables for MPTT models, nesting/indentation of the model name display is disabled as it was misleading.
  • #1854 - Disabled sorting on TreeNode model tables as TreeNode do not support sorting.
  • #4049 - Restructured non-production dependencies in pyproject.toml to comply with latest Poetry expectations.
  • #4050 - Added develop-1.6 to list of target branches to run changelog step in pull request CI workflow.

Dependencies

  • #4049 - Updated development-only dependencies for documentation rendering: mkdocstrings 0.22.0, mkdocstrings-python 1.1.2, and griffe 0.30.1.
  • #4064 - Updated Django to 3.2.20 to address CVE-2023-36053.

Fixed

  • #2374 - Revised documentation for recommended parameters to use when running nautobot-server dumpdata.
  • #2374 - Revised documentation around preparing to run nautobot-server loaddata.
  • #2374 - Added documentation to run nautobot-server trace_paths after nautobot-server loaddata.
  • #2374 - Fixed a signal handler that could cause nautobot-server loaddata to abort if certain data is present.
  • #3109 - Fixed missing trailing slash in NautobotUIViewSet urls.
  • #3422 - Fixed postgres database healthcheck error message in development environment.
  • #3524 - Fixed the unhandled exception brought on by updating Rack to a new site with a similar device sharing the same name and tenant by catching error in 'RackForm.clean`.
  • #4021 - Fixed erroneous warning banner on list views when MAX_PAGE_SIZE is set to zero.
  • #4048 - Fixed broken tab navigation in secrets.

Security

  • #4064 - Updated Django to 3.2.20 to address CVE-2023-36053.

Contributors

  • @timizuoebideri1
  • @jathanism
  • @glennmatthews
  • @gsnider2195
  • @u1735067

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.22...v1.5.23

nautobot - v2.0.0-beta.2 - 2023-07-07

Published by bryanculver over 1 year ago

This is a retag with a fixed workflow file. Changes between previous tag and this: diff

Added

  • #3287 - Added nautobot-server audit_dynamic_groups management command for evaluating breaking filter changes to existing DynamicGroup instances.
  • #3526 - Added detail view UI layout config.
  • #3635 - Added interfaces and vm_interfaces fields to REST API representation of IPAddress.
  • #3845 - Added data migration to ensure all existing service instances fit those uniqueness constraints.
  • #3845 - Added CreateView for Service Model.
  • #3846 - Added migration helper method to check if a model contains duplicate records based on its natural key fields.
  • #3846 - Added migration to check whether all existing Virtual Chassis instances have unique names and to fail if they do not.
  • #3885 - Added a unique_together constraint for ObjectChange records.
  • #3900 - Added 'invoke migration-test' and corresponding CI step.
  • #3935 - Added constraints to the parent field on Prefix based on the prefix's type and the parent's type.
  • #3939 - Added a post-migration helper tool for de-duplicating IPAddresses.
  • #3940 - Added Jobs migration docs.
  • #4003 - Synced in code changes from develop branch up through version 1.5.22.
  • #4004 - Added --save option to nautobot-server validate_models command.
  • #4004 - Added successful_post callback function to ObjectEditView.
  • #4004 - Added parent filter for Prefix objects.
  • #4004 - Added warning messages when creating or editing a Prefix or IPAddress that does not follow prefix type guidance.

Changed

  • #2662 - Changed many FilterSet filters to filter on (name or ID) instead of (slug or ID) since the relevant model slug fields have been removed.
  • #2662 - Changed FilterSet filters referring to DeviceType objects to filter on (model or ID) instead of (slug or ID).
  • #2662 - Changed NaturalKeyOrPKMultipleChoiceFilter default to_field_name from slug to name.
  • #2662 - Replaced NameSlugSearchFilterSet with NameSearchFilterSet.
  • #2662 - Changed default ModelViewTestCase._get_url() behavior to prefer pk-based URLs over slug-based URLs.
  • #2662 - Changed ObjectEditView.get_object() and ObjectDeleteView.get_object() to prefer pk-based object lookups over slug-based lookups.
  • #2662 - Revised development best-practices documentation around the inclusion of slug fields in models.
  • #2662 - Changed Git repository provided "implicit" config context files to be based on name (or model in the case of DeviceType contexts) instead of slug.
  • #2916 - Updated prefix utilization calculation.
  • #3287 - Changed the ip_version filters in PrefixFilterSet and IPAddressFilterSet to django_filters.NumberFilter.
  • #3424 - Added IPAddress.type field and moved DHCP/SLAAC status to types.
  • #3424 - Unskipped nautobot.ipam.tests.test_forms.IPAddressFormTest
  • #3634 - Restored assigned_to_interface as a RelatedMembershipBooleanFilter with name has_interface_assignments on IPAddressFilterSet.
  • #3634 - Restored present_in_vrf and present_in_vrf_id filters on IPAddressFilterSet.
  • #3635 - Re-enabled and updated some GraphQL tests relating to IPAddress objects in GraphQL.
  • #3725 - Changed REST API nested hyperlink to a brief object representation consisting of its ID, URL, and object_type.
  • #3748 - Updated API serializers to support Namespaces and unskip unit tests
  • #3770 - Modified the text color to be gray-1 for the sidebarNav components.
  • #3770 - In Layout.js, also made the 'Return to Legacy UI' link gray-1 for consistency.
  • #3770 - Made the sidebar button links be orange when selected and on that page.
  • #3778 - Changed the REST API depth for generating the OpenAPI schema from 1 to 0.
  • #3778 - Set ENUM_GENERATE_CHOICE_DESCRIPTION to False to make OpenAPI schema for REST API filters less verbose.
  • #3793 - Renamed Natural-key slug to Composite key throughout the code base, UI, REST API, and documentation.
  • #3793 - Changed url separator character for Composite keys from & to ;.
  • #3845 - Changed Service.name and Service.device or Service.name and Service.virtual_machine to be globally unique and to serve as the natural key for this model.
  • #3846 - Changed VirtualChassis.name to be globally unique and to serve as the natural key for this model.
  • #3847 - Changed ScheduledJob.name to be globally unique and serve as the natural key for this model.
  • #3847 - Increased ScheduledJob.task max_length to fix an off-by-one potential error.
  • #3848 - Changed ExportTemplate uniqueness constraint (and natural key) to be simply (content_type, name).
  • #3849 - Changed ConfigContext.name to be globally unique and serve as the natural key for this model.
  • #3849 - Changed ConfigContextSchema.name to be globally unique and serve as the natural key for this model.
  • #3850 - Changed VLANGroup name to unique.
  • #3851 - Changed ObjectPermission.name to be globally unique and serve as the natural key for this model.
  • #3854 - Updated default index page for "Networks" context to Prefixes.
  • #3883 - Updated nautobot-ui package in next.
  • #3898 - Changed the IPAddress natural key definition (IPAddress.natural_key_field_names) to [parent__namespace, host].
  • #3936 - Restored navigation menu structure in the legacy UI.
  • #3939 - Changed Device.primary_ip4 and primary_ip6 fields from OneToOneField to ForeignKey, relaxing the uniqueness constraint.
  • #3939 - Changed VirtualMachine.primary_ip4 and primary_ip6 fields from OneToOneField to ForeignKey, relaxing the uniqueness constraint.
  • #3940 - Updated JOBS_ROOT Jobs import code to check for conflicts with existing package names.
  • #3953 - Removed static "Home" text.
  • #3953 - Fixed padding/spacing of Home and Object Views to be consistent.
  • #3973 - Changed natural-key for Prefix model to [namespace, prefix].
  • #3973 - Changed natural-key for Service model to [name, virtual_machine, device].
  • #3973 - Changed natural-key for VLANGroup model to simply [name].
  • #3973 - Changed natural-key for VLAN model to [pk] for now.
  • #4004 - Changed Prefix.type validation with respect to parents and children from strictly-enforced to advisory-only for 2.0.
  • #4004 - Changed parent filter on IPAddress to be exact-match by PK; the previously present filter is renamed to prefix.

Fixed

  • #2662 - Corrected leftover "natural key slug" reference in object_bulk_create.html.
  • #2662 - Corrected incorrect logic in generic view test test_list_objects_filtered and test_list_objects_unknown_filter_strict_filtering.
  • #2662 - Fixed leftover reference to GraphQLQuery.slug in CustomGraphQLView.
  • #2662 - Fixed leftover references to slug in various detail view and edit view templates.
  • #2662 - Fixed leftover references to slug in various IPAM table columns.
  • #2662 - Fixed various leftover references to slug fields in the documentation.
  • #3424 - Fixed a typo in AvailableIPSerializer for ip_version field representation.
  • #3574 - Fixed Inability to select multiple entries on (Multiple) selection custom fields in filter.
  • #3580 - Fixed a bug that prevented moving IP Addresses between Namespaces.
  • #3778 - Fixed self-referential type loop in the OpenAPI schema that made Swagger UI unusable for some endpoints.
  • #3782 - Fixed filename for CSV exports.
  • #3847 - Corrected out-of-date information about class_path in the Jobs documentation.
  • #3847 - Fixed incorrect filter form definitions for JobHookFilterForm, JobResultFilterForm, ScheduledJobFilterForm.
  • #3858 - Fixed broken dynamic filter form in legacy view.
  • #3859 - Added logic to protect against defining a GitRepository.slug that would conflict with existing Python modules.
  • #3865 - Fixed errorneous algorithms used in CustomField and Relationship data migrations.
  • #3867 - Fixed node_modules volume mount in docker-compose.
  • #3876 - Fixed markdownlint command syntax.
  • #3879 - Fixed permission check for navigation menu item for Namespaces.
  • #3885 - Fixed missing natural_key for ObjectChange records.
  • #3889 - Fixed a bug in ScheduledJob data migration where it is trying to delete a non-existent key from a dictionary.
  • #3890 - Fixed an error that could happen during migrations if a Site and a Location both have the same slug.
  • #3896 - Fixed a KeyError when accessing ObjectChange records for a ConfigContext via the REST API.
  • #3898 - Fixed several errors that could occur when defining a model's natural_key_field_names to include related object lookups.
  • #3902 - Fixed a GraphQL error when querying Interface mac_address when unset/null/empty values are present.
  • #3916 - Fixed custom NautobotHyperlinkedRelatedField to_representation logic.
  • #3930 - Fixed inconsistent job test behavior.
  • #3933 - Fixed noisy output of unit tests.
  • #3955 - Fixed an error in dcim.0030 migration when CircuitTerminations terminated to ProviderNetworks exist.
  • #3955 - Fixed an error in ipam.0031 migration when an interface had multiple IPs in the same VRF.
  • #3955 - Fixed failure of ipam.0031 migration to detect when an interface has a mix of VRF IPs and non-VRF IPs.
  • #3980 - Fixed a regression in the display of Tag records in the UI.
  • #3998 - Fixed rendering of breadcrumbs in the 2.0 UI.
  • #4005 - Added logic to catch and report errors when registering a Job to the database.
  • #4005 - Added logic to Job class @classproperty methods to enforce correct data types.
  • #4005 - Fixed incorrect documentation about how to register Jobs from an app.
  • #4071 - Fixed Docker tag syntax for pre-release workflow.

Removed

  • #2662 - Removed DeviceType.slug field.
  • #2662 - Removed Location.slug field.
  • #2662 - Removed LocationType.slug field.
  • #2662 - Removed Note.slug field.
  • #2662 - Removed ProviderNetwork.slug field.
  • #2662 - Removed RackGroup.slug field.
  • #2662 - Removed Tag.slug field.
  • #2662 - Removed VLANGroup.slug field.
  • #2662 - Removed slug FilterSet filters from models that no longer have slugs.
  • #3424 - The built-in "SLAAC" Status object has been removed and replaced with an IPAddress.type of the same name.
  • #3424 - The built-in "DHCP" Status object has been removed and replaced with an IPAddress.type of the same name.
  • #3635 - Removed leftover interface and vminterface fields from IPAddress GraphQL representation.
  • #3778 - Removed currently unused app_full_width_fragment, detail-view-config, form-fields, and table-fields REST API endpoints.
  • #3847 - Removed ScheduledJob.job_class field as redundant.
  • #3849 - Removed ConfigContextSchema.slug field.
  • #3850 - Removed VLANGroup [location, name] uniqueness constraint.
  • #3941 - Removed device, rd, name and virtual_machine, rd, name uniqueness constraints on VRFDeviceAssignment.
  • #3941 - Removed namespace, name uniqueness constraint on VRF.
  • #3941 - Removed some overly verbose messaging in IPAM migration utilities.

Contributors

  • @HanlinMiao
  • @timizuoebideri1
  • @gsnider2195
  • @glennmatthews
  • @bryanculver
  • @jathanism
  • @DistantVoyager

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-beta.1...v2.0.0-beta.2

nautobot - v1.5.22 - 2023-06-26

Published by bryanculver over 1 year ago

Added

  • #3534 - Added optional args and kwargs to BaseModel.validated_save() that pass through to the model's save method.
  • #3946 - Added warning note to job scheduling documentation for the attributes that can prevent scheduling.

Fixed

  • #3534 - Fixed confusing unit test failure message when trying to run a non-existent test.
  • #3534 - Fixed unit tests sometimes clearing out the default database.
  • #3658 - Fixed a typo in the success message when removing a child Device from a Device Bay.
  • #3739 - Fixed change log entries not being created for some long running requests.
  • #3891 - Fixed a bug preventing Job buttons from supporting the FORCE_SCRIPT_NAME setting due to hard-coded URLs.
  • #3924 - Fixed a potential server hang at startup when a misconfigured GitRepository is present.
  • #3948 - Fixed device name copy button adding an extra space/return.
  • #3987 - Fixed issue where download SVG link did not actually download.

Security

  • #3796 - Updated requests to 2.31.0 to address CVE-2023-32681. This is a development dependency and will not auto-update when upgrading Nautobot. Please be sure to update your local environment.
  • #3843 - Updated cryptography to 41.0.0 due to a statically linked version of OpenSSL which contained vulnerability CVE-2023-2650. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.

Contributors

  • @jathanism
  • @gsnider2195
  • @glennmatthews
  • @u1735067
  • @whitej6
  • @itdependsnetworks

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.21...v1.5.22

nautobot - v1.5.21 - 2023-06-12

Published by bryanculver over 1 year ago

Added

  • #3806 - Added instructions and examples for SAML SSO using Okta as the IdP.
  • #3811 - Added a note that addresses UWSGI buffer size concerns with Azure SSO in nautobot/docs/configuration/authentication/sso.md.
  • #3897 - Adds log message when a secrets group for a git repository doesn't yield a token.

Changed

  • #3888 - Changed note for celery concurrency in the docs.

Contributors

  • @HanlinMiao
  • @Kircheneer
  • @bile0026
  • @snaselj

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.20...v1.5.21

nautobot - v2.0.0-beta.1 - 2023-06-06

Published by bryanculver over 1 year ago

Added

  • #851 - Added list view with CSV import/export buttons for CircuitTermination objects.
  • #1633 - Added created and last_updated fields on the VMInterface model. When migrating to this release, these fields will default to None for any pre-existing instances of this model.
  • #2331 - Added job stdout/stderr redirection to database JobLogEntry records.
  • #2331 - Added support to skip job logs from being written to the database.
  • #2901 - Added get_absolute_url method on BaseModel which will attempt to resolve the detail view route for all subclassed models.
  • #3192 - Added a data migration to migrate existing ScheduledJob instances to support new format.
  • #3203 - Added a nautobot-server build_ui command for building the web UI
  • #3237 - Added Node.JS to Docker final image, bundled node_modules to speed up rebuilds.
  • #3615 - Added toggle buttons between Legacy UI and New UI.
  • #3637 - Added pre_delete signal to nullify the device's primary_ip field/fields if its primary ips are removed from interface's ip_addresses m2m field.
  • #3637 - Added pre_save signal to catch invalid operations in manual creations of IPAddressToInterface.
  • #3637 - Added unique_together for through model IPAddressToInterface.
  • #3651 - Added home_url, config_url, and docs_url keys to the /api/plugins/installed-plugins/ REST API endpoint.
  • #3679 - Added optional api argument to BaseModel.get_absolute_url().
  • #3702 - Added basic Redis caching for TreeModel.display to reduce redundant queries when listing such objects.
  • #3708 - Added sorting support to the REST API via the sort query parameter.
  • #3713 - Added celery_kwargs field to JobResult and ScheduledJob models.
  • #3714 - Added generic test for GET/PUT round-trip in the REST API.
  • #3714 - Added support for {"value": "x"} format when writing to ChoiceFields in the REST API, making round-trip data easier.
  • #3715 - Added NautobotCSVParser class, providing the ability for the REST API to accept CSV as an input format.
  • #3715 - Added ability to specify a parent_bay when creating a Device via the REST API.
  • #3715 - Added APIViewTestCases.CreateObjectViewTestCase.test_recreate_object_csv generic test, testing the "round-trip" capability of each API endpoint's CSV export and import.
  • #3715 - Added (temporary) natural_key_field_names to IPAddress, Prefix, RackReservation, ScheduledJob, and Service models.
  • #3721 - Added App provided model view override.
  • #3722 - Added termination_type filter to CableFilterSet.
  • #3722 - Added natural_key_slug field to REST API serializers.
  • #3736 - Added App provided custom route view.
  • #3741 - Added natural-key-slug information to UI detail views.
  • #3754 - Added loading widget to the left of the ObjectListTable Buttons after initial data load.
  • #3759 - Implemented IPAM Namespace & parenting data migrations.
  • #3767 - Added detail-view-config API endpoint to ModelViewSetMixin.
  • #3804 - Added feature to redirect all add and edit views to legacy UI.
  • #3840 - Added bool return value for Nautobot.extras.datasources.git.ensure_git_repository() to indicate whether the filesystem was changed.

Changed

  • #1633 - The base class for all tags fields on PrimaryModel subclasses is now nautobot.core.models.fields.TagsField rather than taggit.managers.TaggableManager. Any apps using PrimaryModel as a base class will likely need to generate and run a schema migration to reflect this change.
  • #2331 - Changed JobLogEntry.log_level choices from default, info, success, warning, failure to Python default logging levels debug, info, warning, error and critical.
  • #2331 - Changed job logging from custom log methods on the BaseJob class to celery's get_task_logger logging implementation.
  • #2569 - Revamped CSV export functionality to use REST API serializers for more self-consistency and reduced boilerplate.
  • #2569 - Revised the natural key for SecretsGroupAssociation through-table model.
  • #2569 - Changed behavior of JobLogEntry.display REST API field to match the model behavior.
  • #2799 - Changed REST API versioning to default to latest instead of earliest when unspecified by the client.
  • #3042 - Removed all Nested*Serializer classes in favor of a depth-based REST API design.
  • #3042 - The ?brief=True REST API parameter has been replaced by a new ?depth=<0-10> API parameter, allowing greater control of the returned data.
  • #3228 - Removed run_job Celery task and updated BaseJob to subclass Celery Task.
  • #3449 - Renamed Relationship model attribute slug to key.
  • #3449 - Renamed Relationship model attribute name to label.
  • #3450 - Renamed ComputedField model attribute slug to key.
  • #3465 - Renamed IPAddress prefix_length field to mask_length.
  • #3465 - Made IPAddress host field non-modifiable.
  • #3527 - Restructured navigation menus to context-centered design for 2.0.
  • #3552 - Extracted data tables from upgrading-from-nautobot-v1.md into separate YAML files.
  • #3586 - Changed REST API for Device and VirtualMachine to omit config_context by default and only include it when requested by using the ?include=config_context query parameter.
  • #3607 - Changed the default lookup_field for NautobotUIViewSet to "pk" instead of "slug".
  • #3650 - Updated ui 2.0 jsconfig.json to exclude node_modules and build directories.
  • #3663 - Modified delete_button and edit_button template tags to lookup pk and slug without the need to specify the lookup key.
  • #3679 - Changed BaseModelSerializer to inherit from HyperlinkedModelSerializer instead of ModelSerializer. This changed the REST API representation of related objects (at depth 0) from UUIDs to API hyperlinks to improve discoverability and usability of the API.
  • #3691 - Implemented Meta.list_display_fields for all serializers.
  • #3692 - Updated JobResult manager store_result method to censor sensitive variables.
  • #3702 - Changed nested serialization to never include tags, computed fields, relationships, and other M2M fields.
  • #3713 - Changed Job.read_only field to an informational field set by the job author and removed the ability for administrators to override this field. This field no longer changes the behavior of Nautobot core.
  • #3715 - Reworked CSV import to be based on the REST API implementation instead of custom forms and views.
  • #3715 - Changed the parameters and behavior of CSVDataField and CSVFileField in support of the new CSV import framework.
  • #3715 - Changed the user parameter on the RackReservation REST API to optional; if omitted, the requesting user will now be automatically selected as the owner of any created reservations.
  • #3742 - Centered the LoadingWidget component in UI.
  • #3742 - Lightened the color of the LoadingWidget text to gray-3.
  • #3742 - Lightened the color of the skeleton component when loading tables.
  • #3744 - A batch of improvements to state handling in the UI to solve loading bugs.
  • #3767 - Enhanced error handling for fetcher in React UI ObjectRetrieveView.
  • #3785 - Deprecated StatusModel mixin in favor of directly including a StatusField as needed.
  • #3840 - Changed Job class_path property from <source>/<module>/<ClassName> to simply <module>.<ClassName>.
  • #3840 - Changed GitRepository slugs to use underscores rather than dashes so they can be used as Python module names.
  • #3840 - Changed Job module_name for Git-derived Jobs to <git_repository_slug>.jobs.<module>.
  • #3840 - System-provided Jobs are now enabled by default for running.
  • #3840 - Changed return signature for Nautobot.core.utils.git.GitRepo.checkout() to include whether the filesystem was changed.
  • #3840 - Changed job filter on JobButton, JobHook, JobResult, and ScheduledJob to be name-based rather than slug-based.
  • #3840 - Changed Job.runnable property to not consider whether the job_class is set, as a performance optimization.
  • #3840 - Moved test Jobs from nautobot/extras/tests/example_jobs/test_*.py to nautobot/extras/test_jobs/*.py to avoid unnecessary loading by the unittest runner.
  • #3840 - Changed client-side slug construction (legacy UI) to use underscores rather than dashes.

Dependencies

  • #1721 - Removed dependency on django-cacheops.
  • #3672 - Changed napalm dependency to 4.x release in order to allow Netmiko 4.x to install. Dependency resolution resulted in removing the following packages: ciscoconfparse, deprecat, dnspython, loguru, toml, win32-setctime.

Fixed

  • #3378 - Re-enabled skipped tests.
  • #3437 - Fixed the possibility of inadvertently applying the same Tag to the same object multiple times by adding appropriate uniqueness constraints on the TaggedItem through table.
  • #3518 - Fixed an error seen when running the extras.0061_collect_roles_from_related_apps_roles migration.
  • #3545 - Fixed a bug in Job edit view template where slug was missing, preventing creation from happening.
  • #3591 - Fixed a few errors in the v2.0 migration documentation.
  • #3592 - Fixed heuristic for duplicate calls to populate_model_features_registry causing skipped updates.
  • #3618 - Fix corrupted package-lock.json which was causing test failures.
  • #3675 - Fixed job edit form silently failing.
  • #3687 - Fixed a bug in Prefix.reparent_ips() that was too greedy in reparenting IP addresses when child prexies were deeply nested (such as /31)
  • #3702 - Added some missing select_related on DeviceViewSet and PrefixViewSet to improve performance.
  • #3714 - Fixed inability to set null via the REST API on Interface.mac_address and VMInterface.mac_address.
  • #3714 - Fixed inability to set null via the REST API on DeviceType.front_image and DeviceType.rear_image.
  • #3714 - Fixed password being incorrectly marked as a required field when editing a User via the REST API.
  • #3715 - Fixed inability to set the failover_strategy field as unspecified/blank when creating/updating DeviceRedundancyGroup via the REST API.
  • #3715 - Fixed incorrect interim natural key definition for Device and VRF models.
  • #3715 - Fixed the possibility of setting values for nonexistent custom fields via the REST API.
  • #3715 - Fixed incorrect password-handling logic when creating/updating a User via the REST API.
  • #3716 - Fixed an error when attempting to edit a user via the Nautobot admin UI.
  • #3722 - Fixed incorrect filter forms on console-connections, power-connections, and interface-connections list views.
  • #3729 - Fixed a bug that references a non-existent Relationship model attribute in Relationship migration file.
  • #3731 - Fixed debugpy workflow not working with the removal of manage.py.
  • #3737 - Fixed broken --cache_test_fixtures when running tests.
  • #3740 - Fixed container builds failed resulting from #3731.
  • #3741 - Fixed missing time-zone information on various Job-related tests in nautobot.extras.tests.test_views.
  • #3741 - Fixed various cable-termination API serializers incorrectly reporting the cable field as writable.
  • #3768 - Fixed new UI homepage breaks if recent object-changes reference objects that no longer exist.
  • #3785 - Fixed undesirable nullability of status fields to correctly match their intended usage.
  • #3786 - Fixed default descriptions of REST API actions in the OpenAPI schema to be more accurate.
  • #3792 - Fixed logging output not being suppressed during unit and integration tests.
  • #3828 - Fixed a bug caused by #3637 that prevents devices with primary_ip from being deleted.
  • #3829 - Fixed build failure caused by registered App missing ui/index.js.
  • #3833 - Fixed build failure caused by registered App missing urls.py file or a urlpatterns.
  • #3840 - Removed leftover/non-functional Source tab from job_approval_request.html.
  • #3864 - Fixed cases where Device.role was null, incongruent with the enforcement in the API and UI.

Removed

  • #1633 - Removed monkey-patching of taggit.managers.TaggableManager.
  • #1633 - Removed nautobot.extras.utils.is_taggable; use nautobot.core.models.utils.is_taggable instead.
  • #1633 - Removed backward-compatibility with taggit 1.x Python API; instead of object.tags.set(tag1, tag2, tag3) you must now do object.tags.set([tag1, tag2, tag3]).
  • #1721 - Removed dependency on and usage of django-cacheops.
  • #2331 - Removed custom BaseJob logging methods _log, log, log_debug, log_success, log_info, log_warning and log_failure.
  • #2331 - Removed active_test and failed properties from BaseJob class.
  • #2569 - Removed csv_headers and to_csv() from all models as they are no longer needed.
  • #2885 - Removed changelog_url from ObjectView's context.
  • #3228 - Removed atomic transaction from Jobs.
  • #3228 - Removed support for test_* and post_run methods in Jobs.
  • #3465 - Removed broadcast field from IPAddress.
  • #3527 - Removed NavMenuButton and its subclasses as they are not a part of the 2.0 UI.
  • #3527 - Removed NavMenuTab.weight property as the menu tabs/contexts are not reorderable in 2.0.
  • #3623 - Removed remaining erroneous slug references from tenant.html and tenantgroup.html.
  • #3651 - Removed misspelled verison key from /api/plugins/installed-plugins REST API endpoint.
  • #3679 - Removed explicit url field declarations from most REST API serializers as they are now derived automatically.
  • #3713 - Removed Job.read_only_override, JobResult.obj_type, JobResult.periodic_task_name, and JobResult.task_id fields.
  • #3713 - Removed NautobotFakeRequest and associated methods, variables and logic.
  • #3715 - Removed LocatableModelCSVFormMixin, RoleModelCSVFormMixin, RoleRequiredRoleModelCSVFormMixin, and StatusModelCSVFormMixin classes, as they are no longer needed after reworking how CSV import is handled.
  • #3715 - Removed bulk_create_form_class field from NautobotUIViewSet as it's no longer used or needed.
  • #3715 - Removed model_form and widget_attrs fields from BulkImportView as they are no longer used or needed.
  • #3840 - Removed Job.slug, Job.source, and Job.git_repository database fields.
  • #3840 - Removed source and slug filters for Jobs.
  • #3840 - Removed get_jobs(), get_job_classpaths(), jobs_in_directory() functions.

Contributors

  • @DistantVoyager
  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @jathanism
  • @timizuoebideri1
  • @bryanculver

New Contributors

Container Publish Re-Run (diff): https://github.com/nautobot/nautobot/actions/runs/5194587410

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-alpha.3...v2.0.0-beta.1

nautobot - v1.5.20 - 2023-05-30

Published by bryanculver over 1 year ago

Added

  • #3400 - Added documentation on how to enable Jobs and Job hooks.
  • #3766 - Add troubleshooting steps for Azure AD SSO Group Sync example.

Changed

  • #3680 - Changed device component instantiation to be a separate method.

Fixed

  • #3503 - Fixed FieldError when sorting VMs list by primary IP.
  • #3616 - Fixed location filter on CircuitFilterSet and ProviderFilterSet.
  • #3787 - Fixed MySQL Out of sort memory error on JobListView and JobResultListView.
  • #3789 - Fixed Exception unsupported operand type(s) for -: 'list' and 'list' for MultiObjectVar with missing UUID.

Contributors

  • @HanlinMiao
  • @timizuoebideri1
  • @jeffkala
  • @grelleum
  • @Kircheneer
  • @jvanderaa

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.19...v1.5.20

nautobot - v1.5.19 - 2023-05-16

Published by bryanculver over 1 year ago

Added

  • #3695 - Added note to documentation about using {{ obj.cf }} to access custom fields in jinja templates.

Changed

  • #3617 - SearchForms on Nautobot homepage now redirect users to login page when they are not authenticated.
  • #3663 - Modified delete_button and edit_button template tags to lookup pk and slug without the need to specify the lookup key.
  • #3703 - Added generic views documentation to navigation panel.

Dependencies

  • #3549 - Updated django to ~3.2.19 to address CVE-2023-31047.
  • #3549 - Updated mkdocs to ~1.4.3.
  • #3549 - Updated psycopg2-binary to ~2.9.6.
  • #3698 - Updated social-auth-core to ~4.4.0 to permit addressing CVE-2022-2309.
  • #3753 - Updated indirect dev dependency pymdown-extensions to 10.0 to address CVE-2023-32309.

Fixed

  • #3704 - Fixed GitRepository fetching on Home Page when getting repo-based Job's name.
  • #3726 - Fixed a KeyError when filtering Cables in the UI by termination_a_type or termination_b_type.

Security

  • #3698 - Updated lxml to ~4.9.2 to address CVE-2022-2309. This is not a direct dependency so it will not auto-update when upgrading Nautobot. Please be sure to update your local environment.
  • #3724 - Updated django to ~3.2.19 due to CVE-2023-31047.
  • #3753 - Updated indirect dev dependency pymdown-extensions to 10.0 to address CVE-2023-32309. This should not be installed in a production environment by default but should be updated if you have installed it.

Contributors

  • @HanlinMiao
  • @joewesch
  • @itdependsnetworks
  • @bryanculver
  • @glennmatthews

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.18...v1.5.19

nautobot - v1.5.18 - 2023-05-01

Published by bryanculver over 1 year ago

Added

  • #1526 - Added UI button and REST API to validate a Secret can be retrieved.
  • #3669 - Added indexes to JobResult across common fields: created, completed, and status.

Changed

  • #2800 - Add model documentation to navigation panel.
  • #3440 - Added warning admonitions for Job Hooks and Job Approvals documentation that setting Meta.approval_required is ignored on JobHookReceiver classes.
  • #3602 - Updated .gitignore to not track new UI non-source files.
  • #3621 - Changed development Docker compose commands to not leave temporary containers behind.
  • #3633 - Changed Custom Validator applicator to not require DB query.

Fixed

  • #3083 - Fixed an issue where unit tests might fail erroneously when dealing with objects whose name/display contains characters like "<>.
  • #3533 - Fixed an issue where sending a PATCH to /api/dcim/interfaces/(uuid)/ might inadvertently reset the interface's status to Active.
  • #3533 - Fixed an issue where sending a PATCH to /api/users/tokens/(uuid)/ might inadvertently change the token's value.
  • #3612 - Fixed a 500 error when filtering by content_type in Dynamic Groups list view.
  • #3660 - Fixed an issue where grouped job buttons would always be disabled due to a template rendering issue.

Security

  • #3642 - Updated sqlparse to 0.4.4 due to CVE-2023-30608. This is not a direct dependency so it will not auto-update when upgrading Nautobot. Please be sure to update your local environment.

What's Changed

  • @glennmatthews
  • @jathanism
  • @jifox
  • @bryanculver
  • @jfach
  • @itdependsnetworks

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.17...v1.5.18

nautobot - v1.5.17 - 2023-04-17

Published by bryanculver over 1 year ago

Added

  • #3484 - Added job profiling option to job execution when in DEBUG mode.
  • #3544 - Added the ability to change the CACHES["default"]["BACKEND"] via an environment variable NAUTOBOT_CACHES_BACKEND

Changed

  • #3544 - The default database backend if METRICS_ENABLED is True is now "django_prometheus.db.backends.postgresql"
  • #3544 - The default CACHES backend if METRICS_ENABLED is True is now "django_prometheus.cache.backends.redis.RedisCache"
  • #3548 - Changed Git Repository docs to include admonition about Github Apps.
  • #3595 - Update the warning provided when a bad reverse entry is not found in serializer to point to correct import location.

Dependencies

  • #3525 - Added explicit dependency on packaging that had been inadvertently omitted.

Fixed

  • #3116 - Fixed JSON comparison of data_scheme keys in assertInstanceEqual tests.
  • #3573 - Fixed advanced filtering on interface UI list page not working.
  • #3577 - Fixed NautobotUIViewSet documentation example for case sensitive typos.
  • #3577 - Fixed NautobotUIViewSet documentation example not including imports.
  • #3598 - Fixed default sanitizer patterns to account for strings beginning with i or is.

Contributors

  • @glennmatthews
  • @timizuoebideri1
  • @nniehoff
  • @PavelSafronov
  • @itdependsnetworks
  • @gsnider2195
  • @jeffkala
  • @Kircheneer

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.16...v1.5.17

nautobot - v2.0.0-alpha.3 -2023-04-13

Published by bryanculver over 1 year ago

2.0 IPAM Overhaul Alpha Release

Overview

This alpha introduces the Namespace concept to IPAM and makes many robust improvements to relationships between models:

  • Namespace introduced to provide a uniqueness boundary for IPAddresses and Prefixes
  • Prefixes have concrete relationships to their parents instead of derived
  • IPAddresses have concrete relationships to their parent prefixes
  • VRF is no longer used as a uniqueness constraint for IPAddresses and Prefixes

⚠️ NOTE: Because we are validating these new data models the data migrations have not been implemented. You will have to re-input your data largely via the UI to prove if these models will work for you. We will implement the migrations in an upcoming beta if the relationships between Namespace and other IPAM objects prove to be the right design. As such, do not expect to migrate future releases on these installs. The data migration steps won't be re-performed.

For more detailed information, please view: https://github.com/nautobot/nautobot/issues/1032, https://github.com/nautobot/nautobot/issues/3337#issuecomment-1450855876

❗ This has been recreated to fix a bug with the prerelease workflow.


Changelog

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-alpha.2...v2.0.0-alpha.3

nautobot - v1.5.16 - 2023-04-10

Published by bryanculver over 1 year ago

Added

  • #3557 - Added docs page for Circuit Maintenance.

Fixed

  • #2944 - Fixed slow performance of relationships on ObjectListView.
  • #3345 - Fixed missing Relationships in DynamicFilterForm.
  • #3477 - Added a note under heading Setting ViewSet Attributes to mention the caveat of not using slug or pk.
  • #3502 - Updated upstream workflow to support testing apps next-2.0 branches against next.
  • #3550 - Fixed display name of filtered relationships on ObjectListView.

Contributors

  • @scetron
  • @jvanderaa
  • @snaselj
  • @bryanculver

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.15...v1.5.16

nautobot - v1.5.15 - 2023-04-04

Published by bryanculver over 1 year ago

Added

  • #3446 - Added documentation links for Device Onboarding and LifeCycle Management plugins to docs.nautobot.com menu.

Changed

  • #3384 - Moved extra information stored previously in block sidebar to block header_extra in page templates (aggregate_list.html and objectchange_list.html).
  • #3384 - Documented block header_extra in docs/development/templates.md.

Dependencies

  • #3499 - Updated redis to 4.5.4. This is not a direct dependency of Nautobot so it will not auto-update when upgrading. Please update your local environment as needed.

Fixed

  • #3206 - Fixed Docker tag syntax on prerelease workflow.
  • #3480 - Fixed an error that could be seen in certain cases with IPAddress records.

Removed

  • #3384 - Removed all remaining instances of block sidebar from page templates (aggregate_list.html and objectchange_list.html).
  • #3384 - Removed documentation about block sidebar from docs/development/templates.md.

Security

  • #3499 - Updated redis to 4.5.4 due to CVE-2023-28858 and CVE-2023-28859. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.

Contributors

  • @matt852
  • @HanlinMiao
  • @glennmatthews
  • @bryanculver

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.14...v1.5.15

nautobot - v2.0.0-alpha.2 - 2023-03-29

Published by jathanism over 1 year ago

Nautobot v2.0

This document describes all new features and changes in Nautobot 2.0.

If you are a user migrating from Nautobot v1.X, please refer to the "Upgrading from Nautobot v1.X" documentation.

Release Overview

Added

Generic Role Model (#1063)

DeviceRole, RackRole, IPAM Role, and IPAddressRoleChoices have all been merged into a single generic Role model. A role can now be created and associated to one or more of the content-types that previously implemented role as a field. These model content-types include dcim.device, dcim.rack, virtualization.virtualmachine, ipam.ipaddress, ipam.prefix, and ipam.vlan.

Added Site Fields to Location (#2954)

Added Site Model Fields to Location. Location Model now has asn, comments, contact_email, contact_name, contact_phone, facility, latitude, longitude, physical_address, shipping_address and time_zone fields.

Natural Key Support Across Nautobot Models (#2900)

Nautobot's BaseModel base class and related classes now implement automatic support for Django natural keys for lookup and referencing, as well as supporting a natural_key_slug concept similar to that introduced by django-natural-keys. (Nautobot does not depend on django-natural-keys but its implementation is heavily inspired by that project.) For example:

>>> DeviceType.objects.first().natural_key()
['MegaCorp', 'Model 9000']

>>> DeviceType.objects.get_by_natural_key("MegaCorp", "Model 9000")
<DeviceType: Model 9000>

>>> DeviceType.objects.first().natural_key_slug
'MegaCorp&Model+9000'

>>> DeviceType.objects.get(natural_key_slug="MegaCorp&Model+9000")
<DeviceType: Model 9000>

Developers can refer to the documentation on natural keys for details on how to support and use this feature.

Changed

Aggregate model Migrated to Prefix (#3302)

The ipam.Aggregate model has been removed and all existing aggregates will be migrated to ipam.Prefix with type set to "Container". The Aggregate.date_added field will be migrated to Prefix.date_allocated and changed from a Date field to a DateTime field with the time set to 00:00. Aggregate.tenant, Aggregate.rir and Aggregate.description will be migrated over to the same fields on Prefix.

See the upgrade guide for more details on the data migration.

Collapse Region and Site Models into Location (#2517)

Initial Data Migration

The Site and Region models have been removed in v2.0 and have been replaced with Location of specific LocationType. As a result, the existing Site and Region data will be migrated to corresponding LocationType and Location objects. Here is what to expect:

  1. If you do not have any Site and Region instances in your existing database, running this data migration will do nothing.

  2. If you only have Region instances in your existing database, a LocationType named Region will be created and for each legacy Region instance, a corresponding Location instance with the same attributes (id, name, description, etc.) and hierarchy will be created.

  3. If you only have Site instances in your existing database:

    • A LocationType named Site will be created and every preexisting root level LocationType in your database will be updated to have the new Site LocationType as their parent.

    • For each legacy Site instance, a corresponding Location instance with the same attributes (id, name, description, tenant, facility, asn, latitude, longitude, etc.) will be created, and any preexisting Locations in your database will be updated to have the appropriate "site" Locations as their parents.

    • Model instances that had a site field (CircuitTermination, Device, PowerPanel, RackGroup, Rack, Prefix, VLANGroup, VLAN, Cluster) assigned and did not have a location attribute assigned will be updated to have their location point to the new Location corresponding to that Site. All other attributes on these models will remain unchanged.

    • Model instances that were previously associated to the ContentType for Site (ComputedField, CustomField, CustomLink, ExportTemplate, ImageAttachment, JobHook, Note, Relationship, Status, Tag and Webhook) will have their ContentType replaced with Location. All other attributes on these models will remain unchanged.

    For Example:

    • We will start with a Site instance with name AMS01 as the base Site for two top-level Location objects with names root-01 and root-02 respectively.

    • During the data migration, a LocationType named Site will be created, and a Location of Site LocationType named AMS01 with all the information (asn, latitude, etc.) from the base Site will be created.

    • The Location objects named root-01 and root-02 will have this AMS01 Location set as their parent.

  4. If you have both Site and Region instances in your existing database:

    • A LocationType named Region will be created.

    • For each legacy Region instance, a corresponding Location instance with the same attributes (id, name, description, etc.) will be created.

    • A LocationType named Site will be created with the new LocationType named Region set as its parent.

    • Every pre-existing root-level LocationType in your database will be updated to have the new LocationType named Site as its parent.

    • For each legacy Site instance, a corresponding "site" Location instance with the same attributes (id, name, description, tenant, facility, asn, latitude, longitude, etc.) will be created with its parent set to the corresponding "region" Location if any.

      • If you have Site instances in your database without a Region assigned to them, one additional Location named Global Region of LocationType Region will be created and each Location of LocationType Site created from the legacy region-less Site instances will have the Global Region Location as their parent.
    • Model instances that had a site attribute (CircuitTermination, Device, Location, PowerPanel, Rack, RackGroup, Prefix, VLANGroup, VLAN, Cluster) assigned and did not have a location attribute assigned will be updated to have their location point to the new Location of LocationType Site. All other attributes on these models will remain unchanged.

    • Model instances that were previously associated to the ContentType for Site or Region (ComputedField, CustomField, CustomLink, ExportTemplate, ImageAttachment, JobHook, Note, Relationship, Status, Tag and Webhook) will have their ContentType replaced with Location. All other attributes on these models will remain unchanged.

    For Example:

    • There are two Site instances and one Region instance in your existing database. The Region with name America has one child Site instance named AMS01. And the other Site instance named AUS01 is not associated with any Region (region attribute is set to None).

    • The Site AMS01 is the base Site for two top-level Location objects with names root-01 and root-02 respectively.

    • During the data migration, a LocationType named Region and a Location of this LocationType named America with all the same information will be created.

    • The LocationType named Site with its parent set as the new LocationType Region and a Location of LocationType named AMS01 with all the same information (asn, latitude, etc.) will be created. The Location AMS01 will have Location America as its parent and each - Location root-01 and root-02 will have Location AMS01 as its parent.

    • Finally, the Site instance AUS01, since it does not have a Region instance associated with it, its corresponding Location AUS01 will have a new Location named Global Region of LocationType Region as its parent.

    • In addition, legacy Site instance with name AMS01 also has three Device instances associated with it named ams01-edge-01, ams01-edge-02, and ams01-edge-03.

    • However, ams01-edge-01 only has its site attribute set as Site AMS01 whereas ams01-edge-02 and ams01-edge-03 have both its site and location attributes set Site AMS01 and Location root-01 respectively.

    • During the data migration, ams01-edge-01's location attribute will point to the new Location of LocationType Site with name AMS01 while devices ams01-edge-02 and ams01-edge-03 will remain unchanged.

Remove Site and Region Related Fields from Models

Region and Site relationships are being removed from these models: CircuitTermination, Device, Location, Rack, RackGroup, PowerFeed, PowerPanel, ConfigContext, Prefix, VLAN, VLANGroup, Cluster.

The ContentType for Region and Site are being replaced with Location on these models: ComputedField, CustomField, CustomLink, ExportTemplate, ImageAttachment, JobHook, Note, Relationship, Status, Tag and Webhook.

The region and site fields are being removed in the filter data of DynamicGroup objects. The previously associated values are being added to the existing location field and its associated list of filter values or to a new location key with an empty list if one does not exist.

Check out the API and UI endpoints changes incurred by the changes stated above in the "Upgrading from Nautobot v1.X" guide.

Check out the Region and Site Related Data Model Migration Guide to learn how to migrate your Nautobot Apps and data models from Site and Region to Location.

Collapsed nautobot.utilities into nautobot.core (#2721)

nautobot.utilities no longer exists as a separate Python module or Django app. Its functionality has been collapsed into the nautobot.core app. See details at Python Code Location Changes.

Renamed Database Foreign Keys and Related Names (#2520)

Some Foreign Key fields have been renamed to follow a more self-consistent pattern across the Nautobot app. This change is aimed to offer more clarity and predictability when it comes to related object database operations:

For example in v1.x to create a circuit object with type "circuit-type-1", you would do:

Circuit.objects.create(
    cid="Circuit 1",
    provider="provider-1",
    type="circuit-type-1",
    status="active",
)

and to filter Circuit objects of type "circuit-type-2", you would do:

Circuit.objects.filter(type="circuit-type-2")

Now in v2.x, we have renamed the Foreign Key field type on Circuit Model to circuit_type, because this naming convention made it clearer that this Foregin Key field is pointing to the model CircuitType. The same operations would look like:

Circuit.objects.create(
    cid="Circuit 1",
    provider="provider-1",
    circuit_type="circuit-type-1",
    status="active",
)
Circuit.objects.filter(circuit_type="circuit-type-2")

Check out more Foreign Key related changes documented in the table Renamed Database Fields

In addition to the changes made to Foreign Key fields' own names, some of their related_names are also renamed:

For example in v1.x, to query Circuit objects with CircuitTermination instances located in sites ["ams01", "ams02", "atl03"], you would do:

Circuit.objects.filter(terminations__site__in=["ams01", "ams02", "atl03"])

Now in v2.x, we have renamed the Foreign Key field circuit's related_name attribute terminations on CircuitTermination Model to circuit_terminations, the same operations would look like:

Circuit.objects.filter(circuit_terminations__site__in=["ams01", "ams02", "atl03"])

Check out more related-name changes documented in the table Renamed Database Fields

Renamed Filter Fields (#2804)

Some filter fields have been renamed to reflect their functionalities better.

For example in v1.X, to filter FrontPorts that has a cable attached in the UI or make changes to them via Rest API, you would use the cabled filter:

/dcim/front-ports/?cabled=True

Now in v2.x, you would instead use the has_cable filter which has a more user-friendly name:

/dcim/front-ports/?has_cable=True

Check out the specific changes documented in the table at UI and REST API Filter Changes

Enhanced Filter Fields (#2804)

Many filter fields have been enhanced to enable filtering by both slugs and UUID primary keys.

For example in v1.X, to filter Regions with a specific parent value in the UI or make changes to them via Rest API, you are only able to input slugs as the filter values:

/dcim/regions/?parent=<slug>

Now in v2.x, you are able to filter those Regions by slugs or UUID primary keys:

/dcim/regions/?parent=<slug> or /dcim/regions/?parent=<uuid>

Check out the specific changes documented in the table at UI and REST API Filter Changes

Corrected Filter Fields (#2804)

There were also instances where a foreign-key related field (e.g. console_ports) was incorrectly mapped to a boolean membership filter (e.g. has_console_ports), making it impossible to filter based on specific values of the foreign key:

For example in v1.x:

/dcim/devices/?console_ports=True and /dcim/devices/?has_console_ports=True are functionally the same and this behavior is incorrect.

This has been addressed in v2.x as follows:

console_ports and similar filters are taking foreign key UUIDs as input values and can be used in this format: /dcim/devices/?console_ports=<uuid> whereas has_console_ports and similar filters remain the same.

Check out the specific changes documented in the table at UI and REST API Filter Changes

Generic Role Model (#1063)

The DeviceRole, RackRole, ipam.Role, and IPAddressRoleChoices have all been removed and replaced with a extras.Role model, This means that all references to any of the replaced models and choices now points to this generic role model.

In addition, the role field of the IPAddress model has also been changed from a choice field to a foreign key related field to the extras.Role model.

Prefix is_pool field and "Container" status replaced by new field Prefix.type (#1362)

A new type field was added to Prefix to replace the is_pool boolean field and the "Container" status. The type field can be set to "Network", "Pool" or "Container", with "Network" being the default.

Existing prefixes with a status of "Container" will be migrated to the "Container" type. Existing prefixes with is_pool set will be migrated to the "Pool" type. Prefixes with both is_pool set and a status of "Container" will be migrated to the "Pool" type.

The "Container" status will be removed and all prefixes will be migrated to the "Active" status if it exists. If the "Active" status was deleted, prefixes will be migrated to the first available prefix status in the database that is not "Container".

Removed

Removed Redundant Filter Fields (#2804)

As a part of breaking changes made in v2.X, shadowed filter/filterset fields are being removed throughout Nautobot.

In Nautobot 1.x, for some of the foreign-key related fields:
- The field was shadowed for the purpose of replacing the PK filter with a lookup-based on a more human-readable value (typically slug, if available).
- A PK-based filter was available as well, generally with a name suffixed by _id

Now these two filter fields will be replaced by a single filter field that can support both slugs and UUID primary keys as inputs; As a result, PK-based filters suffixed by _id will no longer be supported in v2.0.

For example in v1.X, to filter Devices with a specific site value in the UI or make changes to them via Rest API with a UUID primary key, you will use:

/dcim/devices/?site_id=<uuid>

Now in v2.x, that format is no longer supported. Instead, you would use:

/dcim/devices/?site=<uuid>

Check out the specific changes documented in the table at UI and REST API Filter Changes

Removed RQ support (#2523)

Support for RQ and django-rq, deprecated since Nautobot 1.1.0, has been fully removed from Nautobot 2.0.

v2.0.0-alpha.2 (2023-03-29)

Added

  • #2900 - Added natural-key support to most Nautobot models, inspired by the django-natural-keys library.
  • #2957 - Added Location constraints for objects (CircuitTermination, Device, PowerPanel, PowerFeed, RackGroup, Rack, Prefix, VLAN, VLANGroup, Cluster).
  • #2957 - Added Region and Site data migration to Locations for existing ConfigContext instances.
  • #3066 - Added ForeignKeyWithAutoRelatedName helper class.
  • #3154 - Added ability for tags filters to filter by UUID as well as by slug.
  • #3185 - Added missing user filterset fields.
  • #3222 - Added Site and Region data migration for ConfigContext class and ensured that "Site" LocationType allows the correct ContentTypes.
  • #3255 - Added --cache-test-fixtures command line argument to Nautobot unit and integration tests.
  • #3256 - Added Site and Region data migration for ComputedFields, CustomFields, CustomLinks, ExportTemplates, ImageAttachments, JobHooks, Notes, Relationships, Webhooks, Statuses and Tags
  • #3283 - Added Site and Region migration to Location for filter data of DynamicGroups.
  • #3360 - Added an alternate approach to updating model feature registry without having to decorate a model with @extras_features.
  • #3364 - Added FK fields migrated_location to Site and Region models before data migration is applied.
  • #3403 - Added support for Nautobot Apps to provide Django Constance Fields for the settings.
  • #3418 - Added ObjectPermission Data Migration from Region/Site to Location.

Changed

  • #824 - Renamed slug field to key on CustomField model class.
  • #824 - Changed validation of CustomField key to enforce that it is valid as a GraphQL identifier.
  • #951 - The nautobot-server nbshell command is now based on shell_plus from django-extensions.
  • #1362 - Added type field to Prefix, replacing "Container" status and is_pool field.
  • #2076 - Changed the created field of all models from a DateField to a DateTimeField for added granularity. Preexisting records will show as created at midnight UTC on their original creation date.
  • #2611 - Changed Job model uniqueness constraints and slug field.
  • #2806 - Enhanced VLAN available_on_device filter to permit specifying multiple Devices.
  • #3066 - Changed related_name values for path endpoints on CablePath for consistency and readability (dcim_interface_related to interfaces, circuits_circuittermination_related to circuit_terminations, etc.)
  • #3066 - Changed related_name values for device components on Device for consistency and readability (consoleports to console_ports, devicebays to device_bays, etc.)
  • #3066 - Changed related_name values for device component templates on DeviceType for consistency and readability (consoleporttemplates to console_port_templates, devicebaytemplates to device_bay_templates, etc.)
  • #3066 - Changed DeviceType.instances to devices and renamed the corresponding query filters.
  • #3066 - Changed DeviceRedundancyGroup.members to devices.
  • #3066 - Changed FrontPortTemplate.rear_port to rear_port_template.
  • #3066 - Changed Location.powerpanels to power_panels.
  • #3066 - Changed PowerOutletTemplate.power_port to power_port_template.
  • #3066 - Changed PowerPanel.powerfeeds to power_feeds.
  • #3066 - Changed PowerPort.poweroutlets to power_outlets.
  • #3066 - Changed PowerPortTemplate.poweroutlet_templates to power_outlet_templates.
  • #3066 - Changed Rack.powerfeed_set to power_feeds.
  • #3066 - Changed Rack.group and Rack.reservations to rack_group and rack_reservations and renamed the corresponding query filters.
  • #3066 - Changed RackGroup.powerpanel_set to power_panels.
  • #3066 - Changed RearPort.frontports to front_ports.
  • #3066 - Changed RearPortTemplate.frontport_templates to front_port_templates.
  • #3066 - Changed SecretsGroup.device_set and SecretsGroup.deviceredundancygroup_set to devices and device_redundancy_groups.
  • #3066 - Changed Tenant.rackreservations to rack_reservations.
  • #3066 - Changed User.rackreservation_set to rack_reservations.
  • #3066 - Changed REST API field on Interface from count_ipaddresses to ip_address_count.
  • #3066 - Changed REST API fields on Manufacturer from devicetype_count and inventoryitem_count to device_type_count and inventory_item_count.
  • #3066 - Changed REST API field on Platform from virtualmachine_count to virtual_machine_count.
  • #3066 - Changed REST API field on PowerPanel from powerfeed_count to power_feed_count.
  • #3066 - Changed REST API field on Rack from powerfeed_count to power_feed_count.
  • #3066 - Changed RackReservation group filter to rack_group.
  • #3154 - Renamed various tag filters to tags for self-consistency.
  • #3160 - Changed logger names to use __name__ instead of explicit module names.
  • #3215 - Changed representation of related Status objects in the REST API to use a NestedStatusSerializer instead of presenting as enums.
  • #3236 - Changed Interface and VMInterface relationship to IPAddress to many-to-many instead of one-to-many.
  • #3262 - Changed extras FKs and related names.
  • #3266 - Changed erroneous attribute "type" to correct "circuit_type" in circuit-related templates.
  • #3302 - Migrated Aggregate model to Prefix with type set to "Container".
  • #3351 - Changed extras abstract model ForeignKeys to use ForeignKeyWithAutoRelatedName.
  • #3354 - Synced in fixes from 1.5.x LTM branch up through v1.5.11.

Dependencies

  • #2521 - Removed dependency on django-cryptography.
  • #2524 - Removed no-longer-used drf-yasg dependency.

Fixed

  • #633 - Fixed job result not updating when job hard time limit is reached.
  • #1362 - Fixed migrations for Prefix.type.
  • #1422 - Improved OpenAPI schema representation of polymorphic fields such as cable_peer, assigned_object, etc.
  • #2806 - Fixed some issues with initialization and updating of the dynamic ("advanced") filter form.
  • #3066 - Fixed incorrect field_class when filtering FloatField and DecimalField model fields.
  • #3066 - Fixed inability to provide non-integer values when filtering on FloatField and DecimalField fields in GraphQL.
  • #3066 - Fixed inability to specify partial substrings in the UI when filtering by MAC address.
  • #3154 - Fixed incorrect initialization of TagFilter when auto-attached to a FilterSet.
  • #3164 - Merged TaskResult from django-celery-results into JobResult.
  • #3291 - Fixed inheritance and RoleField definition on Role model mixins.
  • #3342 - Fixed BaseFilterSet not using multiple choice filters for CharFields with choices.
  • #3457 - Fixed bug preventing scheduled job from running.

Removed

  • #824 - Removed name field from CustomField model class.
  • #1634 - Removed unnecessary legacy manage.py file from Nautobot repository.
  • #2521 - Removed support for storing Git repository credentials (username/token) in the Nautobot database. Use Secrets instead.
  • #2957 - Removed Site constraints for model classes (CircuitTermination, Device, Location, PowerPanel, PowerFeed, RackGroup, Rack, Prefix, VLAN, VLANGroup, Cluster).
  • #2957 - Removed regions and sites attributes from ConfigContext model class.
  • #2957 - Removed region and site related fields from Serializers for aforementioned model classes.
  • #2957 - Removed region and site related fields from Forms for aforementioned model classes.
  • #2957 - Removed region and site related UI and API Endpoints for aforementioned model classes.
  • #2957 - Removed region and site columns from Tables for aforementioned model classes.
  • #2958 - Removed Region and Site factories, filtersets, forms, factories, models, navigation menu items, serializers, tables, templates, tests and urls.
  • #3224 - Removed support for Nautobot "1.x" REST API versions. The minimum supported REST API version is now "2.0".
  • #3233 - Removed CeleryTestCase and associated calling code as it is no longer needed.
  • #3302 - Removed Aggregate and migrated all existing instances to Prefix.

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-alpha.1...v2.0.0-alpha.2