Automazione di rete e API: il contesto CCNA
Nelle reti moderne la configurazione manuale via CLI non scala. L’automazione si appoggia a interfacce programmatiche (API) che permettono a script e controller (come Cisco DNA Center) di leggere e modificare lo stato dei device in modo strutturato. Per il CCNA devi saper riconoscere come funziona una REST API, leggere il JSON e distinguere i tool di configuration management.
Le REST API: caratteristiche fondamentali
Una REST API (Representational State Transfer) è un’interfaccia che opera tipicamente su HTTP/HTTPS (porte 80/443). È il modello dietro le northbound API di un controller SDN.
Tre proprietà chiave:
- Client-server: il client invia una richiesta HTTP a un URI (endpoint), il server risponde.
- Stateless: ogni richiesta è indipendente e autosufficiente. Il server non conserva lo stato della sessione tra una chiamata e l’altra; ogni richiesta deve contenere tutte le informazioni necessarie (es. token di autenticazione).
- Cacheable e a livelli.
CRUD mappato sui metodi HTTP
Le operazioni CRUD si mappano direttamente sui verbi HTTP:
| Operazione | Metodo HTTP | Significato |
|---|---|---|
| Create | POST | Crea una nuova risorsa |
| Read | GET | Legge/recupera dati (non modifica nulla) |
| Update | PUT (o PATCH) | Modifica una risorsa esistente |
| Delete | DELETE | Elimina una risorsa |
Status code della risposta
Il server risponde con un codice numerico che ne indica l’esito:
- 2xx – successo:
200 OK,201 Created. - 3xx – redirezione.
- 4xx – errore del client:
401 Unauthorized(autenticazione mancante/errata),403 Forbidden,404 Not Found. - 5xx – errore del server:
500 Internal Server Error.
Ricorda: 4xx = colpa del client, 5xx = colpa del server.
Interpretare il JSON
I dati scambiati sono tipicamente in JSON (o XML). Devi saperne riconoscere la struttura:
- Oggetto → racchiuso in parentesi graffe
{ }, contiene coppie key-value. - Coppia key-value →
"chiave": valore, separate da virgola. - Array → racchiuso in parentesi quadre
[ ], lista ordinata di elementi. - I valori possono essere stringhe (tra virgolette), numeri, booleani (
true/false),null, oggetti o array annidati.
{
"interface": {
"name": "GigabitEthernet0/1",
"enabled": true,
"ipv4": ["10.0.0.1", "10.0.0.2"]
}
}
Qui interface è un oggetto; ipv4 è un array di due stringhe; enabled è un booleano.
RESTCONF e NETCONF
Sono i due protocolli standard per configurare i device tramite modelli dati YANG:
- NETCONF: opera su SSH (porta 830), usa XML, prevede il concetto di datastore (running, candidate, startup).
- RESTCONF: è un’interfaccia REST su HTTPS che espone i dati YANG, supporta JSON o XML e usa i metodi HTTP (GET/POST/PUT/DELETE). Più semplice e “web-friendly” di NETCONF.
Tool di configuration management
Servono a portare i device verso uno stato desiderato in modo ripetibile. Il confronto centrale è agent-based vs agentless e push vs pull.
| Caratteristica | Ansible | Puppet / Chef | Terraform |
|---|---|---|---|
| Architettura | Agentless | Agent-based | Agentless |
| Modello | Push | Pull | Push |
| Linguaggio | YAML (playbook) | Ruby (DSL) | HCL |
| Trasporto | SSH / API | Agente proprietario | API/provider |
| Ambito tipico | Config management | Config management | Provisioning infrastruttura |
Ansible è il più rilevante per il CCNA:
- Agentless: non richiede software installato sui device gestiti; usa SSH (o API) già presente. Solo il control node ha Ansible.
- Push model: il control node spinge le configurazioni verso i device.
- I playbook sono file YAML (indentazione significativa, niente tab); descrivono task idempotenti. L’inventory elenca gli host gestiti.
Puppet e Chef sono invece agent-based con modello pull (l’agente sul device contatta periodicamente il master). Terraform è orientato al provisioning dell’infrastruttura più che alla configurazione continua.
Trappole tipiche d’esame
- Scenario: “Quale metodo HTTP recupera dati senza modificarli?” → GET (Read). Attenzione a non confonderlo con POST (Create).
- Scenario: “Un client riceve
401: di chi è il problema?” → del client (autenticazione mancante/errata). Tutti i 4xx sono errori client, i 5xx server. - Scenario: “Il carattere
[ ]in un payload JSON indica…” → un array (lista), mentre{ }indica un oggetto con coppie key-value. Domanda ricorrente di riconoscimento struttura. - Scenario: “Quale tool NON richiede agent sui dispositivi gestiti?” → Ansible (agentless, SSH, push). Puppet e Chef sono agent-based/pull.
- Scenario: “Formato dei playbook Ansible?” → YAML (non JSON, non Ruby). Ruby è Puppet/Chef; HCL è Terraform.