#!/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 # bottom-right: create-gcp-proxies.sh # # 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