nautobot

Network Source of Truth & Network Automation Platform

APACHE-2.0 License

Downloads
16K
Stars
1K
Committers
251

Bot releases are hidden (Show)

nautobot - v1.6.10 - 2024-01-22

Published by glennmatthews 9 months ago

What's Changed

Security

  • #5109 - Removed /files/get/ URL endpoint (for viewing FileAttachment files in the browser), as it was unused and could potentially pose security issues.
  • #5134 - Fixed an XSS vulnerability (GHSA-v4xv-795h-rv4h) in the render_markdown() utility function used to render comments, notes, job log entries, etc.

Added

  • #5134 - Enhanced Markdown-supporting fields (comments, description, Notes, Job log entries, etc.) to also permit the use of a limited subset of "safe" HTML tags and attributes.

Changed

  • #5132 - Updated poetry version for development Docker image to match 2.0.

Dependencies

  • #5087 - Updated GitPython to version 3.1.41 to address Windows security vulnerability GHSA-2mqj-m65w-jghx.
  • #5087 - Updated Jinja2 to version 3.1.3 to address to address XSS security vulnerability GHSA-h5c8-rqwp-cp95.
  • #5134 - Added nh3 HTML sanitization library as a dependency.

Contributors

  • @gsnider2195
  • @gertzakis
  • @Kircheneer
  • @glennmatthews

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.9...v1.6.10

nautobot - v2.1.1 (2024-01-08)

Published by gsnider2195 9 months ago

What's Changed

Added

  • #5046 - Updated the LocationType clone process to pre-populate the original object's parent, nestable and content type fields.

Changed

  • #4992 - Added change-logging (ObjectChange support) for the ObjectPermission model.

Removed

  • #5033 - Removed alpha UI from the main code base for now (it still exists in a prototype branch) to reduce the burden of maintaining its dependencies in the meantime.
  • #5035 - Removed nodesource apt repository from Dockerfile.

Fixed

  • #4606 - Fixed an error when attempting to "Save Changes" to an existing GraphQL saved query via the GraphiQL UI.
  • #4606 - Fixed incorrect positioning of the "Save Changes" button in the "Queries" menu in the GraphiQL UI.
  • #4606 - Fixed incorrect specification of the "variables" field in the GraphQL saved query REST API.
  • #4606 - Fixed a display glitch in the detail view for GraphQL saved queries.
  • #5005 - Fixed missing schema field in config context create/edit forms.
  • #5020 - Fixed display of secrets when editing a SecretsGroup.

Documentation

  • #5019 - Updated the documentation on the usage of the nautobot-server runjob management command.
  • #5023 - Fixed some typos in the 2.1.0 release notes.
  • #5027 - Fixed typo in Device Redundancy Group docs.
  • #5044 - Updated the documentation on nautobot_database_ready signal handlers with a warning.

Housekeeping

  • #5039 - Updated ruff development dependency to ~0.1.10.
  • #5039 - Removed black and flake8 as development dependencies as they're fully replaced by ruff now.
  • #5039 - Removed black and flake8 steps from CI.
  • #5039 - Enabled DJ Ruff rules (flake8-django) and addressed all warnings raised.
  • #5039 - Enabled PIE Ruff rules except for PIE808 (flake8-pie) and addressed all warnings raised.
  • #5039 - Enabled RUF Ruff rules except for RUF012 and addressed all warnings raised.
  • #5039 - Enabled remaining S Ruff rules (flake8-bandit) and addressed all warnings raised.
  • #5049 - Fixed an intermittent timing-related failure in DynamicGroupModelTest.test_member_caching_enabled test case.
  • #5053 - Removed reference to develop-1.6 branch in CI workflow.
  • #5055 - Enabled I Ruff rules (isort) and addressed all warnings raised.
  • #5055 - Removed isort as a development dependency as it's fully replaced by ruff now.

Contributors

  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @DistantVoyager
  • @joewesch
  • @Kircheneer
nautobot - v1.6.9 (2024-01-08)

Published by gsnider2195 9 months ago

What's Changed

Fixed

  • #5042 - Fixed early return conditional in ensure_git_repository.

Contributors

  • @Kircheneer
nautobot - v2.1.0 - 2023-12-22

Published by glennmatthews 10 months ago

What's Changed

Added

Django Admin Log Entries (#4646)

Django Admin Log Entries record administrative changes made under the "Admin" section of the user interface. Changes (add/delete/update) to Objects like Users, Group, Object Permissions, etc. in the "Admin" user interface are now displayed as "Log Entries" under the "Administration" section of the Admin UI.

Django Admin Log Entries are automatically created when adminstrative changes happen and have always existed natively in Django Admin. This feature is simply providing a read-only UI view for admin/privileged users to access them with more ease.

See Administrative Change-logging for more details.

External Integration Model (#4694)

A new ExternalIntegration model has been added which provides a centralized store for data such as URLs and credentials that are used to access systems external to Nautobot. This information can then be used by jobs or apps to perform actions such as creating DNS records or updating configuration management tickets.

Home Page Panels Can Be Customized (#2149)

The panels displayed on the Nautobot home page have been modified to enable a more personalized user experience. Individual panels can now be collapsed, hiding the contents from view. Additionally, panels can be reordered by dragging and dropping the panels to the desired order.

Job File Outputs (#3352, #4820)

The Job base class now includes a create_file(filename, content) method which can be called by a Job to create a persistent file with the provided content when run. This file will be linked from the Job Result detail view for subsequent downloading by users, and can also be downloaded via the REST API (/api/extras/file-proxies/<id>/download/) as desired.

The size of files Jobs can create via this method are constrained by the JOB_CREATE_FILE_MAX_SIZE settings variable.

The specific storage backend used to retain such files is controlled by the JOB_FILE_IO_STORAGE settings variable. The default value of this setting uses the Nautobot database to store output files, which should work in all deployments but is generally not optimal and better alternatives may exist in your specific deployment. Refer to the documentation link above for more details.

Users must have permission to view the extras > file proxy object type in order to list and download files from the REST API.

Job JSONVar inputs (#4926)

Provides the ability to have native JSON data inputs for Jobs, this is provided by a multi-line text input on the Job form and the provided JSON data is serialized prior to passing to the run() method of the Job.

UI/API isnull Filter on Nullable Fields (#1905)

Models with nullable fields (i.e. model fields with null=True) can now be filtered in the UI and the API with <field>__isnull=true/false filters. These filters are automatically added to all appropriate fields.

Model fields that have the value "" (i.e. blank) will not match with __isnull=True. Instead, they will match with __isnull=False.

Changed

Data Exports as a System Job (#4745)

The data export functionality in all object list views (allowing export of all or a filtered subset of objects to CSV, YAML, and/or as defined by an ExportTemplate) has been changed from a synchronous operation to an asynchronous background task, leveraging the new ExportObjectList system Job. As a result, exports of thousands of objects in a single operation will no longer fail due to browser timeout.

Users now must have the run action permission for extras > job (specifically the nautobot.core.jobs.ExportObjectList Job) in order to export objects, in addition to the normal view permissions for the objects being exported.

Nautobot UI Reskin (#4677, #4765)

The Nautobot UI has been updated with a customized theme, giving it a brand new look. In addition, Nautobot's navigation bar has been moved from the top to the left.

Removed

Drop Support for Legacy PostgreSQL Versions (#4757)

Support for versions of PostgreSQL prior to 12.0 has been removed as these versions are no longer maintained and contain bugs that prevent migrations from running in certain scenarios. The nautobot-server migrate or nautobot-server post_upgrade commands will now abort when detecting an unsupported PostgreSQL version.

Remove HIDE_RESTRICTED_UI Toggle (#4787)

Support for HIDE_RESTRICTED_UI has been removed. UI elements requiring specific permissions will now always be hidden from users lacking those permissions. Additionally, users not logged in will now be automatically redirected to the login page.

Contributors

  • @glennmatthews
  • @jathanism
  • @HanlinMiao
  • @gsnider2195
  • @norbert-mieczkowski-codilime
  • @timizuoebideri1
  • @matt852
  • @whitej6
  • @Kircheneer
  • @nrnvgh
  • @itdependsnetworks
  • @joewesch
  • @jvanderaa
  • @dependabot
  • @zackt25

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.6...v2.1.0

nautobot - v1.6.8 - 2023-12-22

Published by glennmatthews 10 months ago

What's Changed

Security

  • #4876 - Updated cryptography to 41.0.7 due to CVE-2023-49083. As this is not a direct dependency of Nautobot, it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4988 - Fixed missing object-level permissions enforcement when running a JobButton (GHSA-vf5m-xrhm-v999).
  • #4988 - Removed the requirement for users to have both extras.run_job and extras.run_jobbutton permissions to run a Job via a Job Button. Only extras.run_job permission is now required.
  • #5002 - Updated paramiko to 3.4.0 due to CVE-2023-48795. As this is not a direct dependency of Nautobot, it will not auto-update when upgrading. Please be sure to upgrade your local environment.

Added

  • #4965 - Added MMF OM5 cable type to cable type choices.

Removed

  • #4988 - Removed redundant /extras/job-button/<uuid>/run/ URL endpoint; Job Buttons now use /extras/jobs/<uuid>/run/ endpoint like any other job.

Fixed

  • #4977 - Fixed early return conditional in ensure_git_repository.

Housekeeping

  • #4988 - Fixed some bugs in example_plugin.jobs.ExampleComplexJobButtonReceiver.

Contributors

  • @nrnvgh
  • @Kircheneer
  • @glennmatthews

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.7...v1.6.8

nautobot - v1.6.7 - 2023-12-12

Published by glennmatthews 10 months ago

What's Changed

Security

Added

  • #4873 - Added QSFP112 interface type to interface type choices.

Removed

  • #4797 - Removed erroneous custom_fields decorator from InterfaceRedundancyGroupAssociation as it's not a supported feature for this model.
  • #4857 - Removed Jathan McCollum as a point of contact in SECURITY.md.

Fixed

  • #4142 - Fixed unnecessary git operations when calling ensure_git_repository while the desired commit is already checked out.
  • #4917 - Fixed slow performance on location hierarchy html template.
  • #4921 - Fixed inefficient queries in Location.base_site.

Contributors

  • @jathanism
  • @nrnvgh
  • @timizuoebideri1
  • @Kircheneer
  • @glennmatthews

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.6...v1.6.7

nautobot - v2.0.6 - 2023-12-12

Published by glennmatthews 10 months ago

What's Changed

Security

  • #4876 - Updated cryptography to ~41.0.6 due to CVE-2023-49083. As this is not a direct dependency of Nautobot, it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4890 - Updated alpha UI dependency @adobe/css-tools to version 4.3.2 due to CVE-2023-48631.
  • #4959 - Enforce authentication and object permissions on DB file storage views (GHSA-75mc-3pjc-727q).

Added

  • #4854 - Added invocations of clean() methods to save() methods for ComputedField, CustomField, and Relationship models to protect against creation of invalid data.
  • #4873 - Added QSFP112 interface type to interface type choices.
  • #4883 - Added get_default_namespace and get_default_namespace_pk methods to nautobot.apps.models API.

Changed

  • #4813 - Changed generate_secret_key.py to use Python secrets library instead of random.

Removed

  • #4805 - Removed unused nautobot.extras.choices.JobSourceChoices.- #4805 - Removed check for __init__.py in JOBS_ROOT directory.
  • #4858 - Removed Jathan McCollum as a point of contact in SECURITY.md.

Fixed

  • #3488 - Corrected positioning and style of "Collapse All" button in Jobs list view.
  • #4142 - Fixed unnecessary git operations when calling ensure_git_repository while the desired commit is already checked out.
  • #4179 - Fixed error in creation of storage directories (GIT_ROOT, JOBS_ROOT, MEDIA_ROOT, etc.) when running tests in parallel.
  • #4747 - Fixed an issue when appending nautobot version to a static file path with existing query parameters resulted in an invalid URL generation.
  • #4768 - Fixed incorrect link in TenantGroup template.
  • #4768 - Fixed ConfigContext not applied to nested TenantGroup objects.
  • #4819 - Fixed empty assignment field in IPAddress detail view.
  • #4845 - Fixed issues with installing an app that is nested inside a python package (e.g. my_apps/app1/ + my_apps/app2/), and lookups for UI view testing.
  • #4851 - Fixed an exception when trying to access computed fields via GraphQL.
  • #4854 - Fixed GraphQL UI unable to load when some ComputedField instances have non-graphql-safe keys.
  • #4856 - Fix ConfigContext application logic for Locations and TenantGroups.
  • #4867 - Added try/except block to handle the AttributeError raised by get_absolute_url() when a valid absolute url cannot be found.
  • #4883 - Fixed IPAddress default namespace, when no namespace is provided.
  • #4891 - Fixed Prefix API and UI inability to filter on multiple values for the fields prefix, within, within_include, contains.
  • #4891 - Fixed IPAddress API and UI inability to filter on multiple values of prefix.
  • #4911 - Fixed the ability to modify tags on Namespaces via the UI.
  • #4922 - Fixed incorrect position of "actions" column in Location table view.

Dependencies

  • #4812 - Updated django-tree-queries to 0.16.1 to bring in some desired feature fixes.
  • #4937 - Updated alpha UI dependency @rjsf/core to version 5.13.6.
  • #4937 - Updated alpha UI dependency @rjsf/utils to version 5.13.6.
  • #4937 - Updated alpha UI dependency @rjsf/validator-ajv8 to version 5.13.6.
  • #4937 - Updated alpha UI dependency react-refresh to version 0.14.0.
  • #4937 - Updated alpha UI dependency react-router-dom to version 6.18.0.

Documentation

  • #4805 - Updated documentation on jobs registration.
  • #4871 - Removed some duplicate documentation links in the Feature Guides.
  • #4923 - Fixed border for namespace image in docs.
  • #4952 - Corrected spelling of "extensions" in the navigation menu.

Housekeeping

  • #4945 - Replaced calls to deprecated is_safe_url() Django API with url_has_allowed_host_and_scheme() replacement API.

Contributors

  • @gsnider2195
  • @HanlinMiao
  • @jathanism
  • @joewesch
  • @nrnvgh
  • @glennmatthews
  • @dependabot
  • @snaselj
  • @byteborg
  • @whitej6
  • @Kircheneer
  • @timizuoebideri1
  • @itdependsnetworks
  • @erjac77

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.5...v2.0.6

nautobot - v2.1.0-beta.1 - 2023-11-30

Published by HanlinMiao 11 months ago

Added

  • #1905 - Added the ability to automatically apply isnull filters when model field is nullable.
  • #1905 - Enhanced status filters to support filtering by ID (UUID) as an alternative to filtering by name.
  • #3352 - Added Job.create_file() API and JOB_FILE_IO_STORAGE configuration setting.
  • #3994 - Added "Data Provenance" section to the Advanced tab in ObjectDetailView to display the user that created and last updated the object.
  • #4272 - Added bulk edit and bulk destroy views to Namespaces.
  • #4646 - Added read-only view in admin panel for Django admin log entries.
  • #4694 - Added ExternalIntegration model to track connections to systems external to Nautobot.
  • #4745 - Added ExportObjectList system Job.
  • #4750 - Added "copy" button support to titles of all object retrieve views.
  • #4750 - Added support for BRANDING_FILEPATHS["header_bullet"] to customize the view header appearance.
  • #4765 - Added support for BRANDING_FILEPATHS["nav_bullet"] to customize the nav menu appearance.
  • #4796 - Added InterfaceRedundancyGroupAssociation to GraphQL.
  • #4796 - Added IPAddressToInterface to GraphQL.
  • #4796 - Added VRFDeviceAssignment to GraphQL.
  • #4796 - Added VRFPrefixAssignment to GraphQL.
  • #4820 - Added listing of related files to the /api/extras/job-results/ REST API.
  • #4820 - Added read-only REST API for the FileProxy model (files generated by a Job run), including a /download/ endpoint for downloading the file content.

Changed

  • #4677 - Updated and customized nautobot UI bootstrap theme with LESS variables.
  • #4745 - Changed object export (CSV, YAML, export-template) to run as a background task, avoiding HTTP timeouts when exporting thousands of objects in a single operation.
  • #4750 - Refined CSS to Nautobot Bootstrap UI.
  • #4765 - Moved navbar to the left.
  • #4786 - Lightened table row background color in dark mode.
  • #4808 - Make NavItem link text margin-right slightly larger.

Removed

  • #4765 - Removed "Import" buttons from navbar dropdown menus.
  • #4787 - Removed support for HIDE_RESTRICTED_UI. UI elements requiring specific permissions will now always be hidden from users lacking those permissions. Additionally, users not logged in will now be automatically redirected to the login page.

Fixed

  • #4646 - Fixed a bug in ObjectPermission where users.user permissions could not be created.
  • #4786 - Fixed default button background color in dark mode.
  • #4818 - Fixed various inconsistencies with UI reskin in dark mode.
  • #4862 - Fixes issues with uninstalled apps & lingering contenttypes referenced in changelog.
  • #4882 - Fixed a regression in the rendering of the Jobs table view.

Housekeeping

  • #3352 - Added a shared media_root volume to developer Docker Compose environment.
  • #4781 - Added Gherkin writeups for "Locations" and "Prefixes" feature workflows.

Contributors

  • @glennmatthews
  • @jathanism
  • @HanlinMiao
  • @gsnider2195
  • @norbert-mieczkowski-codilime
  • @timizuoebideri1
  • @matt852
  • @whitej6

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.5...v2.1.0-beta.1

nautobot - v1.6.6 - 2023-11-21

Published by gsnider2195 11 months ago

What's Changed

Security

  • #4833 - Fixed cross-site-scripting (XSS) potential with maliciously crafted Custom Links, Computed Fields, and Job Buttons (GHSA-cf9f-wmhp-v4pr).

Changed

  • #4833 - Changed the render_jinja2() API to no longer automatically call mark_safe() on the output.

Fixed

  • #3179 - Fixed the error that occurred when fetching the API response for CircuitTermination with a cable connected to CircuitTermination, FrontPort, or RearPort.
  • #4799 - Reduced size of Nautobot sdist and wheel packages from 69 MB to 29 MB.

Dependencies

  • #4799 - Updated mkdocs development dependency to 1.5.3.

Housekeeping

  • #4799 - Updated docs configuration for examples/example_plugin.
  • #4833 - Added ruff to invoke tasks and CI.

Contributors

  • @glennmatthews
  • @timizuoebideri1

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.5...v1.6.6

nautobot - v2.0.5 - 2023-11-21

Published by gsnider2195 11 months ago

What's Changed

Security

  • #4832 - Fixed cross-site-scripting (XSS) potential with maliciously crafted Custom Links, Computed Fields, and Job Buttons (GHSA-cf9f-wmhp-v4pr).

Changed

  • #4832 - Changed the render_jinja2() API to no longer automatically call mark_safe() on the output.

Fixed

  • #3015 - Fixed multiple jobhooks and/or webhooks triggered by a single change.
  • #3015 - Fixed change logging behavior to properly combine multiple changes to an object in the same request.
  • #4280 - Fixed text color of linked labels to use the same color as the text color of the non-linked labels.
  • #4790 - Fixed REST API error that interpreted rack_group as a required field when creating a rack.
  • #4791 - Fixed a bug where some form fields may change unexpectedly.
  • #4799 - Reduced size of Nautobot sdist and wheel packages from 86 MB to 31 MB.
  • #4804 - Fixed VarbinaryIPField storing None or empty values as the binary representation of b'' thereby ignoring the non-null constraint on the field.

Dependencies

  • #4615 - Updated psycopg2-binary dependency to version 2.9.9.
  • #4615 - Updated pylint development dependency to version 2.17.7.
  • #4799 - Updated mkdocs development dependency to 1.5.3.

Documentation

  • #4008 - Removed CacheOps reference from application stack diagram.

Housekeeping

  • #3179 - Added unittest for CircuitTermination with a cable connected to CircuitTermination, FrontPort, or RearPort fix in #4815.
  • #4799 - Updated docs configuration for examples/example_plugin.
  • #4832 - Added ruff to invoke tasks and CI.

Contributors

  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @bryanculver
  • @timizuoebideri1

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.4...v2.0.5

nautobot - v2.0.4 - 2023-11-13

Published by glennmatthews 11 months ago

What's Changed

Security

  • #4748 - Updated Django minimum version to 3.2.23 to protect against CVE-2023-46695.
  • #4782 - Updated alpha-UI dependency axios to version 1.6.0 due to CVE-2023-45857.

Added

  • #4349 - Added Note List View.
  • #4704 - Added missing Rack table to Role Detail View.
  • #4709 - Added form field to allow assignment of IP addresses when creating a new Interface.

Changed

  • #4709 - Changed order of fields displayed when editing an Interface to be the same as when creating a new Interface.

Fixed

  • #3990 - Fixed the issue preventing associated Note objects from being deleted when the assigned object is deleted.
  • #4626 - Fixed incorrect "Prefixes" link from VRF detail view.
  • #4675 - Fixed the issue where the 500 error page does not support dark mode.
  • #4680 - Fixed the bug that prevented the user from adding tags without member objects as DynamicGroup tags filters.
  • #4681 - Fixed NAPALM device view functions assuming 'Active' as the correct status.
  • #4684 - Fixed InterfaceRedundancyGroup.status to no longer be nullable.
  • #4684 - Fixed InterfaceRedundancyGroupAssociation.created to be a DateTimeField.
  • #4685 - Fixed invalid link to IPAddress in Interface Detail View.
  • #4704 - Fixed a display issue with table pagination controls floating over other UI elements.
  • #4704 - Fixed Role detail view displaying tables for content types that aren't in the Role's allowed content types.
  • #4709 - Fixed incorrect (missing) filtering of available VRFs by parent Device when editing an Interface in the UI.
  • #4718 - Fixed bug in which a device's device redundancy group priority was not being set to None when the device redundancy group was deleted.
  • #4726 - Fixed the bug caused by Tenant Edit View template accessing group instead of tenant_group.
  • #4728 - Fixed bug with JobResultFilterSet and ScheduledJobFilterSet using django_filters.DateTimeFilter for only exact date matches.
  • #4751 - Fixed a bug with BaseModel.get_absolute_url returning an AttributeError instead of raising it.
  • #4779 - Fixed an error when syncing a git repo without a worker running.

Documentation

  • #3927 - Fixed documentation for creating databases on PostgreSQL version 15.
  • #4622 - Fixed docs incorrectly referencing Nautobot 1.5 as the LTM release for 1.x.
  • #4642 - Added documentation category to release-notes.
  • #4704 - Fixed a broken link in CONTRIBUTING.md to point to the correct contributing guide.
  • #4713 - Fixed documentation regarding API endpoint to use for running saved GraphQL queries.
  • #4714 - Added documentation detailing rack power utilization calculation.
  • #4720 - Added redeployment demo environment step to release-checklist.md.
  • #4767 - Updated Job and App Developer docs to import from the nautobot.apps module throughout.

Housekeeping

  • #4638 - Updated Apps upstream testing CI to use the correct branch pairings post-2.0.
  • #4686 - Fixed incorrect tagging of 1.6.x Docker nautobot-dev images as latest.
  • #4700 - Removed incorrect NAUTOBOT_DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT environment variable reference from settings documentation.
  • #4709 - Replaced a number of ModelChoiceField in DCIM forms with more appropriate DynamicModelChoiceField.

Contributors

  • @glennmatthews
  • @HanlinMiao
  • @gsnider2195
  • @justinbrink
  • @joewesch
  • @Kircheneer
  • @lvrfrc87
  • @nrnvgh
  • @timizuoebideri1
  • @dependabot
  • @apanagio
  • @scetron
  • @smk4664
  • @Dav-C
  • @cardoe

New Contributors

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.3...v2.0.4

nautobot - v1.6.5 - 2023-11-13

Published by glennmatthews 11 months ago

What's Changed

Added

  • #4649 - Added device_redundancy_groups field to ConfigContextSerializer.

Changed

  • #4638 - Renamed ltm/1.6 branch to ltm-1.6.

Fixed

  • #4645 - Fixed a bug where the failover-strategy field was required for the device redundancy group api.
  • #4686 - Fixed incorrect tagging of 1.6.x Docker nautobot-dev images as latest.
  • #4718 - Fixed bug in which a device's device redundancy group priority was not being set to None when the device redundancy group was deleted.
  • #4728 - Fixed bug with JobResultFilterSet and ScheduledJobFilterSet using django_filters.DateTimeFilter for only exact date matches.
  • #4733 - Fixed the bug that prevents retrieval of IPAddress using its address args if it was created using host and prefix_length.

Housekeeping

  • #4700 - Removed incorrect NAUTOBOT_DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT environment variable reference from settings documentation.

Security

  • #4671 - Updated urllib3 to 2.0.7 due to CVE-2023-45803. This is not a direct dependency so it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4748 - Updated Django minimum version to 3.2.23 to protect against CVE-2023-46695.

Contributors

  • @nrnvgh
  • @glennmatthews
  • @justinbrink
  • @timizuoebideri1

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.4...v1.6.5

nautobot - v2.0.3 - 2023-10-23

Published by glennmatthews 12 months ago

What's Changed

Added

  • #4612 - Added validation step to handle invalid/legacy filters from v1.x in DynamicGroup form validation.
  • #4668 - Added an ENABLE_ALPHA_UI configuration option to the settings, which is initially set to False. When set to True, this option enables the "Alpha UI 2.0" feature.

Changed

  • #4668 - Changed the flag --no-build-ui to --build-ui, and its default value to False for the nautobot-server post-upgrade command.

Fixed

  • #4604 - Fixed post_upgrade bug involving potential left over references to Aggregate, DeviceRole, and RackRole ContentTypes in ObjectChange records.
  • #4608 - Fixed error 'IPAddressBulkAddForm' has no field named 'parent' when bulk creating IPs via UI.
  • #4669 - Added redirects from 1.x documentation paths to their 2.x equivalents to fix broken links/bookmarks.
  • #4676 - Ensured that ScheduledJob.job_class values are correctly transferred to ScheduledJob.task during v2 migration.
  • #4692 - Fixed incorrect inheritance of Meta attributes into nested serializers (depth >= 1).

Housekeeping

  • #4692 - Added check in REST API generic test cases to detect strings like password and sha256 that shouldn't generally appear in REST API responses.

Security

  • #4671 - Updated urllib3 to 2.0.7 due to CVE-2023-45803. This is not a direct dependency so it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4673 - Fixed token exposure in JobResult traceback and result output when a GitRepositorySync job fails in certain ways.
  • #4692 - Fixed potential exposure of hashed user password data on certain REST API endpoints when using the ?depth=1 query parameter. For more details, please refer to GHSA-r2hw-74xv-4gqp.

Contributors

  • @glennmatthews
  • @timizuoebideri1
  • @bryanculver
  • @HanlinMiao
  • @dependabot
  • @jathanism

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.2...v2.0.3

nautobot - v1.6.4 - 2023-10-17

Published by glennmatthews about 1 year ago

What's Changed

Added

  • #4361 - Added SUPPORT_MESSAGE configuration setting.
  • #4573 - Added caching for display property of Location and LocationType, mitigating duplicated SQL queries in the related API views.

Changed

  • #4313 - Updated device search to include manufacturer name.

Housekeeping

  • #4619 - Fixed broken links in Nautobot README.md.

Removed

  • #4595 - Removed stable tagging for container builds in LTM release workflow.

Contributors

  • @jathanism
  • @glennmatthews
  • @gsnider2195
  • @HanlinMiao
  • @Kircheneer

Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.3...v1.6.4

nautobot - v2.0.2 - 2023-10-17

Published by glennmatthews about 1 year ago

What's Changed

Added

  • #4361 - Added SUPPORT_MESSAGE configuration setting.
  • #4607 - Added nautobot-server audit_graphql_queries management command for evaluating breaking filter changes to existing GraphQLQuery instances.

Changed

  • #4313 - Updated device search to include manufacturer name.

Fixed

  • #4472 - Fixed incorrect logic in nautobot_config.py.j2 template that wouldn't detect the MySQL engine when Prometheus metrics are enabled.
  • #4547 - Fixed incorrect form field type for DeviceFilterForm.device_redundancy_group_priority.
  • #4588 - Fixed the error when creating a child Location under a non-globally-unique named parent Location.
  • #4598 - Fixed inconsistent column names in docs/user-guide/administration/upgrading/from-v1/tables/v2-filters-renamed-fields.yml.
  • #4603 - Fixed a bug that makes Manufacturers list fail to load.
  • #4639 - Fixed the ability to attach images to Locations.

Housekeeping

  • #4591 - Fixed incorrect documentation of FEEDBACK_BUTTON_ENABLED configuration setting.
  • #4591 - Fixed a number of missing app code-reference links in the documentation table of contents.
  • #4592 - Updated formatting on installation docs.
  • #4611 - Updated pylint to use multiple threads.
  • #4613 - Changed CLI reference from dns to dnf for install on RHEL systems.
  • #4619 - Fixed broken links in Nautobot README.md.

Security

  • #4586 - Updated urllib3 to 2.0.6 due to CVE-2023-43804. This is not a direct dependency so it will not auto-update when upgrading. Please be sure to upgrade your local environment.
  • #4621 - Updated postcss npm package to 8.4.31 to address CVE-2023-44270.
  • #4652 - Updated babel/traverse npm dependency to 7.23.2 to address CVE-2023-45133.

Contributors

  • @glennmatthews
  • @HanlinMiao
  • @gsnider2195
  • @jvanderaa
  • @whitej6
  • @joewesch
  • @dependabot
  • @FragmentedPacket

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.1...v2.0.2

nautobot - v2.0.1 - 2023-10-04

Published by HanlinMiao about 1 year ago

What's Changed

Fixed

  • #4436 - Allowed Interfaces of type Virtual, LAG, and Bridge to be selected as a virtual Interface's parent.
  • #4572 - Fixed a JS crash when using list view search box to filter objects in legacy UI.

Housekeeping

  • #4523 - Fixed invoke eslint not running against local development environment.
  • #4552 - Improved test_bulk_delete_form_contains_all_filtered and test_bulk_edit_form_contains_all_filtered generic tests to fail more gracefully if insufficient test data is available.

Contributors

  • @glennmatthews
  • @gsnider2195
  • @jathanism

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0...v2.0.1

nautobot - v1.6.3 - 2023-10-03

Published by HanlinMiao about 1 year ago

What's Changed

Added

  • #3372 - Added ObjectPermission constraints check to pre_migrate management command.

Fixed

  • #4396 - Fixed rack form silently dropping custom field values.

Housekeeping

  • #4587 - Fixed release.yml and pre-release.yml workflow files to target ci_integration.yml in its own branch.
  • #4587 - Enforced changelog requirement in ci_pullrequest.yml for ltm/1.6.

Security

  • #4446 - Updated GitPython to 3.1.36 to address CVE-2023-41040.

Contributors

  • @HanlinMiao
  • @bryanculver
  • @gsnider2195

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

nautobot - v2.0.0 - 2023-09-29

Published by glennmatthews about 1 year ago

💡 Please thoroughly review the release overview below to see what changes may affect you during upgrade. Our "Upgrading from Nautobot v1.X" guide provides a lot of information around pre- and post-migration helpers we have written that should assist you in a successful 2.0 upgrade. If you have any questions, please reach out to us on the #nautobot channel on Network to Code's Slack community or GitHub Discussions.

Release Overview

Added

Alpha UI 2.0 (#3142)

Nautobot 2.0 includes an "alpha" version of a new user interface (UI) for Nautobot, based on the React web framework.

Users can switch between the existing UI and new UI for views supported in the new UI via a "View in New UI" link in the page footer of the existing UI and a "Return to Legacy UI" link in the left sidebar of the new UI.

💡 The new UI also includes a "Submit Feedback" link that can be used to easily submit feedback regarding the new UI to the Nautobot maintainers.

As of Nautobot release 2.0.0, the new UI supports read-only access to Locations, Device Types, Devices, Prefixes, and IP Addresses; these views will be enhanced and refined, and support for additional models and workflows will be added, throughout the Nautobot 2.x release lifecycle.

ℹ️ As of Nautobot release 2.0.0, the new UI, as an alpha feature, does not yet support Nautobot Apps (plugins), but this capability will be added and supported in a future release.

Assign an IP Address to Multiple Interfaces (#2403)

Introduced the ability to assign one IPAddress to multiple Interfaces/Devices and VMInterfaces/VirtualMachines by creating a many to many relationship between IPAddress and Interface/VMInterface models represented as a through table model IPAddressToInterface. This feature allows you to model a network environment where you have anycast IPAddresses are shared extensively among a large number of Devices/VirtualMachines.

As a result of this feature and associated changes, you can no longer assign Interfaces/VMInterfaces during bulk creation of IPAddresses, but a separate bulk-create endpoint has been introduced to allow the bulk import of IPAddressToInterface assignments.

Generic Role Model (#1063)

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

IPAM Namespaces (#3337)

The new Namespace model expands on the functionality previously provided by VRF.enforce_unique and the ENFORCE_GLOBAL_UNIQUE settings flag, both of which have now been removed. Within a namespace, all VRFs, prefixes, and IP addresses must be unique and non-duplicated. For more details please refer to the documentation.

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. For example:

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

>>> DeviceType.objects.get_by_natural_key("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.

Two new configuration settings, DEVICE_NAME_AS_NATURAL_KEY and LOCATION_NAME_AS_NATURAL_KEY, have been added to allow an administrator to customize the natural-key behavior of these two widely-used models.

REST API Query Depth Parameter (#3042)

Added the ?depth query parameter in Nautobot v2.X to replace the ?brief parameter in the REST API. It enables nested serialization functionality and offers a more dynamic and comprehensive browsable API. It allows users greater control of the API response data and it is available for both retrieving a single object and a list of objects. This parameter is a positive integer value that can range from 0 to 10. To learn more more, check out the documentation on the ?depth query parameter.

Site Fields Added 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.

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.

Changed created Field to DateTimeField for ChangeLoggedModel (#2076)

The created field of all models that inherit from ChangedLoggedModel, which includes OrganizationalModel and PrimaryModel and therefore most objects in the core data model, has been changed from a DateField to a DateTimeField for added granularity. Preexisting records will show as created at midnight UTC on their original creation date.

All such objects may now be filtered by date or time or a combination of both. All other date-based behavior such as filtering works as it did before.

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.

Collapsed 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.

Corrected Filter Fields (#2804)

⚠️ This change may introduce breaking changes to your existing DynamicGroup filters, ObjectPermission filters, Relationship filters, and any other saved references to these fields. You should review any existing instances of these models before and after upgrading your production environment for any potentially subtle change. Please refer to the Upgrading from Nautobot v1.X guide for more details.

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

Enhanced Filter Fields (#2804)

⚠️ This change may introduce breaking changes to your existing DynamicGroup filters, ObjectPermission filters, Relationship filters, and any other saved references to these fields. You should review any existing instances of these models before and after upgrading your production environment for any potentially subtle change. Please refer to the Upgrading from Nautobot v1.X guide for more details.

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

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

/dcim/rack-groups/?parent=<slug>

Now in v2.x, you are able to filter those RackGroups by their parent(s) names or UUID primary keys:

/dcim/rack-groups/?parent=<name> or /dcim/rack-groups/?parent=<uuid>

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.

Job Overhaul (#765)

Within Nautobot 2.0, Jobs has undergone significant changes within the overall functionality of Jobs along with migration for existing 1.x Jobs operation. Database changes for Jobs will affect DryRun functionality. Other significant changes to Jobs in 2.0 provide greater interoperability with Celery for registering, logging, and tracking however 2.0 will be moving away from previous backwards compatibility scripts. These improvements will simplify Job implementation and help reduce administration overhead for status tracking on completions and/or failures. For more details, refer to Migrating Jobs from Nautobot v1.X to Nautobot v2.0.

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".

Renamed Database Foreign Keys and Related Names (#2520)

⚠️ This change may introduce breaking changes to your existing DynamicGroup filters, ObjectPermission filters, Relationship filters, and any other saved references to these fields. You should review any existing instances of these models before and after upgrading your production environment for any potentially subtle change. Please refer to the Upgrading from Nautobot v1.X guide for more details.

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)

⚠️ This change may introduce breaking changes to your existing DynamicGroup filters, ObjectPermission filters, Relationship filters, and any other saved references to these fields. You should review any existing instances of these models before and after upgrading your production environment for any potentially subtle change. Please refer to the Upgrading from Nautobot v1.X guide for more details.

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

REST API Versioning Behavior (#2799)

In Nautobot 2.0 and later, the REST API defaults, when the caller doesn't request a specific API version, to using the latest available version of the REST API. This is a change from Nautobot 1.x, where the default behavior was to use the 1.2 version of the REST API even when newer versions were available.

Revamped CSV Import and Export (#254)

Exporting objects and lists of objects to CSV format has been totally reimplemented in a new framework for ease of use and maintainability. Instead of accessing http://nautobot/<app>/<model>/?export users can now use the URL pattern http://nautobot/api/<app>/<model>/?format=csv (the "Export" links in the UI have of course been updated accordingly), as the new CSV rendering for exports is based on the REST API serializer definitions. This results in substantially more comprehensive CSV representations of many models.

Conversely, importing objects from CSV format has also been reimplemented in the same new framework. The REST API can now accept CSV files as well as the existing JSON support, and the UI for importing CSVs uses this same framework behind the scenes.

⚠️ The Nautobot 2.0 CSV formats for exports and imports are not backwards-compatible with the Nautobot 1.x CSV formats. In general, the CSV formats are subject to refinement in future releases, and should not be considered a stable API for data portability between differing Nautobot versions.

An immediate benefit users can notice from this reimplementation is that CSVs should now generally be "round-trip" capable, meaning that you can export a set of records to CSV format and then import that CSV into a different Nautobot instance (or delete the records and use the CSV to recreate them) without needing to "massage" the CSV into a different set of columns or fields. One caveat to this is many-to-many fields (such as VRF.import_targets or Interface.tagged_vlans), which are not currently included in CSV exports or supported for CSV import, with the exception of object tags which are supported. Support for many-to-many export and import via CSV may be added in a future release.

A benefit to App developers is that data models no longer need to define a csv_headers attribute or implement a to_csv method, because implementing the REST API for a model is now sufficient to enable CSV import/export support for that model. Similarly, there is no longer a need to implement a CSVForm for each model in order to support CSV import.

In addition to the above improvements, you can now reference related objects in your CSV by using a combination of unique fields. For instance:

Instead of:

name,rack
Device one,7f3ca431-8103-45cc-a9ce-b94c1f784a1d

you can use:

name,rack__location__name,rack__name
Device one,Equinix DC6,R204

This enhancement allows you to specify related objects using their unique attributes, making data import even more intuitive and flexible.

Removed

Brief REST API Query Parameter (#3042)

Support for ?brief REST API query parameter and Nested*Serializers have been removed in Nautobot v2.X. They are replaced by the new ?depth query parameter.

django-cacheops (#1721)

Nautobot no longer uses django-cacheops for caching of database queries or other information. In some cases this has been replaced by the use of Django's native Redis caching capabilities.

The configuration settings CACHEOPS, CACHEOPS_DEFAULTS, CACHEOPS_DEGRADE_ON_FAILURE, CACHEOPS_ENABLED, CACHEOPS_HEALTH_CHECK_ENABLED, CACHEOPS_REDIS, etc. are now unused by Nautobot and may be removed from your configuration.

Legacy manage.py Removed (#1634)

When we launched Nautobot we introduced the nautobot-server command as the primary entrypoint to managing your application, replacing the legacy manage.py script that is common with Django-based applications. The original manage.py was left there initially in v1.0.0 as a fallback, however it is no longer needed, so we have removed it in Nautobot 2.0.

Redundant Filter Fields (#2804)

⚠️ This change may introduce breaking changes to your existing DynamicGroup filters, ObjectPermission filters, Relationship filters, and any other saved references to these fields. You should review any existing instances of these models before and after upgrading your production environment for any potentially subtle change. Please refer to the Upgrading from Nautobot v1.X guide for more details.

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 names 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 Circuits with a specific provider value in the UI or make changes to them via the REST API with a UUID primary key, you would use:

/circuits/circuits/?provider_id=<uuid>

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

/circuits/circuits/?provider=<uuid>

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

RQ support (#2523)

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

Slug Fields (#2662)

The slug field has been removed from all core models except for GitRepository. Generally, Nautobot URLs that referenced the slug field have been changed to use the primary key instead. For example, the URL for https://nautobot/dcim/locations/building-01 would change to a URL similar to https://nautobot/dcim/locations/e41f381a-a53b-485a-886f-9d36859b47a1. There are a small number of URLs that still reference a value that's not the primary key, including some URLs related to secrets providers, cables and jobs.

A natural_slug property has been added to all models that inherit from BaseModel to provide a human-readable value for use in tools that require a loose reference to a Nautobot object, but this value is not equivalent to the slug field and is not guaranteed to be unique.

A natural key interface has been provided for most models to allow for uniquely referencing objects by a name that is friendlier than the primary key. For more information on the usage of natural keys vs primary keys see the documentation for Uniquely Identifying a Nautobot Object.

Contributors

  • @bile0026
  • @bryanculver
  • @dependabot
  • @DistantVoyager
  • @glennmatthews
  • @grelleum
  • @gsnider2195
  • @HanlinMiao
  • @itdependsnetworks
  • @jamesharr
  • @jathanism
  • @jeffkala
  • @jfach
  • @jmcgill298
  • @joewesch
  • @jvanderaa
  • @Kircheneer
  • @lampwins
  • @matt852
  • @MeganerdDev
  • @nniehoff
  • @norbert-mieczkowski-codilime
  • @PavelSafronov
  • @renovate
  • @romanukes
  • @scetron
  • @slash-24
  • @smk4664
  • @snaselj
  • @timizuoebideri1
  • @u1735067
  • @whitej6

New Contributors

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

nautobot - v2.0.0-rc.4 - 2023-09-27

Published by HanlinMiao about 1 year ago

What's Changed

Added

  • #3303 - Added additional section headers to the Release Overview of Nautobot 2.0 release notes.
  • #3303 - Added TODO comments for each additional section header.
  • #3689 - Added namespace diagram to docs.
  • #4103 - Added UI viewset for detail/list/import/export views of IPAddressToInterface objects.
  • #4301 - Added missing and good-to-have information in the app migration guide.
  • #4418 - Added netutils_parser to network_driver.
  • #4425 - Added BaseModelSerializer.determine_view_options() API for use in new UI.
  • #4425 - Added option for individual model serializers to override the default contents of the Advanced tab in the new UI.
  • #4425 - Added option for individual model serializers to define additional tabs in the new UI and the fields included in such tabs.
  • #4426 - Added the ability to specify one or more content types to the fix_custom_fields management command.
  • #4434 - Implemented ObjectList view filters in FiltersPanelContent component of the new UI.
  • #4459 - Added more re-exports to the nautobot.apps namespace.
  • #4462 - Added FilterSet data to REST API metadata.
  • #4474 - Added live search of q filter to list and detail views.
  • #4476 - Added /api/extras/jobs/<name>/... REST API endpoints as an alternative option to the existing /api/extras/jobs/<uuid>/... endpoints.
  • #4477 - Added the slugify Django template tag as a Jinja filter.
  • #4490 - Added additional information to the release-notes and other documentation about the revamped CSV import/export feature.
  • #4491 - Added documentation to Nautobot 2.0 release notes Release Overview for removal of manage.py.
  • #4491 - Added documentation to Nautobot 2.0 release notes Release Overview for change of ChangedLoggedModel.created field from DateField to DateTimeField.
  • #4493 - Added release-note overview of alpha 2.0 UI.
  • #4507 - Added Data Validation Engine to list of apps in docs.
  • #4524 - Added test_notes_url_functionality test case to APIViewTestCases.NotesURLViewTestCase generic test class.
  • #4524 - Added optional api parameter to NotesMixin.get_notes_url() model method.

Changed

  • #2472 - Added tagged_vlans and untagged_vlan as selected/prefetched in (VM)Interface API views.
  • #2472 - Added ip_addresses as prefetched in VMInterface API views.
  • #4014 - Refine Prefix List and Detail Views in new UI.
  • #4367 - Changed CSV export to use multi-column natural keys for related models instead of composite-keys.
  • #4367 - Changed natural_key_field_names for Prefix from ["namespace", "prefix"] to ["namespace", "network", "prefix_length"]
  • #4420 - Updated jobs migration docs to reflect alternate method of job params migration.
  • #4425 - Refined layout of new-UI Device detail view, including addition of "Virtual Chassis" tab.
  • #4425 - Moved logic deriving list and detail view schemas for new UI from a serializer from nautobot.core.api.metadata to nautobot.core.api.serializers.
  • #4425 - Changed new-UI detail-view schema construction to automatically include comments and tags fields (if present) in the appropriate location to avoid needing every serializer to specify these fields in its configuration.
  • #4425 - Refined the structure of new-UI detail-view and list-view schemas.
  • #4426 - Changed fix_custom_fields to skip models without any custom fields.
  • #4462 - Updated new UI to use REST API FilterSet metadata to populate filter form.
  • #4493 - Reordered overview items in the 2.0 release-notes.

Dependencies

  • #4418 - Dependency netutils updated to ^1.6.0.
  • #4538 - Updated npm dependencies via npm update.

Fixed

  • #4033 - Fixed filtering objects in bulk edit and bulk delete.
  • #4327 - Fixed a case where an ObjectChange would not be created when making an M2M change via the ORM.
  • #4327 - Fixed an error when trying to send a Webhook after all ObjectChanges for an object had been deleted/pruned.
  • #4327 - Fixed a case where a JobHook would not be sent when making an M2M change after all existing ObjectChanges for the object had been deleted/pruned.
  • #4396 - Fixed rack form silently dropping custom field values.
  • #4416 - Fixed a bug that raises CablePath matching query does not exist exception when deleting a device with multiple types of connected interfaces.
  • #4426 - Fixed a potential out-of-memory issue when running nautobot-server fix_custom_fields on large datasets.
  • #4430 - Fixed VLAN form missing VLAN Group.
  • #4469 - Fixed issue that resulted in stacktrace if no model docs and dunder str was not resolvable.
  • #4469 - Fixed alter_queryset not being respected by list views based on NautobotUIViewSet.
  • #4473 - Fixed a bug that stripped any tags field from Job input forms.
  • #4487 - Fixed general UI layout sizing and spacing.
  • #4503 - Fixed a bug that stripped any tags field from DynamicGroup filter options in DynamicGroupEditForm.
  • #4510 - Fixed placeholder values being present in new UI.
  • #4514 - Fixed an issue with alter_queryset not being called when constructing a table.
  • #4524 - Fixed incorrect implementation of test_notes_url_on_object test case that never actually tested anything.
  • #4524 - Fixed incorrect permissions enforcement on REST API /notes/ action endpoints.
  • #4524 - Fixed an exception in REST API /notes/ action endpoints that was inadvertently introduced in #4517.
  • #4535 - Fixed off-by-one error in new UI date processing.

Housekeeping

  • #4479 - Configured npm in Docker image to use 30s timeout, pinned npm to 9.X, and changed Docker build to use npm ci instead of npm install to improve builds.

Removed

  • #4301 - Removed references to RoleModelSerializerMixin, RoleRequiredRoleModelSerializerMixin and RoleSerializerField from generic Role-related documentation.
  • #4425 - Removed composite key from new UI object-detail "Advanced" tab.
  • #4448 - Removed composite key from user-facing interfaces (API, UI).
  • #4538 - Removed unnecessary dependency on semver npm package.

Security

  • #4500 - Updated cryptography to 41.0.4 due to GHSA-v8gr-m533-ghj9. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.

Contributors

  • @gsnider2195
  • @HanlinMiao
  • @itdependsnetworks
  • @snaselj
  • @smk4664
  • @norbert-mieczkowski-codilime
  • @glennmatthews
  • @joewesch
  • @bryanculver
  • @DistantVoyager
  • @u1735067
  • @timizuoebideri1
  • @jathanism

Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-rc.3...v2.0.0-rc.4

nautobot - v2.0.0-rc.3 - 2023-09-15

Published by bryanculver about 1 year ago

What to Check Out

Natural Slug Property

We implemented the natural_slug property on all BaseModel objects. A Natural Slug is a natural-key-derived, human-readable, automation-friendly representation of the object it references. It cannot be used to look up an object and is intended for a one-way "slug-ification" of the natural key.

IPAddressToInterface REST API Endpoint

With changing the IPAddress model's interface field from a ForeignKey to a ManyToManyField, the IPAddressToInterface model was introduced to track the many-to-many relationship between IPAddress and Interface (and VMInterface) objects. This model is now exposed via the REST API as a new endpoint. You can find more information about this endpoint in the auto-generated API documentation.

Added

  • #3289 - Added documentation on factory data caching and generic filter tests.
  • #3372 - Added documentation for migrating permission constraints.
  • #3934 - Added Namespace column to VRFDeviceAssignmentTable and VRFPrefixAssignmentTable to display assigned VRFs' namespace property.
  • #3934 - Added namespace attribute to rendering of "IP Addresses" columns of relevant Interface and InterfaceRedundancyGroup tables.
  • #3934 - Added namespace attribute to rendering of primary_ip fields in DeviceDetailView and VirtualMachineDetailView.
  • #3934 - Added hover copy button and functionality to primary_ip field in VirtualMachineDetailView.
  • #4011 - Added redirect in new UI to legacy UI if the page being visited is not new UI ready.
  • #4249 - Added REST API endpoint for the IPAddressToInterface model.
  • #4249 - Added section on many-to-many relationships in the REST API overview docs.
  • #4303 - Added documentation on identifying objects after the removal of slug fields.
  • #4326 - Update documentation on Nautobot release workflow.
  • #4346 - Implemented .natural_slug property on all models.

Changed

  • #2821 - Adds navigation.footer to mkdocs features to enable navigation in the footer.
  • #2821 - Updates installation documentation into a single path, using tabs for MySQL/PostgeSQL & Ubuntu/Debian/RHEL.
  • #2821 - Removes centos.md and ubuntu.md as these are collapsed into single install_system.md file.
  • #2821 - Updates docker-compose standalone to docker compose plugin to assist in development environment.
  • #4012 - Disable non ready Model View in new-ui sidebar.
  • #4015 - Refined new-UI IPAddress detail view.
  • #4017 - Refined new-UI DeviceType detail view.
  • #4017 - Moved object_type to the Advanced tab of new-UI detail views in general.
  • #4019 - Refine new-ui Location Detail view.
  • #4333 - Updated Dockerfile not to use Python virtual environment.
  • #4338 - Updated GitHub CI integration workflow for Long-term maintenance branch.
  • #4429 - Updated the pylint-nautobot migration steps.
  • #4440 - Fixed an issues with ModelForm's that used __all__ on Meta.fields and custom_fields displayed a JSON blob.

Fixed

  • #3934 - Fixed validation logic for VirtualMachine primary ips.
  • #4010 - Fixed error not being raised when an invalid parent is provided to the IPAddress in both the API and ORM.
  • #4293 - Fixed the issue of ObjectChange Detail View not rendering in the new UI.
  • #4307 - Fixed incorrect hyperlinks that exist in the Notes and ChangeLog Tables in the ObjectDetailView of the new UI.
  • #4329 - Fixed an issue in TreeNodeMultipleChoiceFilter filtering that could result in incorrect inclusion of unrelated records with the same name located elsewhere in the tree.
  • #4377 - Fixed incorrect OpenAPI schema for filters available on Device and VirtualMachine REST API endpoints.
  • #4377 - Fixed incorrect logic for queryset annotation on Device and VirtualMachine REST API views.
  • #4388 - Fixed a bug that makes ConfigContexts applied to parent locations missing from rendered config context of child location Devices/Virtual Machines.
  • #4407 - Fixed Dockerfile Node.js setup_XX.x deprecated script.

Housekeeping

  • #4310 - Updated CI integration workflow to remove some redundant tests, run more tests in parallel and remove arm64 platform from the container build.
  • #4311 - Updated CI pull request workflow for next branch to remove some redundant tests, run more tests in parallel and test the container build.
  • #4409 - Updated upstream testing workflow for apps to test against LTM and 2.0 with ltm-1.6 and develop branch tags respectively.

Removed

  • #3934 - Removed ip_family queryset annotation from PrefixQuerySet and IPAddressQuerySet.
  • #4011 - Removed the "disable menu" feature for non-NewUI ready menu links in the sidebar and NavBar.
  • #4015 - Removed tags, custom-fields, computed-fields, relationships from new-UI object detail
  • #4017 - Removed notes_url from new-UI object detail views.

Security

  • #3880 - Updated GitPython to 3.1.36 to address CVE-2023-41040.

Contributors

  • @gsnider2195
  • @HanlinMiao
  • @glennmatthews
  • @bryanculver
  • @timizuoebideri1
  • @DistantVoyager
  • @snaselj
  • @jvanderaa
  • @itdependsnetworks
  • @jathanism

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