#!/bin/bash
# 실습 #18 ① — Pacemaker + Corosync 2-node 클러스터 부트스트랩
# 사용: bash setup_01_cluster_bootstrap.sh node1       (node1 에서)
#       bash setup_01_cluster_bootstrap.sh node2       (node2 에서)
#       bash setup_01_cluster_bootstrap.sh init        (node1 에서 init 단계만)
#
# 흐름: 양쪽 노드에서 같은 스크립트 실행 (인자만 다름)
#   1) 양쪽: 패키지 설치 + /etc/hosts + hacluster 비번 + pcsd 시작
#   2) node1 에서만: pcs host auth → pcs cluster setup → start → enable
set -e

ROLE="${1:-}"
HACLUSTER_PASS="${HACLUSTER_PASS:-cluster}"

if [ -z "$ROLE" ]; then
    cat <<EOF
사용:
  HACLUSTER_PASS=원하는비번 bash $0 node1
  HACLUSTER_PASS=원하는비번 bash $0 node2
  HACLUSTER_PASS=원하는비번 bash $0 init     # node1 양쪽 설치 끝난 후
EOF
    exit 1
fi

install_common() {
    # 1) 패키지
    sudo apt update
    sudo apt install -y pacemaker corosync pcs

    # 2) /etc/hosts — 양쪽 노드 이름 해석
    if ! grep -q "^192.168.56.21 node1" /etc/hosts; then
        echo "192.168.56.21 node1" | sudo tee -a /etc/hosts >/dev/null
    fi
    if ! grep -q "^192.168.56.22 node2" /etc/hosts; then
        echo "192.168.56.22 node2" | sudo tee -a /etc/hosts >/dev/null
    fi

    # 3) hacluster 사용자 비번
    echo "hacluster:$HACLUSTER_PASS" | sudo chpasswd

    # 4) pcsd 시작
    sudo systemctl enable --now pcsd

    echo
    echo "=== 공통 설치 완료 ($(hostname)) ==="
    sudo systemctl is-active pcsd
}

case "$ROLE" in
    node1|node2)
        install_common
        echo
        echo "→ 양쪽 노드 모두에서 본 스크립트 실행 후, node1 에서:"
        echo "   bash $0 init"
        ;;
    init)
        # 5) 양쪽 인증
        sudo pcs host auth node1 node2 -u hacluster -p "$HACLUSTER_PASS"

        # 6) 클러스터 셋업
        sudo pcs cluster destroy --force || true
        sudo pcs cluster setup lab-cluster node1 node2 --force
        sudo pcs cluster start --all
        sudo pcs cluster enable --all

        # 7) STONITH 비활성 (실습용. 운영은 반드시 활성)
        sudo pcs property set stonith-enabled=false

        # 8) 상태
        sleep 3
        sudo pcs status
        echo
        echo "관전 포인트:"
        echo "  Online: [ node1 node2 ]      ← 양쪽 살아있음"
        echo "  No resources                 ← 아직 자원 없음 (다음 시나리오에서 추가)"
        ;;
    *)
        echo "알 수 없는 ROLE: $ROLE"
        exit 1
        ;;
esac
