Ce script Bash a été conçu pour automatiser la réinstallation des plugins Elasticsearch. J'ai créé cet outil pour éviter, après chaque mise à jour d'Elasticsearch, de devoir désinstaller puis réinstaller manuellement tous les plugins, une étape qu'Elasticsearch n'effectue pas automatiquement mais qui est souvent nécessaire. Cette procédure peut également être utile lors d'autres opérations de maintenance ou pour résoudre des problèmes liés aux plugins.
Fonctionnement du script
Le script exécute les étapes suivantes :
- Il vérifie si le répertoire des binaires d'Elasticsearch (
/usr/share/elasticsearch/bin
par défaut) est inclus dans la variable d'environnementPATH
et l'ajoute si nécessaire pour la session courante. - Il s'assure que la commande
elasticsearch-plugin
est accessible. - Il arrête le service Elasticsearch en utilisant
systemctl
(cette commande peut nécessiter une adaptation selon le système d'initialisation ou le nom du service). - Il récupère la liste des plugins installés via
elasticsearch-plugin list
. - S'il existe des plugins, il itère sur chacun :
- Désinstallation du plugin (
elasticsearch-plugin remove
). - Réinstallation du même plugin (
elasticsearch-plugin install
).
- Désinstallation du plugin (
- Il redémarre le service Elasticsearch.
Le script
Le code ci-dessous peut être enregistré dans un fichier (ex: reinstall_es_plugins.sh
), rendu exécutable (chmod +x reinstall_es_plugins.sh
), et doit généralement être exécuté avec des privilèges élevés (sudo
) en raison de l'interaction avec les services système et les répertoires d'installation.
#!/bin/bash
# Vérifier si /usr/share/elasticsearch/bin/ est dans le PATH
ES_BIN_DIR="/usr/share/elasticsearch/bin"
if [[ ":$PATH:" != *":$ES_BIN_DIR:"* ]]; then
echo "Ajout de $ES_BIN_DIR au PATH..."
export PATH="$ES_BIN_DIR:$PATH"
fi
# Vérifier si elasticsearch-plugin est disponible
if ! command -v elasticsearch-plugin &> /dev/null; then
echo "Erreur : La commande elasticsearch-plugin n'est pas trouvée même après l'ajout de $ES_BIN_DIR au PATH."
exit 1
fi
# Arrêter Elasticsearch (adapter le service si nécessaire)
echo "Arrêt d'Elasticsearch..."
systemctl stop elasticsearch || { echo "Impossible d'arrêter Elasticsearch. Vérifiez le service."; exit 1; }
# Liste des plugins installés
PLUGINS=$(elasticsearch-plugin list)
# Vérifier s'il y a des plugins installés
if [ -z "$PLUGINS" ]; then
echo "Aucun plugin Elasticsearch n'est installé."
else
echo "Plugins détectés :"
# Utiliser 'while read' pour gérer correctement les noms de plugins ligne par ligne
echo "$PLUGINS" | while IFS= read -r plugin || [[ -n "$plugin" ]]; do
# Ignorer les lignes vides potentielles
if [ -z "$plugin" ]; then
continue
fi
echo "Traitement du plugin : $plugin"
# Désinstaller le plugin
echo "Désinstallation du plugin $plugin..."
elasticsearch-plugin remove "$plugin" || { echo "Erreur lors de la désinstallation du plugin $plugin."; exit 1; }
# Réinstaller le plugin
echo "Réinstallation du plugin $plugin..."
elasticsearch-plugin install "$plugin" || { echo "Erreur lors de la réinstallation du plugin $plugin."; exit 1; }
done
fi
# Redémarrer Elasticsearch
echo "Redémarrage d'Elasticsearch..."
systemctl start elasticsearch || { echo "Impossible de redémarrer Elasticsearch. Vérifiez le service."; exit 1; }
echo "Réinstallation des plugins Elasticsearch terminée."
Important
Elasticsearch est en développement actif. Les commandes, les chemins d'accès par défaut, ou le comportement de l'outil elasticsearch-plugin
sont susceptibles de changer entre les versions. Ce script est fourni en l'état et peut nécessiter des ajustements pour fonctionner avec des versions futures d'Elasticsearch ou des configurations système différentes (par exemple, utilisation d'un autre système d'initialisation que systemd
). Il est impératif de tester ce script dans un environnement contrôlé avant toute utilisation en production.
- divisionbyzero