#!/usr/bin/env bash
# setup.sh — DR connectionPool 발동 재현 랩 부트스트랩(멱등).
#
# 이 킷은 자기완결형이다: 매니페스트(00~30 + dr-scenarios/)가 이 스크립트와 같은 디렉토리에 있다.
# 독자는 files/lab/ 전체를 내려받아 자기 클러스터에서 그대로 실행하면 된다.
#
# 하는 일:
#   1) ns conn-lab(istio-injection=enabled)
#   2) backend(fortio server, sidecar 주입) + Service backend:8080/http
#   3) client(fortio server, sidecar 주입 + proxyStatsMatcher 로 cx/rq/circuit_breakers 게이지 노출)
#   4) blackhole ServiceEntry(198.51.100.10, S6 connectTimeout 용 SYN 드롭 목적지)
#   5) rollout 대기
# DR(시나리오)은 여기서 안 건다 — run-scenario.sh <s1..s7> 가 시나리오별로 apply.
#
# 이식성: CTX 기본값=현재 kubectl context. cluster domain 하드코딩 안 함(host 는 same-ns 짧은 이름).
# usage: bash setup.sh            (또는 CTX=mycluster bash setup.sh)
set -euo pipefail

CTX="${CTX:-$(kubectl config current-context)}"
NS="${NS:-conn-lab}"
DIR="$(cd "$(dirname "$0")" && pwd)"
K="kubectl --context=$CTX"

echo "== [0] preflight (context=$CTX) =="
$K version --request-timeout=5s >/dev/null 2>&1 || { echo "!! API 도달 불가($CTX). 컨텍스트/클러스터 확인 필요."; exit 1; }

echo "== [1] namespace =="
$K apply -f "$DIR/00-namespace.yaml"

echo "== [2] backend (fortio server, sidecar 주입) =="
$K apply -f "$DIR/10-backend.yaml"

echo "== [3] client (fortio server + proxyStatsMatcher) =="
$K apply -f "$DIR/20-client.yaml"

echo "== [4] blackhole ServiceEntry (S6 connectTimeout 용) =="
$K apply -f "$DIR/30-blackhole.yaml"

echo "== [5] rollout 대기 =="
$K -n "$NS" rollout status deploy/backend --timeout=120s
$K -n "$NS" rollout status deploy/client  --timeout=120s

echo
echo "== ready =="
echo "  파드 확인:  $K -n $NS get pods"
echo "  시나리오:   bash $DIR/run-scenario.sh s1   # s1..s7"
echo "  정리:       bash $DIR/cleanup.sh"
