Salt est un outil d'automatisation d'infrastructure né en 2011. On le range avec Puppet, Chef et Ansible dans la gestion de configuration, mais il a trois visages, et c'est ce qui le rend difficile à classer :
| Visage | Ce que ça veut dire | L'équivalent ailleurs |
|---|---|---|
| Exécution à distance | lancer une commande ou une fonction sur des centaines de machines d'un coup, et récupérer les réponses en moins d'une seconde | les commandes ad hoc d'Ansible, Bolt chez Puppet |
| Gestion de configuration | décrire l'état voulu d'une machine (paquets, services, fichiers) dans des fichiers YAML, et l'appliquer | les manifests Puppet, les playbooks Ansible |
| Bus d'événements | chaque machine publie ce qui lui arrive sur un bus ; le master peut y réagir automatiquement | rien de natif chez Puppet ni Ansible (Event-Driven Ansible est une brique à part) |
Salt a été conçu d'abord comme outil d'exécution à distance rapide : son auteur voulait interroger des milliers de machines en temps réel. La gestion de configuration est venue ensuite, posée sur ce bus. C'est l'inverse de Puppet, né pour la configuration et qui a ajouté l'orchestration bien plus tard. Quatre propriétés caractérisent la partie configuration, et vous les verrez toutes en pratique :
| Notion | Ce que ça veut dire |
|---|---|
| Déclaratif | un état décrit le résultat attendu (un paquet installé, un service démarré), pas la suite de commandes |
| Idempotent | rejouer le même état ne change rien si la machine est déjà conforme |
| Avec agent | un programme, le minion, tourne sur chaque machine gérée et reste connecté au master |
| Convergent sur demande | le master pousse quand on le lui demande ; pour que Salt maintienne l'état comme Puppet, on planifie un passage régulier (le scheduler du minion) ou on réagit aux événements |
La dernière ligne mérite une seconde lecture : par défaut, Salt ne repasse pas tout seul toutes les 30 minutes comme l'agent Puppet. Il est instantané quand on le sollicite, et convergent si on le configure pour l'être. Vous ferez les deux.