L’automazione nelle reti enterprise nasce dalla necessità di ridurre configurazioni manuali ripetitive, errori umani e tempi di reazione agli eventi. Nell’ambito ENCOR devi saper interpretare codice Python di base, validare payload JSON e costruire applet EEM su IOS-XE. Non ti viene chiesto di essere uno sviluppatore, ma di riconoscere sintassi, tipi e comportamenti attesi.
Componenti Python di base
Nella maggior parte degli script di network automation ricorrono pochi costrutti fondamentali. Devi saperli leggere e prevederne l’output.
- Variabili: contenitori tipizzati dinamicamente (
hostname = "R1",vlan_id = 10). - Liste (
[]): sequenze ordinate e mutabili, indicizzate da0.vlans = [10, 20, 30]→vlans[0]vale10. - Dizionari (
{}): coppie chiave/valore, accesso per chiave non per indice.dev = {"host": "R1", "os": "IOS-XE"}→dev["os"]vale"IOS-XE". - Funzioni: blocchi riusabili definiti con
def, con parametri e valore di ritorno.
Attenzione a due trappole classiche: l’indentazione è sintassi (un blocco mal indentato genera errore), e l’indicizzazione parte da 0 (l’ultimo elemento di una lista di 3 è [2], non [3]).
def build_config(vlans):
for v in vlans:
print(f"vlan {v}")
build_config([10, 20, 30])
JSON valido: struttura e tipi
JSON (JavaScript Object Notation) è il formato dominante nei payload REST-API verso IOS-XE (RESTCONF) e i controller. Regole non negoziabili:
| Elemento | Regola JSON |
|---|---|
| Chiavi | sempre tra doppie virgolette "key" |
| Stringhe | doppie virgolette (mai apici singoli) |
| Numeri | senza virgolette: 10, 1.5 |
| Booleani | true / false minuscolo |
| Null | null |
| Oggetti | racchiusi in {}, coppie chiave/valore separate da , |
| Array | racchiusi in [] |
L’annidamento consente oggetti dentro oggetti e array di oggetti:
{
"interface": {
"name": "GigabitEthernet1",
"enabled": true,
"vlans": [10, 20, 30]
}
}
Errore mortale d’esame: la virgola finale (trailing comma) dopo l’ultimo elemento rende il JSON invalido. Anche una chiave senza virgolette o l’uso di apici singoli rompe il parsing.
JSON vs YAML
YAML usa indentazione e chiave: valore senza parentesi graffe né virgolette obbligatorie; è tipico dei playbook Ansible. JSON usa {}, [] e virgolette esplicite. Confonderli in uno scenario di payload REST è un tranello frequente: un payload RESTCONF è JSON (o XML), non YAML.
EEM: Embedded Event Manager
EEM è il motore di automazione on-box di IOS-XE. Un applet collega un event detector a una o più action, eseguite direttamente sul dispositivo senza server esterni. È ideale per reazioni immediate, troubleshooting automatico e raccolta dati.
Struttura logica: event (cosa scatena) → action (cosa fare, numerate in ordine di esecuzione).
Event detector comuni:
event syslog pattern: reagisce a un messaggio di log (es. link down).event cli pattern: intercetta un comando digitato dall’utente.event timer: esecuzione schedulata (cron/watchdog) per raccolta periodica.event snmp: soglia su un OID.
Action comuni: action cli command (esegue comandi exec/config), action syslog msg (scrive un log), action mail (invia notifica).
event manager applet LINK-MONITOR
event syslog pattern "Interface GigabitEthernet2, changed state to down"
action 1.0 cli command "enable"
action 2.0 cli command "show interface GigabitEthernet2"
action 3.0 syslog msg "Gi2 down rilevata, dati raccolti"
Punti tecnici da ricordare: le action vanno in modalità privilegiata, quindi serve action ... cli command "enable" come primo passo; per eseguire comandi di configurazione da un applet occorre entrare in configure terminal. Il parametro maxrun limita la durata dell’applet, e event none permette esecuzione manuale (event manager run) per test.
Trappole tipiche d’esame
- JSON con trailing comma o chiavi senza virgolette → lo scenario ti mostra un payload “quasi giusto”: la risposta corretta identifica la virgola di troppo o gli apici singoli come causa dell’invalidità.
- Payload REST scambiato per YAML → un body RESTCONF verso IOS-XE è JSON/XML; se vedi indentazione con
chiave: valoree nessuna graffa, è YAML (Ansible), non un payload API valido in quel contesto. - Indice lista fuori range → accedere a
vlans[3]su una lista di 3 elementi punta all’inesistente quarto elemento; l’ultimo valido è[2]. - Applet EEM che non esegue i comandi → manca
action cli command "enable"prima dei comandi privilegiati, oppure manca l’ingresso inconfigure terminalper le action di configurazione. - Dizionario vs lista → l’accesso a un dizionario avviene per chiave (
dev["os"]), non per indice numerico: uno scenario che usadev[0]su un dict è la distrazione.