Chapter 9: Cisco Catalyst Center — Architecture and Day 0 Provisioning
Learning Objectives
Describe Cisco Catalyst Center's architecture, API model, and role in intent-based networking
Implement controller-based Day 0 provisioning using the Plug and Play (PnP) workflow
Use Catalyst Center REST APIs for device discovery, onboarding, and site assignment
Automate network design and policy deployment using the dnacentersdk / catalystcentersdk Python library
Handle asynchronous task-based API patterns common to all Catalyst Center mutating operations
9.1 Catalyst Center Architecture and APIs
Pre-Check — Section 9.1: Architecture and APIs
1. What does the term "Intent-Based Networking" mean in the context of Catalyst Center?
2. Which Catalyst Center API plane is used by external automation tools to issue configuration commands?
3. How long is a Catalyst Center authentication token valid by default?
4. When a Catalyst Center mutating operation (POST/PUT/DELETE) returns HTTP 202, what does the response body contain?
5. Which HTTP header must every Catalyst Center Intent API request include after authentication?
9.1.1 From DNA Center to Catalyst Center: Intent-Based Networking
Cisco Catalyst Center — formerly DNA Center — is Cisco's flagship Intent-Based Networking (IBN) controller. The exam treats "DNA Center" and "Catalyst Center" as synonymous. Traditional management works bottom-up: engineers configure each device with CLI. IBN inverts the relationship — you declare the outcome and the controller derives the per-device configuration.
Catalyst Center delivers IBN through three capabilities: Design (sites, IP pools, network settings), Policy (SD-Access segmentation, group-based policy), and Assurance (telemetry, AI/ML analytics, root-cause analysis).
9.1.2 Platform Architecture and Communication Planes
Catalyst Center exposes four communication planes. The southbound interface is hidden from automation engineers — you call the Northbound Intent API, and Catalyst Center translates that intent into NETCONF, SSH, SNMP, or OpenConfig as needed per device type.
9.1.3 The Intent API: Structure and Authentication
The Intent API exposes over 1,000 operations organized into functional domains. All calls use the base path /dna/intent/api/v1/ (v2 for some newer endpoints) and require an X-Auth-Token header.
Authentication uses a POST to /dna/system/api/v1/auth/token with Basic credentials encoded in Base64. The response contains a JWT-like token valid for 1 hour. The catalystcentersdk handles refresh automatically.
sequenceDiagram
participant Client as Automation Client
participant CC as Catalyst Center
participant API as Intent API
Client->>CC: POST /dna/system/api/v1/auth/token Authorization: Basic base64(user:pass)
CC-->>Client: 200 OK {"Token": "eyJhbGci..."}
Note over Client: Token valid for 1 hour
Client->>API: GET /dna/intent/api/v1/network-device X-Auth-Token: eyJhbGci...
API-->>Client: 200 OK [device list]
Client->>API: POST .../pnp-device/site-claim X-Auth-Token: eyJhbGci...
API-->>Client: 202 Accepted {"taskId": "abc-123"}
Note over Client: Poll taskId — re-auth after 60 min
9.1.4 The Asynchronous Task Pattern
All mutating operations (POST, PUT, DELETE) are asynchronous. The response returns immediately with a taskId. You must poll GET /dna/intent/api/v1/task/{taskId} until endTime is set, then check isError and failureReason. Think of it like a delivery tracking number — you check the portal periodically rather than standing at the loading dock.
flowchart TD
A["POST / PUT / DELETE"] --> B["202 Accepted\n{taskId: 'abc-123'}"]
B --> C["GET /task/abc-123"]
C --> D{endTime set?}
D -- No --> E["Wait interval (5s)"]
E --> F{Max attempts?}
F -- No --> C
F -- Yes --> G["Raise TimeoutError"]
D -- Yes --> H{isError true?}
H -- Yes --> I["Raise RuntimeError\nLog failureReason"]
H -- No --> J["Operation Successful"]
Key Points — Section 9.1
Catalyst Center = DNA Center (treat as synonymous on the exam); it is Cisco's IBN controller
The southbound interface is hidden from automation — you always call the Northbound Intent API (1,000+ operations)
Authentication produces a 1-hour bearer token passed via X-Auth-Token header; the SDK refreshes it automatically
All mutating API calls return HTTP 202 with a taskId; always poll until endTime is set and check isError
Four communication planes: Northbound (automation), Southbound (devices), Eastbound (events), Westbound (ITSM)
Post-Check — Section 9.1: Architecture and APIs
1. An automation script POSTs to /dna/intent/api/v1/image/distribution and receives a 202 response. What should the script do next?
2. Which Catalyst Center plane is used for ServiceNow ITSM integration?
3. What is the correct endpoint to obtain a Catalyst Center authentication token?
4. A task poll returns {"endTime": 1700000000, "isError": true, "failureReason": "Device unreachable"}. What does this mean?
5. Why does Catalyst Center hide the southbound interface from automation engineers?
9.2 Controller-Based Day 0 Provisioning
Pre-Check — Section 9.2: Day 0 Provisioning
1. What is the primary DHCP option used to redirect a PnP-capable device to Catalyst Center?
2. Which PnP device state means the device contacted Catalyst Center but no admin action has been taken?
3. What is the correct order of the five Day 0 PnP provisioning steps?
4. Which API endpoint triggers the actual provisioning push during PnP Day 0?
5. A Cisco IOS-XE device boots with no persistent configuration. What mechanism activates PnP discovery?
9.2.1 Plug and Play Zero-Touch Provisioning
PnP allows a technician to unbox a device, connect cables, and walk away. Catalyst Center handles the rest. Every Cisco IOS-XE device ships with a PnP IOS Agent in its bootstrap startup config. When the device boots with no persistent configuration, the agent activates and discovers the controller via one of three methods:
Method
Mechanism
Best For
DHCP Option 43
Device sends Option 60 "ciscopnp"; DHCP server returns controller IP in Option 43
Preferred method; most reliable
DNS Resolution
Device resolves pnpserver.<domain> A record pointing to controller VIP
When DHCP scopes cannot be modified
Cisco PnP Connect
Device contacts devicehelper.cisco.com; org registers controller in Smart Account portal
Large-scale greenfield; no DHCP/DNS changes possible
PnP Discovery Sequence
1
Device boots with no configFactory PnP IOS Agent activates automatically
2
DHCP DISCOVER with Option 60 "ciscopnp"Device signals it is PnP-capable to the DHCP server
3
DHCP OFFER with Option 43Server returns: 5A1D;B2;K4;I<CC-IP>;J443
4
Device connects to Catalyst Center HTTPSPnP agent opens TLS session to controller VIP:443
5
Device appears as "Unclaimed" in Catalyst CenterAdmin or automation claims device → provisioning begins
9.2.2 PnP Device States
stateDiagram-v2
[*] --> Planned : Admin pre-registers\nby serial number
[*] --> Unclaimed : Device boots and contacts\nCatalyst Center
Planned --> Unclaimed : Device contacts CC;\nmatched to pre-staged record
Unclaimed --> Onboarding : Admin or automation\nclaims the device
Onboarding --> Provisioned : Image push + template\napplied successfully
Onboarding --> Error : Image or config\npush fails
Error --> Onboarding : Admin resolves error;\nre-triggers claim
Provisioned --> [*] : Device enters\nmanaged inventory
9.2.3 The Five-Step Day 0 Provisioning Workflow
flowchart TD
S1["Step 1: Create Day 0 Template\nPOST .../template-programmer/project/{id}/template\nPOST .../template-programmer/template/version (commit)"]
S2["Step 2: Create Network Profile\nPOST /api/v1/siteprofile\nAssociate template with device type"]
S3["Step 3: Assign Sites to Network Profile\nPOST /api/v1/siteprofile/{profile_id}/site/{site_id}"]
S4["Step 4: Import Device into PnP Inventory\nPOST .../onboarding/pnp-device/import\nPre-stage by serial number"]
S5["Step 5: Claim the Device\nPOST .../onboarding/pnp-device/site-claim\nSite + template + variables → triggers push"]
EXEC["Catalyst Center Executes:\n1. Image deployment (if needed)\n2. Template rendering with variables\n3. Configuration push\n4. Device registered in managed inventory"]
S1 --> S2 --> S3 --> S4 --> S5 --> EXEC
The claim step (Step 5) is the trigger. Its payload bundles site ID, device ID, template ID, and per-device variable values (hostname, management IP, gateway, etc.). Catalyst Center executes image upgrade (if needed), renders the template, pushes the config, and adds the device to managed inventory — all asynchronously via a taskId.
Pre-staging (Step 4 done before the device ships) is a best practice: register the serial number in the PnP inventory so the device transitions directly from Unclaimed to Onboarding when it makes first contact, with zero human intervention required on-site.
Key Points — Section 9.2
PnP uses three discovery methods in priority order: DHCP Option 43 (preferred), DNS (pnpserver.<domain>), Cisco PnP Connect cloud portal
Every Cisco IOS-XE device ships with a PnP IOS Agent that activates when the device boots without a saved configuration
Templates must be committed (versioned) before they can be used in a claim operation
Pre-staging by serial number before device arrival eliminates day-of human intervention at branch sites
Post-Check — Section 9.2: Day 0 Provisioning
1. What additional action must be taken on a Day 0 template before it can be referenced in a site-claim payload?
2. A branch device contacts Catalyst Center and was pre-staged by serial number. What state will it be in when first contact is made?
3. A network team cannot modify DHCP scopes at a new branch site but controls the DNS server. Which PnP discovery method should they configure?
4. In the site-claim payload, what is the purpose of the configParameters array?
5. What network prerequisite is required on the upstream switch port connected to a new PnP device?
9.3 Network Design Automation
Pre-Check — Section 9.3: Network Design and SWIM
1. What are the four levels of the Catalyst Center site hierarchy in order?
2. What does the SWIM distribute-then-activate two-phase approach achieve?
3. Which endpoint retrieves a list of all sites in the Catalyst Center hierarchy?
9.3.1 Site Hierarchy: The Organizing Principle
The site hierarchy is the primary key linking devices to configuration policies, IP pools, templates, and network settings. Every provisioning workflow requires resolving the correct siteId UUID first. The hierarchy follows four levels:
Global
└── Area (geographic region, country, or logical grouping)
└── Building (physical facility)
└── Floor (specific floor within a building)
Example: Global / US / San-Jose / HQ-Building-1 / Floor-2
The catalystcentersdk makes hierarchy creation straightforward. Call catalyst.sites.create_site(type="area" | "building" | "floor", site={...}) for each level, using parentName to position the node correctly.
9.3.2 Network Settings and IP Pools
Each site can have per-site DNS, NTP, DHCP, and AAA settings configured via POST /dna/intent/api/v1/network, plus IP address sub-pools reserved via POST /dna/intent/api/v1/reserve-ip-subpool. These settings propagate to all devices provisioned at that site, ensuring branch-wide consistency without per-device manual configuration.
9.3.3 Software Image Management (SWIM)
SWIM manages the full software image lifecycle: import approved images, tag a "golden" image per device platform, distribute to device flash, and activate. All SWIM operations are asynchronous.
Operation
Endpoint
Description
Import
POST .../image/importation/source/url
Pull image from URL into CC repository
Query
GET .../image/importation
List images; filter by platform
Tag Golden
POST .../image/importation/golden
Mark image as standard for a device family
Distribute
POST .../image/distribution
Copy image to device flash (no reload)
Activate
POST .../image/activation/device
Reload device to boot from distributed image
The distribute → activate split is key: distribute during business hours (device keeps running the old image), then activate (reload) during the maintenance window. This cuts the risk window from hours to the reload time only.
Key Points — Section 9.3
Site hierarchy (Global → Area → Building → Floor) is the anchor for all Catalyst Center provisioning and policy operations
Always resolve siteId UUID first — sites are the primary key for IP pools, templates, and network settings
SWIM operations are asynchronous; always poll the returned taskId
SWIM distribute-then-activate allows image pre-staging during business hours with reload deferred to a maintenance window
Network settings (DNS, NTP, DHCP, AAA) assigned at site level propagate automatically to all devices provisioned there
Post-Check — Section 9.3: Network Design and SWIM
1. A SWIM distribution task returns a taskId. The task completes with isError: false. What must happen next before the device runs the new image?
2. Why is resolving the siteId UUID the first step in virtually every Catalyst Center automation workflow?
3. An automation script creates a site hierarchy using catalyst.sites.create_site(). When creating a Building node, which field specifies where it sits in the hierarchy?
9.4 Practical Catalyst Center API Automation
Pre-Check — Section 9.4: SDK and Automation
1. What are the two package names for the Cisco Catalyst Center Python SDK?
2. What environment variable configures the Catalyst Center base URL for the SDK?
9.4.1 The catalystcentersdk Python Library
The SDK (pip install catalystcentersdk or legacy pip install dnacentersdk) is the primary automation interface for ENAUTO 300-435. Both packages are functionally equivalent; the legacy name persists due to broad adoption.
Feature
Behavior
Token management
Obtains token on instantiation; silently refreshes on expiry
Rate-limit handling
Catches HTTP 429, retries with automatic backoff
Dot-notation access
JSON fields accessible as Python object attributes
IDE autocompletion
Method namespaces mirror API domain names
Custom caller
Covers API endpoints not yet wrapped in named methods
Env var support
Reads credentials from CATALYST_CENTER_* env vars
9.4.2 SDK Instantiation and Version Compatibility
Always instantiate using environment variables to avoid hard-coded credentials. Pin the SDK version in requirements.txt to match the controller deployment version — mismatches cause silent method signature failures.
from catalystcentersdk import api
# Zero hard-coded credentials (reads CATALYST_CENTER_* env vars)
catalyst = api.CatalystCenterAPI()
# Explicit instantiation for multi-controller scripts
catalyst = api.CatalystCenterAPI(
username="devnetuser",
password="Cisco123!",
base_url="https://sandboxdnac.cisco.com:443",
version="3.1.3.0",
verify=False # use True in production
)
9.4.3 Core Automation Patterns
Every Catalyst Center automation workflow follows the same pattern:
Resolve UUIDs (site, template, device) by querying existing resources
Execute the mutating operation (claim, distribute, discover, etc.)
Extract the returned taskId
Poll until endTime is set
Check isError — raise/log if true, continue if false
The custom_caller pattern handles endpoints not yet wrapped in named SDK methods: