Una risposta alla lentezza del CM esistente
Nel 2011 il panorama Infrastructure as Code è dominato da Puppet e Chef, entrambi basati su modelli Ruby e architetture di polling periodico. Thomas S. Hatch, amministratore di sistema, aveva bisogno di uno strumento con una caratteristica specifica: velocità di esecuzione di comandi paralleli su centinaia di server contemporaneamente.
Da questa esigenza nasce Salt (originariamente Salt Stack), progetto open source in Python il cui primo commit pubblico è del febbraio 2011. Nei mesi successivi la release 0.8-0.9 (estate-autunno 2011) consolida le funzionalità core. Licenza Apache 2.0.
L’architettura
Salt adotta un modello master/minion simile a Puppet, ma con differenze sostanziali:
- Trasporto via ZeroMQ — pattern pub/sub ad alta performance, invece di HTTP/REST del modello Puppet. Comandi asincroni, risposte aggregate in streaming
- Minion persistent connection — ogni minion mantiene una connessione TCP con il master, eliminando l’overhead di handshake
- Broadcast — il master può emettere un comando a tutti i minion simultaneamente con latenza sub-secondo
- Grains (analogo a Facter di Puppet) — sistema introspezione del minion, usato per targeting di comandi
- Pillars — data store separato per secrets e configurazioni per-host
Il risultato pratico: eseguire salt '*' cmd.run 'uptime' su 1000 nodi richiede secondi, non minuti.
Due paradigmi: execution modules e states
Salt espone due modalità complementari:
Execution modules — imperativo
Comandi ad-hoc eseguiti su minion target via CLI salt:
salt 'web*' pkg.install nginx
salt 'web*' service.restart nginx
salt '*' cmd.run 'uptime'
Centinaia di moduli (pkg, service, file, cmd, user, network, mysql, postgres, apache, selinux, grains, …) coprono task operativi comuni.
States — dichiarativo
Configurazione desiderata descritta in file YAML/Jinja2 (.sls — SaLt State):
nginx:
pkg.installed: []
service.running:
- enable: True
- require:
- pkg: nginx
/etc/nginx/nginx.conf:
file.managed:
- source: salt://nginx/nginx.conf
- require:
- pkg: nginx
- watch_in:
- service: nginx
I state sono analoghi ai manifest Puppet o ai ricettari Chef, ma con sintassi YAML invece che DSL. Il vantaggio: familiarità per molti sysadmin già abituati a file YAML.
Orchestration
Salt introduce il concetto di orchestration: stati che coordinano azioni su più minion in sequenza, utile per deployment complessi (es. update rolling con bilanciatore, migrazione database con failover). Orchestration è scritta come state sul master, non sui minion, e usa il modulo salt.state per invocare esecuzioni remote.
Il confronto con Puppet e Chef
Salt vs. Puppet:
- Puppet: Ruby, polling periodico, DSL custom
- Salt: Python, push/pub-sub, YAML
Salt vs. Chef:
- Chef: Ruby, pull model, client/server
- Salt: Python, push/pub-sub
Salt vs. Ansible (Ansible esce a febbraio 2012):
- Ansible: Python, agentless su SSH
- Salt: agent dedicato, più veloce su scala ma più invasivo
Ogni strumento ha trade-off: Salt vince in scalabilità e immediatezza delle operazioni ad-hoc; perde contro Ansible sulla semplicità di setup (no installazione su target).
L’azienda SaltStack
SaltStack Inc. viene formalmente costituita nel 2012 da Thomas Hatch per sostenere lo sviluppo. Modello commerciale: core open source + SaltStack Enterprise con funzionalità aggiuntive (GUI, reporting, compliance). Nel 2020 VMware acquisirà SaltStack, integrandolo nella propria offerta (vRealize Automation SaltStack Config).
Adozione
Salt attira rapidamente adozione in contesti con forte esigenza di scala:
- LinkedIn — gestione infrastruttura interna
- Apple — alcune infrastrutture operative
- Cisco — network automation
- VMware stessa (prima dell’acquisizione) — alcune divisioni
- Provider di hosting europei — gestione di flotte massive di VM
Nel contesto italiano
Al 2011 Salt è appena nato; l’adozione italiana è sperimentale. Nel triennio successivo (2012-2014) troverà spazio in:
- Provider di hosting italiani — gestione di grandi flotte
- Telco — automazione di configurazione apparati
- Università e centri di ricerca HPC — gestione cluster
Puppet e Chef rimangono più diffusi in generale; Salt si ritaglia nicchie dove la velocità di esecuzione conta. Dopo il 2013-2014 Ansible diventerà il concorrente più temibile, grazie alla semplicità agentless.
Riferimenti: Salt (SaltStack), Thomas S. Hatch, primo commit febbraio 2011. Licenza Apache 2.0. Trasporto ZeroMQ. Grain/Pillar system. SaltStack Inc. (2012), acquisizione VMware (2020).
