43 lines
1.4 KiB
Bash
Executable File
43 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build the API image on this workstation and import it into each lab node's
|
|
# containerd.
|
|
#
|
|
# k3s does not run Docker and the lab has no registry, so images are shipped as
|
|
# a stream: docker save -> ssh through the lab host -> k3s ctr images import.
|
|
# Every node needs its own copy because the scheduler may place the pod anywhere.
|
|
#
|
|
# ./deploy/lab/scripts/build-and-import.sh
|
|
# IMAGE=keycloak-pattern-api:lab NODES="kc-lab-1" ./deploy/lab/scripts/build-and-import.sh
|
|
set -euo pipefail
|
|
|
|
IMAGE="${IMAGE:-keycloak-pattern-api:lab}"
|
|
NODES="${NODES:-kc-lab-1 kc-lab-2}"
|
|
LAB_HOST="${LAB_HOST:-test-server}"
|
|
CONTEXT="${CONTEXT:-backend}"
|
|
|
|
repo_root="$(git rev-parse --show-toplevel)"
|
|
cd "$repo_root"
|
|
|
|
echo "==> building ${IMAGE} from ${CONTEXT}/"
|
|
docker build -t "$IMAGE" "$CONTEXT"
|
|
|
|
for node in $NODES; do
|
|
echo "==> importing into ${node}"
|
|
# Nested ssh: the workstation cannot reach the guests directly because they
|
|
# sit behind the lab host's libvirt NAT. The lab host's ~/.ssh/config holds
|
|
# the kc-lab-* aliases.
|
|
docker save "$IMAGE" \
|
|
| ssh "$LAB_HOST" "ssh ${node} 'sudo k3s ctr images import -'"
|
|
done
|
|
|
|
echo "==> verifying"
|
|
for node in $NODES; do
|
|
printf ' %-10s ' "$node"
|
|
ssh "$LAB_HOST" "ssh ${node} 'sudo k3s ctr images ls -q'" \
|
|
| grep -c "$IMAGE" \
|
|
| xargs -I{} echo "{} match(es)"
|
|
done
|
|
|
|
echo
|
|
echo "next: kubectl rollout restart -n header-lab deployment/echo"
|