dashboard/scripts/e2e-docker-start

86 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
DIR=$(cd $(dirname $0)/..; pwd)
# See `script/build-e2e`
DASHBOARD_DIST=${DIR}/dist
EMBER_DIST=${DIR}/dist_ember
# Image version
RANCHER_IMG_VERSION=head
# Docker volume args when mounting the locally-built UI into the container
VOLUME_ARGS="-v ${DASHBOARD_DIST}:/usr/share/rancher/ui-dashboard/dashboard -v ${EMBER_DIST}:/usr/share/rancher/ui"
# check if script invoke contains any argument. If so, adjust RANCHER_IMG_VERSION
if [ $# -eq 1 ]; then
RANCHER_IMG_VERSION=$1
# When an image is specified, we use that image, including its front-end, so we don't want the volume args to mount the locally-built UI
VOLUME_ARGS=""
fi
echo "Using Rancher image version: ${RANCHER_IMG_VERSION}"
# Configure the Rancher server URL from start, similarly to how chart installations work
# The special host.docker.internal domain only works for Docker Desktop, not plain Docker Engine on linux, so using the special IP 172.17.0.1 to access the gateway of the default bridge network
SERVER_URL="https://172.17.0.1"
# we are now enabling the "oidc-provider" feature flag on install because we will need it for e2e testing (not enabled by default in non-prime versions)
# "oidc-provider" feature flag needs a system restart so it's not feasible to enable it as part of the test
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 ${VOLUME_ARGS} \
-e CATTLE_UI_OFFLINE_PREFERRED=true \
-e CATTLE_BOOTSTRAP_PASSWORD=password \
-e CATTLE_PASSWORD_MIN_LENGTH=3 \
-e CATTLE_SERVER_URL="${SERVER_URL}" \
-e CATTLE_DEBUG=true \
-e CATTLE_TRACE=true \
--name cypress \
--privileged \
rancher/rancher:${RANCHER_IMG_VERSION} \
--features=oidc-provider=true
docker ps
echo "Waiting for dashboard UI to be reachable (initial 20s wait) ..."
sleep 20
echo "Waiting for dashboard UI to be reachable ..."
okay=0
while [ $okay -lt 30 ]; do
STATUS=$(curl --silent --head -k https://127.0.0.1/dashboard/ | awk '/^HTTP/{print $2}')
echo "Status: $STATUS (Try: $okay)"
okay=$((okay+1))
if [ "$STATUS" == "200" ]; then
okay=100
else
sleep 5
fi
done
if [ "$STATUS" != "200" ]; then
echo "Dashboard did not become available in a reasonable time"
exit 1
fi
echo "Dashboard UI is ready"
echo "Waiting for webhook to be running..."
okay=0
while [ $okay -lt 30 ] ; do
if docker exec cypress kubectl -n cattle-system get po -l app=rancher-webhook | grep -q '1/1.*Running' ; then
break
else
echo "Webhook not ready, checking again in 10s..."
okay=$((okay+1))
sleep 10
fi
done
echo "Rancher is ready"