Mise à jour automatique des plugins Elasticsearch

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'environnement PATH 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).
  • 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