Network Source of Truth & Network Automation Platform
APACHE-2.0 License
Bot releases are hidden (Show)
Published by bryanculver over 1 year ago
JobButton
model to create single click execution buttons in the web UI to run jobs based on a single object.nautobot.dcim
.test_queryset_to_csv
to format data fetched from the model.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.13...v1.5.14
Published by bryanculver over 1 year ago
nautobot_capacity_metrics
.-time
index for ObjectChange records.pyopenssl
in Nautobot dev environment and Docker images to 23.0.0 due to an incompatibility between older versions of pyopenssl
and version 39.x of cryptography
. This is not a direct dependency of Nautobot so it will not auto-update when upgrading. Please update your local environment as needed.cryptography
to 39.0.2. This is not a direct dependency of Nautobot so it will not auto-update when upgrading. Please update your local environment as needed.Location.parent
not populating correctly in the form when editing an existing Location.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.12...v1.5.13
Published by bryanculver over 1 year ago
RelationshipModelFilterSetMixin
to perform a single OR query including select_related
for source_type
and destination_type
vs. two single queries for each source/destination types.GitPython
to 3.1.31.drf-yasg
to 1.21.5. Note: this is automatic for the Nautobot-provided containers, but because our dependency on it goes away in 2.0, it's an optional update for other installations.netutils
to 1.4.1.User
object that arose when CELERY_RESULT_EXTENDED == True
or when enqueue_job
was called from within an existing Job
.get_route_for_model()
logic for the ContentType
and Group
models.nautobot.extras.forms.mixins.CustomFieldModelFilterFormMixin
where the list of custom field names were not being stored on self.custom_fields
.nautobot.utilities.filters.MappedPredicatesFilterMixin
(from which SearchFilter
inherits) that was preventing q
fields from being used in Dynamic Group filters.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.11...v1.5.12
Published by bryanculver over 1 year ago
--cache-test-fixtures
command line argument to Nautobot unit and integration tests.DynamicGroup.objects.get_for_object()
to be a little more efficient.oauthlib
to 3.2.2.cryptography
to 39.0.1.django
to 3.2.18.netutils
constraint from ~1.4.0 to ^1.4.0 to permit semver upgrades.DynamicModelChoiceField
s having a generic default label when one is provided.nautobot.extras.tests.test_api.NoteTest
.netutils
functions in Django templates.oauthlib
to 3.2.2 due to CVE-2022-36087. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.cryptography
to 39.0.1 due to CVE-2023-0286, CVE-2023-23931. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.django
to 3.2.18 due to CVE-2023-24580.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.10...v1.5.11
Published by bryanculver over 1 year ago
CELERY_WORKER_PROMETHEUS_PORTS
configuration settingnautobot_job_duration_seconds
counter metric that reports on job executiondjango
to 3.2.17.CableConnectFormTestCase.test_js_functionality
more resilient and less prone to erroneous failures.dependencies
to the list of valid change fragment types in the documentation.django
to 3.2.17 due to CVE-2023-23969.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.9...v1.5.10
Published by bryanculver 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.
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 (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 (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.
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 (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 (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
, 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
of LocationType
Site. 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.
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.
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.
circuits
app.Tenant
and TenantGroup
filtersets.contact_name
, latitude
, etc.) from Site
model to Location
model to prepare for merging all sites into locations.LocationTypes
and their respective locations based on existing Site
and Region
instances.utilities/filters.py
.Region
, RackGroup
, TenantGroup
, and InventoryItem
models are now based on django-tree-queries
instead of django-mptt
. This does change the API for certain tree operations on these models, for example get_ancestors()
is now ancestors()
and get_descendants()
is now descendants()
.Region
, RackGroup
, and TenantGroup
now provide only the related count of objects (e.g. site_count
for Region
) that are directly related to each instance. Formerly they provided a cumulative total including objects related to its descendants as well._depth
to tree_depth
in the REST API for Region
, RackGroup
, TenantGroup
, and InventoryItem
.child_items
and filter fields child_items
and has_child_items
to children
and has_children
respectively.JobLogEntry.log_object
, JobLogEntry.absolute_url
, ScheduledJob.queue
, and WebHook.ca_file_path
no longer permit null database values; use ""
instead if needed.DeviceRole
, RackRole
, IPAM Role
model and IPAddressRoleChoices
into a single generic Role
model.black
to ~22.10.0
.nautobot.utilities
into nautobot.core
. Refer to the 2.0 migration guide for details.jsonschema
version to ~4.17.0
.mkdocs-include-markdown-plugin
to 3.9.1
.tag
filter on TenantFilterSet
to tags
same as elsewhere.mkdocstrings-python
to 0.8.0.utilities
app to follow new code style.django-taggit
to 3.1.0
.django-tree-queries
to 0.13.0
.rich
to ~12.6.0
.CircuitTermination
, Device
, PowerPanel
, RackGroup
, Rack
, Prefix
, VLANGroup
, VLAN
, Cluster
instances associated with existing Site
model instances to use the newly created corresponding Locations
of LocationType
"Site".prometheus-client
, django-storages
, drf-spectacular
, black
, django-debug-toolbar
, mkdocstrings
, mkdocstrings-python
, pylint
, requests
, selenium
, watchdog
.Circuit
model: type
to circuit_type
, terminations
to circuit_terminations
, termination_a
to circuit_termination_a
, and termination_z
to circuit_termination_z
.circuittermination
to circuit_terminations
on the CablePath
model.group
field to vlan_group
on VLAN model, renamed ipaddresses
to ip_addresses
on Service
model.group
field to tenant_group
on Tenant
model.VLANFactory
to generate longer and more "realistic" VLAN
names.circuits
app.Interface
not raising exception when adding a VLAN
from a different Site
in tagged_vlans
.CableConnectFormTestCase.test_js_functionality
more resilient and less prone to erroneous failures.ObjectChange
records not being migrated and legacy_role__name
not being a property in Role
migrations.BulkEditObjectsViewTestCase.test_bulk_edit_objects_with_constrained_permission
.django-mptt
. Models (Region
, RackGroup
, TenantGroup
, InventoryItem
) that previously were based on MPTT are now implemented using django-tree-queries
instead.circuits
app.NullableCharField
, NullableCharFieldFilter
and MACAddressField
(not to be confused with MACAddressCharField
, which remains) classes.django-rq
dependency and support for RQ workers.pycryptodome
dependency as it is no longer used.NAUTOBOT_CELERY_RESULT_BACKEND
environment variable used to customize where Celery stores task results.CELERY_RESULT_BACKEND
as it is no longer user-serviceable.CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS
as it is no longer user-serviceable.CSS_CLASSES
definitions from legacy ChoiceSets
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.9...v2.0.0-alpha.1
Published by jathanism over 1 year ago
netutils
to ~1.4.0
ScheduledJob
causing celery workers to fail when running scheduled jobs created in versions prior to v1.5.8
. ⚠ NOTE: If your celery workers are failing on startup after upgrading to v1.5.8
, you may need to purge the celery queue with nautobot-server celery purge
or nautobot-server celery purge -Q <queues>
to purge custom queues.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.8...v1.5.9
Published by bryanculver over 1 year ago
nautobot.example.com
instead of testserver
(Django's default) and the test configuration for Nautobot itself sets ALLOWED_HOSTS
to expect nautobot.example.com
. This is intended to protect against issues such as #3065.prefetch_related()
to select_related()
queries. Users should note a performance gain from this change, but note that cacheops is no longer recommended in v1.5 and this change will likely result in invalid data responses if cacheops remains enabled in your environment. Cacheops will be removed entirely in a future release.setuptools
to 65.5.1
to address CVE-2022-40897
. This is not a direct dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.gitpython
to ~3.1.30
to address CVE-2022-24439
.future
to 0.18.3
due to CVE-2022-40899
. 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.7...v1.5.8
Published by gsnider2195 almost 2 years ago
ALLOWED_HOSTS
and change-logging.nautobot_config.py
and restart your Nautobot services: TEMPLATES[1]["OPTIONS"]["environment"] = "jinja2.sandbox.SandboxedEnvironment"
Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.6...v1.5.7
Published by bryanculver almost 2 years ago
clone_fields
definition to Custom Field class.example_plugin
installation before running it.certifi
to 2022.12.7
for CVE-2022-23491
. This is a nested dependency so will not auto-update when upgrading. Please be sure to upgrade your local environment.mkdocs-material
to 8.5.11
.Poetry
lockfile to use new v2 version format (requiring Poetry>=1.3
).poetry
version in nautobot-dev
container to 1.3.1
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.5...v1.5.6
Published by bryanculver almost 2 years ago
tags
field in ConfigContextForm to DynamicModelMultipleChoiceField
.example_plugin
would always be installed.Secret
with an invalid provider
.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.4...v1.5.5
Published by bryanculver almost 2 years ago
Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.3...v1.5.4
Published by bryanculver almost 2 years ago
Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.2...v1.5.3
Published by bryanculver almost 2 years ago
multipart/form-data
support to Job run API.nautobot.apps
module to provide a central location for code that is recommended for use by Nautobot apps (plugins).nautobot.apps
module.LOG_DEPRECATION_WARNINGS
configuration variable and corresponding environment-variable support.DeprecationWarning
.nautobot.dcim.filters.mixins
, nautobot.extras.filters.mixins
, and nautobot.tenancy.filters.mixins
submodules.DEBUG
or LOG_DEPRECATION_WARNINGS
settings).netutils
to ~1.3.0
.pytz.common_timezones
.object_data
when object_data_v2
is not present for both ObjectChange
instances.nautobot.utilities.utils.is_single_choice_field
that was causing valid filters to report as invalid.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.1...v1.5.2
Published by jathanism almost 2 years ago
try/except
block to catch NoReverseMatch
exception in NotesSerializerMixin and return helpful message.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.5.0...v1.5.1
Published by bryanculver almost 2 years ago
Custom fields can now be assigned to a free-text "grouping" to improve usability when a large number of custom fields are defined on a given model. In the UI, fields in the same grouping will be grouped together, and groupings can be expanded/collapsed for display purposes.
Device Redundancy Groups have been added to model groups of distinct devices that perform device clustering or failover high availability functions. This may be used to model whole device redundancy strategies across devices with separate control planes (ex: ASA failover), not devices that share a control plane (ex: stackwise switch stacks), or interface specific redundancy strategies (ex: hsrp). Device Redundancy Groups support grouping an arbitrary number of devices and may be assigned an optional secrets group and one or more optional failover strategies.
A new optional job property task_queues
has been introduced to allow Nautobot to leverage custom celery queues for jobs. This will allow you to send jobs to specific workers based on which queue is selected. This property can be set on the job class and overridden in the job model, similar to other overridable job fields. If task_queues
is not defined on the job class or job model, the job will only be able to use the default queue. A new field has been added to the job run form to allow you to select a queue when you run the job and an optional field task_queue
has been added to the REST API job run endpoint for the same purpose.
The default celery queue name has been changed from
celery
todefault
. If you have any workers or tasks hard coded to usecelery
you will need to update those workers/tasks or change theCELERY_TASK_DEFAULT_QUEUE
setting in yournautobot_config.py
.
nautobot-server generate_test_data
command (#2536)A new management command, nautobot-server generate_test_data
, has been added that can be used to populate the Nautobot database with various data as a baseline for manual or automated testing. This is now used internally by Nautobot's unit testing suite to create a synthetic data set that looks and feels like real data with randomly-generated values. Most importantly, the objects are created with all of the fields fully and correctly populated, to assert that each object in the database is properly exercising all features.
Be very cautious about running this command on your server instance. It is not intended to be used in production environments and will result in data loss.
LocationType
definitions can now be flagged as nestable
. When this flag is set, Locations of this type may nest within one another, similar to how Regions work at present. This allows you to have a variable-depth hierarchy of Locations, for example:
In the above example, only two LocationTypes are defined ("Building Group" and "Building") but the "Building Group" type is flagged as nestable, so one Building Group may contain another Building Group.
Relationships can be marked as being required. By default, relationships are not marked as being required.
To mark a relationship as being required, select "Source objects MUST implement this relationship" or conversely "
Destination objects MUST implement this relationship" from the "Required on" field when editing or creating a
relationship:
In prior versions of Nautobot, database query caching using the django-cacheops
application (aka Cacheops) was enabled by default. This is determined by the default value of the CACHEOPS_ENABLED
setting being set to True
.
Through much trial and error we ultimately decided that this feature is more trouble than it is worth and we have begun to put more emphasis on improving performance of complex database queries over continuing to rely upon the various benefits and pitfalls of utilizing Cacheops.
As a result, the value of this setting now defaults to False
, disabling database query caching entirely for new deployments. Cacheops will be removed entirely in a future release.
Users with existing
nautobot_config.py
files generated from earlier versions of Nautobot will still haveCACHEOPS_ENABLED = True
unless they modify or regenerate their configuration. If users no longer desire caching, please be sure to explicitly toggle the value of this setting toFalse
and restart your Nautobot services.
Added a dynamic filter form that allows users to filter object tables/lists by any field and lookup expression combination supported by the corresponding FilterSet and API.
v1.5.0 is unchanged from v1.5.0-beta.1
DeviceRedundancyGroup
model for representing a logical grouping of physical hardware for the purposes of high-availability.task_queues
job property to support custom celery queues.invoke performance-test
to tasks.py
.factory-boy
as development dependency. Added factories for Tenant, TenantGroup, RIR, and Aggregate models. Updated test runner global setup to use these factories to pre-populate baseline data.OrganizationalModelFactory
and PrimaryModelFactory
base classes.TenancyFilterTestCaseMixin
class.base_site
and subtree
filters to LocationFilterSet
, allowing for filtering Locations by their root ancestor or its Site.nautobot-server generate_test_data
command.TEST_USE_FACTORIES
and TEST_FACTORY_SEED
optional settings.DeviceRole
, DeviceType
, Manufacturer
, and Platform
.FilterTestCases
to find values suitable for testing multiple choice filters.Device
to have device_redundancy_group
relationship, device_redundancy_group_priority
numeric property.ConfigContext
to have ManyToManyField
to dcim.DeviceRedundancyGroup
for the purposes of applying a ConfigContext
based upon a Device
s DeviceRedundancyGroup
membership.django-taggit
dependency to 3.0.0.celery
to default
.django-constance
dependency to 2.9.1; updated Jinja2
dependency to 3.1.2; updated black
development dependency to 22.8.0.djangorestframework
to ~3.14.0
, drf-spectacular
to 0.24.2
.mkdocs
to 1.4.2 and mkdocs-material
to 8.5.8.django-debug-toolbar
to ~3.7.0
coverage
to version 6.5.0.django-mptt
dependency to 0.14.0.GitPython
dependency from 3.1.27 to 3.1.29.ConfigContextFilterForm
s schema
filter form field to support added filter field on ConfigContextFilterSet
.BaseNetworkQuerySet
and IPAddressQuerySet
to search both IPv6 and IPv4 when given search string is ambiguous.test_slug_not_modified
to ensure no collision on new slug source value as well as changing lookup expression from __contains
to __exact
.DeleteObjectViewTestCase.get_deletable_object
to throw a helpful failure message when deletable object not found.psycopg2-binary
dependency from 2.9.3 to 2.9.5.pyuwsgi
minimum version from 2.0.20 to 2.0.21.Pillow
package dependency from 9.2.0 to 9.3.0.LocationType
test case to not attempt to re-parent a LocationType
with descendant Locations
.ConfigContextFilterSet
missing schema
filter but existed on form.Device(Form)TestCase
flaky test setup possibly not finding a DeviceType
with a Manufacturer
with associated Platform
s that is full depth and 1U height.Location(View)TestCase
, RouteTarget(View)TestCase
flaky test setup possibly finding names for csv_data
that might include commas but not escaped.PrefixFactory
may randomly decide to create a child of 2.2.2.2/32
.BaseNetworkQuerySet
and IPAddressQuerySet
only searching non-abbreviated first hextet IPv6 addresses.DynamicFilterLookupExpressionTest
, VirtualChassis(Filter)TestCase
, Cluster(Filter)TestCase
, VirtualMachine(Filter)TestCase
had too narrow of a region lookup for supported tests.RackGroup(Model)Test
, Prefix(Model)Test
, VLANGroup(Model)Test
may randomly choose to update to the same site.Tenant(View)TestCase
, RIR(View)TestCase
may not find deletable objects.VLAN(View)TestCase
may not find enough Site
s with Location
s.latitude
, longitude
clean method for when valid string value entered.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.10...v1.5.0
Published by bryanculver almost 2 years ago
Custom fields can now be assigned to a free-text "grouping" to improve usability when a large number of custom fields are defined on a given model. In the UI, fields in the same grouping will be grouped together, and groupings can be expanded/collapsed for display purposes.
Device Redundancy Groups have been added to model groups of distinct devices that perform device clustering or failover high availability functions. This may be used to model whole device redundancy strategies across devices with separate control planes (ex: ASA failover), not devices that share a control plane (ex: stackwise switch stacks), or interface specific redundancy strategies (ex: hsrp). Device Redundancy Groups support grouping an arbitrary number of devices and may be assigned an optional secrets group and one or more optional failover strategies.
A new optional job property task_queues
has been introduced to allow Nautobot to leverage custom celery queues for jobs. This will allow you to send jobs to specific workers based on which queue is selected. This property can be set on the job class and overridden in the job model, similar to other overridable job fields. If task_queues
is not defined on the job class or job model, the job will only be able to use the default queue. A new field has been added to the job run form to allow you to select a queue when you run the job and an optional field task_queue
has been added to the REST API job run endpoint for the same purpose.
The default celery queue name has been changed from
celery
todefault
. If you have any workers or tasks hard coded to usecelery
you will need to update those workers/tasks or change theCELERY_TASK_DEFAULT_QUEUE
setting in yournautobot_config.py
.
nautobot-server generate_test_data
command (#2536)A new management command, nautobot-server generate_test_data
, has been added that can be used to populate the Nautobot database with various data as a baseline for manual or automated testing. This is now used internally by Nautobot's unit testing suite to create a synthetic data set that looks and feels like real data with randomly-generated values. Most importantly, the objects are created with all of the fields fully and correctly populated, to assert that each object in the database is properly exercising all features.
Be very cautious about running this command on your server instance. It is not intended to be used in production environments and will result in data loss.
LocationType
definitions can now be flagged as nestable
. When this flag is set, Locations of this type may nest within one another, similar to how Regions work at present. This allows you to have a variable-depth hierarchy of Locations, for example:
In the above example, only two LocationTypes are defined ("Building Group" and "Building") but the "Building Group" type is flagged as nestable, so one Building Group may contain another Building Group.
Relationships can be marked as being required. By default, relationships are not marked as being required.
To mark a relationship as being required, select "Source objects MUST implement this relationship" or conversely "
Destination objects MUST implement this relationship" from the "Required on" field when editing or creating a
relationship:
In prior versions of Nautobot, database query caching using the django-cacheops
application (aka Cacheops) was enabled by default. This is determined by the default value of the CACHEOPS_ENABLED
setting being set to True
.
Through much trial and error we ultimately decided that this feature is more trouble than it is worth and we have begun to put more emphasis on improving performance of complex database queries over continuing to rely upon the various benefits and pitfalls of utilizing Cacheops.
As a result, the value of this setting now defaults to False
, disabling database query caching entirely for new deployments. Cacheops will be removed entirely in a future release.
Users with existing
nautobot_config.py
files generated from earlier versions of Nautobot will still haveCACHEOPS_ENABLED = True
unless they modify or regenerate their configuration. If users no longer desire caching, please be sure to explicitly toggle the value of this setting toFalse
and restart your Nautobot services.
Added a dynamic filter form that allows users to filter object tables/lists by any field and lookup expression combination supported by the corresponding FilterSet and API.
DeviceRedundancyGroup
model for representing a logical grouping of physical hardware for the purposes of high-availability.task_queues
job property to support custom celery queues.invoke performance-test
to tasks.py
.factory-boy
as development dependency. Added factories for Tenant, TenantGroup, RIR, and Aggregate models. Updated test runner global setup to use these factories to pre-populate baseline data.OrganizationalModelFactory
and PrimaryModelFactory
base classes.TenancyFilterTestCaseMixin
class.base_site
and subtree
filters to LocationFilterSet
, allowing for filtering Locations by their root ancestor or its Site.nautobot-server generate_test_data
command.TEST_USE_FACTORIES
and TEST_FACTORY_SEED
optional settings.DeviceRole
, DeviceType
, Manufacturer
, and Platform
.FilterTestCases
to find values suitable for testing multiple choice filters.Device
to have device_redundancy_group
relationship, device_redundancy_group_priority
numeric property.ConfigContext
to have ManyToManyField
to dcim.DeviceRedundancyGroup
for the purposes of applying a ConfigContext
based upon a Device
s DeviceRedundancyGroup
membership.django-taggit
dependency to 3.0.0.celery
to default
.django-constance
dependency to 2.9.1; updated Jinja2
dependency to 3.1.2; updated black
development dependency to 22.8.0.djangorestframework
to ~3.14.0
, drf-spectacular
to 0.24.2
.mkdocs
to 1.4.2 and mkdocs-material
to 8.5.8.django-debug-toolbar
to ~3.7.0
coverage
to version 6.5.0.django-mptt
dependency to 0.14.0.GitPython
dependency from 3.1.27 to 3.1.29.ConfigContextFilterForm
s schema
filter form field to support added filter field on ConfigContextFilterSet
.BaseNetworkQuerySet
and IPAddressQuerySet
to search both IPv6 and IPv4 when given search string is ambiguous.test_slug_not_modified
to ensure no collision on new slug source value as well as changing lookup expression from __contains
to __exact
.DeleteObjectViewTestCase.get_deletable_object
to throw a helpful failure message when deletable object not found.psycopg2-binary
dependency from 2.9.3 to 2.9.5.pyuwsgi
minimum version from 2.0.20 to 2.0.21.Pillow
package dependency from 9.2.0 to 9.3.0.LocationType
test case to not attempt to re-parent a LocationType
with descendant Locations
.ConfigContextFilterSet
missing schema
filter but existed on form.Device(Form)TestCase
flaky test setup possibly not finding a DeviceType
with a Manufacturer
with associated Platform
s that is full depth and 1U height.Location(View)TestCase
, RouteTarget(View)TestCase
flaky test setup possibly finding names for csv_data
that might include commas but not escaped.PrefixFactory
may randomly decide to create a child of 2.2.2.2/32
.BaseNetworkQuerySet
and IPAddressQuerySet
only searching non-abbreviated first hextet IPv6 addresses.DynamicFilterLookupExpressionTest
, VirtualChassis(Filter)TestCase
, Cluster(Filter)TestCase
, VirtualMachine(Filter)TestCase
had too narrow of a region lookup for supported tests.RackGroup(Model)Test
, Prefix(Model)Test
, VLANGroup(Model)Test
may randomly choose to update to the same site.Tenant(View)TestCase
, RIR(View)TestCase
may not find deletable objects.VLAN(View)TestCase
may not find enough Site
s with Location
s.latitude
, longitude
clean method for when valid string value entered.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.10...v1.5.0-beta.1
Published by bryanculver almost 2 years ago
nautobot-server test ...
./opt/nautobot/nautobot_config.py
in final
Docker images.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.9...v1.4.10
Published by HanlinMiao almost 2 years ago
NautobotUIViewSet
as the first approach for the Adding Web UI Views
section.nautobot-dev
images to use the same default nautobot_config.py
as the published nautobot
images, instead of using the Nautobot core development nautobot_config.py
file.development/docker-compose.build.yml
to development/docker-compose.final.yml
to better reflect its meaning.ContentTypes
in the UI./projects/core
in the url path to link correctly.TreeNodeMultipleChoiceFilter
.site_url
setting for MkDocs.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.8...v1.4.9
Published by bryanculver almost 2 years ago
settings.py
, so that they will be recognized even when using a minimal nautobot_config.py
or one that was not generated by nautobot-server init
.nautobot-server init
.SECRET_KEY
.UpdateObjectViewTestCase
.settings.py
to more closely align to the documentation. If you're using a configuration file generated by nautobot-server init
, these changes should have no impact, but if you have a manually crafted configuration file, please verify that the configuration of your system is still as expected after upgrading, with a particular focus on the database configuration, SECRET_KEY
, and LOGGING
.LOGGING
configuration for virtualenv installs to be the same as it is for Nautobot's published Docker images.nautobot-server init
to have less redundancy with Nautobot's built-in settings.py
.django-health-check
from 3.16.5 to 3.16.7.psycopg2-binary
from 2.9.3 to 2.9.4.coverage
from 6.4.2 to 6.4.4.invoke
from 1.7.1 to 1.7.3.mkdocs-material
from 8.4.2 to 8.4.4.DynamicGroup
not properly filtering by Region
or Location
.nautobot_config.py
that was not generated from nautobot-server init
.invoke buildx
.nautobot/docs/plugins/development.md
.Django
minimum version to 3.2.16 due to CVE-2022-41323.Full Changelog: https://github.com/nautobot/nautobot/compare/v1.4.7...v1.4.8