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!