Vérifier si le service Elasticsearch d'un conteneur Docker est prêt
Publié le 08/09/2020 • Actualisé le 08/09/2020
C'est la troisième partie de la série "attendre-ce-service" (regarder les liens sous le code). Dans le dernier bout de code, nous avons vu comment attendre que le service MySQL soit prêt. Dans ce projet, après le chargement des données dans la base, je dois les indexer dans Elasticsearch. Donc vérifier MySQL uniquement n'est pas suffisant puisque l'initialisation d'Elasticsearch peut être plus longue que MySQL. Dans ce cas nous allons nous servir de l'API cluster. Nous avons un paramètre dédié wait_for_status
qui permet de forcer le retour d'un code de succès seulement quand le cluster atteint un certain statut. C'est très pratique puisque que c'est précisément ce dont nous avons besoin pour notre script bash d'attente. Si Elasticsearch n'est pas disponible du tout, curl retourne un code d'erreur, et s'il est disponible, il ne retourne un code de succès que si le cluster à un statut vert ou jaune. Dans mon Makefile, j'appelle ce script juste après le chargement des fixtures, ça permet à Elasticsearch de continuer son initialisation pendant le chargement des données dans la base.
#!/bin/sh
# If called very early the curl will receive an "empty" response and a failing status
# As soon as Elasticsearch can process the command, it will return a success status
# as soon as the cluster is yellow or green
seconds=1
until curl 'localhost:9209/_cluster/health?wait_for_status=yellow&timeout=30s'; do
>&2 echo "Elastisearch is unavailable - waiting for it... 😴 ($seconds)"
sleep 1
seconds=$(expr $seconds + 1)
done
Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire