Automation and Programmability
Automation and Programmability
This domain tests how modern networks are controlled and configured programmatically: SDN architecture, controller-based networking, REST APIs, data formats, configuration management, and basic Python. Expect questions that compare traditional CLI workflows with controller and API workflows.
Core rules
- SDN separates the control plane (decisions) from the data plane (forwarding). A controller offers northbound APIs to applications and southbound APIs to devices. Northbound APIs are often REST/JSON; southbound may be NETCONF, RESTCONF, OpenFlow, or vendor APIs.
- REST uses HTTP methods: GET reads, POST creates, PUT replaces, PATCH partially updates, DELETE removes. Common status codes: 200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Server Error.
- JSON values include object, array, string, number, boolean, and null. Objects use key/value pairs; arrays use ordered lists. YAML uses indentation and is human-readable; spaces, not tabs, are required.
- Configuration management: Ansible is agentless and typically uses SSH; Puppet and Chef use agents. Terraform is declarative and uses providers to manage infrastructure. Python's
requestslibrary sends HTTP requests;response.json()parses JSON. - Cisco controller platforms include Catalyst Center (formerly DNA Center) for enterprise intent-based networking and SD-WAN Manager (vManage) for SD-WAN. Model-driven telemetry streams operational data instead of polling.
Worked example
A script calls GET https://controller/api/v1/device with a valid token. The response is 200 and a JSON array. In Python: r = requests.get(url, headers=headers, verify=False); devices = r.json(); then for d in devices: print(d['hostname']). If the call returns 401, the token is missing or expired, not the URL. If it returns 404, check the path. If it returns 500, the controller or backend failed.
Traps
- Treating POST as idempotent; repeating it can create duplicate objects. PUT is the usual replace operation.
- Using tabs in YAML or misindenting a nested list, which changes the data structure.
- Saying Ansible requires an agent; it is normally agentless.
- Assuming a controller removes the need for underlay routing and switching; the underlay still forwards packets.