Usare Goss per testare un'infrastruttura

  • Di
  • 2021-03-30 - 4 minuti
banner

Se hai bisogno di uno strumento che ti permetta di testare un’infrastruttura, magari verificando che tutte le installazioni siano andate a buon fine e che una porta sia in ascolto, vediamo allora insieme come usare Goss per testare un’infrastruttura.

Repository

https://github.com/aelsabbahy/goss (repo del progetto)

https://github.com/serenasensini/Goss (cheatsheet)

Cos’è Goss

Versione breve

Goss è uno strumento che consente di convalidare facilmente e rapidamente l’infrastruttura di un’applicazione; consente di definire come dovrebbe apparire una porzione del sistema grazie all’ausilio di un file YAML o JSON.

Ciò è reso ancora più semplice grazie alla possibilità di aggiungere automaticamente le istruzioni alla configurazione di Goss tramite una riga di comando.

Goss permette di verificare specifiche come la gestione dei file, i permessi degli utenti o dei gruppi, l’esistenza e la configurazione di pacchetti, servizi e connettività.

La documentazione completa è disponibile qui.

Un esempio è il seguente: immaginiamo di voler verificare che all’interno del nostro sistema se Apache è installato e quale versione è disponibile.

Per farlo, abbiamo due opzioni: eseguire il seguente comando, che ci permette di aggiungere in modo automatico la definizione Goss per controllare se il pacchetto esiste ed è stato configurato, oppure scrivere le direttive manualmente:

$ goss -g httpd.yaml autoadd apache2 
Adding Package to 'httpd.yaml': 
apache2:  
  installed: true  
  versions:  - 2.4.41-4ubuntu3.1

Alcune cose rendono Goss uno strumento fantastico per la convalidare le applicazioni:

  • Scritto in Go: significa che è si tratta di un binario autonomo senza dipendenze da altre librerie o interpreti;
  • È super veloce: sfruttando il modello di concorrenza di Go, i test vengono eseguiti e restituiti quasi istantaneamente (parliamo di 5-10 secondi mediamente);
  • È facile iniziare: definire un file Goss tramite lo standard YAML o JSON è davvero semplice e non richiede che il team impari un nuovo linguaggio.

Versione lunga

Il README sul sito ufficiale contiene una simpatica “introduzione di 45 secondi” a cui consiglio di dare una chance per avere un’idea più precisa di cosa si può fare con Goss.

È già stato detto che i file Goss sono file YAML o JSON che descrivono i test che si vogliono eseguire per controllare il sistema: Goss ha però una fantastica funzione che aggiunge in maniera automatica che crea alcuni test predefiniti per una data risorsa.

Iniziamo testando un’applicazione web che viene esposta tramite Apache, e andremo a verificare i seguenti punti:

  • se Apache è installato;
  • se Apache è in esecuzione;
  • se la porta 8080 è in ascolto;
  • se il servizio Apache è abilitato.

Per farlo, ci avvaliamo dell’uso del parametro autoadd che ci permette di aggiungere man mano le istruzioni di cui abbiamo bisogno; prima di tutto, creiamo il file goss.yaml e poi passiamo all’uso di Goss:

$ goss -g goss.yaml autoadd httpd # aggiunge automaticamente tutte le risorse corrispondenti alla suite di test per httpd

Adding Package to 'goss.yaml':

httpd:
    installed: true
    versions:
     - 2.4.37


$ goss -g goss.yaml add service httpd # aggiunge il servizio httpd e verifica che sia abilitato e in esecuzione

Adding Service to 'goss.yaml':

httpd:
    enabled: false
    running: false
$ goss -g goss.yaml add port 80 # aggiunge un controllo sulla porta 80

Adding Port to 'goss.yaml':

tcp:80:
    listening: false
    ip: []

Come vediamo grazie all’output dei diversi comandi, il comando add ci permette di aggiungere una risorsa al test; notiamo che, dopo l’esecuzione di ciascun comando, vengono aggiunte delle righe che preimpostano alcune proprietà; però, alcune di queste non sono impostate come ci servono.

Per esempio, nell’ultima istruzione dove andiamo ad aggiungere la verifica sul servizio, è necessario impostare a true entrambi i valori per rendere funzionale il test.

Dopo aver apportato quindi alcuni cambiamenti, il nostro file risulterà come il seguente:

package: 
    httpd: 
      installed: true 
      versions: 
      - 2.4.37 
port: 
    tcp6:80: 
    listening: true 
    ip: [] 
service: 
    httpd: 
      enabled: true 
      running: true

Per eseguire i nostri test, digitiamo il comando seguente:

$ goss -g httpd.yaml validate --format documentation

Process: httpd: running: matches expectation: [true]

Port: tcp6:80: listening: matches expectation: [true]

Port: tcp6:80: ip: matches expectation: [["::"]]

Package: httpd: installed: matches expectation: [true]

Package: httpd: version: matches expectation: [["2.2.15"]]

Service: httpd: enabled: matches expectation: [true]

Service: httpd: running: matches expectation: [true]

Total Duration: 0.010s

Count: 14, Failed: 0, Skipped: 0

Semplice, no?

Tip

Sentiamo sempre più spesso parlare di container… e se volessimo testare la nostra immagine? Per questo, esiste DGoss: il modus operandi è molto simile, ma lo vedremo nella prossima puntata!

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source

Iscriviti alla newsletter

Per non perderti gli ultimi articoli e per vincere biglietti e gadget TheRedCode

Riceverai una volta al mese (o anche meno) gli articoli più interessanti pubblicati sul blog, e potrai provare a vincere un biglietto per uno dei prossimi eventi!

Andiamo!