Automation and Programmability
The Automation and Programmability domain (10%) tests how software-defined networking, APIs, data formats, and configuration-management tools change network operations. Expect definition-based questions plus simple JSON or REST interpretation.
SDN and controller-based architecture
Traditional networks distribute the control plane across devices; SDN centralizes it in a controller and separates the control plane from the data plane. The controller exposes a northbound API to applications and automation tools and uses southbound protocols such as NETCONF, RESTCONF, and OpenFlow to reach devices. Cisco DNA Center manages campus fabrics; SD-WAN controllers manage WAN overlays. Intent-based networking translates business intent into policy and verifies it continuously.
APIs and data formats
REST APIs are stateless and use HTTP verbs: GET reads, POST creates, PUT replaces, PATCH partially updates, and DELETE removes. Status 200 is OK, 201 created, 400 bad request, 401 unauthorized, and 404 not found. JSON is common: objects in braces, arrays in brackets, strings in quotes, plus numbers, booleans, and null. XML uses tags; YAML uses indentation and is common in Ansible playbooks. JSON does not allow comments.
Configuration management and IaC
Ansible is agentless, typically using SSH and YAML playbooks; Puppet and Chef use agents and their own DSLs. Declarative tools describe the desired end state; imperative scripts list steps. CI/CD pipelines test and deploy changes, and version control such as Git provides history and rollback. Python is used with libraries such as requests for REST and Netmiko for CLI automation.
Python basics
Know lists (ordered, indexable), dictionaries (key-value), loops, functions, and importing modules. A dictionary access such as device['hostname'] returns a value; a list index starts at 0.
Worked example
A GET to https://controller/api/v1/devices returns 200 with {"devices":[{"hostname":"R1","up":true},{"hostname":"R2","up":false}]}. The expression response["devices"][1]["hostname"] returns R2; [1] selects the second list element and ["hostname"] selects the key. A POST to the same collection creates a resource, while PUT replaces an existing one.
Traps
Confusing northbound (controller to apps) with southbound (controller to devices); using PUT when only one field changes (PATCH is correct); assuming Ansible needs an agent; and treating YAML indentation as optional.