Poco più di un mese fa venni a sapere che il Team per la Trasformazione Digitale avrebbe promosso il più grande hackathon mai realizzato in Italia.
In sostanza un code sprint suddiviso in due differenti tempistiche:
- 2 giorni di sviluppo in una delle 26 sedi (in altrettante città italiane) predisposte;
- 1 mese opzionale per completare i progetti più complessi.
La partecipazione per i soli 2 giorni iniziali prevede la partecipazione alla premiazione della “fast rabbit”, decidendo di procedere anche per il mese successivo invece si accede alla cosiddetta “wise turtle”; l’obiettivo è comune: lo sviluppo di codice open source per i progetti centrali per la PA.
Non avendo mai partecipato ad un evento di questo tipo, tanto meno per un progetto così ambizioso, fui molto incuriosito. Quindi decisi di iscrivermi, almeno per i due giorni di sviluppo in sede.
Facciamo un passo indietro
Un hackathon è un evento al quale partecipano varie figure del campo informatico. Spesso lo scopo è di completare una o più sfide in un tempo limite prestabilito per concorrere alla vittoria di un premio finale.
Il promotore, Team per la Trasformazione Digitale, è tecnicamente una struttura commissariale istituita dal governo per avviare la costruzione del cosiddetto “Sistema operativo del Paese”. Il team è composto da diverse figure tecniche di altissimo livello ed esperienza internazionale.
Il focus di questo evento era il contributo alla risoluzione di problematiche legate ai principali progetti del Team, ovvero: Carta d’Identità Elettronica, La fattura elettronica, Anagrafe Nazionale della Popolazione Residente, Il Design System della Pubblica Amministrazione Italiana, I dati aperti della pubblica amministrazione, Data & Analytics Framework, Nodo di pagamento verso la Pubblica Amministrazione, Sistema Pubblico di Identità Digitale.
La challenge
La prima mattina, dopo una breve presentazione del progetto e degli sponsor, viene allestito un workspace Slack condiviso e inizia la descrizione delle challenge proposte.
Sin da subito è chiara la loro complessità, la maggior parte di esse richiedono potenzialmente un team di 3-5 persone per una tempistica vicina al mese. Non ho la possibilità di partecipare ad una sfida così lunga e non ho velleità di concorrere per il premio finale, decido quindi di selezionare una piccola challenge che posso potenzialmente completare, da solo, nell’arco di due giorni.
Da ciò che si evince in loco e sulla chat condivisa, la maggior parte dei partecipanti sono sviluppatori; al contrario sembra che i sistemisti o, per meglio dire, i DevOps, non siano così numerosi: sicuramente posso essere più utile in questo frangente.
Dopo aver spulciato il GitHub dedicato individuo una issue interessante: la creazione di un sistema di deploy in Ansible per un sistema basato su Docker che pubblica un’integrazione tra Secure the News e domain-scan.
L’obiettivo è quello di pubblicare una dashboard che visualizza la diffusione delle pratiche di sicurezza nei portali dello Stato:
- domain-scan è un sistema che unisce diversi strumenti di scansione per il web; utilizzandolo si ottiene, per ciascun dominio, la configurazione HTTPS oltre che altri dati opzionali;
- Secure the News e il sistema open-source utilizzato per il portale https://securethe.news, si tratta di un applicativo web scritto in Python su Django per la visualizzazione grafica dello stato di sicurezza (inteso come implementazione di HTTPS) di un insieme di domini.
Le difficoltà
Inizialmente la sfida mi era sembrata piuttosto semplice o quanto meno sufficientemente veloce per le mie tempistiche; dopo aver approfondito la questione leggendo il codice dei due tool noto però che il problema è di una complessità decisamente superiore.
I tool sono open-source: il primo, domain-scan, è relativamente semplice e generico; il secondo, Secure the News è stato rilasciato in seguito ad una implementazione specifica, perciò con un’astrazione limitata e relativamente poca documentazione (a meno che non si conosca Django e la mia esperienza con questo framework è pressoché nulla).
Entrambi gli applicativi offrono un esempio di deploy basato su Docker all’interno del repository, purtroppo però sono pensati solo per un ambiente di sviluppo, perciò piuttosto limitati. Decido comunque di utilizzarli come base per velocizzare i tempi e completare la sfida entro i due giorni prestabiliti.
Entro la sera del sabato domain-scan è operativo, quantomeno in locale; decido di chiudere e di dedicare la domenica a Secure the News. Il giorno successivo procedo in questo senso e per ora di pranzo ho un sistema funzionante, ma ci sono un paio di problemi:
- In primis gli ovvi problemi di prestazioni e sicurezza dell’utilizzo di un sistema pensato per lo sviluppo direttamente in produzione;
- In secondo luogo il formato di output di domain-scan non è direttamente compatibile con Secure the News.
Sono consapevole del primo punto, ma il secondo mi preoccupa: è necessario scrivere un parser per convertire l’output in un formato compatibile.
Mangio qualcosa e mi attivo subito: l’idea è di creare uno script in Python che si occupa di avviare domain-scan, convertire i risultati e importarli in Secure the News. Riesco a ad arrivare ad una bozza per le 16, ora di scadenza, ma nulla che possa neanche lontanamente andare in produzione.
La sfida però mi ha appassionato, decido quindi di ritagliarmi qualche giorno prima della fine del mese opzionale per rivedere il sistema e completarlo in ottica di una pubblicazione effettiva.
La consegna
Qualche giorno fa ho finalmente avuto un po’ di tempo da dedicarci: ho deciso di prendere come base quanto scritto in precedenza e di ridefinire il tutto in ottica di produzione, oltre, chiaramente, a completare lo script di importazione. Ecco il risultato finale.
Ho sviluppato 2 ruoli Ansible il più possibile generici per il deploy su Docker di: domain-scan e Secure the News; ho quindi creato un ulteriore ruolo che si occupasse di gestire l’integrazione dei due eseguendo (direttamente o tramite cron) lo script di import.
Quindi ho unito il tutto con un playbook con default sensibili e funzionali ad un deploy in locale, ma facilmente configurabile per un deploy remoto impostando le variabili nel playbook base e gli host nel file relativo. Ulteriori variabili opzionali sono presenti come default dei vari ruoli.
L’architettura creata da Ansibile, è così composta:
- un’istanza Docker, per domain-scan, avviata all’occorrenza;
- un cluster per Secure the News composto da multipli container Docker:
- postgres,
- node+python,
- gunicorn,
- nginx;
- uno script in python, eseguito tramite cron, che avvia il container domain-scan, converte e importa i dati in Secure the News.
Il risultato mi soddisfa: Ansible orchestra i container Docker che ora prevede, oltre all’istanza di domain-scan, anche tutti i container separati per lo stack richiesto da Secure the News. Il sistema di importazione è funzionante e testato per il test usato da Secure the News (phtts).
Consegno quindi il progetto tramite pull request, come richiesto.
Conclusioni
Questa esperienza mi ha piacevolmente sorpreso: a partire dalle due giornate in sede, in cui ho avuto l’occasione di conoscere persone appassionate e disponibili, fino alla conclusione di questi giorni, in cui ho avuto modo di apprezzare come il Team per la Trasformazione Digitale stia portando una ventata di nuovo in un frangente in cui l’Italia ha sempre peccato.
Chiaramente un evento come questo non può bastare a rivoluzionare (tecnologicamente) un paese, ma ha senz’altro dato una spinta ulteriore al progetto. Credo siamo nella direzione corretta: finalmente si vedono utilizzati software open-source su scala, metodologie competitive e strumenti moderni anche da parte di un organo statale.
All’indirizzo GitHub del progetto puoi scoprire le altre problematiche aperte e, se ti va, aiutare a risolverle.