# Salt (logiciel)

Salt ou SaltStack est un logiciel de gestion de configuration écrit en Python, fonctionnant sur le principe client-serveur. Salt a pour but de rendre la gestion de configuration simple mais flexible. Il s'agit d'une alternative à Puppet, Ansible et Chef. On utilise les langages informatiques YAML, Jinja2 et Python, pour configurer Salt.

## Historique

Salt a été initialement créé en 2011 par Thomas S. Hatch, un informaticien de Salt Lake City.
En septembre 2020, VMware rachète SaltStack.
En novembre 2023, Broadcom rachète VMware.

## Principes de fonctionnement

Pour utiliser Salt, il faut installer deux services qui peuvent éventuellement être sur le même serveur :
* salt-master (le « master », le serveur) ;
* salt-minion (le « minion », le client).
La communication entre le(s) master(s) et le(s) minion(s) est assurée par un bus à messages ZeroMQ. Le master émet un ticket contenant les critères de sélection des minions ainsi que la ou les commande(s) à exécuter. Chaque minion concerné par les critères "consomme" le ticket et exécute les commandes. Cette méthode permet de très facilement monter en charge sur de vastes parc informatiques hétérogènes grâce à sa très forte parallélisation.
Le « minion » identifie le « master » par son nom ou par son adresse IP. Le « master » identifie le minion par son nom d'hôte. La communication entre le serveur et les clients se fait après l'acceptation du « minion » par le « master » et après acceptation d'un échange de clés de chiffrement. Les minions peuvent ensuite être commandés par lot à l'aide de critères comme le système d'exploitation, une expression régulière sur le nom d'hôte, le type d'architecture, etc.
Les fichiers d'état, les « states », permettent de décrire une représentation de l'état dans lequel un serveur doit être. Ils sont écrits en YAML et portent l'extension .sls. Les fonctions d'état font fréquemment appel à un ou plusieurs modules d'exécution pour exécuter une tâche donnée.

## Modes de fonctionnement
### Mode client/serveur

C'est le mode "par défaut" de fonctionnement de Salt : un ou plusieurs masters, connectés à un ou plusieurs minions. Un service « salt-master » est lancé sur le master et des services "salt-minion" sont à l'écoute sur les machines clientes.

### Mode "clientless"

Le master utilise des clefs Ssh pour se connecter aux machines gérées, celles-ci n'ayant alors pas de service "minion" fonctionnant localement. Ce fonctionnement est identique à celui d'Ansible, par exemple. Ce mode nécessite de gérer une liste statique de clients sur le master, appelée "roster".

### Mode "masterless"

Les fichiers de configuration (fichiers "sls") sont disponibles localement sur le client, sans nécessité de contacter un master. Ce mode est notamment utilisé pour le déploiement applicatif, comme par exemple OpenMediaVault (les commandes précédées du trigramme "omv-" sont en fait des commandes salt encapsulées).

## Vocabulaire

* Pillar : dictionnaire des variables ;
* States : fichiers d'état, état dans lequel un serveur doit être ;
* Formula : ensemble de States ;
* Grains : informations que retournent les minions au master-salt.
La machine cliente SaltStack est appelé « minion », le serveur est appelé « master ».