v4.5 Release Notes¶
This document describes all new features and changes in the release. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Release Overview¶
- Added opt-in progress logging to the contrib
NautobotAdapter, so large syncs emit periodic "objects loaded" messages to the job log instead of running silently through the load phase. Enable it under withenable_progress_logger: Truein yourPLUGINS_CONFIG(defaults toFalse) and tune how often messages are logged withprogress_logger_interval(number of objects between log lines, defaults to1000;0disables it) - SSoT jobs can now suppress Nautobot's automatic Device/Module component instantiation during a sync. Opt in via a
DataSyncBaseJobclass attribute, thePLUGINS_CONFIGglobal setting, or theSkipAutoComponentCreationcontext manager directly (any source enabling it wins). Default behavior is unchanged for jobs that don't opt in, and the feature degrades gracefully (no-op plus a one-time warning) on Nautobot versions that lack the underlying core extension point. - Added a generic
ObjectMetadataAnnotationtonautobot_ssot.contrib, letting any contribNautobotModelDiffSync model read and write a field's value to NautobotObjectMetadata. Reads are lenient (missing type/row resolves toNone) and prefetched to avoid N+1 queries; writes are strict and idempotent, with None treated as a no-op.
v4.5.2 (2026-07-06)¶
Fixed¶
- #916 - Fixed LibreNMS SSoT crashing with
AttributeError: 'NoneType' object has no attribute 'name'during Nautobot adapter load when a synced device has no Platform assigned, by skipping such devices with a warning instead. - #1277 - Fixed slow performance of the ServiceNow integration when tagging synced objects by replacing per-object saves in
tag_involved_objects()with bulk database operations.
v4.5.1 (2026-07-01)¶
Fixed¶
- #1281 - Fixed
_childrenmappings that reference a model property returning a queryset or manager (such asDevice.all_interfaces) raisingAttributeErrorduring load. Properties returning other types are not yet supported.
v4.5.0 (2026-06-29)¶
Added¶
- #304 - Added configurable logging to log progress when using contrib adapter.
- #1226 - Added
skip_auto_component_creationopt-in for SSoT jobs, suppressing Nautobot's automatic Device/Module component instantiation during sync via Nautobot core'snautobot.apps.dcim.SkipAutoComponentCreationextension point (nautobot/nautobot#9026). - #1249 - Added
ObjectMetadataAnnotationtonautobot_ssot.contrib, letting DiffSync models on theNautobotModelbase read and write a field's value to Nautobot ObjectMetadata. - #1261 - Added the
aristacv_delete_ipaddresses_on_syncsetting to the Arista CloudVision integration to allow for the deletion of IP addresses that are present in Nautobot but not present in CloudVision (defaults to False). - #1275 - Added automatic
sysparm_fieldsselection to the ServiceNow integration so each table load only requests the columns referenced by its mappings, and made the ServiceNow page size (limit) configurable.
Fixed¶
- #NTC-5652 - Change MTU in DNA Center integration to account for 0 as an output from DNAC and save it in Nautobot as None.
- #791 - Fixed two latent bugs in the SSoT contrib adapter and model where custom-relationship error handlers referenced attributes that do not exist (a model instance's
__name__andRelationship.name), raisingAttributeErrorinstead of the intended warning/error message. - #1159 - Fixed Meraki SSoT crashing Nautobot startup with
MultipleObjectsReturnedwhen more than one Platform name contains "Meraki", by looking up the canonicalCisco MerakiPlatform by exact name instead ofname__icontains. - #1205 - Fixed Meraki SSoT assigning the management/primary IP from a Not-Active uplink: an inactive static uplink no longer sets
mgmt_ip, so it cannot shadow an Active uplink or suppress the DHCP management-IP fallback. - #1211 - Fixed Infoblox SSoT sync bug - blanking out Infoblox
commentfield when any field of nautobot Prefix object gets updated - #1222 - Fix Meraki firewall port loading when devices have no uplink IP configured.
- #1235 - Fixed token authentication against on-premise Arista CloudVision portals.
- #1238 - Resolve KeyError in LibreNMS if IP is missing.
- #1239 - Resolve version parsing on newer Citrix devices.
- #1245 - Fixed Arista CloudVision SSoT sync failing when attributes are streamed in multiple gRPC notification frames.
- #1250 - Fixed vSphere SSoT sync crash when more than one
IPAddressshares the primary IP host, by catchingMultipleObjectsReturnedduring primary IP assignment. - #1257 - Moved any non-testing imports of nautobot_ssot.tests.contrib_base_classes.py over to nautobot_ssot.contrib to avoid test dependency loading in a non-dev environment.
- #1258 - Fixed handling children when child attribute is OneToOneField.
- #1261 - Fixed the Arista CloudVision integration attempting to create an IP address that already existed in Nautobot.
- #1274 - Fixed a bug in the LibreNMS integration where the port parameter was not passed to the parent ApiEndpoint class, causing all connections to default to port 443 regardless of the configured port.
- #1275 - Fixed ServiceNow integration silently truncating tables larger than 10,000 rows;
all_table_entries()now paginates through the entire result set. - #1275 - Fixed ServiceNow integration raising a spurious
ObjectNotUpdatedon successful updates; updates now write and verify only the mapped fields and key on the record's knownsys_id, instead of comparing server-managed columns such assys_updated_on.
Housekeeping¶
- #791 - Reorganized the SSoT
contribunit tests into thenautobot_ssot/tests/contrib/subpackage and brought the entirecontribmodule to 100% test coverage. - #1248 - Fixed a test that was failing due to a recent change in Nautobot's next branch for 3.2.0.
- #1248 - Fixed many test cases that were using TransactionTestCase when TestCase was acceptable.
- #1248 - Fixed some of the test cases that were failing when running with --keepdb.
- #1248 - Fixed all test cases to correctly import from nautobot.apps instead of nautobot.core or django.test.
- #1255 - Increased unit test coverage of the core (non-integration)
nautobot_ssotmodules to 100%, adding tests for the SSoT jobs base class, Prometheus metrics, views and detail-page panels, models, template content, utility helpers, custom exceptions, and the app, URL, and navigation integration-loading hooks. - #1255 - Reorganized the jobs tests so shared behavior runs once -- using
TestCaseexcept for the parallel-loading path that requiresTransactionTestCase-- made the Status-dependent test setups self-sufficient so the suite no longer fails when re-run with--keepdb, and replaced flaky wall-clock timing assertions with a deterministic thread-barrier concurrency check that no longer fails intermittently on busy CI runners.