Network Controllers
Controller Architecture: Northbound, Southbound, and Centralized State
What you'll learn
- The difference between a controller's northbound and southbound interfaces
- Why a controller's centralized state is architecturally different from Ansible's orchestration
- What capabilities a controller may add beyond orchestration
- That the learner's code only ever touches the northbound side
Listen to a guided explanation of this lesson.
Spoken narration isn't supported in this browser.
Two interfaces, one controller
A controller has two distinct sides. Northbound is the API you call — the interface exposed toward automation, dashboards, and integrations. Southbound is how the controller actually talks to the devices it manages — SSH, NETCONF, SNMP, vendor-proprietary protocols, or a mix. Your code never touches southbound directly; it's the controller's own concern.
- Your codePython, using requests — nothing new here
- Northbound APIthe only side your code ever touches
- Controllerdecides how to actually reach each device
- SouthboundSSH, NETCONF, SNMP, proprietary — opaque to you
- Devices
Not "Ansible with centralized state"
This needs to be said directly, because the two can look similar from a distance: Ansible already handles many devices from one playbook. A controller is not just a bigger version of that.
- Stateless orchestrationeach run re-derives what it needs
- No persistent, centralized modelof the network's current state
- You run the playbook when you decide to
- Centralized, persistent statethe controller holds this continuously
- Query current state anytimewithout triggering a new run
- Asynchronous task/job lifecyclecovered fully in Lesson 4
The real distinction
Ansible orchestrates execution across devices, on demand, each run independent of the last. A controller maintains a standing, centralized model of inventory, state, and (often) policy — queryable at any time, not just during a run — and coordinates southbound device operations to keep reality aligned with that model. Both are legitimate; they solve different problems.
What a controller may add
Centralized inventory -- one queryable source, not per-tool device lists
Centralized state -- continuously maintained, not re-derived per run
Policy / intent -- describe desired outcome, not CLI steps
Task / job lifecycle -- asynchronous, trackable (Lesson 4)
Assurance / observed state -- separately verifiable (Lesson 6)
Auditability / RBAC -- who changed what, with what permissionNot every real controller implements all six identically — this list names what the architecture makes possible, not a guaranteed checklist for every product.
Key takeaways
- Northbound is the API automation calls; southbound is how the controller reaches devices — invisible to, and irrelevant for, the calling code.
- A controller is not 'Ansible with centralized state' — it maintains a standing, continuously-queryable model of the network, not something re-derived fresh on each run.
- A controller MAY provide centralized inventory, centralized state, policy/intent abstraction, async task tracking, assurance, and RBAC/auditability — real platforms vary in which they implement.
- Automation code only ever touches the northbound side, using the exact requests skills from Phase 3.1 — nothing new to learn there.
Done with this lesson?
Next lesson
Inventory and Resources: Querying a Controller's View of the Network