Network Source of Truth & Network Automation Platform
APACHE-2.0 License
Bot releases are visible (Hide)
Published by gsnider2195 about 1 year ago
url
field to GraphQL objects.InterfaceRedundancyGroup
.Platform.network_driver
field in bulk.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()
.TagFilterField
to prevent very slow rendering of pages when large numbers of tags are defined.remote_url
cannot overlap in their provided_contents
, as such cases are highly likely to introduce data conflicts.filter
data.DynamicGroup.clean_fields()
so that it will respect an exclude=["filter"]
kwarg by not validating the filter
field.towncrier
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.1...v1.6.2
Published by HanlinMiao about 1 year ago
IPAddress
vrf
filter to vrfs
.Prefix
mask_length
filter to prefix_length
and vrf
filter to vrfs
.Prefix
vlan_vid
filter to permit multiple query values.RouteTarget
exporting_vrf
filter to exporting_vrfs
and importing_vrf
filter to importing_vrfs
.Service
port
filter to ports
.VRF
export_target
filter to export_targets
and import_target
filter to import_targets
.JobView
to JobRunView
and JobDetailView
to JobView
.job
to job_run_by_class_path
and job_detail
to job
.as_form_class
, as_form
and validate_data
functions on BaseJob Model to classmethods
.tag
fields on various filter forms (correct filter name is now tags
).to_field_name
attribute on TagFilterField
, which was causing dynamic-group filtering failures.final-dev
containers by switching to root user before exposing port and entrypoint.RouteTarget
exporting_vrf_id
and importing_vrf_id
filters as they are redundant with the exporting_vrfs
and importing_vrfs
filters.Service
device_id
and virtual_machine_id
filters as they are redundant with the device
and virtual_machine
filters.VRF
export_target_id
and import_target_id
filters as they are redundant with the export_targets
and import_targets
filters./extras/jobs/results/<uuid:pk>/
URL endpoint.Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-rc.1...v2.0.0-rc.2
Published by timizuoebideri1 about 1 year ago
development/nautobot_config.py
to disable installation metrics for developer environments by default.dev
and final-dev
Docker images to disable installation metrics by default.final
images.set-output
warnings.Rack
if it contained any devices whose names were not globally unique.nautobot-server send_installation_metrics
command.mkdocs
setting of tabbed
.nautobot/docs/installation/nautobot.md
and nautobot/docs/installation/http-server.md
to adopt tabbed interfaces.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.6.0...v1.6.1
Published by gsnider2195 about 1 year ago
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.FiltersPanel
UI component.documentation_static_path
attribute if a non-default path is needed.Note
objects' created
timestamps are unique.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.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
.ComponentModel
to ["name", "device"]
.PowerOutlet
and PowerPanel
.Cable
, CablePath
, and TaggedItem
to merely "pk".RackReservation
to ["units", "racks"]
.VirtualChassis
to "name".NautobotHyperlinkedRelatedField
from nautobot.core.api.serializers
to nautobot.core.api.fields
.nodejs
Docker container to use Nautobot dev
image instead of generic node
image.dev
and final-dev
Docker images to install and run Nautobot as a nautobot
user instead of as root
.poetry
version included in dev
and final-dev
Docker images from 1.3.1 to 1.5.1.markdownlint-cli
to version 0.35.0./opt/nautobot/
instead of the system Python.package.json
and package-lock.json
files into a single set of files.development/nautobot_config.py
to disable installation metrics for developer environments by default.dev
and final-dev
Docker images to disable installation metrics by default.django-auth-ldap
optional dependency to ~4.3.0
.django-cors-headers
dependency to ~4.2.0
.django-storages
optional dependency to ~1.13.2
.django-tables2
dependency to ~2.6.0
.django-tree-queries
dependency to ~0.15.0
.drf-spectacular
dependency to ~0.26.3
.napalm
optional dependency to ~4.1.0
.Pillow
dependency to ~10.0.0
.prometheus-client
dependency to ~0.17.1
.social-auth-core
optional dependency to ~4.4.2
.celery
dependency to ~5.3.1
.django-celery-beat
dependency to ~2.5.0
.django-constance
dependency to ~2.9.1
.django-extensions
dependency to ~3.2.3
.django-prometheus
dependency to ~2.3.1
.django-redis
dependency to ~5.3.0
.django-taggit
dependency to ~4.0.0.
django-timezone-field
dependency to ~5.1
.GitPython
dependency to ~3.1.32
.graphene-django
dependency to ~2.16.0
.Jinja2
dependency to ~3.1.2
.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.MarkupSafe
dependency to ~2.1.3
.mysqlclient
optional dependency to ~2.2.0
.packaging
dependency to ~23.1
.psycopg2-binary
dependency to ~2.9.6
.ComputedField
, CustomField
, FileAttachment
, ImageAttachment
, ObjectChange
, Relationship
, RelationshipAssociation
, and Token
models.VRF
or Prefix
records via the REST API without specifying a namespace
value.final
images.set-output
warnings.assigned
column in the IP address list view.IPAddressForm
and PrefixForm
.nodejs
development container due to missing files..exclude(composite_key="...")
.Prefix.objects.exclude(prefix="...")
.IPAddress.objects.exclude(address="...")
.Rack
if it contained any devices whose names were not globally unique.nautobot-server send_installation_metrics
command.npm install
steps.next
container build workflow.Site
and Region
references from core docs.get_job_result_and_repository_record
in nautobot.extras.datasources.git
.node_modules
shared volume from Docker development environment as no longer needed.primary_for_device
from Interface data migration.ObjectEditView
that was working around some IPAddress/Prefix form validation gaps.Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-beta.2...v2.0.0-rc.1
Published by jathanism about 1 year ago
This document describes all new features and changes in Nautobot 1.6.
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.
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 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).
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.
Nautobot 1.6.0 formally adds support for installation and operation under Python 3.11.
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.
Device.asset_tag
maximum length (#3693)The maximum length of the Device.asset_tag
field has been increased from 50 to 100 characters.
The default Python version for Nautobot Docker images has been changed from 3.7 to 3.11.
As Python 3.7 has reached end-of-life, Nautobot 1.6 and later do not support installation or operation under Python 3.7.
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.0.14.1
.drf-spectacular
to 0.26.4
.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.packaging
dependency versions.JobResult.log()
for the case where an object's get_absolute_url()
raises an exception.get_absolute_url()
implementation on CustomFieldChoice
model.Job
ChoiceVars
could sometimes get rendered incorrectly in the UI as multiple-choice fields.jsonschema<4.18
.toml
.DynamicGroup
memberships in Redis to improve reverse lookup performance.ContentType
lookups in Redis to improve performance.@action(detail=True)
decorator for registering additional non-standard GET
views to a NautobotUIViewSet
.network_driver
database field to the Platform
model.network_driver_mappings
derived attribute on the Platform
model.CONSTANCE_DATABASE_CACHE_BACKEND = 'default'
to settings.py
, which should improve performance a bit.NETWORK_DRIVERS
config setting to override or extend default network driver mappings from netutils
library.NautobotUIViewSet
to allow Create and Update methods to have their own form classes.HIDE_RESTRICTED_UI
is True.HIDE_RESTRICTED_UI
is True.asset_tag
size limit to 100.celery
dependency to ~5.3.1
.django-auth-ldap
optional dependency to ~4.3.0
.django-cacheops
dependency to ~6.2
.django-celery-beat
dependency to ~2.5.0
.django-constance
dependency to ~2.9.1
.django-cors-headers
dependency to ~4.2.0
.django-cryptography
dependency to ~1.1
. Note that this dependency will be removed in Nautobot 2.0.django-extensions
dependency to ~3.2.3
.django-filter
dependency to ~23.1
.django-health-check
dependency to ~3.17.0
django-prometheus
dependency to ~2.3.1
.`django-redis
dependency to ~5.3.0
.django-storages
optional dependency to ~1.13.2
.django-tables2
dependency to ~2.6.0
.django-taggit
dependency to ~4.0.0
.django-timezone-field
dependency to ~5.1
.django-tree-queries
dependency to ~0.15.0
.drf-spectacular
dependency to ~0.26.3
.graphene-django
dependency to ~2.16.0
.Jinja2
dependency to ~3.1.2
.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.MarkupSafe
dependency to ~2.1.3
.mysqlclient
optional dependency to ~2.2.0
.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
.packaging
dependency to ~23.1
.Pillow
dependency to ~10.0.0
.prometheus-client
dependency to ~0.17.1
.social-auth-core
optional dependency to ~4.4.2
.social-auth-app-django
dependency to ~5.2.0
.importlib-metadata
.pycryptodome
as Nautobot does not currently use this library and hasn't for some time.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.24...v1.6.0
Published by jathanism about 1 year ago
This document describes all new features and changes in Nautobot 1.6.
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.
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.
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.
Nautobot 1.6.0 formally adds support for installation and operation under Python 3.11.
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.
Device.asset_tag
maximum length (#3693)The maximum length of the Device.asset_tag
field has been increased from 50 to 100 characters.
As Python 3.7 has reached end-of-life, Nautobot 1.6 and later do not support installation or operation under Python 3.7.
DynamicGroup
memberships in Redis to improve reverse lookup performance.ContentType
lookups in Redis to improve performance.@action(detail=True)
decorator for registering additional non-standard GET
views to a NautobotUIViewSet
.network_driver
database field to the Platform
model.network_driver_mappings
derived attribute on the Platform
model.CONSTANCE_DATABASE_CACHE_BACKEND = 'default'
to settings.py
, which should improve performance a bit.NETWORK_DRIVERS
config setting to override or extend default network driver mappings from netutils
library.NautobotUIViewSet
to allow Create and Update methods to have their own form classes.HIDE_RESTRICTED_UI
is True.HIDE_RESTRICTED_UI
is True.asset_tag
size limit to 100.celery
dependency to ~5.3.1
.django-auth-ldap
optional dependency to ~4.3.0
.django-cacheops
dependency to ~6.2
.django-celery-beat
dependency to ~2.5.0
.django-constance
dependency to ~2.9.1
.django-cors-headers
dependency to ~4.2.0
.django-cryptography
dependency to ~1.1
. Note that this dependency will be removed in Nautobot 2.0.django-extensions
dependency to ~3.2.3
.django-filter
dependency to ~23.1
.django-health-check
dependency to ~3.17.0
django-prometheus
dependency to ~2.3.1
.`django-redis
dependency to ~5.3.0
.django-storages
optional dependency to ~1.13.2
.django-tables2
dependency to ~2.6.0
.django-taggit
dependency to ~4.0.0
.django-timezone-field
dependency to ~5.1
.django-tree-queries
dependency to ~0.15.0
.drf-spectacular
dependency to ~0.26.3
.graphene-django
dependency to ~2.16.0
.Jinja2
dependency to ~3.1.2
.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.MarkupSafe
dependency to ~2.1.3
.mysqlclient
optional dependency to ~2.2.0
.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
.packaging
dependency to ~23.1
.Pillow
dependency to ~10.0.0
.prometheus-client
dependency to ~0.17.1
.social-auth-core
optional dependency to ~4.4.2
.social-auth-app-django
dependency to ~5.2.0
.importlib-metadata
.pycryptodome
as Nautobot does not currently use this library and hasn't for some time.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.24...v1.6.0-rc.1
Published by gsnider2195 about 1 year ago
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.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.23...v1.5.24
Published by bryanculver over 1 year ago
per_page
on a list page exceeds the MAX_PAGE_SIZE
set.pre_migrate
.pyproject.toml
to comply with latest Poetry expectations.develop-1.6
to list of target branches to run changelog step in pull request CI workflow.mkdocstrings
0.22.0, mkdocstrings-python
1.1.2, and griffe
0.30.1.Django
to 3.2.20
to address CVE-2023-36053
.nautobot-server dumpdata
.nautobot-server loaddata
.nautobot-server trace_paths
after nautobot-server loaddata
.nautobot-server loaddata
to abort if certain data is present.MAX_PAGE_SIZE
is set to zero.Django
to 3.2.20
to address CVE-2023-36053
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.22...v1.5.23
Published by bryanculver over 1 year ago
This is a retag with a fixed workflow file. Changes between previous tag and this: diff
nautobot-server audit_dynamic_groups
management command for evaluating breaking filter changes to existing DynamicGroup instances.interfaces
and vm_interfaces
fields to REST API representation of IPAddress
.unique_together
constraint for ObjectChange
records.parent
field on Prefix
based on the prefix's type
and the parent's type
.IPAddresses
.develop
branch up through version 1.5.22.--save
option to nautobot-server validate_models
command.successful_post
callback function to ObjectEditView
.parent
filter for Prefix
objects.Prefix
or IPAddress
that does not follow prefix type
guidance.slug
fields have been removed.DeviceType
objects to filter on (model or ID) instead of (slug or ID).NaturalKeyOrPKMultipleChoiceFilter
default to_field_name
from slug
to name
.NameSlugSearchFilterSet
with NameSearchFilterSet
.ModelViewTestCase._get_url()
behavior to prefer pk
-based URLs over slug
-based URLs.ObjectEditView.get_object()
and ObjectDeleteView.get_object()
to prefer pk
-based object lookups over slug
-based lookups.slug
fields in models.name
(or model
in the case of DeviceType contexts) instead of slug
.ip_version
filters in PrefixFilterSet
and IPAddressFilterSet
to django_filters.NumberFilter
.IPAddress.type
field and moved DHCP/SLAAC status to types.nautobot.ipam.tests.test_forms.IPAddressFormTest
assigned_to_interface
as a RelatedMembershipBooleanFilter
with name has_interface_assignments
on IPAddressFilterSet
.present_in_vrf
and present_in_vrf_id
filters on IPAddressFilterSet
.ENUM_GENERATE_CHOICE_DESCRIPTION
to False to make OpenAPI schema for REST API filters less verbose.&
to ;
.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.VirtualChassis.name
to be globally unique and to serve as the natural key for this model.ScheduledJob.name
to be globally unique and serve as the natural key for this model.ScheduledJob.task
max_length
to fix an off-by-one potential error.ExportTemplate
uniqueness constraint (and natural key) to be simply (content_type, name)
.ConfigContext.name
to be globally unique and serve as the natural key for this model.ConfigContextSchema.name
to be globally unique and serve as the natural key for this model.name
to unique.ObjectPermission.name
to be globally unique and serve as the natural key for this model.IPAddress
natural key definition (IPAddress.natural_key_field_names
) to [parent__namespace, host]
.Device.primary_ip4
and primary_ip6
fields from OneToOneField
to ForeignKey
, relaxing the uniqueness constraint.VirtualMachine.primary_ip4
and primary_ip6
fields from OneToOneField
to ForeignKey
, relaxing the uniqueness constraint.JOBS_ROOT
Jobs import code to check for conflicts with existing package names.Prefix
model to [namespace, prefix]
.Service
model to [name, virtual_machine, device]
.VLANGroup
model to simply [name]
.VLAN
model to [pk]
for now.Prefix.type
validation with respect to parents and children from strictly-enforced to advisory-only for 2.0.parent
filter on IPAddress
to be exact-match by PK; the previously present filter is renamed to prefix
.object_bulk_create.html
.test_list_objects_filtered
and test_list_objects_unknown_filter_strict_filtering
.GraphQLQuery.slug
in CustomGraphQLView
.slug
in various detail view and edit view templates.slug
in various IPAM table columns.slug
fields in the documentation.AvailableIPSerializer
for ip_version
field representation.class_path
in the Jobs documentation.GitRepository.slug
that would conflict with existing Python modules.natural_key
for ObjectChange
records.ScheduledJob
data migration where it is trying to delete a non-existent key from a dictionary.slug
.KeyError
when accessing ObjectChange
records for a ConfigContext
via the REST API.natural_key_field_names
to include related object lookups.mac_address
when unset/null/empty values are present.to_representation
logic.@classproperty
methods to enforce correct data types.DeviceType.slug
field.Location.slug
field.LocationType.slug
field.Note.slug
field.ProviderNetwork.slug
field.RackGroup.slug
field.Tag.slug
field.VLANGroup.slug
field.slug
FilterSet filters from models that no longer have slugs.Status
object has been removed and replaced with an IPAddress.type
of the same name.Status
object has been removed and replaced with an IPAddress.type
of the same name.interface
and vminterface
fields from IPAddress
GraphQL representation.app_full_width_fragment
, detail-view-config
, form-fields
, and table-fields
REST API endpoints.ScheduledJob.job_class
field as redundant.ConfigContextSchema.slug
field.location
, name
] uniqueness constraint.device, rd, name
and virtual_machine, rd, name
uniqueness constraints on VRFDeviceAssignment
.namespace, name
uniqueness constraint on VRF
.Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-beta.1...v2.0.0-beta.2
Published by bryanculver over 1 year ago
BaseModel.validated_save()
that pass through to the model's save
method.FORCE_SCRIPT_NAME
setting due to hard-coded URLs.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.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.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.21...v1.5.22
Published by bryanculver over 1 year ago
nautobot/docs/configuration/authentication/sso.md
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.20...v1.5.21
Published by bryanculver over 1 year ago
CircuitTermination
objects.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.JobLogEntry
records.get_absolute_url
method on BaseModel
which will attempt to resolve the detail view route for all subclassed models.nautobot-server build_ui
command for building the web UInode_modules
to speed up rebuilds.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.pre_save
signal to catch invalid operations in manual creations of IPAddressToInterface
.unique_together
for through model IPAddressToInterface
.home_url
, config_url
, and docs_url
keys to the /api/plugins/installed-plugins/
REST API endpoint.api
argument to BaseModel.get_absolute_url()
.TreeModel.display
to reduce redundant queries when listing such objects.sort
query parameter.celery_kwargs
field to JobResult
and ScheduledJob
models.{"value": "x"}
format when writing to ChoiceFields in the REST API, making round-trip data easier.NautobotCSVParser
class, providing the ability for the REST API to accept CSV as an input format.parent_bay
when creating a Device via the REST API.APIViewTestCases.CreateObjectViewTestCase.test_recreate_object_csv
generic test, testing the "round-trip" capability of each API endpoint's CSV export and import.natural_key_field_names
to IPAddress
, Prefix
, RackReservation
, ScheduledJob
, and Service
models.termination_type
filter to CableFilterSet
.natural_key_slug
field to REST API serializers.detail-view-config
API endpoint to ModelViewSetMixin
.bool
return value for Nautobot.extras.datasources.git.ensure_git_repository()
to indicate whether the filesystem was changed.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.JobLogEntry.log_level
choices from default
, info
, success
, warning
, failure
to Python default logging levels debug
, info
, warning
, error
and critical
.BaseJob
class to celery's get_task_logger
logging implementation.SecretsGroupAssociation
through-table model.JobLogEntry.display
REST API field to match the model behavior.Nested*Serializer
classes in favor of a depth
-based REST API design.?brief=True
REST API parameter has been replaced by a new ?depth=<0-10>
API parameter, allowing greater control of the returned data.run_job
Celery task and updated BaseJob
to subclass Celery Task
.Relationship
model attribute slug
to key
.Relationship
model attribute name
to label
.ComputedField
model attribute slug
to key
.prefix_length
field to mask_length
.host
field non-modifiable.config_context
by default and only include it when requested by using the ?include=config_context
query parameter.lookup_field
for NautobotUIViewSet
to "pk"
instead of "slug"
.node_modules
and build
directories.delete_button
and edit_button
template tags to lookup pk
and slug
without the need to specify the lookup key.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.Meta.list_display_fields
for all serializers.JobResult
manager store_result
method to censor sensitive variables.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.CSVDataField
and CSVFileField
in support of the new CSV import framework.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.ObjectRetrieveView
.StatusModel
mixin in favor of directly including a StatusField
as needed.class_path
property from <source>/<module>/<ClassName>
to simply <module>.<ClassName>
.module_name
for Git-derived Jobs to <git_repository_slug>.jobs.<module>
.Nautobot.core.utils.git.GitRepo.checkout()
to include whether the filesystem was changed.job
filter on JobButton, JobHook, JobResult, and ScheduledJob to be name-based rather than slug-based.Job.runnable
property to not consider whether the job_class
is set, as a performance optimization.nautobot/extras/tests/example_jobs/test_*.py
to nautobot/extras/test_jobs/*.py
to avoid unnecessary loading by the unittest
runner.django-cacheops
.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
.Tag
to the same object multiple times by adding appropriate uniqueness constraints on the TaggedItem
through table.extras.0061_collect_roles_from_related_apps_roles
migration.populate_model_features_registry
causing skipped updates.package-lock.json
which was causing test failures.Prefix.reparent_ips()
that was too greedy in reparenting IP addresses when child prexies were deeply nested (such as /31)select_related
on DeviceViewSet
and PrefixViewSet
to improve performance.Interface.mac_address
and VMInterface.mac_address
.DeviceType.front_image
and DeviceType.rear_image
.password
being incorrectly marked as a required field when editing a User via the REST API.failover_strategy
field as unspecified/blank when creating/updating DeviceRedundancyGroup
via the REST API.Device
and VRF
models.User
via the REST API.debugpy
workflow not working with the removal of manage.py
.--cache_test_fixtures
when running tests.nautobot.extras.tests.test_views
.cable
field as writable.status
fields to correctly match their intended usage.Source
tab from job_approval_request.html.taggit.managers.TaggableManager
.nautobot.extras.utils.is_taggable
; use nautobot.core.models.utils.is_taggable
instead.taggit
1.x Python API; instead of object.tags.set(tag1, tag2, tag3)
you must now do object.tags.set([tag1, tag2, tag3])
.django-cacheops
.BaseJob
logging methods _log
, log
, log_debug
, log_success
, log_info
, log_warning
and log_failure
.active_test
and failed
properties from BaseJob
class.csv_headers
and to_csv()
from all models as they are no longer needed.changelog_url
from ObjectView
's context.test_*
and post_run
methods in Jobs.broadcast
field from IPAddress.NavMenuButton
and its subclasses as they are not a part of the 2.0 UI.NavMenuTab.weight
property as the menu tabs/contexts are not reorderable in 2.0.verison
key from /api/plugins/installed-plugins
REST API endpoint.url
field declarations from most REST API serializers as they are now derived automatically.Job.read_only_override
, JobResult.obj_type
, JobResult.periodic_task_name
, and JobResult.task_id
fields.NautobotFakeRequest
and associated methods, variables and logic.LocatableModelCSVFormMixin
, RoleModelCSVFormMixin
, RoleRequiredRoleModelCSVFormMixin
, and StatusModelCSVFormMixin
classes, as they are no longer needed after reworking how CSV import is handled.bulk_create_form_class
field from NautobotUIViewSet
as it's no longer used or needed.model_form
and widget_attrs
fields from BulkImportView
as they are no longer used or needed.Job.slug
, Job.source
, and Job.git_repository
database fields.source
and slug
filters for Jobs.get_jobs()
, get_job_classpaths()
, jobs_in_directory()
functions.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
Published by bryanculver over 1 year ago
location
filter on CircuitFilterSet
and ProviderFilterSet
.Out of sort memory
error on JobListView
and JobResultListView
.unsupported operand type(s) for -: 'list' and 'list'
for MultiObjectVar with missing UUID.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.19...v1.5.20
Published by bryanculver over 1 year ago
{{ obj.cf }}
to access custom fields in jinja templates.delete_button
and edit_button
template tags to lookup pk
and slug
without the need to specify the lookup key.django
to ~3.2.19
to address CVE-2023-31047
.mkdocs
to ~1.4.3
.psycopg2-binary
to ~2.9.6
.social-auth-core
to ~4.4.0
to permit addressing CVE-2022-2309
.pymdown-extensions
to 10.0
to address CVE-2023-32309
.KeyError
when filtering Cables in the UI by termination_a_type
or termination_b_type
.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.django
to ~3.2.19
due to CVE-2023-31047
.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.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.18...v1.5.19
Published by bryanculver over 1 year ago
Secret
can be retrieved.JobResult
across common fields: created
, completed
, and status
.Meta.approval_required
is ignored on JobHookReceiver
classes..gitignore
to not track new UI non-source files."<>
./api/dcim/interfaces/(uuid)/
might inadvertently reset the interface's status to Active
./api/users/tokens/(uuid)/
might inadvertently change the token's value.content_type
in Dynamic Groups list view.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.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.17...v1.5.18
Published by bryanculver over 1 year ago
CACHES["default"]["BACKEND"]
via an environment variable NAUTOBOT_CACHES_BACKEND
METRICS_ENABLED
is True
is now "django_prometheus.db.backends.postgresql"METRICS_ENABLED
is True
is now "django_prometheus.cache.backends.redis.RedisCache"packaging
that had been inadvertently omitted.data_scheme
keys in assertInstanceEqual
tests.NautobotUIViewSet
documentation example for case sensitive typos.NautobotUIViewSet
documentation example not including imports.i
or is
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.16...v1.5.17
Published by bryanculver over 1 year ago
This alpha introduces the Namespace concept to IPAM and makes many robust improvements to relationships between models:
⚠️ 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.
block sidebar
from aggregate_list.html and objectchange_list.html. by @HanlinMiao in https://github.com/nautobot/nautobot/pull/3463
Prefix.parent
concrete foreign key to self. by @jathanism in https://github.com/nautobot/nautobot/pull/3452
IPAddress.parent
concrete foreign key to Parent
by @jathanism in https://github.com/nautobot/nautobot/pull/3489
next-2.0
branch for next
upstream tests by @snaselj in https://github.com/nautobot/nautobot/pull/3502
next
into Namespaces Prototype by @bryanculver in https://github.com/nautobot/nautobot/pull/3572
Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-alpha.2...v2.0.0-alpha.3
Published by bryanculver over 1 year ago
slug
or pk
.next-2.0
branches against next
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.15...v1.5.16
Published by bryanculver over 1 year ago
block sidebar
to block header_extra
in page templates (aggregate_list.html
and objectchange_list.html
).block header_extra
in docs/development/templates.md
.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.block sidebar
from page templates (aggregate_list.html
and objectchange_list.html
).block sidebar
from docs/development/templates.md
.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.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.14...v1.5.15
Published by jathanism over 1 year ago
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.
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 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.
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.
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.
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:
If you do not have any Site
and Region
instances in your existing database, running this data migration will do nothing.
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.
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
.
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.
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.
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
.
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.
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
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
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
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
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.
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".
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
Support for RQ and django-rq
, deprecated since Nautobot 1.1.0, has been fully removed from Nautobot 2.0.
django-natural-keys
library.ForeignKeyWithAutoRelatedName
helper class.tags
filters to filter by UUID as well as by slug.--cache-test-fixtures
command line argument to Nautobot unit and integration tests.@extras_features
.slug
field to key
on CustomField model class.key
to enforce that it is valid as a GraphQL identifier.nautobot-server nbshell
command is now based on shell_plus
from django-extensions
.type
field to Prefix
, replacing "Container" status and is_pool
field.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.Job
model uniqueness constraints and slug
field.available_on_device
filter to permit specifying multiple Devices.related_name
values for path endpoints on CablePath
for consistency and readability (dcim_interface_related
to interfaces
, circuits_circuittermination_related
to circuit_terminations
, etc.)related_name
values for device components on Device
for consistency and readability (consoleports
to console_ports
, devicebays
to device_bays
, etc.)related_name
values for device component templates on DeviceType
for consistency and readability (consoleporttemplates
to console_port_templates
, devicebaytemplates
to device_bay_templates
, etc.)DeviceType.instances
to devices
and renamed the corresponding query filters.DeviceRedundancyGroup.members
to devices
.FrontPortTemplate.rear_port
to rear_port_template
.Location.powerpanels
to power_panels
.PowerOutletTemplate.power_port
to power_port_template
.PowerPanel.powerfeeds
to power_feeds
.PowerPort.poweroutlets
to power_outlets
.PowerPortTemplate.poweroutlet_templates
to power_outlet_templates
.Rack.powerfeed_set
to power_feeds
.Rack.group
and Rack.reservations
to rack_group
and rack_reservations
and renamed the corresponding query filters.RackGroup.powerpanel_set
to power_panels
.RearPort.frontports
to front_ports
.RearPortTemplate.frontport_templates
to front_port_templates
.SecretsGroup.device_set
and SecretsGroup.deviceredundancygroup_set
to devices
and device_redundancy_groups
.Tenant.rackreservations
to rack_reservations
.User.rackreservation_set
to rack_reservations
.Interface
from count_ipaddresses
to ip_address_count
.Manufacturer
from devicetype_count
and inventoryitem_count
to device_type_count
and inventory_item_count
.Platform
from virtualmachine_count
to virtual_machine_count
.PowerPanel
from powerfeed_count
to power_feed_count
.Rack
from powerfeed_count
to power_feed_count
.RackReservation
group
filter to rack_group
.tag
filters to tags
for self-consistency.__name__
instead of explicit module names.Interface
and VMInterface
relationship to IPAddress
to many-to-many instead of one-to-many.Aggregate
model to Prefix
with type set to "Container".django-cryptography
.drf-yasg
dependency.Prefix.type
.cable_peer
, assigned_object
, etc.field_class
when filtering FloatField
and DecimalField
model fields.FloatField
and DecimalField
fields in GraphQL.TagFilter
when auto-attached to a FilterSet.TaskResult
from django-celery-results
into JobResult
.RoleField
definition on Role
model mixins.name
field from CustomField model class.manage.py
file from Nautobot repository.regions
and sites
attributes from ConfigContext model class.region
and site
related fields from Serializers for aforementioned model classes.region
and site
related fields from Forms for aforementioned model classes.region
and site
related UI and API Endpoints for aforementioned model classes.region
and site
columns from Tables for aforementioned model classes.CeleryTestCase
and associated calling code as it is no longer needed.Aggregate
and migrated all existing instances to Prefix
.Full Changelog: https://github.com/nautobot/nautobot/compare/v2.0.0-alpha.1...v2.0.0-alpha.2