55 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#####
# Wrapper around "helm upgrade" that is able to rollback a failed release before retrying
#####
RELEASE=$1
CHART=$2
shift 2
NAMESPACE_ARG=
TIMEOUT_ARG=
HELM_ARGS=
while :; do
case $1 in
--help)
helm upgrade --help
exit
;;
--namespace)
NAMESPACE_ARG="$1 $2"
shift
;;
--timeout)
TIMEOUT_ARG="$1 $2"
shift
;;
?*)
HELM_ARGS="$HELM_ARGS $1"
;;
*)
break
esac
shift
done
set -eo pipefail
if helm-exists $RELEASE $NAMESPACE_ARG; then
status="$(helm status $RELEASE $NAMESPACE_ARG --output json | jq -r '.info.status')"
if [ "$status" = "pending-install" ]; then
echo "Deleting failed release..."
helm delete $RELEASE $NAMESPACE_ARG --wait $TIMEOUT_ARG
elif [ "$status" = "pending-upgrade" ]; then
echo "Rolling back failed upgrade..."
helm rollback $RELEASE $NAMESPACE_ARG --cleanup-on-fail --wait --wait-for-jobs $TIMEOUT_ARG
elif [ "$status" = "pending-rollback" ]; then
echo "Completing pending rollback..."
helm rollback $RELEASE $NAMESPACE_ARG --cleanup-on-fail --wait --wait-for-jobs $TIMEOUT_ARG
fi
fi
exec helm upgrade $RELEASE $CHART $NAMESPACE_ARG $TIMEOUT_ARG $HELM_ARGS