Cisco ENNA 300-445 study materials
Cisco ENNA 300-445 study resources

Cisco ENNA 300-445: Automation and Programmability

Cisco ENNA 300-445 · Work through your exam, one topic at a time.

All guide sections

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 requests library 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.