diff --git a/test/setup.sh b/test/setup.sh index 374a6518..cc8ef884 100755 --- a/test/setup.sh +++ b/test/setup.sh @@ -11,27 +11,52 @@ cd "$(dirname "${BASH_SOURCE[0]}")" echo "Copying weave images, scripts, and certificates to hosts, and" echo " prefetch test images" +exists_on() { + docker_on $1 inspect --format=" " $2 >/dev/null 2>&1 +} + +pull_if_missing() { + if ! exists_on "$1" "$2" ; then + echo "Pulling $2 on $1..." + docker_on $1 pull $2 > /dev/null + fi +} + setup_host() { - HOST=$1 - docker_on $HOST load -i ../weave.tar.gz + local HOST=$1 + docker_on $HOST load -i ../weave.tar.gz & + local pids="$!" + DANGLING_IMAGES="$(docker_on $HOST images -q -f dangling=true)" [ -n "$DANGLING_IMAGES" ] && docker_on $HOST rmi $DANGLING_IMAGES 1>/dev/null 2>&1 || true run_on $HOST mkdir -p bin - upload_executable $HOST ../bin/docker-ns - upload_executable $HOST ../weave - rsync -az -e "$SSH" --exclude=tls ./tls/ $HOST:~/tls + + upload_executable $HOST ../bin/docker-ns & + local pids="$pids $!" + + upload_executable $HOST ../weave & + local pids="$pids $!" + + rsync -az -e "$SSH" --exclude=tls ./tls/ $HOST:~/tls & + local pids="$pids $!" + for IMG in $TEST_IMAGES ; do - docker_on $HOST inspect --format=" " $IMG >/dev/null 2>&1 || docker_on $HOST pull $IMG + pull_if_missing "$HOST" "$IMG" + local pids="$pids $!" done + for pid in $pids; do wait $pid; done } +ppids="" for HOST in $HOSTS; do setup_host $HOST & - pids="$pids $!" + ppids="$ppids $!" done # Wait individually for tasks so we fail-exit on any non-zero return code # ('wait' on its own always returns 0) -for pid in $pids; do - wait $pid; +for ppid in $ppids; do + wait $ppid; done + +echo "Setup completed successfully."