Test-Driven Infrastructure with Ansible @ Working Software Conference
Mercoledì 3 luglio 2019, siamo al fantastico Vodafone Theatre per la prima edizione della Working Software Conference. La conferenza è organizzata dall’Italian Agile Movement, con l’obiettivo di riportare le pratiche tecniche riguardanti lo sviluppo e il test del software al centro di una conferenza che parla di Agile ed eXtreme Programming.
In questa splendida cornice ho condiviso la mia esperienza facendo un talk riguardo TDD e automazione dell’infrastruttura tramite Ansible e Molecule.
Intro
Spesso si parla di Pipeline as Code e di Infrastructure as Code… ma cosa significa? come faccio? come metto in pratica questi concetti?
Di una cosa sono sempre stato certo NON BASTA AUTOMATIZZARE E METTERE GLI SCRIPT IN UN REPOSITORY… col passare del tempo ho maturato la convinzione che le nostre Pipeline e le nostre Infrastrutture siano realmente del codice! Ho iniziato a considerale come dei prodotti software in cui gli utenti finali sono gli sviluppatori e i ragazzi di operation… ho provato ad applicare i concetti di eXtreme Programming e a trattarli come se fossero il software che sviluppo per il cliente finale, colui che paga il mio lavoro.
Ora bando alla ciance e iniziamo a parlare del mio talk!
Obiettivi
La prima cosa da fare quando si deve creare un nuovo prodotto software è definire gli obiettivi e le esigenze che deve risolvere… detto in altre parole, chiedersi e definire quale sia il valore che creiamo con questo software.
Per questo esercizio ho definito 3 obiettivi:
- installare e configurare uno stack LAMP in modo semplice, affidabile e ripetibile
- supportare le distribuzioni linux CentOS 7 e Ubuntu 18.04
- fare pratica con TDD
Strumenti
In questo talk verranno utilizzati i seguenti strumenti:
Molecule contiene una serie di strumenti che ci aiutano a sviluppare e testare ruoli Ansible. I ruoli Ansible possono essere testati su più sistemi operativi e distribuzioni, provider di virtualizzazione come Docker e Vagrant, framework di test come testinfra e Goss possono essere utilizzati tramite Molecule.
Testinfra permette di scrivere unit test in Python per testare lo stato attuale dei server, a prescindere che essi configurati manualmente o da strumenti di gestione come Ansible, Salt, Puppet, Chef e così via.
Cos’è Molecule?
Molecule è il protagonista, l’eroe diquesta storia!
Molecule è lo strumento che ci permette di testare in modo rapido, efficiente ed efficace le automazioni scritte con Ansible.
Molecule ci obbliga a scrivere rispettando i coding standards e alcune best practices.
Molecule ci permette di praticare TDD
Molecule ci aiuta a scrivere codice pulito e fare refactor.
Molecule ci obbliga a pensare al design delle nostre automazioni.
Gli ultimi 2 punti sono dirette conseguenze della pratica del TDD, ma Molucule è un abilitatore per la pratica del TDD e di conseguenza anche per tutto ciò che en deriva!
Sviluppo
Il talk è stato registrato e il codice su github, quindi vi rimando ai seguenti link per la parte di sviluppo:
- https://vimeo.com/352878619
- https://github.com/bombo82/tdd-ansible/tree/master/lamp-live
Conclusioni
Ho scoperto, con grande stupore, che non solo è possibile applicare XP, ma che adottando tale approccio la qualità delle pipeline e delle automazioni per l’infrastruttura e il rilascio del software è di qualche ordine di grandezza superiore!
Trattare le automazioni scritte con Ansible come se fossero l’applicazione per l’utente finale è divertente e non richiede un grande dispendio di tempo! Lo sforzo maggiore è proprio quello di cambiare il modo in cui le consideriamo. Credo che il cambio del modo con cui ci apporcciamo ai concetti di Pipeline as Code e di Infrastructure as Code richieda parecchie energie mentali e un po’ di tempo, ma sono convinto che sia un investimento con un alto ritorno.
Di contro, approcciare Pipeline as Code e Infrastructure as Code in modo non strutturato porta di sicuro a scrivere automazioni non efficienti, di difficile comprensione, che mostrano comportamenti aleatori e la cui manutenzione è difficile e costosa… in modo abbastanza paradossale fare le cose a mano sembra la soluzione migliore!