diff options
Diffstat (limited to 'mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh')
-rwxr-xr-x | mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh new file mode 100755 index 0000000..cee1cfe --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# https://github.com/Eficode/wait-for.git +# MIT License +# Modified to wait for multiple ports to open + +TIMEOUT=15 +QUIET=0 +ADDRESSES= + +echoerr() { + if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi +} + +usage() { + exitcode="$1" + cat << USAGE >&2 +Usage: + wait-for host:port [host:port ... ] [-t timeout] [-- command args] + -q | --quiet Do not output any status messages + -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit "$exitcode" +} + +wait_for() { + command="$*" + if [ "$QUIET" -ne 1 ]; then echo "$0: probing host $HOST port $PORT"; fi + for i in `seq $TIMEOUT` ; do + ready=TRUE + set DUMMY $ADDRESSES; shift 1 + while [ $# -gt 0 ] ; do + host=$1 + port=$2 + shift 2 + if ! nc -z "$host" "$port" > /dev/null 2>&1 ; then + ready=FALSE + break + fi + done + if [ $ready = TRUE ] ; then + if [ "$QUIET" -ne 1 ] ; then + echo "$0: operation succeeded on try $i" + fi + if [ -n "$command" ] ; then + if [ "$QUIET" -ne 1 ] ; + then echo "$0: exec-ing command $command" ; + fi + exec $command + fi + exit 0 + fi + if [ "$QUIET" -ne 1 ] ; then + echo "$0: sleeping after try $i" ; + fi + sleep 1 + done + echo "$0: Operation timed out" >&2 + exit 1 +} + +while [ $# -gt 0 ] +do + case "$1" in + *:* ) + host=$(printf "%s\n" "$1"| cut -d : -f 1) + port=$(printf "%s\n" "$1"| cut -d : -f 2) + ADDRESSES="$ADDRESSES $host $port" + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -t) + TIMEOUT="$2" + if [ "$TIMEOUT" = "" ]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + break + ;; + --help) + usage 0 + ;; + *) + echoerr "Unknown argument: $1" + usage 1 + ;; + esac +done + +if [ "$ADDRESSES" = "" ] ; then + echoerr "Error: you need to provide at least one host and port to test." + usage 2 +fi + +wait_for "$@" |