Puppet è un software opensource, scritto in Ruby, che permette la gestione automatizzata e centralizzata di un'infrastruttura di sistemi Linux e Unix, essendo disponibile per tutte le principali distribuzioni Linux, le diverse varianti di BSD oltre che Solaris e AIX.
Con Puppet è possibile gestire praticamente ogni risorsa di un sistema: programmi da insallare, servizi da avviare, file di configurazione con contenuti diversi a seconda di diverse logiche, utenti, cron jobs, mount point, esecuzione di comandi specifici ecc.
Praticamente permette di automatizzare ogni attività sistemistica cambiando di fatto il modo con sui si opera su sun server.
Puppet è un sistema client-server, il client viene lanciato (come comando singolo o servizio) sul sistema da configurare e si connette al server (il Puppet Master) sulla porta 8140 TCP da cui recupera il profilo di configurazioni associato al suo hostname.
Sul server sono configurate in file chiamai manifest, con estensione .pp tutte le risorse che sono associate agli host gestiti.
Il traffico di rete è criptato, previo scambio di certificati x509 fra client e server che ne garantisce l'autenticità e integrezza.
I pacchetti di Puppet sono disponibili nelle principali distribuzioni Linux nei repository principali (Ubuntu , Debian) o in repository extra come EPEL per RedHat Enterprise Linux.
Se si deve installare il client, basta usare il pacchetto puppet ed eventualmente avviare l'omonimo servizio, sul server va installato anche il pacchetto puppet-server e avviato il servizio pupppetmaster.
Per entrambi i file di configurazione è /etc/puppet/puppet.conf, dove sono presenti diverse sezioni relative al comportamento di client e server.
I log passano per syslog (in /var/log/messages o /var/log/syslog), mentre vari file (certificati, backup, file di stato, estensioni) vengono depositati in /var/lib/puppet.
La logica di Puppet è di definire lo stato di un sistema e fare in modo che questo sia tale ogni volta che il client Puppet viene eseguito.
La prima volta che lo si esegue, quindi, vengono installati pacchetti, avviati servizi, modificati file di configurazione secondo quanto definito sul PuppetMaster e le volte successive, in teoria, se non sono intervenute modifiche manuali sul sitema, o cambiamenti delle configurazioni sul master, non dovrebbe cambiare nulla.
Questo è un concetto importante per il sistemista e un vero e proprio cambio di paradigma sul suo modo di operare: in un sistema gestito con Puppet non si devono modificare a mano i file che Puppet gestisce, perchè questi vengono rimodificati la prima volta che questo viene eseguito.
E, visto che nelle condizioni ideali, Puppet gestisce tutte le risorse di un sistema (non è obbligatorio che sia così, ma è comunque consigliabile), di fatto, salvo in casi di emergenza, un sistemista non dovrà mai intervenire a mano sui suoi server.
Se da un lato tutto questo può risultare laborioso e in qualche modo "innaturale" nella gestione dall'altro comporta una serie di vantaggi clamorosi:
- Si può configurare il profilo di un server ed applicarlo a decine o centinaia di host, tutti uguali, tutti allineati, tutti configurati con la stessa logica.
- La procedura di setup e configurazione di un sistema è riproducibile: non è più necessaria quella arcana alchimia manuale con cui a volte ci si ritrova a gestire dei sistemi che poi non si sanno più reinstallare.
- E' facile e quasi intrinseco prevedere per ogni host il suo corrispettivo di sviluppo, collaudo e produzione, non avendo limiti nel numero di ambienti previsti e avendo la certezza di avere i sistemi fra di loro allineati.
- I manifest di puppet sono generalmente gestiti con un sistema di versioning (git, subversion, cvs vanno tutti bene), questo comporta automaticamente una gestione formale, reversibile, documentata e tracciata delle modifiche fatte sui sistemi.
Il risultato è che, già in infrastrutture di qualche decine di host, Puppet diventa uno strumento unico e insostituibile per una gestione rapida ed efficace del parco macchine, lo sforzo inizlae di definizione delle sue configurazioni viene ampiamente ripagato nel tempo con tempi di gestione e setup dei sistemi enormemente ridotti.
Insomma, con Puppet ci si può dedicare al miglioramento e l'affinamento della propria infrastruttura risparmiando il tempo speso in attività ordinarie ripetitive e noiose.
Puppet è un potente strumento di system automation che permette la gestione centralizzata di una infrastruttura di sistemi Unix.