0.24.14¤
BUGS¤
- Fixed Netbox
get_interfacesraisingKeyErrorwithcache="force"when a requested interface was missing from the cached device data. Incomplete cache entries now trigger a fresh fetch. - Fixed Netbox
get_topologyignoringdevice_regexbecause it used an unsupported API filter. Device selection now usesname__regex, while directly connected neighbors remain included in the topology.
FEATURES¤
- Added Netbox
move_iptask to move all source-interface IP addresses to another device interface, with dry-run, branching, and NFCLI support. Source primary references are cleared;is_primary=Truereplaces destination primaries with moved addresses. - Added
move_ipsupport to Netboxdesign_deploythrough top-level and nested interface IP address wrappers.
ENHANCEMENTS¤
- Enhanced NFCLI
show norfab workerswith a compact table showing service, status, uptime, RAM, CPU, and total retained jobs, using readable column titles. Workerget_statsnow includes total job counts and counts by status. - Removed obsolete FastAPI
/api/jobhandlers and unused job response models. Synchronous/api/job/runand generated service-task endpoints remain available. - Refactored
sync_vrrpto support shared VIP addresses across VRFs, normalize VIP roles tovrrp, and addedvip_use_vrf=Falseto optionally assign new VIPs to an existing VRF. Bulk updates reduce API requests; dry-run previews retain the per-device action structure used by sync orchestration. - Updated dependency pins:
pyzmq: 27.1.0 -> 27.2.0.tornado: 6.5.7 -> 6.5.10.pydantic: 2.13.4 -> 2.14.1.orjson: 3.11.9 -> 3.13.0.python-dotenv: 1.2.2 -> 1.2.4.gitpython: 3.1.61 -> 3.2.1.nornir: 3.5.0 -> 3.6.0.napalm: 5.1.0 -> 5.2.0.netmiko: 4.7.0 -> 4.8.0.nornir-napalm: 0.5.0 -> 0.6.0.nornir-scrapli: 2025.1.30 -> 2026.10.13.ntc-templates: 9.2.0 -> 9.3.0.lxml: 6.1.1 -> 6.1.3.mcp: 1.28.1 -> 1.30.0.robotframework: 7.4.2 -> 7.5.langchain: 1.3.14 -> 1.4.6.langchain-core: 1.5.1 -> 1.6.12.langchain-openai: 1.4.1 -> 1.7.2.langchain-anthropic: 1.5.2 -> 1.7.6.langchain-mcp-adapters: 0.3.0 -> 0.3.2.langgraph: 1.2.9 -> 1.2.16.ollama: 0.6.2 -> 0.6.3.fastembed: 0.8.0 -> 0.9.0.qdrant-client: 1.18.0 -> 1.19.1.datamodel-code-generator: 0.71.0 -> 0.85.0.langgraph-checkpoint-sqlite: 3.1.0 -> 3.1.2.fastapi: 0.140.0 -> 0.143.3.uvicorn: 0.51.0 -> 0.54.0.pygments: 2.19.2 -> 2.21.0.
0.24.13¤
BUGS¤
- Fixed Netbox
create_ip, including calls fromdesign_deploy, allocating another address when the requested interface already had an IP within the selected prefix with an empty or different description. Interface reuse now prefers an exact description match, otherwise reuses the sole candidate, including anycast and VIP addresses. Ambiguous candidates fail instead of allocating another address. -
Fixed Netbox
create_ipreporting a newly allocated address as unchanged when no subsequent metadata or device updates were needed. The task now preserves its created status sodesign_deployincludes the address in its creation results. -
Fixed NFCLI Nornir diagrams producing empty graphs because platform filters used template filenames, collected output used the wrong TTP template name, and template command settings such as prompt preservation were ignored. Platform filters now accept strings and lists with case-insensitive matching across operating systems, and collection skips platforms with no matching hosts.
ENHANCEMENTS¤
- Netbox
sync_allandcheck_device_syncnow expose the same nine sync categories, including BGP communities and excluding MAC addresses. Per-device results retain every category, withFalsefor failures andNonefor disabled or unexecuted stages. Both tasks return child dry-run diffs keyed by category, and drift checks propagate child failures and failed resources. Standalone MAC address synchronization remains available.
0.24.12¤
BUGS¤
- Fixed Netbox worker startup failing with
AttributeErrorwhenssl_verifyis enabled or omitted. Removed the unsupported urllib3enable_warningscall; SSL warnings are only disabled whenssl_verifyisFalse. - Fixed client job dispatch omitting the configured timeout from worker requests, causing workers to use a 60-second fallback. Workers now receive the submitted timeout, preventing premature timeout checks during long-running tasks such as Netbox
design_deployand its nested IP allocations. - Fixed generated FastAPI task endpoints passing request-body
timeoutas a task argument instead of a job option. The timeout now controls job execution and client waiting, defaulting to 600 seconds. - Removed the unused
retryjob option from generated Netbox FastAPI request schemas; it did not control job result polling.
ENHANCEMENTS¤
- Added
Job.check_timeout()method to NorFab job object - Netbox
design_deploychecks the job timeout at preparation and collection boundaries, stops with a timeout error, and retains completed collection results. Running calls are not interrupted.
0.24.11¤
BUGS¤
- Fixed Netbox
sync_vrrprejecting a later-discovered peer because its VIP was already assigned to another device's FHRP group. The task now discovers groups through VIP ownership and reuses groups with matching VIP, VRRP ID, protocol, and authentication. Groups with peers outside the selected devices retain their existing names.
0.24.10¤
ENHANCEMENTS¤
- Netbox
design_deploymatches existing device roles by slug, using an explicit slug when supplied or the existingslugifyutility on the role name. Name case differences now reuse the matching role. - Netbox
design_deployconnection records accept a tenant name string, such astenant: demo, for cable creation and updates. Existing tenant reference dictionaries remain supported. - Netbox
create_bgp_peeringaccepts an existing tenant name in single-session mode and individual bulk entries, including design peerings. Reverse sessions inherit the tenant; existing sessions remain unchanged. - Containerlab
deploy_netboxaccepts an optionalbranchargument to build a lab topology from devices and connections in a named NetBox branch. - Netbox
design_deployconfig contexts accept atenantslist of tenant names, resolving them to IDs and adding associations on updates. Unknown tenant names produce an error. - Nornir
nornir_inventory_load_containerlabacceptsload_netboxas a boolean or dictionary of Netbox inventory options to enrich imported host data while preserving Containerlab connection settings. Enabled loading requests all supported host data by default, ignoring worker Netbox settings; dictionaries override these defaults. Optionalload_netbox_branchandload_netbox_instanceautomatically enable loading and select the branch and instance, overriding Netbox options. Dry runs can preview the enriched inventory. The task docstring documents every argument, its default, enrichment options, and inventory update behavior. - NFCLI
netbox sync allaccepts an inline JSON object forsync-kwargs, alongside existing file URLs.
BUGS¤
- Fixed NetBox
get_containerlab_inventoryignoring tenant selection when NetBox does not recognize thetenant__namedevice filter. The task now resolves the tenant by name and filters by tenant ID, including for branch reads. - Fixed Netbox
create_prefixdry-run next-available allocation rejecting suitable ranges when the first available range was too small. The search now checks all returned ranges and selects the first child that fits the requested prefix length, using that range's network address instead of the parent address. This also fixes the availability check used bycreate_ipwithmask_len. - Fixed Netbox
design_deployraising a missing-site error when updating an existing device without a site in its design record. Omitted site preserves the existing assignment. - Fixed Containerlab
deploy_netboxreusing port mappings from nodes with the same name in other labs. Port mappings are now reused only from the target lab. - Fixed Containerlab lab-name completion emitting inspection progress events in NFCLI. The
get_running_labslookup now performs silent inspection. - Fixed Containerlab
inspectraising a TypeError when a failed inspection returned no result.destroy_labnow preserves the underlying inspection errors.
0.24.9¤
ENHANCEMENTS¤
- Netbox
design_deploysupportsdry_run_renderto return rendered design text before YAML parsing, flattening, validation, or deployment, withdry_run=Truein the result. Dictionary designs return unchanged. - Netbox
design_deploymatches devices by name only, allowing site and tenant updates for uniquely named devices. Tenant is used only to disambiguate duplicate names; unresolved matches fail instead of creating another device.
0.24.8¤
BUGS¤
- Fixed Netbox
sync_device_interfacesclearing interface mode without clearing existing VLAN assignments. The update now clears the untagged VLAN and tagged VLAN list in the same request. - Fixed Netbox
sync_device_ipreporting duplicate non-shared IP errors for parsed live anycast addresses. Discovered anycast host addresses now extend the task's anycast ranges before overlap reconciliation.
ENHANCEMENTS¤
- Netbox
sync_device_interfacessupports optionalbatch_fallbackto retry failed create and update batches one interface at a time, report per-interface errors in results, logs, and events, and continue with subsequent bulk batches. Defaults toFalse. - Netbox
create_asnreuses range allocations by role and any supplied site. Explicit ASN numbers take precedence. With a range, role/site lookup takes precedence over description lookup. No match allocates the next available ASN. Multiple matches raise an error. - Netbox
design_deploysupports nestedcreate_asnwrappers in BGP peeringlocal_asandremote_asfields, allocating or reusing ASNs before session creation.
0.24.7¤
ENHANCEMENTS¤
- NetBox
design_deployextracts named VLAN definitions from nested and top-level L2VPN terminations and deploys them before attachment. - NetBox
design_deploysupportsqueryfilters in VRF and L2VPN import/export route-target lists to attach existing matches. - NetBox object and multiobject custom fields resolve IP addresses by address, prefixes by prefix, BGP communities by value, circuits by CID, and device types by model. Other related objects use name; references must match exactly one object. The ACME design demonstrates single and multiple IP references on a device using dedicated seeded custom fields and IP addresses.
BUGS¤
- Fixed NetBox
sync_vlanssubmitting duplicate names for different VIDs in the same scope. Later conflicting changes are skipped before bulk writes, and skipped creations are removed from interface targets.
0.24.6¤
BUGS¤
- Fixed NetBox
create_bgp_peeringASN queries using a role name directly as a NetBox filter. Therolevalue inlocal_as_queryandremote_as_queryis now slugified before lookup. - Fixed NetBox
create_bgp_peeringattempting to create existing sessions when their names differ and repeated sessions within one bulk request. Sessions now match by device name, local and remote IP addresses, and local and remote ASN numbers before resolving object references. - Fixed NetBox
create_bgp_peeringfailing the entire task when a requested device does not exist. Existing-session lookup now excludes unknown devices so their sessions are skipped with an error.
ENHANCEMENTS¤
- NetBox
design_deploynow creates or updates top-level and inline BGP peer groups before peerings. BGP peering import and export policies now accept names as well as inline dictionaries. - NetBox
create_bgp_peeringchecks for duplicate sessions using device names, IP addresses, and ASN numbers before resolving object references.
CHANGES¤
- NetBox
design_deploynow defaults BGP peerings tocreate_reverse: false; set it totrueto create the reverse session.
0.24.5¤
BUGS¤
- Fixed inventory construction from a dictionary consuming the caller's configuration. The same dictionary can now be reused to create multiple inventories.
- Invalid inventory hooks now fail inventory loading with the attach point and function in the error, preventing startup without a configured hook.
- Fixed NetBox
design_deployfailing to flatten route-target custom function records without aname. Custom function records in route targets, VRRP groups, and console and power port collections now pass through flattening unchanged. - Fixed NetBox
design_deploylookup preparation treating custom function records as ordinary objects. Every ordinary top-level collection can now mix object definitions and custom functions without requiring the custom records to supply object lookup fields. - Fixed NetBox
design_deploydry runs reporting a device local context update for devices that do not yet exist and were skipped. - Fixed NetBox
sync_bgp_peeringsfailing after creates when matched NetBox BGP sessions have no name. Sync now updates all matched sessions by NetBox ID, andupdate_bgp_peeringaccepts IDs in bulk updates while retaining name-based selection. - Fixed NetBox
create_ipleaving a device's primary IP unchanged whenis_primary=Trueis requested for an IP already assigned to its interface. The task now sets the matching IPv4 or IPv6 primary IP without saving an unchanged IP record. - Fixed NetBox
create_ipignoring the requested IP status. New and existing IP addresses now receive the requested status when it differs from their current value. - Fixed starting an existing FakeNOS network loses control of the old process issue
ENHANCEMENTS¤
- NetBox
create_ipnow includes link peer allocation errors in its result after allocating the local IP, including errors raised by the peer task.
0.24.4¤
ENHANCEMENTS¤
- NetBox
create_bgp_peeringnow usesdefaultin generated session names when no VRF is supplied. This changes the name only; it does not assign a VRF to the session. - NetBox
create_bgp_peeringnow accepts separatelocal_as_queryandremote_as_queryNetBox ASN filters, including per-session filters in bulk requests. Device data paths throughasn_sourceare no longer supported. - NetBox
create_bgp_peeringnow acceptslocal_ip_queryandremote_ip_queryfilters to find existing IP addresses, including by device and interface names, before creating individual or bulk sessions. - NetBox
sync_device_ipnow allows duplicate VIP addresses across interfaces in one sync, matching anycast behavior. The VIP role may come from live data or an existing NetBox IP. - NetBox
create_ipnow supports one-basedip_indexselection, including both usable addresses of a /31. Existing interface and VRRP-group assignments are reused before the index is considered. An indexed address already in NetBox can be duplicated for the anycast or VIP role. Withoutip_index, normal allocation uses the next available address and sets the requested role.
0.24.3¤
BUGS¤
- Fixed NetBox
check_device_syncreporting devices out of sync when neither the live device nor NetBox has VRRP assignments.
ENHANCEMENTS¤
- NetBox
sync_vrrpnow includes NetBox-only assignments in the diff'sdeletelist, so dry runs andcheck_device_syncreport VRRP drift. Regular sync runs leave those assignments in NetBox and report no applied deletions. - NetBox
create_asnnow adds supplied sites, tags, and custom-field list values to an existing ASN without removing its current values. Object and multiobject custom fields accept related object names or IDs; missing or ambiguous names fail. - NetBox
create_ipnow resolves names in object and multiobject custom fields and adds new custom-field list values when reusing an existing IP address. - NetBox
create_prefixnow resolves names in object and multiobject custom fields and adds new tags and custom-field list values when updating an existing prefix. - NetBox
create_vlannow resolves names in object and multiobject custom fields and adds new tags and custom-field list values when updating an existing VLAN. - NetBox
create_bgp_peeringnow resolves named object and multiobject custom-field references for new sessions. A session that already exists is reported underexistsand left unchanged. - NetBox
update_bgp_peeringnow adds supplied tags and custom-field list values to existing sessions, resolves named custom-field object references, and includes these changes in dry-run diffs. - NetBox
design_deploynow creates and updates L2VPNs and their interface or VLAN terminations, accepts inline L2VPN route targets and terminations, and deduplicates route targets by name. Its processors resolve named object and multiobject custom-field references on creates and updates; updates add tags, custom-field list values, and supported relationship members such as ASN sites, VRF route targets, interface VLANs, BGP policies, and config context sites. Designs can usecreate_bgp_peeringfor new sessions andupdate_bgp_peeringfor existing ones.
0.24.2¤
ENHANCEMENTS¤
- NetBox
check_device_syncnow accepts per-tasksync_kwargsinline or from annf://YAML file, allowing each dry-run synchronizer's filtering, mapping, and comparison options to be configured independently. -
NetBox
create_prefixcan associate an existing VLAN usingvlan(VID) andvlan_group(group name), including updates and dry-run diffs. Both arguments are required together; a site cannot replace the VLAN group. -
NetBox
create_ipacceptsvrrp_groupto allocate and reuse virtual IP addresses assigned to an existing VRRP group by name, with dry-run support.
BUGS¤
- Fixed NetBox IP address synchronization reporting duplicate-IP conflicts for virtual addresses already assigned to FHRP groups.
- Fixed NetBox BGP peering synchronization filtering existing NetBox sessions before five-tuple identity comparison or collapsing same-name sessions, which could classify an existing session as a create instead of an update. Synchronization now reads every NetBox session directly, keys both datasets by the device, local address, local ASN, remote address, and remote ASN tuple, and applies session filters only to live data.
- Fixed NetBox VRF synchronization reporting route-target and routing-policy updates with identical old and new values when NetBox already contained every live value plus additional associations. Additive associations are now merged before comparison, so NetBox-only values are retained and the VRF is reported as in sync.
-
Fixed NetBox BGP peering synchronization silently accepting requested devices that do not exist in NetBox. Missing devices are now reported while valid devices in the same request continue to synchronize.
-
Fixed IPv4 /32 and IPv6 /128
create_ipallocations with default peer settings by automatically skipping peer creation and peer-subnet reuse.
CHANGES¤
- NetBox
sync_device_ipnow excludes live addresses labelledvrrp,glbp,hsrp, orcarp, as well as matching NetBox IPs assigned to non-interface objects. FHRP synchronization tasks own those addresses;sync_vrrpcreates or reuses VRRP IPs and assigns them to FHRP groups. - NetBox
sync_allnow runssync_vrrpafter IP address synchronization and before BGP peering synchronization. - NetBox
get_bgp_peeringsnow reports an error when multiple BGP sessions on a device share the same name. Its name-keyed response keeps the first session and skips later duplicates. - Rewrote the Netbox design deployment engine around ordered object handlers and bulk pynetbox creates and updates, with nested device definitions, next-available allocations, custom functions, and configuration contexts. Previous design syntax is not backward compatible. See the design deployment documentation.
- NetBox
create_ipnow interpretsrolein aprefixfilter dictionary as a role name instead of a slug, resolves it torole_id, and reports an error if the role does not exist. Existing filters using role slugs must use the corresponding role names.
0.24.1¤
ENHANCEMENTS¤
- NetBox VRF synchronization now exits early when the complete diff contains no actionable changes, avoiding unnecessary approval and write preparation for already synchronized resources. Live results use a defined action-summary structure and include every resolved NetBox device in the interface section.
- NetBox device inventory synchronization live results now use the shared typed action-summary structure per device.
- NetBox interface synchronization live results now use the shared typed action-summary structure per device.
- NetBox MAC address synchronization live results now use the shared typed action-summary structure per device, including an explicit empty
deletedlist. - NetBox IP address synchronization live results now use the shared typed action-summary structure per device, including an explicit empty
deletedlist. - NetBox prefix synchronization live results now use the shared typed action-summary structure, including an explicit empty
deletedlist. - NetBox VLAN synchronization live results now use typed action-summary mappings for VLAN scopes and device interfaces.
- NetBox VRRP synchronization live results now use the shared typed action-summary structure per device.
- NetBox BGP peering synchronization live results now use the shared typed action-summary structure per device.
- NetBox BGP ASN synchronization live results now use the shared typed action-summary structure for global actions.
- NetBox BGP community synchronization live results now use the shared typed action-summary structure for route targets and plugin communities.
- NetBox leaf synchronization tasks now exit before approval and write preparation when their finalized diff contains no actionable create, update, or delete operations.
- NetBox
check_device_syncnow evaluates canonical task diffs and includes VLAN, prefix, BGP community, route-target, and VRRP drift in its read-only per-device assessment. MAC address checking was removed from this task.
BUGS¤
- Fixed NetBox interface synchronization attempting to change a cabled interface to type
virtual. The rejected transition is now reported as an error while unrelated interface updates continue. - Fixed NetBox IP address synchronization failing when a matching IP is assigned to a non-interface object, such as an FHRP group. IP role resolution now handles the missing interface name while preserving anycast detection.
0.24.0¤
FEATURES¤
- Added NetBox design deployment using validated YAML and Jinja2 templates, with reusable includes, custom functions, allocations, nested objects, and the
netbox design deployNFCLI command.
ENHANCEMENTS¤
- NetBox VLAN synchronization now validates region-scoped VLAN groups against up to five levels of the device site's region hierarchy.
- NetBox VLAN synchronization now silently prefers descriptive live VLAN names over autogenerated
VLAN<VID>names instead of reporting the discarded autogenerated name as a conflict. - NetBox VLAN synchronization now ignores empty live descriptions when another device reports a non-empty description for the same VLAN.
BUGS¤
- Fixed NetBox interface synchronization assigning parsed parent relationships to interfaces whose physical type is preserved from NetBox.
- Fixed NetBox BGP community synchronization converting an unset route-target or community name custom field into the literal
"None"string before appending live community names. - Fixed NetBox VLAN synchronization failing an entire bulk write when a proposed VLAN name already exists in the same group or site. Conflicting VLAN creations and updates are now reported clearly and skipped while unrelated changes continue.
0.23.7¤
BUGS¤
- Fixed open connections left behind when Nornir runtime hosts were deleted or replaced, including hosts loaded from NetBox. Create, delete, and load actions now use the Nornir Salt
connectionstask to close connections for all hosts before changing the inventory.
ENHANCEMENTS¤
- NetBox sync tasks now include failed Nornir devices in
resources_failed, including throughsync_all, while preserving results from devices that succeeded. - Added
open_file_descriptors,tcp_sockets, andthreadsprocess stats to worker, broker, and client monitoring.
0.23.6¤
BUGS¤
- Fixed
NorFab.startworker-list normalization to preserve topology dictionary entries and theirdepends_onmetadata instead of calling string methods on them. - Replaced idle worker and client SQLite job polling at ten queries per second with event-driven wake-ups, and reduced idle worker and FakeNOS command-queue wake-ups from ten per second to one, without delaying queued work.
- Limited every marker-based Docker test runner to the workers required by its suite instead of starting the complete shared test topology.
- Fixed Nornir workers starting both a base watchdog and a Nornir watchdog. Watchdogs now use one interruptible interval wait instead of waking ten times per second to accumulate elapsed time.
- Fixed
NorFab.startignoring explicitrun_broker=Falseandrun_workers=Falseoverrides when constructor defaults enabled those components, preventing unintended broker and worker startup. - Fixed
NorFabinstances sharing mutable worker-process and plugin registries, preventing one instance from observing or destroying another instance's runtime state. - Prevented repeated
NorFab.start()calls and attempts to restart a destroyed instance, avoiding ambiguous incremental startup and partially initialized runtime state. A failed startup attempt now requires constructing a newNorFabinstance before retrying. - Added fail-fast Pydantic validation for circular worker dependencies in topology inventory before broker or worker startup.
- Fixed FileSharing worker and client
nf://path validation to reject traversal using Windows-style backslashes on Linux and resolve symbolic links before enforcing publication and download directory boundaries. - Fixed the FileSharing
walktask returning URLs with an extra slash, such asnf:///filesharing/file.txt, when running on POSIX systems.
ENHANCEMENTS¤
- Batched FastAPI task discovery so all new routes are registered before OpenAPI is regenerated once per discovery cycle. Schema regeneration no longer repeats FastAPI application setup or adds duplicate documentation routes.
- Staggered worker process creation by a configurable
topology.workers_start_interval(default0.5seconds) to reduce the CPU burst caused by importing every service stack simultaneously. Set it to0to retain fully parallel startup. FastAPI's Uvicorn readiness check also uses a less aggressive polling interval. - Added an idle NorFab Docker Compose service with one worker for every configured test service and a
docker-profile-idleInvoke task that monitors CPU, memory, and block I/O over a configurable period, reports stability against configurable thresholds, saves CSV samples, and always removes the profiling container. - Added
NORFAB_INVENTORY_DIRsupport to NFCLI. When--inventoryis omitted, the variable identifies the directory containinginventory.yamland supplies the NorFab base directory, allowing commands such asnfcli -cto work consistently inside test containers. - Added shared ordered
interface_maprules to NetBox IP synchronization so live interface names can be mapped before filtering, role inference, and IP assignment lookup.
0.23.5¤
BUGS¤
- Fixed NetBox anycast IP synchronization to reuse an unassigned IP record only once per sync, creating separate records for later device assignments within same sync.
- Fixed NetBox VLAN, VRF, and interface synchronization to treat empty downloaded VLAN or interface maps as no mapping rules instead of failing Pydantic validation.
- Updated NetBox IP and prefix synchronization for dictionary-shaped TTP interface addresses, including parsed IP role reconciliation and unassigned VRRP address creation for later FHRP-group synchronization.
0.23.4¤
BUGS¤
- Fixed NetBox bulk sync failure handling to mark tasks failed, stop later
sync_allstages, and preserve results from batches completed before an error, including BGP peering synchronization. - Fixed an invalid exception reference in NetBox IP allocation fallback handling.
- Fixed NetBox VLAN synchronization to preserve an existing VLAN name when live data only supplies the generated
VLAN<VID>name. - Restored live 802.1Q mode reconciliation in
sync_device_interfaces, including access interfaces without VLAN assignments, while keeping tagged and untagged VLAN membership insync_vlans. - Fixed Nornir watchdog connection tracking to remove stale hosts from a stable dictionary snapshot and record connection-use timestamps under the task's existing connection lock before it is released. Dry-run tasks no longer update connection-use timestamps.
ENHANCEMENTS¤
- Added configurable
batch_sizehandling to all NetBox sync operations that perform bulk writes, covering device inventory, interfaces, IPAM, VLAN, VRF, and BGP resources. Bulk creates, updates, and interface deletes use sequential requests of 1000 objects by default, accept any positive integer override, and report progress for each batch. - Automatic HTTP retries no longer include POST requests, avoiding repeated create operations when the outcome of a timed-out request is uncertain.
0.23.3¤
CHANGES¤
- Moved VLAN creation, attributes, tagged and untagged membership, and VLAN-derived interface mode from
sync_device_interfacestosync_vlans. The VLAN task uses the sharedinterface_maprules and returns separatevlansandinterfacesdiffs. - VLAN membership updates are additive: empty live lists preserve NetBox assignments, except that native VLANs can be replaced. The first matching
vlan_maprule applies to a VLAN and all its memberships. Interface mapping uses substring containment; if multiple names map to one interface, only the first selected name from a resolved VLAN is processed. Q-in-Q service VLAN assignments are not supported. - Invalid memberships and missing VLAN groups are reported without stopping unrelated VLAN synchronization. Device scopes and VLAN groups are fetched in bulk, as are VLAN creations and attribute updates. If devices report different names for one VLAN, the first descriptive name takes precedence over
VLAN<VID>. - Removed
vlan_group,vlan_map,require_vlan_group, andignore_vlansfromsync_device_interfacesand its NFCLI command. Briefget_interfacesoutput no longer includes tagged or untagged VLAN fields. sync_allnow creates interfaces before assigning VRFs or VLANs, and stops before later stages if VLAN synchronization fails. Per-device VLAN results contain only that device's interface actions.check_device_syncnow includes VRF object and interface-assignment drift.- Moved interface VRF assignment to
sync_vrfs, using the TTP getter's normalized address-family and interface data. Results separatevrfs,route_targets, and per-deviceinterfacesdiffs. Matching assignments are reported as in sync; changed assignments are updated after missing VRFs are created. Interface, VLAN, and VRF synchronization share the sameinterface_maprules. - Missing route targets appear in VRF dry-run and approval plans; created targets appear in live results. VRF route-target IDs are resolved and cached after the diff. Duplicate same-name VRFs still resolve to the lowest ID, with a warning event and log message.
- Added additive IPv4/IPv6 import and export BGP routing-policy associations through configurable multi-object VRF custom fields. Missing policies appear in plans, are created before VRF writes, and appear in live results. Policy processing is skipped when the BGP plugin is absent; other VRF synchronization continues.
- Task-local caches reduce NetBox lookups. Interface synchronization reuses IDs from initial reads and bulk creations, reports ignored type-only differences as in sync, and gives dry-run precedence over approval. VRF synchronization caches selected VRFs.
- Flattened VRF, route-target, and routing-policy diff and result sections by removing their
globalwrapper. VRF sync now emits fewer progress events and uses matching text for paired events and logs.
0.23.2¤
ENHANCEMENTS¤
- Enhanced NetBox
sync_vrrphandling of incomplete live records. Groups with a missing or empty virtual address are now reported explicitly and skipped, while a missing or empty priority uses the VRRP default of100. - Enhanced NetBox
sync_vlansandsync_device_interfaceswith shared batch VLAN resolution by VID, VLAN-group VID ranges, configured VLAN group, and direct device-compatible NetBox scope. Native NetBox group ranges are checked as intervals without expansion, compatible VLAN groups take precedence over direct-site VLANs, global VLANs act as a final fallback, ambiguous matches are errors, and explicit incompatible group mappings are reported and skipped without fallback.
0.23.1¤
BUGS¤
- Fixed NetBox
sync_vrrpquerying all IP addresses when live parsing returned no usable VRRP assignments. The task now fails before NetBox reconciliation or IP searching when the normalized live assignment count is zero. - Fixed NetBox
sync_vrrpdiff-key collisions by including protocol in the per-device assignment key (interface:protocol:group_id). VRRPv2 IPv4 and VRRPv3 IPv6 assignments can now use the same interface and group ID without overwriting each other during normalization or comparison.
ENHANCEMENTS¤
- Added
require_vlan_groupto NetBoxsync_vlansandsync_device_interfaces. When enabled, VLANs that match neithervlan_mapnor the scalarvlan_groupare reported and skipped instead of falling back to the device site.
0.23.0¤
FEATURES¤
- Added strict, versioned Pydantic monitoring schemas for common process and messaging statistics and for broker, client, worker, job, database, and broker-side worker-connection data. The models provide a documented contract that can also be published as JSON Schema.
- Added thread-safe, process-lifetime monitoring of CPU, resident memory, uptime, messages sent and received, message failures, received events, and reconnects. Statistics remain in memory and reset when the owning process restarts.
- Added extensible worker monitoring models, with
NornirWorkerMonitoringStatsas the first service-specific schema. It exposes typed Nornir host counts, failed-host recovery, connection cleanup, and inventory-source status metrics as top-level fields. - Added
get_status()interfaces for the broker and clients and aget_worker_statustask for workers to report component identity, endpoints, runtime directories, and CurveZMQ authentication configuration separately from performance statistics. - Added the NetBox
sync_vrrptask andnetbox sync vrrpNFCLI command to reconcile TTP-parsed VRRPv2 and VRRPv3 groups, interface assignments, priorities, authentication, names, and virtual IP addresses. Existing unassigned IPs are reused, missing IPs are created with thevrrprole, and IPs assigned to other objects are reported without reassignment.
ENHANCEMENTS¤
- Added first-class
get_stats()interfaces to clients, workers, and the broker. Their role-specific responses now consolidate connection, keepalive, queue, running-job, concurrency, client job, and SQLite database statistics where applicable. - Updated NFWeb monitoring to consume and validate the unified statistics format directly, eliminating legacy numeric-string parsing while retaining its existing in-memory history and dashboard response contract.
- Updated NFCLI and the Textual monitoring client to display statistics through the unified interfaces, including the existing client job and database statistics commands.
- Split NFCLI broker, client, and worker inspection into explicit
statusandstatisticscommands. Status output restores environment and authentication information, while statistics output remains suitable for performance monitoring.
CHANGES¤
- Moved
WorkerWatchDogfromnorfab.core.workertonorfab.core.monitoring. The watchdog now performs health checks and supplies worker-specific metric values, whileNFPWorkerbuilds and validates the complete monitoring response. - Removed the broker
show_brokermanagement operation, workerget_watchdog_statstask, and old standalone client statistics attributes. This release does not provide backward compatibility for those interfaces. - Changed
NFPClient.get_stats()to return a JSON-ready dictionary after internal Pydantic validation. - Removed the untyped worker
detailsmapping from monitoring responses.
0.22.7¤
ENHANCEMENTS¤
- Enhanced NetBox
sync_vlansandsync_device_interfacesto skip and report each VLAN mapped to a missing VLAN group while continuing to synchronize the remaining VLANs instead of aborting the task. - Increased default worker and client jobs queue size to 10000 from 1000 items.
0.22.6¤
ENHANCEMENTS¤
- Normalized NetBox
sync_device_ipandsync_device_prefixesdiff output to always includecreate,update,delete, andin_syncactions, including empty plans and fully synchronized objects. - Refactored NFWeb topology to seed selected devices from cached Nornir inventory, merge scoped NetBox and live discovery data with origin tracking, and add Topology, Protocols, and Stats filters.
0.22.5¤
ENHANCEMENTS¤
- Added tri-state
preserve_descriptionhandling to NetBoxsync_vlans,sync_vrfs,sync_device_interfaces, andsync_bgp_peerings. The default preserves an existing NetBox description only when live text is empty;Truealways preserves it, whileFalsealways applies live text, including an empty string. NetBoxsync_bgp_asnnow uses the same shared description policy while retaining its existingTruedefault. - Enhanced NetBox
sync_bgp_communityto skip live community values that do not contain:, preventing well-known names such as Junosno-exportfrom being synchronized as NetBox BGP community objects. - Enhanced NetBox
sync_vrfsto handle multiple existing NetBox VRFs with the same name deterministically by logging a warning and reconciling against the matched VRF with the numerically lowest ID. - Enhanced NetBox
sync_vrfsto silently skip live parser records whoseinstance_typeis present and not equal tovrf. - Extended NetBox
get_bgp_peeringsto support thebranchargument when reading BGP sessions from a NetBox branch. - Extended NetBox
get_devices,get_connections,get_topology,get_nornir_inventory, andget_containerlab_inventorywith branch-aware reads. Nested inventory lookups propagate the branch to all supported data retrieval tasks. - Added branch support to NetBox
netbox_graphqlandrest; both validate or create the branch through the existing pynetbox branch lifecycle and send its schema ID in theX-NetBox-Branchheader. The deprecatedgraphqltask remains unchanged. - Branch-aware NetBox device, interface, circuit, BGP peering, Nornir inventory, and Containerlab inventory reads now bypass cache without changing existing cache keys or non-branch cache behavior.
- Refactored NetBox
get_circuitsto use the paginatednetbox_graphqltask with explicit circuit and cache-freshness queries, replacing its dependency on the deprecatedgraphqltask. - Added branch support to NetBox
get_circuits, including device and circuit queries, REST termination path tracing, optional interface enrichment, and circuit lookups made by Nornir and Containerlab inventory tasks.
BUGS¤
- Fixed NetBox
sync_device_interfacesduplex comparison by normalizing NetBox choice dictionaries to scalar values before diffing against live interface data. - Fixed NetBox
sync_device_ipmatching to prioritize an IP already assigned to the target interface before applying VRF and duplicate-address fallback rules. - Fixed NetBox BGP peering reads to pass the selected branch through
get_bgp_peerings,get_devices, and pynetbox calls duringsync_bgp_peerings.
0.22.4¤
ENHANCEMENTS¤
- Enhanced NetBox
sync_bgp_communityhandling for standard BGP plugin communities that share the same value. The task now keeps live community names in the sync identity and matches existing NetBox communities by value plus community-name custom-field containment, then value plus description, before falling back to value-only matching. - Added
preserve_descriptionto NetBoxsync_bgp_asn, defaulting toTrue, so existing NetBox ASN descriptions stay unchanged unless explicitly overridden. - Enhanced NetBox
sync_bgp_asndevice custom-field associations to use only parser records wherelocal_asnisTrue, preventing peer ASNs from being associated with the observing device.
BUGS¤
- Fixed NetBox
sync_device_interfacesVLAN mapping for VLAN names returned by Nornir getters. Matching named VLANs now resolve against their mapped VLAN group rather than falling back to the device site, and newly created group-scoped VLANs no longer receive a site association.
0.22.3¤
FEATURES¤
- Added the NetBox
sync_bgp_asntask andnetbox sync bgp-asnNFCLI command to reconcile globally unique live ASNs, descriptions, and optional device associations with NetBox IPAM. Existing ASNs can be updated without an RIR; creating missing ASNs requires an existing NetBox RIR supplied throughrir.
ENHANCEMENTS¤
- Enhanced the NetBox
sync_bgp_communitytask with optional device-to-community associations. The configureddevice_custom_field, which defaults todevices, records the NetBox devices on which each route target or BGP plugin community was observed while preserving existing associations. - Added
ignore_asn_by_rangefiltering to the NetBoxsync_bgp_asntask so individual ASNs and numerical ranges, such as65000and65100-65200, can be excluded from synchronization. - Enhanced
sync_device_interfacesto resolve VLAN names returned by Nornir interface getters against existing site- or group-scoped NetBox VLANs before diffing, while retaining numeric VID lookup and creation behavior. Added Juniper vMX-style FakeNOS coverage for access and trunk interfaces containing named VLAN members. - Added
raise_on_emptyto NetBoxget_interfaces, defaulting to the existing error behavior, and disabled it internally forsync_device_interfacesso devices with no existing NetBox interfaces can be initialized from live data.
BUG FIXES¤
- Fixed
sync_device_interfacesraising aKeyErrorwhile initializing a device that has no existing NetBox interfaces.
CHANGES¤
- Removed the NetBox
crud_updatetask's ineffectivepartialargument. Updates consistently use PATCH semantics through pynetbox, including standard device attributes and custom field data. - Renamed the NetBox
vlan_maprule fieldsvlan_ids,device_names,interface_names, andvlan_grouptomatch_vlan_ids,match_device_names,match_interface_names, andset_vlan_group, respectively.
0.22.2¤
ENHANCEMENTS¤
- Added first-class
git://<remote-name>/<path>file retrieval for clients and workers. The File Sharingresolve_git_urltask synchronizes the configured Git remote on demand and returns its publishednf://URL, keeping all Git access inside the File Sharing service. Git fetches disable terminal, browser, GUI, and credential-helper authentication fallbacks so rejected credentials fail without interactive prompts. - Enhanced the NetBox
sync_device_inventory,sync_vlans,sync_device_prefixes,sync_vrfs,sync_device_interfaces,sync_mac_addresses,sync_device_ip,sync_bgp_peerings, andsync_bgp_communitytasks to surface per-device Nornirresources_failedentries in task errors, error events, and logs while retaining usable results from successful devices without failing the overall NetBox task. - Enhanced
sync_bgp_communitycommunity-name custom-field handling to normalize comma-separated strings, trim empty or padded entries, preserve existing names, append only missing live names, and store the resulting names in stable sorted order for idempotent synchronization. - Enhanced
sync_device_interfacesMTU and speed handling to preserve existing NetBox values when both live configuration and operational status return missing or zero values, preventing incomplete parsing data from producing unwanted updates. - Enhanced the NFWeb monitoring dashboard with stacked fabric-wide broker and worker CPU and memory history, current fabric totals, synchronized time zoom, synchronized top-ten worker comparison scrolling, and selected-worker job status and task summaries.
- Improved NFWeb monitoring refresh behavior by reading the latest shared sample at the selected interval, coalescing manual refreshes with active collection, and merging and deduplicating HTTP and WebSocket samples without allowing older responses to replace newer data.
- Improved NFWeb partial-sample diagnostics by validating broker and worker monitoring responses, identifying workers with missing resource data, and presenting collection warnings in the compact Fabric observability toolbar.
0.22.1¤
FEATURES¤
- Added the NetBox
sync_bgp_communitytask andnetbox sync bgp-communitiesNFCLI command. The task uses the TTP Templates BGP communities getter, stores route targets in IPAM and other community types in the NetBox BGP plugin, and appends missing live community-set names by value into an optional custom field.
ENHANCEMENTS¤
- Adding
gitpythonto filesharing service version output - Enhancing NFWeb NorFab monitoring dasboard
0.22.0¤
FEATURES¤
- Added File Sharing Git remote synchronization. Configure public or authenticated GitHub repositories in worker inventory, then clone a selected branch and make its files available to NorFab workers under an
nf://mount automatically or on demand using thecreate_remote_git,git_clone, anddelete_remote_gittasks and matching NFCLI commands.
ENHANCEMENTS¤
- Enabled safe NetBox interface type updates by default. Existing interfaces can transition from
othertovirtual,bridge, orlag, and between those logical types, while specific physical types and transitions to theotherfallback remain protected. New interface creation continues to accept any parsed type. - Added NetBox branching support to all CRUD tasks by forwarding the optional
branchargument when creating the pynetbox client. - Added
nf://YAML file support for NetBoxinterface_mapandvlan_mapsynchronization inputs, including use inside thesync_allper-task configuration. Downloaded mappings use the same Pydantic validation as inline rules. - Expanded NetBox
sync_allto run inventory, VLAN, prefix, VRF, interface, MAC address, IP address, and BGP peering synchronization in dependency order. Task-specific options now use the inline ornf://YAMLsync_kwargsmapping, and setting any task key tofalseskips that stage while later stages continue. - Consolidated the Docker development Compose environment into one all-in-one container that installs the full dependency set and mounts the local NorFab package over the installed source.
- Exposed NFWeb on all IPv4 interfaces by default, advertised its preferred LAN address, and allowed HTTP and WebSocket access from any browser origin.
BUGS¤
- Reduced idle CPU usage in broker, client, and worker ZeroMQ owner loops by restoring the poll timeout from 10 ms to 100 ms. Outbound messages can wait up to 100 ms for an idle owner loop, while active socket traffic still wakes the poller immediately.
0.21.2¤
BUGS¤
- Fixed a client job result collection race that could return
Noneto callers, including FastAPI endpoints, after a worker had completed successfully. Final job snapshots now take precedence over mutable database state, terminal job statuses (COMPLETED,FAILED, andSTALE) cannot transition to another status, and late polling responses are ignored for finished jobs. - Fixed ZeroMQ socket lock starvation introduced by the 0.21.1 keepalive scheduling changes.
ENHANCEMENTS¤
- Refactored broker, client and worker socket I/O so each ZeroMQ socket is owned by one loop, with bounded client and worker outbound queues drained by
zmq_send_recv.
0.21.1¤
FEATURES¤
- Added broker
ip_allowlistinventory support using PyZMQ's native source-IP authentication filter. The allowlist accepts exact IP addresses only, applies whenzmq_authis enabled, and defaults to["*"]to allow connections from any source. - Added Nornir errdisabled-host handling:
- Failed hosts now remain excluded from later tasks and recover automatically after
failed_hosts_recovery_timeout, which defaults to 60 seconds. - Added
reset_failed_hosts_before_task, defaultfalse. Setting it totrueenables the earlier always-reset compatibility mode and disables persistent errdisabled-host behavior, making watchdog timeout recovery unnecessary. - Added the
on_failedtask argument, defaultfalse, exposed ason-failedin NFCLI, to include errdisabled hosts in one specific run without clearing their failed state. - Added
errdisabled_hosts_listanderrdisabled_hosts_clearservice tasks, exposed through NFCLI asshow nornir errdisabled-hostsandnornir clear errdisabled-hosts. List results include the host, errdisabled timestamp, remaining recovery time, and failure reason when available. - Nornir task results now report hosts executed during the job in
resourcesand hosts that failed during that job inresources_failed.
ENHANCEMENTS¤
- Improved long-running broker, client, and worker reliability by serializing ZeroMQ socket polling and receiving with concurrent keepalive, dispatcher, API, and job-thread sends, using short non-blocking poll cycles to avoid delaying outbound traffic.
- Made worker broker reconnection thread-safe by serializing socket shutdown, replacement, registration, and keepalive retargeting so background threads cannot use a socket while it is being replaced.
- Enhanced NetBox
sync_device_interfacesto supplement interface configuration parsing with operational interface status, filling MTU, duplex, and speed only when configuration parsing returns no value.
0.21.0¤
FEATURES¤
- Added the independent NetBox
sync_device_prefixestask and NFCLInetbox sync prefixescommand to derive canonical prefixes from FakeNOS-backed live interface data, reconcile creates and site updates, optionally associate VRFs and sites, and support filters, dry-run, approval, and branching workflows. - Added the NetBox
sync_vlanstask and NFCLInetbox sync vlanscommand to reconcile live VLAN names and descriptions with site- or VLAN-group-scoped NetBox VLANs. The task supports Nornir device selection, dry-run and approval workflows, branch-aware operations, scalar VLAN-group fallback, and VLAN ID filtering. VLAN deletion is intentionally excluded because live parsing cannot reliably identify stale NetBox VLANs. - Added shared ordered
vlan_maprules to NetBox VLAN and interface synchronization. Rules support VLAN ID ranges, device-name globs, VLAN-name globs for VLAN sync, and interface-name globs for interface sync; the first matching rule selects an existing VLAN group by exact name. - Added the NetBox
sync_vrfstask and NFCLInetbox sync vrfscommand to collect global VRFs with the Nornir TTPvrfsgetter and synchronize them by name.
ENHANCEMENTS¤
- Enhanced VLAN group mapping to use each NetBox VLAN group's configured
vid_ranges, with explicit rulevlan_idsacting as a narrower boundary. Unmatched VLANs use the scalarvlan_groupwhen supplied, otherwise they retain device-site fallback behavior. - Added ordered
interface_maprules to NetBoxsync_device_interfacesto rename live interfaces by device-name glob, device-type model glob, and literal match/replace values before filtering and comparison. - Added Invoke developer tasks for documentation, checks, linting, and Docker-based tests, including opt-in per-file parallel containers with isolated runtimes, and added Vulture dead-code detection to the project checks.
CHANGES¤
- Refactored NetBox
sync_device_ipto synchronize IP addresses only. Prefix collection, matching, and writes now belong exclusively tosync_device_prefixes;sync_allno longer creates prefixes implicitly. - Changed NetBox
sync_device_prefixesignore_rangesfiltering to compare canonical live prefixes and exclude only prefixes fully contained within an ignored network.
BUGS¤
- Fixed NetBox
sync_device_ipduplicate detection to compare canonical host addresses without prefix lengths, preventing identical non-anycast IPs with different masks from being created in the same synchronization payload. - Fixed NetBox
sync_bgp_peeringsto validate parsed source IP addresses and skip peerings with invalid values, such asundefinedwhen a BGP session is down. - Added
textualintofullextras for norfab installtion. - Fixed NFAPI startup consuming excessive CPU by yielding while waiting for worker initialization events instead of busy-waiting.
0.20.6¤
FEATURES¤
- Added a Nornir
create_host_from_netboxreplaceoption to delete all current runtime hosts withInventoryFunbefore loading the requested NetBox hosts. - Enhanced NetBox
sync_device_interfaceswithignore_vlansandignore_vrfoptions, plus ordered interface-name and VLAN-ID-range mappings for dynamicvlan_groupselection.
ENHANCEMENTS¤
- Improved Jinja2 template rendering for Nornir
cli,cfg, andtesttasks by reusing fetched and compilednf://templates across per-host rendering loops while preserving dynamic per-host template URLs and include support. - Added NFCLI Nornir
testmarkdownpresence flag to emit rich markdown test reports.
BUGS¤
- Fixed NetBox branch-aware tasks to reject merged branches before using them.
0.20.5¤
FEATURES¤
- Added NetBox
sync_device_ipignore_vrfoption to control VRF-aware matching and creation for IP addresses and prefixes. - Added FakeNOS worker inventory
networks.<name>.auto_startsupport to start selected virtual networks automatically when the worker initialises.
CHANGES¤
- Added FakeNOS-backed cEOS coverage for Nornir CLI and NetBox
sync_device_interfacestests. - Changed NetBox sync task FastAPI endpoints to use
POST. - Added NetBox branch provisioning progress events when branch-aware tasks wait for a branch to become ready.
0.20.4¤
FEATURES¤
- Added NFAPI
.envdetection and loading withpython-dotenvbefore inventory initialization, making local variables available to NFCLI and inventory Jinja2 templates. Local.envvalues override existing process variables by default;load_env_override=Falsepreserves existing values. NFAPI also exposeslist_environment_variables()for inspecting its environment. - Added FastMCP task result guardrails with ordered aggregate byte limits, recursive regex replacement, selective regex blocking, wildcard inventory selectors, and raw-result preservation in the FastMCP client database.
- Added the Nornir
netbox.filterJinja2 helper to retrieve filtered NetBox core and plugin objects for dynamic configuration and test-suite rendering. - Added Nornir
create_host_from_netboxruntime inventory task and NFCLInornir inventory create-host-from-netboxcommand to create or replace in-memory Nornir hosts from explicit NetBox device names.
ENHANCEMENTS¤
- Added
show fastmcp guardrailsNFCLI command to fetch FastMCP tools data and display configured tool guardrails and result guardrails in separate sections. - Enhanced Nornir
cliMCP task results with built-in redaction guardrails for documented network-device, Linux, HTTP header, URL credential, OAuth token parameter, netrc, and PEM private-key secrets, replacing matched values withREDACTEDwhile preserving raw job results in the FastMCP client database. - Enhanced NFCLI input request prompts to show the approval timeout and automatically send
False/No when the prompt expires. - Enhanced NFCLI approval previews to use nested output by default.
- NorFab netbox service and Netbox v4.6 compatibility verified and tested
- NorFab netbox service and Netbox BGP plugin v0.19.0 compatibility verified and tested
- NorFab netbox service and Netbox Branching plugin v1.1.1 compatibility verified and tested
- Enhanced Netbox
check_device_syncwith an optional inventory check that runssync_device_inventoryin dry-run mode and includes inventory state in the per-device summary and detailed diff. - Enhanced NetBox
sync_device_inventorywithinventory-parse-templatefor parsing live inventory with a custom TTP template.
CHANGES¤
- Renamed NetBox sync interactive confirmation argument from
with_review/with-reviewtowith_approval/with-approval. - Reworked NorFab logging isolation so NFAPI no longer configures application logging by default, NorFab-owned broker and worker processes configure logging from their own inventories, and default file logs are written as per-process JSONL files under
__norfab__/logs. NFCLI and TUI opt in to NFAPI process logging with distinct names, andshow norfab loggingnow retrieves broker and worker logs through normal NorFab client calls with human-readable output by default and raw records withdetails. -
Dependencies updates:
-
ntc-templates 9.1.0 -> 9.2.0
- textual 8.2.7 -> 8.2.8
- mcp 1.27.2 -> 1.28.1
- langchain 1.3.4 -> 1.3.14
- Added langchain-core 1.5.1 optional dependency
- langchain-openai >=0.2 -> 1.4.1
- langchain-anthropic >=0.2 -> 1.5.2
- langchain-mcp-adapters >=0.1 -> 0.3.0
- langgraph >=0.2 -> 1.2.9
- Added fastembed 0.8.0 optional dependency
- Added qdrant-client 1.18.0 optional dependency
- datamodel-code-generator 0.61.0 -> 0.71.0
- pynetbox 7.7.0 -> 7.8.0
- fastapi 0.136.3 -> 0.140.0
-
uvicorn 0.49.0 -> 0.51.0
-
Changing Nornir parse ttp logic to not mark results as failed if any of cli commands collection failed for any of the hosts
BUGS¤
- Fixed NetBox CRUD tasks to support third-party plugin endpoints
0.20.3¤
BUGS¤
- Fixing nornir tests nfcli shell to pass verbose_on_fail to results processing, to make sure return results as table even when have failed tests.
FEATURES¤
- Added FastMCP tool call guardrails to reject unsafe MCP tool calls before NorFab job dispatch. Guardrails can be defined by tasks or FastMCP inventory, support
regex,contains, andequalschecks, can disable built-in task guardrails withtools.disable_builtin_guardrails, and are visible throughshow fastmcp tools.
ENHANCEMENTS¤
- Extended Nornir worker statistics with SID, NetBox, Containerlab inventory load statuses and managed
nornir_hostscount. - Enhanced NetBox worker REST filtering to route task-side
pynetbox.filter()calls through adaptivebulk_filter, automatically chunking long list filters to avoid URI length errors while preserving query options such asfields,limit, andordering. - Improved result status coloring for nornir test task
- Nornir show hosts table added index column
- Enhanced Nornir
clitask MCP metadata with default guardrails that block reboot, reload, restart, configuration-mode, shell-mode, OS/image/package operations, outboundssh/telnet, commit, delete, clear, debug, reset, zeroize, and related state-changing commands when called through FastMCP. - Enhanced Nornir
cfgtask MCP metadata with default guardrails that block reboot, reload, restart,do ...andrun ...operational escapes, delete, erase, zeroize, and outboundssh/telnetcommands when called through FastMCP.
CHANGES¤
- Moved NorFab platform nfcli show commands under
show norfab, includingshow norfab client jobs,show norfab broker workers, andshow norfab workers statistics. - Moved worker job history commands from
show nornir jobstoshow norfab workers jobs. - Moved NFCLI inventory configuration shell from
configuretonorfab configure. - Added a
servicefilter toshow norfab workers jobs summaryandshow norfab workers jobs details. - Moved worker utility commands from
workerstonorfab workers. - Moved the NFCLI client version report from
show norfab versiontoshow norfab client version.
0.20.2¤
ENHANCEMENTS¤
- Updated NFCLI shells to accept single values for task arguments backed by worker list inputs, normalizing them before dispatch for NetBox and Nornir commands.
- Enhanced Netbox
update_interfaces_descriptiontask to render description templates for virtual, LAG, and disconnected interfaces that have no connection data, with clearer dry-run wording and expanded test coverage for static, dry-run, connected, and unconnected interface updates. - Enhanced Netbox
get_connectionstask with aninterfacesargument to filter by exact interface or port names using optional GraphQL variables;update_interfaces_descriptionnow passes selected interfaces through when rendering connection-aware descriptions, andcreate_ipnow uses exact interface matching for peer lookups. - Updating Tasks' documentation to follow consistent template
- Refactoring tests files structure to follow services layout
BUGS¤
- NFAPI fixing
depends_onfeature check when dependency worker is yet to start
0.20.1¤
ENHANCEMENTS¤
- Improved NFCLI ERROR status highlighting to make it red color
- Added interactive review to Netbox sync tasks;
with_approval=Trueruns a dry-run preview before prompting and only applies changes after review. - Enhancing nfcli terminal event output, added header, footer job info, shortened timestamps, removed uuid from every event, its only in header, additional summary info displayed in footer now.
- Improving file tab completion choice handling by returning top folders only not all files in the tree
- Added device manufacturer, platform and type to Netbox inventory transform function
- Updated Nornir NFCLI table rendering to use PICLE table outputter and removed
nornir-saltfromnfcliinstallation extras. - Added
nameargument to NFAPImake_client()and deterministic default client names using the entry script and current folder hash to reduce client identity and local job database collisions. - Added support to pass on job object to RetryRunner for connection events logging
BUGS¤
- Fixed Netbox worker API calls to use retry-enabled sessions for status, REST, GraphQL, and
pynetboxrequests to reduce intermittent failures from transient Netbox gateway errors. - Inventory loading fixed to correctly calculate
base_dirwheninventory_data used - Fixed Netbox
get_devicesfiltering with large single-key list filters to avoid URI length errors. - Fixing Nornir parse TTP to not exit the job if have some hosts failed.
- Fixing Netbox inventory sync to not exit on devices that failed collecting live data, skip and continue processing the rest instead.
CHANGES¤
- Changed nornir parse ttp default mode to non-strict
- Changed netbox sync tasks default timeout to 600
0.20.0¤
FEATURES¤
- Added Netbox
sync_device_inventorytask to synchronize device chassis serial numbers and installed modules from live Nornir inventory. The task supports module type and module bay creation, pattern-based inventory mappings, custom Python transformers, filtering, deletion controls, and dry-run previews. - Added support for prompts to mcp service, added two prompts to Nornir cli task.
- Nornir worker adding SNMP tasks to support get, walk, set operation using SNMP v1/2/3
CHANGES¤
- Removed the Netbox
sync_device_factstask. Device serial number synchronization is now handled bysync_device_inventoryusing the live inventory record whose slot ischassis. - Extended Netbox
sync_allto run device inventory synchronization before interfaces, MAC addresses, IP addresses, and BGP peerings. Addedinventory_*mapping, transformer, filtering, and module creation arguments;process_deletionsandmessageare shared across the applicable synchronization stages. - Updating docker deployment files
BUGS¤
- Adding deepdiff package to
fullinstallation extras, Netbox worker would fail to start if not installed. - Changing
mcppackage python dependencies to remove python version specification of<3.14as it failed to get installed for Py3.14 - Fixing Netbox Inventory URL handling when it ends with forward slash
- Fixing
fullextras to enlist all dependencies
0.19.0¤
FEATURES¤
- Added device check-sync task to Netbox service to check if device interfaces, ips, bgp, mac are in sync with Netbox
- Added device sync-all task to sync all data from live device into Netbox
- Adding powershell installation script and updating install instructions - this script install Norfab going through interactive installation process.
- Adding
run_shell_cmdtask to workers to run arbitrary shell command on the host, adding picle shellworkers run-shell-command ..command too - Adding
ignore_peer_rangesargument to sync bgp peerings task - Adding bearer token authentication support for fastmcp service, together with related task and nfcli shell commands
- Adding
NFPClient.submit_job()API returning a blocking job future object withevents(),result()andsend_response()methods for event-aware and interactive client workflows
ENHANCEMENTS¤
- Improving netbox Sync BGP peerings task to make better use of lookup cache for asn, vrf, rir, ip objects resolutions
- MCP service policy now enforced for tool calls not only for discovery
- Netbox sync device interfaces improved VLAN handling - now it creates vlan if its missing, added
vlan_groupargument to specify group to associate with vlan, otherwise it is associated with device site. Vlan retrieval for existing vlan helper is either via group, device site or global. - Netbox service sync IP task updated to honor anycast role for existing Netbox IPs and re-use role anycast for discovered IPs
- Refactoring bgp peerings sync to support name template being a jinja2 template string as well as adding extra variables to renderer context
- Enhancing bgp syn task to use 5 tuple to represent bgp session identity instead of name, allowing to detect session name changes.
BUGS¤
- Fixing ip sync task bulk update list construction, making sure IDs are always present for items
- Fixing IP sync prefixes filtering using
bulk_filter - Fixing IP creation logic to check existing ip first, and if not found proceed with find a suitable prefix
- Fixing
resolve_iphelper function to pickup longest prefix length prefix to create IP in - Fixing
resolve_vrffunction to detect when multiple VRF with same name present in netbox and to emit warning message to the user
CHANGES¤
- Adding Pydantic task input and output models for all services, refactoring NFCLI shells to use these models.
- Moving pydantic models to dedicated per-worker files.
- Refactoring core client and worker job handling to use future-based job tracking, normalized job events and client input request/response flow;
run_job()remains available for synchronous job execution -
Dependencies updates:
-
tornado 6.5.5 -> 6.5.7
- pydantic 2.12.5 -> 2.13.4
- orjson 3.11.7 -> 3.11.9
- picle 0.12.0 -> 0.12.2
- rich 14.3.3 -> 15.0.0
- pyreadline3 3.5.4 -> 3.5.6
- netmiko 4.6.0 -> 4.7.0
- nornir-scrapli 2025.01.30 -> 2025.1.30
- ntc-templates 9.0.0 -> 9.1.0
- requests 2.32.5 -> 2.34.2
- scrapli-community 2025.01.30 -> 2025.1.30
- lxml 6.0.2 -> 6.1.1
- textual 8.1.1 -> 8.2.7
- mcp 1.27.1 -> 1.27.2
- langchain 1.2.12 -> 1.3.4
- langchain-community 0.4.1 -> 0.4.2
- langchain-ollama 1.0.1 -> 1.1.0
- ollama 0.6.1 -> 0.6.2
- datamodel-code-generator 0.55.0 -> 0.61.0
- langgraph-checkpoint-sqlite 3.0.3 -> 3.1.0
- pynetbox 7.6.1 -> 7.7.0
- deepdiff 9.0.0 -> 9.1.0
- fastapi 0.135.1 -> 0.136.3
- uvicorn 0.42.0 -> 0.49.0
- python-multipart 0.0.22 -> 0.0.32
0.18.1¤
CHANGES¤
- Added
CreateIpInputPydantic model for Netboxcreate_iptask input validation and used it asinputargument for@Taskdecorator - Added
CreateIpBulkInputPydantic model for Netboxcreate_ip_bulktask input validation and used it asinputargument for@Taskdecorator - Replaced
**kwargsin Netboxcreate_ip_bulktask with explicit typed arguments matchingcreate_ipsignature - Enhanced IP allocation logic for allocating next available prefix when child prefix already contains IPs in Netbox
- Enhanced create ip logic for detecting IP address assigned object
- Changing norfab to produce json schema for tasks by model fields names instead of aliases
by_alias=False. - Updating nornir parse napalm to use nornir
tasktask - Fix create prefix task to make sure to check if /31 subnet can be allocated even if available prefixes return /30
- Create ip task enhanced to handle case when multiple parent prefixes matched in Netbox by prefix filter
- Fix create ip when create peer ip is true, check if mask len 32 or 128 raise error in that case - can not create peer ip for /32 or /128 prefixes
- Adding
is_timed_outmethod to worker Job object to alow monitor job time out from inside tasks
FEATURES¤
- Adding brief mode to get interfaces to return only essential interfaces data
0.18.0¤
BUGS¤
- Fixing Netbox prefix allocation with parent filtering by dictionary
- Fixing netbox crud tasks to use Pydantic model for input validation
- Enhancing netbox worker filtering for large number of items to avoid 414 error
CHANGES¤
- Complete refactoring of Netbox
sync_device_interfacestask - Complete refactoring of Netbox
sync_device_iptask -
Dependency updates:
-
mcp 1.26.0 -> 1.27.1
FEATURES¤
- Created Netbox task
sync_mac_addresses - Enhancing streamlit web ui network map application to support 2d and 3d view of the topology - support Netbox data, LLD and BGP data overlay on single graph
- Adding Netbox
get_topologytask to fetch devices and links in topology format
0.17.3¤
ENHANCEMENTS¤
- Improving logic for local ip sourcing for BGP sessions
BUGS¤
- Fixing BGP sessions name forming for Netbox sync bgp tasks
- Fixing deepdiff dependency for Netbox service
0.17.2¤
FEATURES¤
- Adding new Netbox
sync_bgp_peeringstask to synchronize BGP sessions between live devices and NetBox - Adding new Netbox
create_bgp_peeringstask to create BGP peerings - Adding new Netbox
update_bgp_peeringstask to update BGP peerings - Nornir Test markdown results adding results summary table when extensive is True
- Fixing logic of detecting assigned interface for create IP task
0.17.1¤
CHANGES¤
- Refactored Netbox get_connections task, remove
include_virtualarguments,cablesargument, now these data always retrieved. - Refactoring Netbox graphql fetch function to use variables, pagination, persistent sessions and threading to enhance data retrieval performance
FEATURES¤
- Netbox get connections added remote interface label extraction for physical interfaces, console port, power ports, front/rear ports
- Netbox get connections added remote interface MAC addresses extraction
- Nornir tests markdown report added timestamps and duration summary
BUGS¤
- Fixing get connections handling for provider network
- Fixing client and worker job db timestamps handling for created_at
0.17.0¤
CHANGES¤
- Updating Netbox get_devices task to use pynetbox for fetching brief device info, fixing bug with pagination
- Enhancing Netbox get_devices to cache sites data to reduce amount of API calls
- Updating Netbox get_interfaces to use pynetbox for fetching brief interfaces info, fixing bug with pagination
- Refactoring Containerlab worker moving it to dedicated directory.
- Refactoring FastAPI worker moving it to dedicated directory.
- Refactoring Workflow worker moving it to dedicated directory.
- Refactoring FastMCP worker moving it to dedicated directory.
FEATURES¤
-
Adding agentic AI capabilities to the NorFab client via
NFPClient.get_agent()method: -
New
norfab/core/agent.pymodule withNFPAgentclass — single-file, zero overhead when unused - LangGraph ReAct agent with auto-discovered NorFab service tools
- Multi-provider LLM support: openai, anthropic, ollama, groq, mistral, openrouter, google, bedrock
- Optional MCP server integration via
langchain-mcp-adapters(stdio, sse, streamable-http) - Optional RAG knowledge base via Chroma or FAISS
- Optional multi-turn conversation memory (in-process buffer or SQLite)
- Configuration via
client -> agent_profilessection ininventory.yaml -
New
norfab[clientagent]optional dependency group -
Adding new Netbox CRUD tasks for generic REST API access to any NetBox object type:
-
crud_list_objects— lists all available NetBox object types from the OpenAPI schema, results cached for 24 hours crud_search— free-text search across multiple object types simultaneously using theqparametercrud_read— retrieve objects by ID(s) or filter dict(s), supports pagination and field selectioncrud_create— create one or multiple objects in a single request, supportsdry_runpreviewcrud_update— partial (PATCH) or full (PUT) update of one or multiple objects by ID, supportsdry_rundiffcrud_delete— delete one or multiple objects by ID, supportsdry_runpreview-
crud_get_changelogs— retrieve object change history, supports NetBox 4.0+ with automatic fallback to older versions -
FastMCP service - adding MCP tool exposure policy via inventory
tools.policy: -
tools.policyis an ordered list of policy entries withservice,tasks, andactionkeys serviceaccepts glob patterns matched against NorFab service namestasksaccepts glob patterns matched against service task namesactionsupportsalloworreject- Policies are evaluated top-down, first matching entry wins
- If no policy entry matches, tool is allowed by default
BUGS¤
- Nornir parse ttp enhancing return result to be for parsed template only to avoid extra data from other templates
- Netbox
get_connectionfixing handling of remote interface when it has no lag associated with it - Fixing nfcli
nowaitargument handling
0.16.6¤
BUGS¤
- Fixing Nornir parse_ttp task hosts filtering
0.16.5¤
BUGS¤
- Fixing Nornir N2G diagram calling UUID handling
CHANGES¤
- Splitting Nornir parse task into 3 tasks
parse_ttp,parse_napalm,parse_textfsm - Enhancing nfcli shell
nornir parsecommands - Watchdog thread now starts automatically for every worker, so far implemented RAM usage monitoring
FEATURES¤
- Nornir service nfcli added
nornir parse textfsmcommand -
Nfcli - adding these commands:
-
show workers statistics -
show workers brief -
Adding experimental Textual TUI monitoring dashboard
0.16.4¤
BREAKING CHANGES¤
Below changes are to simplify NorFab codebase and reduce maintenance burden.
- Netbox
get_interfacesnow return complete REST API interfaces data without trying to flatten or normalize it - Netbox
get_devicesnow return complete REST API devices data without trying to flatten or normalize it
0.16.3¤
BUGS¤
- Enhancing error handling for worker results compress to not fail silently if task returns data that is not JSON serializable
- Fixing get_interfaces and get_devies output models validation handling
- Fixing fakenos models to not interfer with nfcli imports - no fakenos required to be installed for nfcli to load, moved fakenos tasks models to dedicated file
- Enhancing nfcli output to skip workers that had no results returned in nested output
CHANGES¤
-
Dependencies upgrades:
-
tornado 6.5.4 → 6.5.5
- orjson 3.11.5 → 3.11.7
- rich 14.3.2 → 14.3.3
- tabulate 0.9.0 → 0.10.0
- ntc-templates 8.1.0 → 9.0.0
- scrapli 2025.01.30 → 2026.2.20
- xmltodict 1.0.2 → 1.0.4
- robotframework 7.4.1 → 7.4.2
- langchain 1.2.10 → 1.2.12
- datamodel-code-generator 0.54.0 → 0.55.0
- fastapi 0.129.0 → 0.135.1
- uvicorn 0.40.0 → 0.42.0
- fakenos 1.0.0 → 1.0.1
0.16.2¤
BUGS¤
- Fixing markdown tests report to calculate success rate correctly
- Fixing Nornir cli input model to allow either commands or run_ttp to be provided
CHANGES¤
-
Dependencies upgrades:
-
picle 0.11.0 -> 0.11.1
-
Netbox get_devices task refactored to use Pynetbox and REST API, as a result Netbox inventory filters for devices now can use Pynetbox device style filtering instead of GraphQL filters.
- Enhanced logging for Netbox worker and tasks
FEATURES¤
- Adding new FakeNOS service to simulate networks interactions for automation testing
- Netbox
get_interfacestask added caching
0.16.1¤
BUGS¤
- Fixing Netbox dependency for data-model-generator library
- Fixing Netbox get_interface queries performance
0.16.0¤
FEATURES¤
- Nornir Tests task - adding support for
groupsargument, added support to nfcli shell as well - Adding configuration model to edit NorFab configuration using NFCLI shell
- NFCLI - adding history and commands history persistency across runs
- Nornir netbox get inventory task added support to pass on
cachevariable to control overall cache behaviour - Netbox get_interfaces task uses REST API now and return interfaces extra information, such as connected endpoints
- NFCLI - adding new
show jobs statisticsandshow jobs database-statisticscommands to view local jobs database statistics
CHANGES¤
-
Dependencies updates:
- picle: 0.9.0 → 0.11.0 - enhanced command help and man tree output, commands history
-
Netbox worker refactoring:
-
moving tasks out to dedicated files to shrink main worker .py file
- moved Netbox worker related models under worker folder itself
- get_circuit changing cache argument to None to honor global cache setting
-
get_interfaces task refactored to use REST API instead of GraphQL API
-
Netbox get_interfaces - refactored to use rest api via pynetbox instead of GraphQL API
- Enhancing nornir tests markdown results report - adding groups, description, comments to test details, added total failed an success rate counters, modified table output to display failed tests first.
- Enhancing workers and client jobs database operations toward reducing memory usage and improving speed - switching to orjson instead of json, dropping text columns in favour of byte blobs and switching zlib compression to level 1
- Adding
orjsonlib to core dependencies -
Refactored Nornir worker:
-
splitting tasks into dedicated files and moving all in dedicated folder
-
moving related pydantic models under new nornir_worker folder
-
Refactoring broker to use
orjsoninstead ofjsonlibrary
BUGS¤
- NFCLI netbox get functions - adding missing pipe models
- Client - fixing race condition when calling destroy and dispatcher threads still using zmq socket
- NFCLI fixing Nornir cli and cfg tasks multiline collection of commands
- Nornir worker - fixing not to raise error when not able to load Nebtox inventory.
0.15.4¤
BUGS¤
- Fixing FastMCP service tool calling results validation and adding additional tool calling tests
FEATURES¤
- Agent service - adding support to build agents using YAML definition
- Agent service - adding support for grok LLM provider
CHANGES¤
-
Dependencies updates:
- pyyaml: 6.0.2 → 6.0.3
- pyzmq: 27.0.2 → 27.1.0
- psutil: 7.0.0 → 7.2.2
- tornado: 6.5.2 → 6.5.4
- pydantic: 2.11.7 → 2.12.5
- rich: 14.1.0 → 14.3.2
- pyreadline3: 3.4.1 → 3.5.4
- cerberus: 1.3.5 → 1.3.8
- jmespath: 1.0.1 → 1.1.0
- ncclient: 0.6.15 → 0.7.0
- ntc-templates: 8.0.0 → 8.1.0
- scrapli-netconf: 2025.01.30 → 2026.1.12
- xmltodict: 0.13.0 → 1.0.2
- lxml: 4.9.4 → 6.0.2
- textfsm: 1.1.3 → 2.1.0
- dnspython: 2.4.2 → 2.8.0
- robotframework: 7.3.2 → 7.4.1
- langchain: 1.0.2 → 1.2.10
- langchain-ollama: 1.0.0 → 1.0.1
- ollama: 0.6.0 → 0.6.1
- pynetbox: 7.5.0 → 7.6.1
- fastapi: 0.116.1 → 0.129.0
- uvicorn: 0.35.0 → 0.40.0
- python-multipart: 0.0.20 → 0.0.22
- mcp pinned to 1.26.0
DOCS¤
- Updating FastMCP service documentation
0.15.3¤
FEATURES¤
- Netbox service -
get_interfacestask addedinterface_listargument to filter interfaces by a list of names - Netbox service -
get_circuitstask addedadd_interface_detailsargument to add ip addresses, vrf and child interface info to the circuits when set to True - Netbox service -
create_ip_bulktask addedinterface_listargument to filter interfaces by a list of names - Netbox worker - support added for 4.5 Netbox version
CHANGES¤
- Nornir - Removed complete output from tests markdown report
BUGS¤
- Netbox -
get_connectionsfixing parent endpoint handling for virtual interfaces
0.15.2¤
BUGS¤
- NorFab nfcli - Fixing show jobs call
CHANGES¤
- NorfabNfcli - enhancing jobs commands on the client to query local database
- NorFab client - refactored
mmicalls, removedget,postandrecv_from_brokermethods as not needed anymore - FastAPI - removed
job_postandjob_getapi as no longer needed, might need to refactor it in the future - NorFab client - enhanced
fetch_jobsdb method to allow filter by service, workers, last N jobs etc.
FEATURES¤
- NorFab nfcli - added
nowaitargument to not wait for job results and return prompt straight away
0.15.1¤
BUGS¤
- Nornir service watchdog - fixing
connection_idle_timeouthandling - Netbox service - fixing
ssl_verifyhandling to suppressInsecureRequestWarning - Norfab shell - fixed references to deprecated broker fss calls, replaced with calls to
filesharingservice
0.15.0¤
CHANGES¤
- Introduce sqlite3 DB into client for jobs state persistence
- Updated NFP semantics for better performance and readability
- Worker - added support for
job.streamcapability to stream a set of bytes back to client, used for file transfers, added newNFP.STREAMcommand as part of this effort - Added support for new
NFP.PUTcommand for client to update running jobs on worker, currently used by client to command worker a number of file offsets to stream back, but can be extended to provide user input mid job execution, e.g. agent requesting input from user. - Client - refactored
fetch_filemethod to use new stream and put capabilities - Nornir test markdown - various markdown output improvements such as added total tests to summary, added test number column to the table, added host name next to every collected command, removed support for hosts inventory as it bogged browser memory for being too long.
FEATURES¤
- Client and worker - added
delete_fetched_filestask to remove files fetched from broker - Created new
filesharingservice worker to host files, by default broker runs 1 such worker locally, this improves norfab hosting capabilities and open paths toward integrating with external file sharing resources e.g. github, s3, http etc.
0.14.0¤
CHANGES¤
- Netbox sync_device_interfaces - refactored to use bulk update and bulk create operations
- Netbox service - deprecated support for Netbox below 4.4.0 version
- Netbox service -
get_interfacesaddedlabelandmark_connectedfields - Netbox service -
get_connectionsaddedremote_device_statusfield - Nornir service - test task added nornir hosts inventory to results if extensive set to true
- Nornir tests markdown - added hosts expandable inventory section
- Nornir tests markdown - added total tests number for detailed section for each host
- Nornir tests markdown - updated headings and paragraphs content
- Enhanced message construction for NFP protocol by adding message builder
- Enhanced client, worker and broker socket handling by adding thread locks
FEATURES¤
- Netbox service - added
create_device_interfacestask - Netbox service - added
branch_create_timeoutinventory argument to control timer waiting for new branch to be created - Netbox service - added integration with Netbox BGP Plugin in a form of
get_bgp_peeringstask to fetch BGP sessions data for devices, added nfcli shell command to callget_bgp_peeringstask. - Netbox service -
get_nornir_inventorytask added support forbgp_sessionsargument. if True, fetched devices' BGP peerings from netbox and stores them underbgp_sessionskey in host's data.
BUGS¤
- Nornir tests markdown - fixed detailed output handling to not collect suite into summary table
- Nfcli - fixed show client command function calling
0.13.0¤
BUG FIXES¤
- Fixing event severity handling in worker.
CHANGES¤
- Changed worker to use sqlite database for job persistent storage instead of json files
- Netbox sync device facts - enhanced sync logic to use bulk device updates
FEATURES¤
- Nornir test task - added
extensiveargument to return detailed results - Client - added
markdownargument torun_jobmethod to support rendering results into markdown output - Client - added Nornir test task markdown render function to return tests results in a form of markdown report.
- Client - added generic markdown render function to return results in a form of markdown report.
0.12.7¤
FEATURES¤
- NFAPI logging - added support for
logging->log_eventsparameter to emit events as syslog messages - Added context manager support for NFAPI to simplify invocation from python scripts
CHANGES¤
- NFAPI changed start method arguments from
start_brokertorun_brokerandworkerstorun_workers - Nornir task - enhanced task import logic
- Nornir worker - added filter hosts method to reduce duplicate code
- NorFab client - added ensure_bytes method to reduce duplicate code
0.12.6¤
BUGS¤
- Netbox service - fixed get_circuits handling bug, was not returning circuits data due to recent code refactoring, updated test to catch this kind of an issue.
0.12.5¤
BUGS¤
- Containerlab - fixing error handling when result is None
- Workflow - fixed emitting event progress for cli shell
- Netbox - bulk ip create updated to sort interfaces names to make ip allocation order deterministic
CHANGES¤
- Updated dependencies:
- TTP 0.9.5 -> 0.10.0
-
nornir-salt 0.22 -> 0.23
-
Renamed Netbox service tasks:
- update_device_facts -> sync_device_facts
- update_device_interfaces -> sync_device_interfaces
- update_device_ip -> sync_device_ip
FEATURES¤
- Netbox service - get_connections enhanced to retrieve power outlet connections.
0.12.4¤
BUGS¤
- Netbox worker - fixing handling of Netbox instance for child subnet creation
FEATURES¤
- Netbox worker - update interface descriptions task now can supply dictionary of interface descriptions
0.12.3¤
BUGS¤
- Fixing handling of entry points for sourcing norfab workers plugins for Py3.10+
CHANGES¤
- Docker images updated to use Py3.11
0.12.2¤
CHANGES¤
- Updated Python version dependencies
- Adding FastMCP worker
- Updating agent worker - work in progress
- Adding Streamlit worker to host WEB UI - work in progress
0.12.1¤
BUGS¤
- Netbox service - restored Netbox v4.2.0 support
- Fixing Picle shell netbox get interfaces to have
interface_regexargument - Fixing Picle check netbox get connection arguments
0.12.0¤
BUGS¤
- FastAPI Service - fixing JSON references for OpenAPI schema, which previously broken led to error in swagger and redoc UIs rendering.
FEATURES¤
- Netbox service -
get_interfacestask addedinterfaces_regexfilter - Netbox service -
get_connectionstask addedinterfaces_regexfilter - Netbox service -
get_connectionsadded support to retrieve virtual interfaces connections for physical and lag interfaces - Netbox service -
create_ipadded support to automatically assign IPs to link peers or use peers IP addresses prefixes to allocate next available IP address - Netbox service -
create_ipadded support to create child subnet within parent prefix and assign IP out of it - Netbox service - added new task
create_ip_bulkto create IP addresses for devices using interfaces regex match - FastMCP service - created NorFab MCP service
0.11.2¤
CHANGES¤
- Moving to Python 3.10 as primary supported version instead of 3.9 due to addition of FastMCP service which only supports Py3.10 and up.
- Updated build dockerfiles to use
python:3.10-slim-trixieas a base image
BUGS¤
- Fixing FastAPI worker argument handling by setting it to
allby default
0.11.1¤
BUGS¤
- Fixed containerlab show lab outputting
- Enhanced nfcli logic to be able to start broker and workers only without a client
- Updated aio Dockerfile to start broker and workers only
0.11.0¤
FEATURES¤
- FastAPI Services - enhanced to generate API endpoints for all services tasks automatically using
@Taskdecorator data - NFCLI - Picle show containerlab containers now emits output with nested tables
- Netbox Service -
create_iptask enhanced to source prefixes to allocate next IP from using prefix description string - Netbox Service - Added
create_prefixtask to allocate next available prefix - Nornir Service - Adding
nb_create_prefixJinja2 filter allocate next available prefix during templates rendering - Worker - Added
fastapiargument to@Taskdecorator to control FastAPI REST API endpoints auto-generation - Containerlab Service - added support for Containerlab 0.69+
- Netbox Service - added support for branching plugin, made create and update tasks be branch aware, updated nfcli shells to support
branchargument - Netbox Service - added
delete_branchtask
BUGS¤
- Fixing nornir test picle shell test task handling for verbose-result and dry-run
- Fixing nornir test handling for when suite renders to empty tests for a host
- Fixed Netbox service
instancevariable options sourcing for CLI shells
CHANGES¤
- Upgrading NAPALM library dependency from 5.0.0 to 5.1.0
- Upgrading PICLE library dependency from 0.9.0 to 0.9.1
- Upgrading Pynetbox library dependency from 7.4.0 to 7.5.0
- Refactoring Netbox service pydantic models
- BREAKING CHANGE: Starting NorFab 0.11.0 containerlab service only supports Containerlab 0.69+
- Dependencies updates.
0.10.0¤
FEATURES¤
- Adding support for Netbox >= 4.3.0
- Enhanced Netbox service inventory device filters to support GraphQL query string for
device_listqueries. - Added Netbox service
create_iptask to allocate new or source existing IP from prefix - Added
nb_create_ipJinja2 filter to Nornir service to source IP allocations during templates rendering - Added nfcli shell
netbox create ipcommand to run IP allocations from interactive command line
0.9.1¤
BUGS¤
- Fixing list and dict annotations to also allow None values for workers tasks.
0.9.0¤
FEATURES¤
- Adding concurrency to worker jobs execution, adding new worker inventory parameter
max_concurrent_jobs - Adding
@Task()decorator to expose worker methods as tasks, this decorator performs automatic type checking using type annotation, alternatively it supports input/output pydantic models to verify input arguments and return results. - Passing on
jobargument to all NorFab tasks,jobis an object that contains relevant metadata - client address, juuid, args, kwargs etc. Job object can be used to emit events. - Adding workers
echotask to perform tests, added respective nfcli commands treeworkers.ping. - Adding workers
list_tasksmethod to return information about tasks in MCP compatible format. - Added picle shell
man.taskscommand to retrieve information about NorFab services tasks
CHANGES¤
- Improved Netbox device update nfcli to include Fx hosts filtering for nornir datasource
- Result object added
task_startedandtask_completedtimestamp andserviceparameters
BREAKING CHANGES¤
- Instead of
self.eventworker now need to usejob.event - To add pydantic input / output models for tasks need to use
@Task()decorator instead of@Taskdecorator - Nornir Jinja2 templates context
nornir.cliremoved, need to usenorfab.run_jobinstead
0.8.2¤
BUGS¤
- Fixed nornir inventory load from containerlab handling
0.8.1¤
BUGS¤
- Fixed
show containerlab inventorycommand - Fixed Nornir Worker inventory load handling
- Netbox interface update improving mac address handling
FEATURES¤
- Netbox service added
get_containerlab_inventorytask - Containerlab service added
deploy_netboxtask
CHANGES¤
- Improved client post job retry logic
FNfilter argument for Nornir add presence handling for nfcli
0.8.0¤
CHANGES¤
- Restructuring pydantic models structures for better following DRY principles:
- Moved FastAPI models under norfab.models.fastapi
- Added norfab.models.nornir pydantic models
- Events and results models moved under norfab.models
- Added broker
zmq_authinventory parameter to turn zero mq authentication and encryption off - Added
verbose-resultcommand line argument to relevant tasks to emit result details - Updated CLI shells to support PICLE 0.9.0
- Enhanced Netbox service to support working with instances of Netbox of different major and minor releases
BUGS¤
- Fixed broker to allow workers reconnect on restart.
FEATURES¤
- Improved worker jinja2 templates rendering logic to allow render URL first and next download its content
- Added
nornir refreshCLI command to refresh Nornir workers instances and reload inventory - Added support for Netbox 4.2
- Added support for Nornir service to pull hosts inventory from Containerlab service
0.7.0¤
FEATURES¤
- Added new
workflowservice to run simple workflows constructed using YAML DSL
CHANGES¤
- NFCLI shells - updated to use nested outputter where appropriate
- Nornir worker - updated to set failed flag for its tasks according to test results
- Worker - Added
statusfield to worker result object to reflect job execution status - Nornir Service - replaced
cfg_dry_runandcli_dry_runarguments withdry_runargument - NFCLI shell - added aliases to use dash instead of underscore
- NFCLI shell - Moved Nornir service show commands under
show nornir xyzpath
0.6.0¤
FEATURES¤
- Added support for worker plugins
- Added support for nfcli custom shells
CHANGES¤
- All workers loaded into NorFab using entrypoints implementing lazy loading - workers classes only imported when they being used, in some cases allowing to save on startup time.
0.5.0¤
FEATURES¤
- FastAPI service added bearer authentication support
- Added hooks attachpoints
nornir-startupandnornir-exitto influence Nornir service workers startup and exit
0.4.0¤
CHANGES¤
- Improved netbox get_circuits logic.
- Standardised worker
get_versionandget_inventorymethods
Features¤
- Added
runtime_inventorytask to Nornir service, #6 - Added support to configure
startupandexithook functions in inventory to be executed by nfapi on start and on exit.
0.3.1¤
CHANGES¤
- Improved logging handling for NFAPI if it failing to start a worker
- Update client
getmethod to return result as a dictionary for broker MMI, file and inventory services - Enhanced Netbox
update_device_factsandupdate_device_interfaceto supportbatch_sizeargument - a number of devices to process at a time - Improved nfcli shell for Netbox service to provide more arguments for
netbox update device factscommand
FEATURES¤
- Added Netbox Service
update_device_iptask to retrieve device interface IP addresses and create them in Netbox - Added support to NorFab simple inventory and nfapi to load inventory from dictionary data as well as to explicitly provide
base_dirinformation where to anchor NorFab environment - Added support for NorFab inventory workers section items to be dictionaries in addition to OS path to YAML files allowing to construct workers inventory out of dictionaries and/or YAML files.
0.3.0¤
FEATURES¤
- Added "show version" support for nfcli client to display versions of locally installed libraries, fixes. #4
- Added "show broker version" support for nfcli client to retrieve broker report of the version of libraries broker is running on, fixes. #4
- Added support "show broker inventory" command to display broker inventory
- Simple inventory added support to produce a serialized dictionary output
- Broker added "show_broker_inventory" and "show_broker_version" MMI endpoints
- Added support for simple inventory service to render inventory using Jinja2, renderer passed on
envvariable that contains operating system environment variables, allowing to source any env data into NorFab inventory for both broker and workers. #5 - Created
fastapiservice to host REST API for NorFab
0.2.4¤
BUGS¤
- Fixed nfcli
--workers-listhandling - Fixed
job_dataurl handling for nornir cli/cfg/test tasks - Fixed nfapi handling of empty worker name
FEATURES¤
- Added a set of confirmed commit shell commands to nornir cfg netmiko plugin
0.2.3¤
FEATURES¤
- Added nfcli
--workers-listoption to specify a list of workers to start
CHANGES¤
- Fixed handling of jinja2 import for the worker to make it optional
0.2.1¤
CHANGES¤
- Improved libs imports handling to account for distributed deployment
- Improved logging handling
- Fixed nfcli issue with starting components on NorFab #2
- Changed CTRL+C handling to trigger graceful NorFab exit
FEATURES¤
- Added
broker -> shared_secretparameter ininventory.yamlto configure clients and workers broker shared secret key - Added and tested docker files
0.2.0¤
CHANGES¤
- refactored
get_circuitsto useThreadPoolExecutorto fetch circuits path from netbox - adding
job_datajson load to nornir cli, cfg and test tasks
BUGS¤
- Fixing netbox
get_devicesdry run test - Fixed netbox
get_circuitsdevices site retrieval handling
FEATURES¤
- Added cache to Netbox
get_circuitsandget_devicestasks - Added new
agentworker to start working on use cases to interface with LLMs
0.1.1¤
BUGS¤
- Fixed Netbox CLI Shell handling of NFCLIENT
CHANGES¤
- Updated and tested dependencies for Netmiko 4.5.0
- Updated and tested dependencies for Nornir 3.5.0
- Updated and tested dependencies for Nornir-Salt 0.22.1
0.1.0¤
Changes¤
- Changes to Nornir service module files structure
- PICLE dependency updated: 0.7. -> 0.8.
- Made Nornir Service
progressargument set toTrueby default to emit and display events for all Nornir Jobs - Nornir tests changed
tableargument to be set toTrueby default - Improved
nfapibroker start logic to wait until broker fully initialized before proceeding to start workers
Features¤
- Added support for Nornir parse task to source TTP template from file with autocompletion
- Added Nornir File Copy task to copy files to devices using SCP
- Added support for logs to be collected into single file from all NorFab local processes
- Added to NorFab worker
job_listandjob_detailsmethods - Added
show jobs summaryandshow jobs detailscommands to NorFab shell and to Nornir shell - Added
--create-envargument to nfcli utility to create NorFab folders and files to make it easier to get started using norfab
BUGS¤
- Fixed Nornir Service Watchdog to clean up dead connections from hosts data
0.0.0¤
Initial Release
Notable Features¤
- NorFAB Broker, Client and Worker base classes
- Nornir Service
- Network Service
- Simple Inventory Datastore Service
- File service
- ZeroMQ encryption