Quelle est la meilleure façon d'attendre que le travail de kubernetes soit terminé? J'ai remarqué beaucoup de suggestions à utiliser:
kubectl wait --for=condition=complete job/myjob
mais je pense que cela ne fonctionne que si le travail est réussi. en cas d'échec, je dois faire quelque chose comme:
kubectl wait --for=condition=failure job/myjob
existe-t-il un moyen d'attendre les deux conditions en utilisant l'attente? sinon, quelle est la meilleure façon d'attendre qu'un emploi réussisse ou échoue?
Exécutez la première condition d'attente en tant que sous-processus et capturez son PID. Si la condition est remplie, ce processus se terminera avec un code de sortie de 0.
kubectl wait --for=condition=complete job/myjob &
completion_pid=$!
Faites de même pour la condition d'attente d'échec. L'astuce consiste à ajouter && exit 1
pour que le sous-processus renvoie un code de sortie différent de zéro lorsque le travail échoue.
kubectl wait --for=condition=failure job/myjob && exit 1 &
failure_pid=$!
Utilisez ensuite le Bash intégré wait -n $PID1 $PID2
d'attendre qu'une des conditions soit remplie. La commande capturera le code de sortie du premier processus à quitter:
wait -n $completion_pid $failure_pid
Enfin, vous pouvez vérifier le code de sortie réel de wait -n
pour voir si le travail a échoué ou non:
exit_code=$?
if (( $exit_code == 0 )); then
echo "Job completed"
else
echo "Job failed with exit code ${exit_code}, exiting..."
fi
exit $exit_code
Exemple complet:
# wait for completion as background process - capture PID
kubectl wait --for=condition=complete job/myjob &
completion_pid=$!
# wait for failure as background process - capture PID
kubectl wait --for=condition=failure job/myjob && exit 1 &
failure_pid=$!
# capture exit code of the first subprocess to exit
wait -n $completion_pid $failure_pid
# store exit code in variable
exit_code=$?
if (( $exit_code == 0 )); then
echo "Job completed"
else
echo "Job failed with exit code ${exit_code}, exiting..."
fi
exit $exit_code