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

image
image
image
image
image
image
image
image

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!