Skip to content

Releases: norfablabs/NORFAB

0.20.3

Choose a tag to compare

@dmulyalin dmulyalin released this 05 Jul 08:56

0.20.3

BUGS

  1. 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

  1. 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, and equals checks, can disable built-in task guardrails with tools.disable_builtin_guardrails, and are visible through show fastmcp tools.

ENHANCEMENTS

  1. Extended Nornir worker statistics with SID, NetBox, Containerlab inventory load statuses and managed nornir_hosts count.
  2. Enhanced NetBox worker REST filtering to route task-side pynetbox.filter() calls through adaptive bulk_filter, automatically chunking long list filters to avoid URI length errors while preserving query options such as fields, limit, and ordering.
  3. Improved result status coloring for nornir test task
  4. Nornir show hosts table added index column
  5. Enhanced Nornir cli task MCP metadata with default guardrails that block reboot, reload, restart, configuration-mode, shell-mode, OS/image/package operations, outbound ssh/telnet, commit, delete, clear, debug, reset, zeroize, and related state-changing commands when called through FastMCP.
  6. Enhanced Nornir cfg task MCP metadata with default guardrails that block reboot, reload, restart, do ... and run ... operational escapes, delete, erase, zeroize, and outbound ssh/telnet commands when called through FastMCP.

Full Changelog: 0.20.2...0.20.3

0.20.1

Choose a tag to compare

@dmulyalin dmulyalin released this 26 Jun 11:20

0.20.1

ENHANCEMENTS

  1. Improved NFCLI ERROR status highlighting to make it red color
  2. Added interactive review to Netbox sync tasks; with_review=True runs a
    dry-run preview before prompting and only applies changes after review.
  3. 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.
  4. Improving file tab completion choice handling by returning top folders only not all files in the tree
  5. Added device manufacturer, platform and type to Netbox inventory transform function
  6. Updated Nornir NFCLI table rendering to use PICLE table outputter and removed nornir-salt from nfcli installation extras.
  7. Added name argument to NFAPI make_client() and deterministic default client names using the entry script and current folder hash to reduce client identity and local job database collisions.
  8. Added support to pass on job object to RetryRunner for connection events logging

BUGS

  1. Fixed Netbox worker API calls to use retry-enabled sessions for status, REST, GraphQL, and pynetbox requests to reduce intermittent failures from transient Netbox gateway errors.
  2. Inventory loading fixed to correctly calculate base_dir when inventory_data used
  3. Fixed Netbox get_devices filtering with large single-key list filters to avoid URI length errors.
  4. Fixing Nornir parse TTP to not exit the job if have some hosts failed.
  5. Fixing Netbox inventory sync to not exit on devices that failed collecting live data, skip and continue processing the rest instead.

CHANGES

  1. Changed nornir parse ttp default mode to non-strict
  2. Changed netbox sync tasks default timeout to 600

Full Changelog: 0.20.0...0.20.1

0.20.0

Choose a tag to compare

@dmulyalin dmulyalin released this 14 Jun 10:05

0.20.0

FEATURES

  1. Added Netbox sync_device_inventory task 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.
  2. Added support for prompts to mcp service, added two prompts to Nornir cli task.
  3. Nornir worker adding SNMP tasks to support get, walk, set operation using SNMP v1/2/3

CHANGES

  1. Removed the Netbox sync_device_facts task. Device serial number synchronization is now handled by sync_device_inventory using the live inventory record whose slot is chassis.
  2. Extended Netbox sync_all to run device inventory synchronization before interfaces, MAC addresses, IP addresses, and BGP peerings. Added inventory_* mapping, transformer, filtering, and module creation arguments; process_deletions and message are shared across the applicable synchronization stages.
  3. Updating docker deployment files

BUGS

  1. Adding deepdiff package to full installation extras, Netbox worker would fail to start if not installed.
  2. Changing mcp package python dependencies to remove python version specification of <3.14 as it failed to get installed for Py3.14
  3. Fixing Netbox Inventory URL handling when it ends with forward slash
  4. Fixing full extras to enlist all dependencies

Full Changelog: 0.19.0...0.20.0

0.19.0

Choose a tag to compare

@dmulyalin dmulyalin released this 09 Jun 10:36

0.19.0

FEATURES

  1. Added device check-sync task to Netbox service to check if device interfaces, ips, bgp, mac are in sync with Netbox
  2. Added device sync-all task to sync all data from live device into Netbox
  3. Adding powershell installation script and updating install instructions - this script install Norfab going through interactive installation process.
  4. Adding run_shell_cmd task to workers to run arbitrary shell command on the host, adding picle shell workers run-shell-command .. command too
  5. Adding ignore_peer_ranges argument to sync bgp peerings task
  6. Adding bearer token authentication support for fastmcp service, together with related task and nfcli shell commands
  7. Adding NFPClient.submit_job() API returning a blocking job future object with events(), result() and send_response() methods for event-aware and interactive client workflows

ENHANCEMENTS

  1. Improving netbox Sync BGP peerings task to make better use of lookup cache for asn, vrf, rir, ip objects resolutions
  2. MCP service policy now enforced for tool calls not only for discovery
  3. Netbox sync device interfaces improved VLAN handling - now it creates vlan if its missing, added vlan_group argument 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.
  4. Netbox service sync IP task updated to honor anycast role for existing Netbox IPs and re-use role anycast for discovered IPs
  5. Refactoring bgp peerings sync to support name template being a jinja2 template string as well as adding extra variables to renderer context
  6. Enhancing bgp syn task to use 5 tuple to represent bgp session identity instead of name, allowing to detect session name changes.

BUGS

  1. Fixing ip sync task bulk update list construction, making sure IDs are always present for items
  2. Fixing IP sync prefixes filtering using bulk_filter
  3. Fixing IP creation logic to check existing ip first, and if not found proceed with find a suitable prefix
  4. Fixing resolve_ip helper function to pickup longest prefix length prefix to create IP in
  5. Fixing resolve_vrf function to detect when multiple VRF with same name present in netbox and to emit warning message to the user

CHANGES

  1. Adding Pydantic task input and output models for all services, refactoring NFCLI shells to use these models.
  2. Moving pydantic models to dedicated per-worker files.
  3. 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
  4. 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

Full Changelog: 0.18.1...0.19.0

0.18.1

Choose a tag to compare

@dmulyalin dmulyalin released this 21 May 09:27

0.18.1

CHANGES

  1. Added CreateIpInput Pydantic model for Netbox create_ip task input validation and used it as input argument for @Task decorator
  2. Added CreateIpBulkInput Pydantic model for Netbox create_ip_bulk task input validation and used it as input argument for @Task decorator
  3. Replaced **kwargs in Netbox create_ip_bulk task with explicit typed arguments matching create_ip signature
  4. Enhanced IP allocation logic for allocating next available prefix when child prefix already contains IPs in Netbox
  5. Enhanced create ip logic for detecting IP address assigned object
  6. Changing norfab to produce json schema for tasks by model fields names instead of aliases by_alias=False.
  7. Updating nornir parse napalm to use nornir task task
  8. Fix create prefix task to make sure to check if /31 subnet can be allocated even if available prefixes return /30
  9. Create ip task enhanced to handle case when multiple parent prefixes matched in Netbox by prefix filter
  10. 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
  11. Adding is_timed_out method to worker Job object to alow monitor job time out from inside tasks

FEATURES

  1. Adding brief mode to get interfaces to return only essential interfaces data

Full Changelog: 0.18.0...0.18.1

0.18.0

Choose a tag to compare

@dmulyalin dmulyalin released this 17 May 09:38

0.18.0

BUGS

  1. Fixing Netbox prefix allocation with parent filtering by dictionary
  2. Fixing netbox crud tasks to use Pydantic model for input validation
  3. Enhancing netbox worker filtering for large number of items to avoid 414 error

CHANGES

  1. Complete refactoring of Netbox sync_device_interfaces task
  2. Complete refactoring of Netbox sync_device_ip task
  3. Dependency updates:
  • mcp 1.26.0 -> 1.27.1

FEATURES

  1. Created Netbox task sync_mac_addresses
  2. 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
  3. Adding Netbox get_topology task to fetch devices and links in topology format

Full Changelog: 0.17.3...0.18.0

0.17.3

Choose a tag to compare

@dmulyalin dmulyalin released this 27 Apr 11:18

0.17.3

ENHANCEMENTS

  1. Improving logic for local ip sourcing for BGP sessions

BUGS

  1. Fixing BGP sessions name forming for Netbox sync bgp tasks
  2. Fixing deepdiff dependency for Netbox service

Full Changelog: 0.17.2...0.17.3

0.17.2

Choose a tag to compare

@dmulyalin dmulyalin released this 26 Apr 09:09

0.17.2

FEATURES

  1. Adding new Netbox sync_bgp_peerings task to synchronize BGP sessions between live devices and NetBox
  2. Adding new Netbox create_bgp_peerings task to create BGP peerings
  3. Adding new Netbox update_bgp_peerings task to update BGP peerings
  4. Nornir Test markdown results adding results summary table when extensive is True

Full Changelog: 0.17.1...0.17.2

0.17.1

Choose a tag to compare

@dmulyalin dmulyalin released this 15 Apr 13:36

0.17.1

CHANGES

  1. Refactored Netbox get_connections task, remove include_virtual arguments, cables argument, now these data always retrieved.
  2. Refactoring Netbox graphql fetch function to use variables, pagination, persistent sessions and threading to enhance data retrieval performance

FEATURES

  1. Netbox get connections added remote interface label extraction for physical interfaces, console port, power ports, front/rear ports
  2. Netbox get connections added remote interface MAC addresses extraction
  3. Nornir tests markdown report added timestamps and duration summary

BUGS

  1. Fixing get connections handling for provider network
  2. Fixing client and worker job db timestamps handling for created_at

Full Changelog: 0.17.0...0.17.1

0.17.0

Choose a tag to compare

@dmulyalin dmulyalin released this 07 Apr 12:14

CHANGES

  1. Updating Netbox get_devices task to use pynetbox for fetching brief device info, fixing bug with pagination
  2. Enhancing Netbox get_devices to cache sites data to reduce amount of API calls
  3. Updating Netbox get_interfaces to use pynetbox for fetching brief interfaces info, fixing bug with pagination
  4. Refactoring Containerlab worker moving it to dedicated directory.
  5. Refactoring FastAPI worker moving it to dedicated directory.
  6. Refactoring Workflow worker moving it to dedicated directory.
  7. Refactoring FastMCP worker moving it to dedicated directory.

FEATURES

  1. Adding agentic AI capabilities to the NorFab client via NFPClient.get_agent() method:

    • New norfab/core/agent.py module with NFPAgent class — 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_profiles section in inventory.yaml
    • New norfab[clientagent] optional dependency group
  2. 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 the q parameter
    • crud_read — retrieve objects by ID(s) or filter dict(s), supports pagination and field selection
    • crud_create — create one or multiple objects in a single request, supports dry_run preview
    • crud_update — partial (PATCH) or full (PUT) update of one or multiple objects by ID, supports dry_run diff
    • crud_delete — delete one or multiple objects by ID, supports dry_run preview
    • crud_get_changelogs — retrieve object change history, supports NetBox 4.0+ with automatic fallback to older versions
  3. FastMCP service - adding MCP tool exposure policy via inventory tools.policy:

  • tools.policy is an ordered list of policy entries with service, tasks, and action keys
  • service accepts glob patterns matched against NorFab service names
  • tasks accepts glob patterns matched against service task names
  • action supports allow or reject
  • Policies are evaluated top-down, first matching entry wins
  • If no policy entry matches, tool is allowed by default

Full Changelog: 0.16.6...0.17.0