Files
terraform-provider-bitbucke…/scripts/wait-for-url.sh

93 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
usage() {
echo "Usage:
-u | --url - Required. URL to wait for a 200 OK.
-c | --cookie-jar - Optional. Cookie jar to use to store cookies.
-s | --successful-requests - Optional. Number of successful requests to wait for. Default 3.
-t | --timeout - Optional. Number of seconds to wait. Default 300 (5m)."
exit 1
}
TIMEOUT=300
INTERVAL=2
TIMER_START=$SECONDS
WAIT_FOR_SUCCESSFUL_REQUESTS=3
while (( "$#" )); do
case "$1" in
-u|--url)
SERVICE_URL=$2
shift 2
;;
-c|--cookie-jar)
COOKIE_JAR=$2
shift 2
;;
-s|--successful-requests)
WAIT_FOR_SUCCESSFUL_REQUESTS=$2
shift 2
;;
-t|--timeout)
TIMEOUT=$2
shift 2
;;
-*|--*=)
echo "Error: Unsupported option $1" >&2
exit 1
;;
esac
done
if [[ ! ${SERVICE_URL} ]]; then
usage
fi
if [[ "${INTERVAL}" -gt "${TIMEOUT}" ]]; then
INTERVAL=$TIMEOUT
fi
#
# Wait for endpoint to return a 200OK
#
SERVICE_CURL_RESULT=""
echo "> Waiting for ${SERVICE_URL} to return 200 OK (retrying every ${INTERVAL}s for ${TIMEOUT}s)"
limit=$(( ${TIMEOUT} / ${INTERVAL} ))
count=0
successful_requests=0
while : ; do
printf "."
if [ ! -z "${COOKIE_JAR}" ]; then
SERVICE_CURL_RESULT=$(curl --cookie "${COOKIE_JAR}" --cookie-jar "${COOKIE_JAR}" -H 'Cache-Control: no-cache' -L -s -o /dev/null -w '%{http_code}' ${SERVICE_URL} || true)
else
SERVICE_CURL_RESULT=$(curl -H 'Cache-Control: no-cache' -L -s -o /dev/null -w '%{http_code}' ${SERVICE_URL} || true)
fi
if [[ "${SERVICE_CURL_RESULT}" -eq 200 ]]; then
successful_requests=$[$successful_requests+1]
elif [[ "${successful_requests}" -gt 0 ]]; then
printf "\n[!] Warning: Previous request was successful, current request returned: ${SERVICE_CURL_RESULT}\n" >&2
successful_requests=$[$successful_requests-1]
fi
if [[ "${successful_requests}" -ge "${WAIT_FOR_SUCCESSFUL_REQUESTS}" ]]; then
printf "\n"
break
fi
if [[ "${count}" -ge "${limit}" ]]; then
printf "\n[!] Timeout waiting for Service to return 200 OK\n" >&2
exit 1
fi
sleep ${INTERVAL}
count=$[$count+1]
done
TIMER_DURATION=$(( SECONDS - TIMER_START ))
echo "> ${SERVICE_URL} returned ${successful_requests} successful requests in ${TIMER_DURATION}s"