Release 2.0.1
| Release Number | 2.0.1 |
|---|---|
| Release Date | September 11th, 2026 |
| Tag | 2.0.1 |
Infrahub Sync 2.0.1 is a maintenance release for 2.0.0. Install the package on its own and every module it imports at runtime is present. Synchronize NetBox interfaces in tagged L2 modes, update relationships on an existing Infrahub object, or generate models from a schema read over the API, and each completes correctly.
Bug fixesβ
Synchronize tagged and tagged-all interfaces from NetBoxβ
Run a NetBox synchronization that includes interfaces in tagged or tagged-all 802.1Q mode. These previously failed while being translated to the destination model.
- NetBox
q-in-qmode is refused explicitly, because the example destination schema cannot represent it. - A malformed non-null mode fails at the transform boundary with the offending value named, instead of producing an invalid interface. (#176)
Keep lineage on relationships changed by an updateβ
Attribute source and owner on relationship edges that a destination update adds or changes. Lineage was applied when an object was first created, but edges written by a later update to an existing object carried none, so attribution depended on which run happened to write the edge. (#143)
Generate models from schemas read over the APIβ
Run infrahub-sync generate against a recent infrahub-sdk and get the same annotations as before. Optional attributes and many-relationships are annotated and defaulted correctly again, because get_kind() is duck-typed rather than checked with isinstance against write-side schema classes.
- String attribute defaults are emitted as Python literals, so a default containing a quote, a newline, or a backslash stays valid Python and keeps its exact schema value. (#188, #187)
Read non-string attributes without converting themβ
Read attributes from Infrahub and keep their type. Every non-string attribute value was converted to a string, so an integer or a boolean reached the destination as text. Only IP-related types are converted to strings now. (#130)
Installation and dependenciesβ
Install infrahub-sync into a clean environment and every package the product imports is declared by the package itself, rather than arriving through the dev extra or through another dependency.
requestsandurllib3are runtime dependencies.packaging,pydantic, andtyping-extensionsare declared directly instead of relying on other packages to bring them.- infrahub-sync no longer installs the
infrahub-sdk[all]extra. It declaresjinja2,pyyaml, andtyperdirectly, which are the only packages it used from that extra, so a plain install pulls fewer unrelated packages. The supported SDK range stays>=1.17,<2and infrahub-sdk 1.23.2 is the tested version, so infrahub-sync can be paired with the SDK release an Infrahub server needs. - The
netutilsandpyarrowlower bounds match the oldest versions that work on Python 3.13. The locked and tested diffsync is 2.2.3; the previously locked 2.2.2 was yanked upstream. (#189)
Upgrade notesβ
- If your environment relied on a package that arrived transitively through
infrahub-sdk[all], declare it in your own project. Onlyjinja2,pyyaml, andtyperare still pulled in through infrahub-sync. - Regenerate your sync models with
infrahub-sync generateif you generated them against a recent infrahub-sdk and saw optional or list annotations missing.
Full changelogβ
Changedβ
- infrahub-sync no longer installs the
infrahub-sdk[all]extra, and declaresjinja2,pyyaml, andtyperdirectly. The supported range stays>=1.17,<2, with infrahub-sdk 1.23.2 as the tested version. (#189)
Fixedβ
- Added
requestsandurllib3as runtime dependencies, declaredpackaging,pydantic, andtyping-extensionsdirectly, raised thenetutilsandpyarrowfloors to versions that work on Python 3.13, and locked diffsync 2.2.3 after 2.2.2 was yanked upstream. (#189) - Applied source and owner lineage to relationship edges added or changed during an Infrahub destination update. (#143)
- Fixed NetBox interface synchronization for
taggedandtagged-allL2 modes, refusedq-in-qexplicitly, and made malformed non-null modes fail contextually at the transform boundary. (#176) - Fixed generated DiffSync model annotations for schemas read from the Infrahub API, and emitted string attribute defaults as Python literals. (#188)
- Limited automatic string conversion to IP-related types, so other non-string attribute values keep their type. (#130)
- Restored the
from-netboxname of the shipped NetBox example sync project, which the tutorial work in #140 had renamed. (#147)
Housekeepingβ
- Gave development tools declared without a lower bound one, so a lowest-version resolution can no longer select releases that predate Python 3. The
typer-clifloor matters most: older releases pulltyper-slim, which shadows the realtyperpackage and breaks the CLI. (#189)