# testbed

Published articles for testbed.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## From Intent to Reality: Driving pyATS Tests from NetBox Against a CML2 Fabric

DevFeed: [From Intent to Reality: Driving pyATS Tests from NetBox Against a CML2 Fabric](<https://devfeed.tech/articles/from-intent-to-reality-driving-pyats-tests-from-netbox-against-a-cml2-fabric-30871.md>)

Original publisher: [Read original article](<https://brent.leekley.me/blog/netbox-intent/>)

Author: Brent Leekley

Published: 2026-06-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [brent.leekley.me blog](<https://devfeed.tech/sources/brent-leekley-me-blog.md>)

Topics: [NetBox](<https://devfeed.tech/topics/netbox.md>), [Network](<https://devfeed.tech/topics/network.md>), [Cisco](<https://devfeed.tech/topics/cisco.md>), [data](<https://devfeed.tech/topics/data.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [cisco-modeling-labs](<https://devfeed.tech/tags/cisco-modeling-labs.md>), [cml](<https://devfeed.tech/tags/cml.md>), [cml2](<https://devfeed.tech/tags/cml2.md>), [custom-fields](<https://devfeed.tech/tags/custom-fields.md>), [genie](<https://devfeed.tech/tags/genie.md>), [ids](<https://devfeed.tech/tags/ids.md>), [intent-based-networking](<https://devfeed.tech/tags/intent-based-networking.md>), [netbox](<https://devfeed.tech/tags/netbox.md>), [network](<https://devfeed.tech/tags/network.md>), [network-automation](<https://devfeed.tech/tags/network-automation.md>), [network-testing](<https://devfeed.tech/tags/network-testing.md>), [ospf](<https://devfeed.tech/tags/ospf.md>), [pyats](<https://devfeed.tech/tags/pyats.md>), [pynetbox](<https://devfeed.tech/tags/pynetbox.md>), [router-id](<https://devfeed.tech/tags/router-id.md>), [source-of-truth](<https://devfeed.tech/tags/source-of-truth.md>), [spine-leaf](<https://devfeed.tech/tags/spine-leaf.md>), [structured](<https://devfeed.tech/tags/structured.md>), [testbed](<https://devfeed.tech/tags/testbed.md>)

### AI overview

This tutorial shows how to store declared OSPF router-IDs in NetBox and use Cisco pyATS to compare them with the router-IDs on a live CML2 spine-leaf fabric. The comparison turns network intent validation into a pass-or-fail test.

### Source excerpt

NetBox holds the intent (declared OSPF router-IDs), a CML2 spine-leaf is the network under test, and pyATS is the judge. Close the loop and prove the live network matches what you said it should be, with real pass and fail output.

## Build the Lab Once, Test It Forever: A CML2 Spine-Leaf Wired for pyATS

DevFeed: [Build the Lab Once, Test It Forever: A CML2 Spine-Leaf Wired for pyATS](<https://devfeed.tech/articles/build-the-lab-once-test-it-forever-a-cml2-spine-leaf-wired-for-pyats-30867.md>)

Original publisher: [Read original article](<https://brent.leekley.me/blog/build-the-lab-once/>)

Author: Brent Leekley

Published: 2026-06-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [brent.leekley.me blog](<https://devfeed.tech/sources/brent-leekley-me-blog.md>)

Topics: [Network](<https://devfeed.tech/topics/network.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Cisco](<https://devfeed.tech/topics/cisco.md>), [Code](<https://devfeed.tech/topics/code.md>), [API](<https://devfeed.tech/topics/api.md>), [Parser](<https://devfeed.tech/topics/parser.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [cisco](<https://devfeed.tech/tags/cisco.md>), [cisco-modeling-labs](<https://devfeed.tech/tags/cisco-modeling-labs.md>), [cml](<https://devfeed.tech/tags/cml.md>), [cml2](<https://devfeed.tech/tags/cml2.md>), [code](<https://devfeed.tech/tags/code.md>), [genie](<https://devfeed.tech/tags/genie.md>), [iol-xe](<https://devfeed.tech/tags/iol-xe.md>), [network-automation](<https://devfeed.tech/tags/network-automation.md>), [network-testing](<https://devfeed.tech/tags/network-testing.md>), [ospf](<https://devfeed.tech/tags/ospf.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [pyats](<https://devfeed.tech/tags/pyats.md>), [spine-leaf](<https://devfeed.tech/tags/spine-leaf.md>), [testbed](<https://devfeed.tech/tags/testbed.md>), [virl2-client](<https://devfeed.tech/tags/virl2-client.md>)

### AI overview

This tutorial describes a four-node spine-leaf lab in Cisco Modeling Labs 2 (CML2) that generates a Cisco pyATS testbed from the CML API. The approach treats the lab definition as the source of truth so regenerated inventories remain aligned with topology changes, and uses an OSPF underlay with a management network.

### Source excerpt

Stop hand-maintaining your pyATS testbed. Build a four-node spine-leaf in CML2 as code, then generate the testbed straight from the CML API so it never drifts from the lab, with live Genie-parsed proof over a System Bridge management network.