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 da 0. vlans = [10, 20, 30]vlans[0] vale 10.
  • 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: valore e 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 in configure terminal per le action di configurazione.
  • Dizionario vs lista → l’accesso a un dizionario avviene per chiave (dev["os"]), non per indice numerico: uno scenario che usa dev[0] su un dict è la distrazione.