============= = Saltstack = ============= 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 et flexible. Il s'agit d'une alternative à Puppet, Ansible et Chef. (Wikipédia) Les communications entre clients et serveurs sont basées sur une bibliothèque de messagerie asynchrone haute performance appelée ZeroMQ. Les clients sont appelés "les minions" et le serveur (voire les serveurs) est appelé "master". Les échanges entre minions et masters sont entièrement cryptés. Les ports par défaut utilisés par Saltstack sont les ports 4505 et 4506. En 2020, le projet a été acquis par VMware. La gestion des minions peut se faire avec les outils de "vRealize Automation SaltStack Config". Saltstack peut s'installer sur une variété d'OS : BSD, MAC, Linux, Solaris, Windows. ======================== Installation du Master : ======================== Sur une nouvelle machine Debian qui jouera le rôle de master (Pour l'installation de la machine Debian, utiliser les consignes du dossier "01. Install/"). Coordonnées du master : - OS : Debian 12 - Hostname (fqdn) : salt.postfo.lan - IP : 10.0.x.33 - SSH : accessibilité de l'utilisateur 'root' via SSH. Installation de SaltStack depuis les dépôts du projet : ------------------------------------------------------- Installer 'curl' : # apt install curl Importer la clef du dépôt SaltStack : # curl -fsSL -o /etc/apt/keyrings/salt-archive-keyring-2023.gpg https://repo.saltproject.io/salt/py3/debian/12/amd64/SALT-PROJECT-GPG-PUBKEY-2023.gpg Créer le fichier /etc/apt/sources.list : # echo "deb [signed-by=/etc/apt/keyrings/salt-archive-keyring-2023.gpg arch=amd64] https://repo.saltproject.io/salt/py3/debian/12/amd64/latest bookworm main" | tee /etc/apt/sources.list.d/salt.list Synchroniser avec les dépôts : # apt update Installer le paquet 'salt-master' : # apt install salt-master Modifier la 15ème ligne du fichier /etc/salt/master afin d'indiquer l'adresse IP de l'interface à utiliser par le master : "interface: 10.0.x.33" Redémarrer le service : # systemctl restart salt-master Nous venons d'installer salt-master sur la machine. Cela permettra de gérer les différents minions. Il est également possible d'installer salt-minion sur le master. ========================== Installation des minions : ========================== Sur Fedora 38 : --------------- Importer la clef du dépôt SaltStack : # rpm --import https://repo.saltproject.io/salt/py3/fedora/38/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub Créer le fichier d'accès au dépôt : # curl -fsSL https://repo.saltproject.io/salt/py3/fedora/38/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo Synchroniser avec les dépôts : # dnf update Installer le paquet 'salt-minion' : # dnf install salt-minion Modifier la 16ème ligne du fichier /etc/salt/minion afin d'indiquer l'adresse IP du master : "master: 10.0.x.33" Activer le service au démarrage et le démarrer : # systemctl enable --now salt-minion Sur Rocky Linux 8 : ------------------- Importer la clef du dépôt SaltStack : # rpm --import https://repo.saltproject.io/salt/py3/redhat/8/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub Créer le fichier d'accès au dépôt : # curl -fsSL https://repo.saltproject.io/salt/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo Synchroniser avec les dépôts : # dnf update Installer le paquet 'salt-minion' : # dnf install salt-minion Modifier la 16ème ligne du fichier /etc/salt/minion afin d'indiquer l'adresse IP du master : "master: 10.0.x.33" Activer le service au démarrage et le démarrer : # systemctl enable --now salt-minion Sur Windows : ------------ Installer salt-minion sur une machine Windows du réseau : Télécharger l'installateur depuis la page https://docs.saltproject.io/salt/install-guide/en/latest/topics/install-by-operating-system/windows.html et l'installer. Autres systèmes d'exploitation : -------------------------------- Voir https://docs.saltproject.io/salt/install-guide/en/latest/topics/install-by-operating-system/index.html =================== Post-Installation : =================== Une fois le master et les minions installés, le master doit autoriser les différents minions via leur clef d'identification : Sur le Master : --------------- Afficher la clef d'identification du master : # salt-key -F master Afficher la liste des différents minions et leur clef : # salt-key -L Autoriser l'ensemble des minions en acceptant leur clef : # salt-key -A En passant le paramètre "-a", en minuscule, on peut autoriser un seul minion à la fois. Une fois les minions acceptés, il est maintenant possible de gérer leur configuration et leur état depuis le master. Relancer la commande "salt-key -L" afin de constater que les différents minions ont été acceptés. ================== Remote Execution : ================== Le premier mode par lequel il est possible de gérer les minions est le mode d'exécution à distance. Commandes 'Salt' : ------------------ Saltstack dispose de ses propres commandes afin de gérer les minions. La commande 'test.ping' permet de lister les minions présents et joignables (l'étoile signifie l'ensemble des minions) : # salt '*' test.ping Quelques commandes utiles pour l'administration d'un parc informatique : Lister les mises à jour disponibles sur chaque minion : # salt '*' pkg.list_upgrades Effectuer les mises à jour : # salt '*' pkg.upgrade Installer le paquet 'openssh-server': # salt '*' pkg.install openssh-server Les différents paramètres possibles pour le module 'pkg' de gestion des paquets sont nombreux. Pour obtenir la liste : # salt '*' sys.doc pkg La documentation de ce module est également disponible sur internet : https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.pkg.html La liste des différents modules et leur documentation est disponible à l'adresse : https://docs.saltproject.io/en/latest/py-modindex.html Ciblage des minions : --------------------- Il y a de nombreuses méthodes pour cibler des mignons : - les 'grains' (caractéristiques communes à une machine ou un groupe de machines). - les listes d'IDs - les IPs ou Subnets - une méthode composée ("compound") de méthodes précédentes - les groupes ('node groups'). Ils doivent être préalablement créés par l'administrateur. Concernant les grains : Pour demander l'ID des différents minions connectés : # salt '*' grains.get id Pour demander les IP des différents minions connectés : # salt '*' grains.get ipv4 Pour afficher la liste complète des différents grains spécifiques à chaque minion : # salt '*' grains.items Exemples : ---------- Cibler plusieurs minions par liste d'IDs (-L) : # salt -L 'glpi.postfo.lan,mail.postfo.lan' test.ping Cibler un minion par son IP (-S) : # salt -S '10.0.x.30' test.ping On peut également cibler un minion par son IP en utilisant la méthode des grains (-G) : # salt -G 'ipv4:10.0.x.31' test.ping Utiliser la méthode composée ('Compound') pour cibler des minions à l'aide de plusieurs méthodes (-C) : # salt -C 'glpi.postfo.lan or S@10.0.x.31 or S@10.0.x.32' test.ping Autres exemples, cibler les minions selon l'OS installé (méthode des grains) : # salt -G 'os:Fedora' test.ping # salt -G 'os:Debian' test.ping # salt -G 'os:Rocky' test.ping Commandes Linux : ----------------- Il est également possible de lancer directement des commandes linux sur les minions en utilisant le module 'cmd.run'. Par exemple, pour créer un nouvel utilisateur et définir son mot de passe sur les minions dont l'OS est Debian : # salt -G 'os:Debian' cmd.run "useradd -m -c 'postfo2025' postfo2025 -s /bin/bash" # salt -G 'os:Debian' cmd.run "echo 'postfo2025:postfo2025' | chpasswd" Gestion des minions Windows : ----------------------------- Sur le Master : Installer 'git' et 'python3-git' : # apt install git python3-git Créer un dossier pour accueillir les fichiers de définition des programmes installables : # mkdir /srv/salt/ # chown salt:salt /srv/salt/ Lancer la commande de synchronisation au dépôt : # salt-run winrepo.update_git_repos [---> Bug! : Des WARNINGS s'affichent mais la commande réussit ] Rafraîchir la liste des programmes installables sur les minions : # salt -G 'os:Windows' pkg.refresh_db Une série de programmes peuvent être installés : 7zip, ccleaner, chrome, firefox_x64, jre8, node.js, npp_x64, teamviewer, vscode, vlc, ... Installer 7-zip sur l'ensemble des minions Windows : # salt -G 'os:Windows' pkg.install 7zip Désinstaller 7-zip sur l'ensemble des minions Windows : # salt -G 'os:Windows' pkg.remove 7zip Pour lister les programmes installés : # salt -G 'os:Windows' pkg.list_pkgs Documentation : https://docs.saltproject.io/en/latest/topics/windows/index.html ================ Etats / States : ================ Un autre mode de contrôle/configuration des minions est celui des états. Quelques exemples et tutoriels : https://media.readthedocs.org/pdf/install-saltstack/latest/install-saltstack.pdf https://ansible-cn.readthedocs.io/en/stable/topics/tutorials/index.html#states ============ Références : ============ Site : https://saltproject.io/ Documentation : https://docs.saltproject.io/en/latest/contents.html https://docs.vmware.com/en/VMware-vRealize-Automation-SaltStack-Config/index.html ======= Utile : ======= Cheat Sheet : https://github.com/eon01/SaltStackCheatSheet