#!/bin/bash
# 실습 #18 ② — Floating VIP 리소스 + standby 페일오버
# - ocf:heartbeat:IPaddr2 = Pacemaker 의 가장 흔한 리소스 (Virtual IP)
# - standby 로 노드 빼면 → VIP 가 다른 노드로 자동 이전
# - 어디서 실행하든 OK (pcs 가 클러스터 어디든 명령 전파)
set -e

VIP="${VIP:-192.168.56.100}"
CIDR="${CIDR:-24}"

# 1) 기존 vip 자원 있으면 정리
sudo pcs resource delete web_vip 2>/dev/null || true

# 2) VIP 리소스 생성
sudo pcs resource create web_vip \
    ocf:heartbeat:IPaddr2 \
    ip="$VIP" \
    cidr_netmask="$CIDR" \
    op monitor interval=10s

sleep 3

# 3) 현재 상태 — vip 가 어느 노드에 있나
echo "=== pcs status ==="
sudo pcs status

NODE_WITH_VIP=$(sudo pcs status resources | grep web_vip | awk '{print $NF}')
echo
echo "→ web_vip 현재 위치: $NODE_WITH_VIP"

# 4) 호스트의 ip a 에 VIP 가 실제 부착되었는지
echo
echo "=== ip addr (이 노드) ==="
ip addr show | grep -E "inet $VIP" && echo "→ 이 노드에 VIP 있음" || echo "→ 이 노드엔 VIP 없음"

# 5) 페일오버 시뮬 — 현재 VIP 가진 노드를 standby
echo
echo "=== $NODE_WITH_VIP standby (페일오버 시뮬) ==="
sudo pcs node standby "$NODE_WITH_VIP"
sleep 5

sudo pcs status
NEW_NODE=$(sudo pcs status resources | grep web_vip | awk '{print $NF}')
echo
echo "→ web_vip 이동 후: $NEW_NODE"

# 6) 외부에서 VIP ping (다른 머신에서 실행하라 안내)
echo
echo "=== 외부 검증 ==="
echo "→ 다른 머신에서: ping -c 3 $VIP"
echo "→ standby 직후에도 1~3초 안에 정상 응답"

# 7) 복귀
echo
echo "=== $NODE_WITH_VIP unstandby (복귀) ==="
sudo pcs node unstandby "$NODE_WITH_VIP"
sleep 3
sudo pcs status

cat <<EOF

다음 시나리오:
  setup_03_service_failover.sh — VIP + nginx 묶어서 서비스 페일오버
  setup_04_constraints_quorum.sh — colocation/order/two_node quorum
EOF
