run-demo.sh opens a 2x2 tmux grid: egress-IP table looping in a netshoot pod, kubectl get px watch, and both create scripts running with COUNT (default 4) proxies. show-egress-ips-table.sh is the pane-sized one-line-per-proxy variant used by the driver. Co-Authored-By: Claude <noreply@anthropic.com>
68 lines
2.7 KiB
Bash
Executable File
68 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Demo driver: opens a tmux session with a 2x2 pane grid:
|
|
#
|
|
# top-left: show-egress-ips-table.sh in a 10s loop, run inside the
|
|
# netshoot pod against the in-cluster discovery Service
|
|
# top-right: watch -n3 kubectl get px
|
|
# bottom-left: create-kubernetes-proxies.sh <count>
|
|
# bottom-right: create-gcp-proxies.sh <count>
|
|
#
|
|
# Usage:
|
|
# ./run-demo.sh
|
|
#
|
|
# Optional environment:
|
|
# COUNT proxies each create script makes (default: 4)
|
|
# SESSION tmux session name (default: proxy-demo; an existing
|
|
# session with this name is killed and recreated)
|
|
# NETSHOOT_POD pod to exec into for the egress-IP loop (default: netshoot)
|
|
# DEMO_DIR where the demo scripts live (default: this script's dir)
|
|
set -euo pipefail
|
|
|
|
COUNT="${COUNT:-4}"
|
|
SESSION="${SESSION:-proxy-demo}"
|
|
NETSHOOT_POD="${NETSHOOT_POD:-netshoot}"
|
|
DEMO_DIR="${DEMO_DIR:-$(cd "$(dirname "$0")" && pwd)}"
|
|
BASE_URL="http://egress-proxies-operator-controller-manager-discovery-service.egress-proxies-operator-system.svc.cluster.local:8090"
|
|
|
|
for tool in tmux kubectl; do
|
|
if ! command -v "${tool}" &> /dev/null; then
|
|
echo "ERROR: ${tool} is required but not installed" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if ! kubectl get pod "${NETSHOOT_POD}" &> /dev/null; then
|
|
echo "ERROR: pod ${NETSHOOT_POD} not found — start one with:" >&2
|
|
echo " kubectl run netshoot --image=nicolaka/netshoot -- sleep infinity" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Copying show-egress-ips-table.sh into pod ${NETSHOOT_POD} ..."
|
|
kubectl cp "${DEMO_DIR}/show-egress-ips-table.sh" "${NETSHOOT_POD}:/tmp/show-egress-ips-table.sh"
|
|
|
|
if tmux has-session -t "${SESSION}" 2> /dev/null; then
|
|
echo "Killing existing tmux session ${SESSION}"
|
|
tmux kill-session -t "${SESSION}"
|
|
fi
|
|
|
|
# 2x2 grid: after these splits pane indexes are 0 top-left, 1 top-right,
|
|
# 2 bottom-left, 3 bottom-right; tiled layout evens them into quarters.
|
|
tmux new-session -d -s "${SESSION}"
|
|
tmux split-window -h -t "${SESSION}:0"
|
|
tmux split-window -v -t "${SESSION}:0.0"
|
|
tmux split-window -v -t "${SESSION}:0.1"
|
|
tmux select-layout -t "${SESSION}:0" tiled
|
|
|
|
loop_cmd="BASE_URL=${BASE_URL}; while true; do bash /tmp/show-egress-ips-table.sh \"\$BASE_URL\"; echo; sleep 10; done"
|
|
tmux send-keys -t "${SESSION}:0.0" "kubectl exec -it ${NETSHOOT_POD} -- bash -c '${loop_cmd}'" C-m
|
|
tmux send-keys -t "${SESSION}:0.1" "watch -n3 kubectl get px" C-m
|
|
tmux send-keys -t "${SESSION}:0.2" "bash ${DEMO_DIR}/create-kubernetes-proxies.sh ${COUNT}" C-m
|
|
tmux send-keys -t "${SESSION}:0.3" "bash ${DEMO_DIR}/create-gcp-proxies.sh ${COUNT}" C-m
|
|
|
|
tmux select-pane -t "${SESSION}:0.2"
|
|
if [ -n "${TMUX:-}" ]; then
|
|
tmux switch-client -t "${SESSION}"
|
|
else
|
|
tmux attach-session -t "${SESSION}"
|
|
fi
|