55 lines
1.3 KiB
Bash
Executable File
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
|