v3.9 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¶
This release brings several significant additions and changes:
- A new VMware vSphere integration!
- CVE-2022-42969 has been successfully fixed!
- Sync and sync logs are now searchable in the global search!
- The example Jobs now support synchronizing Tags on appropriate objects between Nautobot instances.
- All integrations that utilize the contrib pattern will automatically support Object Metadata being added to their models.
v3.9.0 (2025-06-25)¶
Added¶
- #500 - Added VMWare vSphere Integration.
- #836 - Added
hide_in_diff_viewflag forSyncandSyncLogEntryto hide those models in version control diff view. - #840 - Added support for synchronizing Tags between Nautobot instances for objects that support them in example Jobs.
- #847 - Added
get_orm_attributefunction and tests. - #847 - Added
load_typed_dictfunction and tests. - #850 - Added Sync and SyncLogEntry to the searchable_models definition.
- #853 - Added
orm_attribute_lookuputility function.
Changed¶
- #632 - Enhance contrib to support object metadata.
- #810 - Moved caching in
NautobotAdapterto dedicated class. - #847 - Moved
nautobot_ssot/utils.pytonautobot_ssot/utils/__init__.py - #853 - Changed references in
NautobotAdapterto point to utility functions. - #865 - added closing bracket to example on docs
Fixed¶
- #678 - - Removes Retry dependency, which in turn removes py depencency, thereby fixing CVE https://nvd.nist.gov/vuln/detail/CVE-2022-42969
- #678 - - Re-implements retry decorator
- #784 - Change _handle_to_many_relationship from static method to instance method
- #807 - Redo of fix for Meraki IP duplication bug.
- #830 - Fixed top_level list not being properly generated for software models.
- #831 - Refactored handling of various Nautobot versions and Device Lifecycle Management app handling Software, SoftwareImage, and ValidatedSoftware models being synced.
- #842 - Fixed IP version bug in Meraki integration on AP uplink ports.
- #845 - Fix DNA Center integration to ensure Meraki devices aren't included in the failed device list if the
import_merakisetting is False. - #845 - Fixed duplicate IPAddressToInterface diffs being created due to mask_length being included as identifier in DNA Center integration.
- #859 - Fixed a bug where the cache persisted between sync executions in the Infoblox integration.
Documentation¶
- #856 - Added a note to the developer upgrade documentation to explain the default value for text fields declared with
blank=True, null=False. - #870 - Updated installation steps for vSphere integration.
v3.9.1 (2025-07-09)¶
Release Overview¶
Please note that the behavior in the SNOW integration now is to swallow and log an overview of how many duplicates encountered, and provide file output outlining what duplicates were encountered.
Changed¶
- #874 - Reverted changes in
NautobotModelto be backwards compatible with other integrations. - #874 - Reverted removal of
invalidate_cachemethod inNautobotAdapter.
Fixed¶
- #844 - Fixed job failure if there are duplicate devices in LibreNMS. Will skip device instead.
- #867 - Gracefully swallow ServiceNow exceptions
- #867 - Adds ServiceNow duplicate file reports
- #867 - Fixes ServiceNow comparison filters to only compare against company names with Manufacturer set to True
v3.9.2 (2025-08-08)¶
Added¶
- #860 - Added
nautobot_ssot.utils.orm.get_custom_relationship_association_parametersutility function. - #860 - Added
nautobot_ssot.utils.orm.get_custom_relationship_associationsutility function. - #860 - Added
nautobot_ssot.utils.typing.get_inner_typeutility function.
Changed¶
- #860 - Changed
nautobot_ssot.contrib.adapter.NautobotAdapterto use newormandtypingutility functions.
Fixed¶
- #596 - Handles HTTP 404 exception case for expired A record and PTR reference, and logs as a warning instead of failing the job run.
- #881 - Fixed exception caused by missing secret value when creating a SecretsGroup with Bootstrap.
- #904 - Fixed exception caused by missing software version when creating ValidatedSoftware with Bootstrap.
- #916 - Fixed bootstrap signal DLM checks.
- #921 - Fixed missing Prefix bug in Meraki integration.
- #926 - Fixed issue with metadata_type when contrib models are used without the contrib adapter.
Documentation¶
- #925 - Added Analytics GTM template override only to the public ReadTheDocs build.
v3.9.3 (2025-09-09)¶
Added¶
- #913 - Added the enable_global_search configuration option to control whether the Nautobot global search includes synclogs.
- #938 - Added support for Object Metadata in the Bootstrap integration.
- #948 - Added ExternalIntegration creation to Bootstrap integration.
Fixed¶
- #548 - Improved performance of the SSoT Sync history page by removing an unnecessary log prefetch and deferring large JSON fields.
- #596 - Use required default arg ("msg") instead of kwarg ("message") when using self.job.logger.
- #723 - Fixed
_handle_single_parametermetadata key vs name inconsistency. - #910 - Fixed Service Now caching sys_ids causing objects to not be created.
- #936 - Fixed creation of "Unknown" location when running LibreNMS integration in dry run mode.
- #940 - Fixed error in Citrix ADM integration when attempting to assign an IP Address to an Interface.
- #947 - Fixed Advanced Filters for Infoblox Config and Automation Gateway Management.
- #953 - Fixed an issue in the Cisco DNA Center integration where devices with unmapped platforms were silently skipped during synchronization, resulting in an incomplete inventory
Housekeeping¶
- #954 - Update ruff to target Python 3.9
- Rebaked from the cookie
nautobot-app-v2.5.1.
v3.9.4 (2025-09-18)¶
Release Overview¶
This release is focused on some vulnerabilities being fixed and a bugfix for the Meraki integration.
Security¶
- #968 - https://github.com/advisories/GHSA-mw26-5g2v-hqw3
- #968 - Deepdiff needs to be pinned to >8.6.0, requiring ipfabric to be bumped
Fixed¶
- #962 - Meraki get-organization-devices API may omit notes key in response, changed slice to get() on the dictionary payload.