“By 2020, only 40% of network operations teams will use the command line interface (CLI)
as their primary interface, which is a decrease from 75% in 2Q18″.
Gartner – 2018 Strategic Roadmap for Networking
Questa la constatazione di Gartner riguardo al rapido, inesorabile declino della CLI per la configurazione delle reti TLC.
Per la combinazione e la contemporaneità di una serie di esigenze espresse dal mercato ICT, è in atto un cambio di paradigma, che porta in primo piano il tema della programmabilità dei sistemi e delle infrastrutture di telecomunicazione. Tali esigenze sono riconducibili alla ricerca di una essenziale ed efficace modalità di traduzione degli obiettivi di business in processi operativi, agili e pervasivi, che sappia ridurre il time-to-market, i costi di esercizio, gli errori umani e la complessità delle tecnologie digitali adottate.
La risposta a queste esigenze si trova nella programmabilità dei sistemi, sempre più software che hardware, sempre più aperti, interoperanti e standard.
Emergono quindi due elementi, non nuovi ma innovativi se applicati al mondo TLC: le API come strumento per la programmazione e il concetto di Expressive Modern Language, a supporto della potenza chiarificatrice ed espressiva dei moderni linguaggi di programmazione e rappresentazione dei dati, fondamentale requisito per la diffusione della programmabilità.
Il tema della programmabilità
Quando si pensa alla programmazione informatica, vengono subito in mente schermate con migliaia di linee di codice in linguaggio incomprensibile e si immaginano i programmatori, esseri spesso solitari e notturni, che battono affannosamente sulla tastiera criptici comandi, articolati in ordine oscuro.
Quest’immagine vagamente “mitologica” e “inquietante” è lontana dalla realtà.
In questo nuovo millennio la programmazione ha messo da parte i linguaggi criptici e ha sviluppato il tema attraverso la valorizzazione delle API, le “Application Programming Interface”.
Le API hanno la connotazione di “interfacce”, perché consentono accesso e dialogo tra diversi elementi software e hardware e sono raggiungibili attraverso connessioni di rete. Hanno anche l’attributo di “Programmazione Applicativa”, perché è con queste che si scrivono le applicazioni, ossia il valore per utenti e clienti, integrando e facendo interagire le funzionalità di ciascun elemento partecipante e ottenendo un vantaggio complessivo di entità maggiore della somma delle parti.
Una “chiamata API”, quindi, è la linea di codice di oggi, tanto potente quanto semplice, visto che si attiva in modo simile a come si naviga su web – con protocolli HTTP e dati espressi in XML o JSON. Tralasciando i dettagli dei formati, in sostanza i dati sono scritti in testo umanamente intellegibile e maneggiabile, anni luce distanti dalle variabili di qualsiasi linguaggio di programmazione.
Cisco, azienda proprietaria del Sistema Operativo IOS (“Internetwork Operating System”), uno dei software più diffusi nel globo, data la market share dei prodotti che lo ospitano, ha introdotto la visione della programmabilità dei sistemi rivisitando l’offerta e pubblicando i set API necessari ad interagire con le infrastrutture “powered by Cisco”.
Il vantaggio
Il primo vantaggio è che le applicazioni così scritte non richiedono migliaia di linee di codice ma poche chiamate API, con i dati giusti, per attivare funzioni remote e ottenere nuovi dati o comportamenti desiderati dal destinatario. Combinando opportunamente le chiamate API si possono ottenere rapidamente risultati anche complessi, strabiliando facilmente amici e colleghi, o meglio ottenendo quelle informazioni o quei risultati che prima non erano disponibili.
Esatto: il vero potere della programmabilità moderna è ottenere nuove funzioni da ciò che si ha, costruendo sulla base di quanto previsto da chi l’ha progettato, concertandone le capacità con altri elementi e sfruttandone tutti i dettagli, ottenendo INNOVAZIONE, INTEGRAZIONE e AUTOMAZIONE.
Eh già, perché tutto quanto di innovativo e di integrato deve accadere in modo automatico, o meglio automatizzato. Nel crescere della complessità e del numero di parti in movimento in questa nostra moderna realtà digitale, la gestione manuale non è più sostenibile. Senza automazione non si gestirebbe la frequenza e la quantità di stimoli e di eventi che accadono oggi nel mondo digitale delle reti e dell’IOT.
Le API rendono l’automazione estremamente semplice da gestire, per la loro innata capacità di sintesi e l’indipendenza dall’ambiente operativo (apparato, Sistema Operativo, linguaggio di programmazione o di scripting) in cui esprimono il loro valore. Sequenze di automazione usando API possono essere programmate ed eseguite ovunque: l’automazione a portata di dito!
La “tempesta DevOps”
Per chi è familiare con i concetti di DevOps, tutto questo ha perfettamente senso. Per chi non fosse ancora stato toccato dal fragore della “tempesta DevOps”, che ha sconvolto gli ambienti di Sviluppo Software nell’ultima manciata di anni, si inizia col dire che si tratta di una contrazione delle parole “Development” (sviluppo) e “Operations” (gestione).
Il principio di DevOps è che lo sviluppo di applicazioni software deve coincidere con la possibilità di metterle in produzione e gestirle in modo quasi istantaneo, facendo collassare in uno spazio-tempo ridotto le classiche fasi di “sviluppo”, “test e certificazione” e “produzione” e creando quello che si definisce un processo CI/CD (Continuous Integration/Continuous Deployment).
Il risultato è un’estrema duttilità del processo di rilascio software, con conseguente diminuzione del tempo di mercato e una maggior distribuzione di valore durante il tempo. Altri vantaggi sono la maggior qualità del prodotto finale e la capacità di seguire le indicazioni di mercato in modo quasi istantaneo.
La chiave è – ancora una volta – l’automazione spinta del processo. Probabilmente le Aziende definite “big di Internet”, che rilasciano una nuova versione software ogni 12 secondi circa, avrebbero qualche difficoltà a rispettare questi ritmi, se non avessero completamente automatizzato il processo in tutte le sue parti.
La necessità di NetDevOps
Immagino a questo punto i sudori freddi di chi – avendo letto fino a questo punto – lavora nel mondo delle tecnologie di rete, mentre si interroga su quanto più velocemente deve imparare a configurare gli apparati e i sistemi, per seguire gli indiavolati ritmi di DevOps.
Una possibile risposta è: almeno 20 volte più velocemente.
Pare infatti che la velocità della formazione di idee compiute nel nostro cervello, rispetto alla velocità di scrittura sulla tastiera rispetti questa proporzione di 20 a 1.
Se pensate che sia complicato, la seconda risposta è “API” – ma immagino che a questo punto lo sospettaste.
Ebbene, dalle costole di DevOps, è nato il movimento NetDevOps (inutile dire che “Net” sta per “Network” e “DevOps”… per DevOps) o – come a volte viene citato – DevNetOps o SuperNetOps. Il principio è che la rete sia resa programmabile e plasmabile dai processi come lo è lo sviluppo software. E – sorpresa – questo è possibile vedendo l’insieme delle funzioni di rete come un’entità governabile attraverso API, utilizzando le stesse per automatizzare le operazioni di sviluppo, test e messa in produzione delle configurazioni che sono necessarie.
Una vera rivoluzione rispetto al passato (o al presente), ma senza dubbio una rivoluzione buona!
Cosa Cisco può fare per voi
Il nuovo paradigma, capace di abilitare contemporaneamente INNOVAZIONE, INTEGRAZIONE e AUTOMAZIONE, è dunque la programmabilità via API. Come realmente questo tutto ciò si realizza?
La stragrande maggioranza dei prodotti Cisco espongono nativamente API integrate, che offrono protocolli standard, definizioni aperte (ossia disponibili pubblicamente) e numerosissime possibilità d’impiego.
Apparati di rete, di Data Center, software di gestione, controller SDN, elementi e applicazioni che girano in cloud, software e client di Unified Collaboration e di Security Cisco sono quindi resi aperti, programmabili e pronti a integrarsi con i processi di chi abbia l’ardire di accettare la sfida.
Gli strumenti che Cisco mette a disposizione per realizzare NetDevOps non si limitano alle API, tuttavia: includono anche strumenti di simulazione di reti (VIRL), di automazione dei test (pyATS) e di orchestrazione (NSO – Network Services Orchestrator).
Ma qual è il programma? Le API? In realtà non proprio: la configurazione di rete è ancora lì, solo che è si manipola in modo diverso, basandosi su un linguaggio di modellazione specifico che si chiama YANG.
Gli apparati di rete sono modellati con questo linguaggio, e le loro configurazioni vere e proprie (in XML o JSON) sono i “programmi” che nel loro complesso costituiscono l’”applicazione”, ossia la configurazione di una rete qualsivoglia complessa.
Il trasferimento delle configurazioni agli apparati avviene quindi attraverso API NETCONF o RESTCONF, i moderni protocolli per la gestione di rete. Se ricordate o usate SNMP (Simple Network Management Protocol), protocollo che consente lettura e scrittura di alcune variabili degli apparati in modo piuttosto basilare e monotono, NETCONF/YANG e RESTCONF/YANG vi appariranno come un arcobaleno colorato dopo una settimana di pioggia.
L’operatività NetDevOps diventa quindi:
- modificare le configurazioni, scritte in XML o JSON secondo i modelli YANG degli apparati;
- utilizzare le API NETCONF o RESTCONF degli apparati per caricare queste modifiche prima nella ambiente di test simulato;
- eseguire i test di conformità per verificare che sia tutto a posto;
- trasferire la configurazione in produzione, sempre attraverso API NETCONF o RESTCONF;
- eseguire i test di verifica anche in produzione, per accertarsi che sia tutto ok;
- congratularsi con sé stessi.
Come è facilmente intuibile, tutte le operazioni descritte sopra – salvo forse le congratulazioni… ma è da provare – sono automatizzabili e gestibili attraverso un processo di tipo “DevOps” – o meglio “NetDevOps”, con tutti i vantaggi che ne derivano.
Benvenuti nella seconda rivoluzione industriale delle reti, gentilmente offerta dalla programmabilità!
Le risorse
Entrare in questo meraviglioso nuovo mondo programmabile è molto più facile di quanto si pensi: Cisco mette a disposizione un’intera iniziativa dedicata all’argomento, che va sotto il nome di “DevNet”.
Non si tratta solo di un portale, ma si compone di Community, Iniziative, Documentazione su prodotti, software ed API, con tanto di video didattici e una marea di esempi pratici.
Iniziare è facilissimo: basta selezionare “Start Now” dalla pagina iniziale e scegliere l’area in cui ci si vuole immergere. Le risorse non mancano e si viene accompagnati passo passo in ognuno dei temi tecnologici relativi alla programmazione, per cui si prova interesse naturale o professionale.
Durante il percorso, o se siete già smaliziati, vi suggerisco di fermarvi a leggere i blog di Julio Gòmez (Cisco Senior Technical Solution Architect e Lead of EMEAR Programmability Center of Excellence) su GitHub, ricchi di esempi pratici ma soprattutto documentati in modo maniacale e quindi replicabili facilmente con estrema soddisfazione: https://github.com/juliogomez
Troverete nel mondo di Julio due repository (così si chiamano i folder di progetto su GitHub, che tra parentesi è uno strumento DevOps) dedicati rispettivamente DevOps e NetDevOps, che vi consiglio caldamente di leggere.
Conclusione
Se siete arrivati fino a questo punto, mi sento in dovere di complimentarmi con voi, non solo per la pazienza ma anche per la costanza e la temerarietà di aver accolto in così poco tempo tanti concetti dirompenti.
Forse non tutto quanto descritto vi sarà suonato nuovo e inedito, ma spero che l’insieme delle sfide e delle soluzioni che sono a vostra disposizione vi possa riempire di entusiasmo per le opportunità che si presentano all’orizzonte.
Rimanendo nella metafora della “Rivoluzione industriale”, se volete fare un passo dalla tessitura manuale ai telai automatici adesso sapete da dove iniziare.
Buon lavoro!
1 commenti
Complimenti Luca, chiaro, sintetico e illuminante! 🙂