Skip to main content

fcli

ci SR Linux PyPI

fcli shows a network engineer what a Nokia SR Linux fabric looks like, what is wrong with it, and what changed. It answers those questions from live gNMI state, with no agents or controller on the nodes.

Point it at a containerlab topology or a Nornir inventory, and you get:

  • Overview: a fabric dashboard and a topology drawn from LLDP, with each node's role (leaf, spine, DC gateway, client) worked out from what it runs.
  • Insight: the checks' findings grouped by root cause, so one broken cable is one incident rather than a dozen alarms, and a timeline of what changed, including who committed which configuration change, with baselines to compare against. All of it is kept on disk and survives a restart.
  • Troubleshooting: fabric-wide questions answered in one step. Where is this MAC or IP? How does this leaf reach that address? What does this service look like on every node?

fcli only reads. It never changes configuration.

Quick start

uv tool install git+https://github.com/srl-labs/fcli     # or: pip install nornir-srl

fcli -t topo.clab.yml server                             # live web UI on http://127.0.0.1:8080

No lab at hand? Run fcli in GitHub Codespaces against a demo EVPN-VXLAN fabric of 8 SR Linux nodes.

Three ways to use it

Surface Command Use it for
Live server fcli server Day-to-day operation: dashboard, topology, incidents, timeline, live tables, path view, AI chat
CLI fcli <report> One-shot answers, scripts and CI; output as a table, JSON, YAML or CSV
MCP fcli-mcp AI agents (Claude Desktop, Gemini CLI, …) querying the fabric

All three share the same reports. A column means the same thing on every surface and on every tested SR Linux release.

A troubleshooting session

1. What is wrong? Start from the incidents: every check's findings grouped by root cause, worst first.

fcli -t topo.clab.yml incidents

In the server, the Overview health card and the Topology health overlay show the same incidents. Ask → 🩺 Triage has an LLM summarise them, if a provider key is set.

2. What changed? The server's Changes page lists every BGP, BFD, IGP, port, LLDP, designated-forwarder, MAC and route change as it happened, and every configuration commit: who made it, with which comment, and a link to the lines it changed. Set a named baseline in the 📌 Baseline menu before a maintenance window, then look at since: baseline afterwards to see what it changed.

fcli -t topo.clab.yml history --since 1d -k config     # what the server recorded, from disk
fcli -t topo.clab.yml -i node=leaf1 config-history --diff   # what leaf1's last commit changed
fcli -t topo.clab.yml drift before-upgrade             # the fabric now against a kept baseline

3. Follow the traffic.

fcli -t topo.clab.yml where 00:C1:AB:00:01:21          # who owns this host, any duplicates?
fcli -t topo.clab.yml path leaf1 10.0.1.4 --ni ipvrf-1 # every ECMP branch, through the tunnels
fcli -t topo.clab.yml service subnet-1                 # one service, as each node sees it

4. Drill into the detail.

fcli -t topo.clab.yml bgp-peers -f state=active        # sessions that are not up
fcli -t topo.clab.yml -i role=leaf mac -f NI=macvrf-202 # MAC table, leaves only
fcli -t topo.clab.yml ipv4-rib -a 192.168.0.7          # longest-prefix match in every VRF

-i key=value limits the run to some nodes, using the topology labels or inventory data. -f column=regex filters rows. fcli --help lists all the reports, and fcli <report> --help shows each one's options.

5. Gate a change. fcli checks exits non-zero when it finds an error, and fcli snapshot and fcli diff compare a report before and after a change.

What it covers

  • Underlay: interfaces and sub-interfaces, LAG, LLDP, BFD, IS-IS, OSPF, IPv4/IPv6 route tables, static routes, tunnel table
  • Overlay: BGP peers and RIBs, including EVPN by route type, VPN-IPv4/IPv6, and the routes received from or sent to each peer; network instances, MAC, IRB, ethernet segments, VXLAN, ARP/ND
  • Platform: system info, CPU, memory and forwarding-table utilisation, hardware components, optics
  • Configuration: each node's commit log, the running configuration kept after every commit (secrets redacted), and diffs between them as set / ... lines
  • Checks: BGP, BFD and IGP down; interface down or erroring; one-sided LLDP; MTU mismatch; BGP and IGP sessions configured differently on their two ends; EVPN service mismatch; designated-forwarder disagreement; resources; hardware; optics; flapping

fcli does not cover ACLs, QoS, multicast or SRv6. path works out forwarding from the route tables, so it doesn't send probe traffic or test the data plane.

Before you deploy it

  • Access: the web server has no authentication. It listens on localhost by default. Put it behind a reverse proxy before using --listen 0.0.0.0.
  • TLS: gNMI always uses TLS, but node certificates are not verified unless you pass --cert-file (or set path_cert in the inventory). That is fine for labs. Set it up for production fabrics.
  • gNMI: the server opens one gNMI session per node, well within SR Linux's default limit of 20. The default port is 57400. Set another with -p.
  • History: the timeline, the baselines and the configurations are kept in one SQLite file per fabric under ~/.local/state/fcli/history/, 30 days of changes by default (--history-days, --no-history). The configurations are redacted, but the directory is still readable by its owner only. Acknowledgements are kept across restarts with --persist-acks.

Documentation

Topic
Installation and inventory uv, pip, Docker, Codespaces, containerlab and Nornir inventories, gNMI TLS
Live server Options, the browser UI, Ask (LLM) setup, HTTP API
CLI reports Options, filters, examples, debug logging
MCP server Tools and client configuration
Reports Every report and where it is available; tested SR Linux releases
Health Incidents, checks, timeline, baseline, acknowledgements
History What is kept on disk, baselines that last, configurations and their diffs, secrets
Lenses where, path, service
Topology How node roles and clients are worked out
Live data gNMI subscriptions, caching and recovery

Found a bug or missing a feature? Open an issue.

Metadata

Release files for nornir-srl 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nornir-srl 0.9.1
File Size Uploaded
nornir_srl-0.9.1.tar.gz 7.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nornir-srl 0.9.1
File Interpreter ABI Platform
nornir_srl-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 7.7 MB

Release files / nornir_srl-0.9.1.tar.gz

Download URL nornir_srl-0.9.1.tar.gz
Size 7.2 MB
Tags Source
SHA-256 checksum
How to use checksums
daa7a8a6f8e1242bd1d6e86bc7fbe1f54d046904788e48841d1eef422baff858
BLAKE2b-256 checksum
How to use checksums
8a66b9ac48480c3bf0b2926940fccd6e637f45c06d2b3221a1d64ecbd123ee4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / nornir_srl-0.9.1-py3-none-any.whl

Download URL nornir_srl-0.9.1-py3-none-any.whl
Size 469.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ecf00af0f25adb93921145298ddc97a14433683116677228f3d253dc51f8b4b3
BLAKE2b-256 checksum
How to use checksums
b5381977c5f77d538f559930e966a90017628f55feef769877b946d494192736
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.9.2

2 release files

This release

0.9.1 This release

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.22

2 release files

0.2.21

2 release files

0.2.20

2 release files

0.2.19

2 release files

0.2.18

2 release files

0.2.17

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.11

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.8

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page