The fabric
- Cable up
- BGP down
- Cable down
- prod
- storage
What runs now
Last game day
Every night at 03:30 UTC the failure tests run again on this lab: a spine is frozen, a spine loses every cable, a border goes down. Measured, not estimated.
Who reaches whom
Every 30 s each server pings every other server and the internet. A tenant is its own VRF: prod reaches prod and the internet, storage reaches only storage.
- answers, as the intent wants
- no answer, as the intent wants
- wrong
Routers
BGP sessions and BFD as each router reports them, against what the intent says it must have.
| Router | ASN | Loopback | BGP | BFD | State |
|---|
Deploys and repairs
What the deploy agent and the game day did, newest first.
Internet edge
The borders announce one summary per tenant with internet access, and accept only a default route. Storage never leaves the fabric.
Default route on each leaf
| Leaf | Tenant | Next hops |
|---|
How a change reaches this network
Intent
One YAML file describes the fabric: switches and their AS numbers, tenants, VLANs, servers and their ports, the ISP policy, BFD timers. Nothing else is written by hand.
Render
Python and Jinja turn the intent into an FRR config and a Linux script for every device. Both are committed, so a pull request shows the exact config lines it changes.
Static proofs
FRR parses every config. Batfish then models the whole network from the configs alone and proves the intent: every session, route targets, tenant isolation, only summaries to the ISP.
Live lab on GitHub
The fabric boots in containerlab on GitHub's machine. 58 tests check sessions, BFD, ECMP, EVPN, routing tables and every ping, then freeze a spine, cut cables and stop a border, timing the failover.
Deploy agent
This server pulls main once all three checks are green; GitHub holds no key to it. Configs go out with frr-reload one router at a time, canary first, each checked before the next. Any failure rolls back.
Every minute, every night
Every minute the agent compares each router with Git and undoes anything typed by hand. Every night the failure tests run again here, and the numbers above come from that run.
Built by Touseef Ahmed, www.touseefahmed.com. Source, configs and tests: github.com/ahmed-touseef/evpn-fabric-cicd