Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
108 lines
3.0 KiB
Bash
Executable File
108 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.bashrc
|
|
# Complete R630 Cluster Join
|
|
# This script provides instructions and attempts automated join
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Load environment variables
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
set -a
|
|
source <(grep -v '^#' "$PROJECT_ROOT/.env" | grep -v '^$' | sed 's/#.*$//' | grep '=')
|
|
set +a
|
|
fi
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
log_step() { echo -e "\n${BLUE}=== $1 ===${NC}"; }
|
|
|
|
SSH_KEY="${SSH_KEY:-$HOME/.ssh/id_ed25519_proxmox}"
|
|
SSH_OPTS="-i $SSH_KEY -o StrictHostKeyChecking=no"
|
|
ML110_IP="192.168.1.206"
|
|
R630_IP="192.168.1.49"
|
|
ROOT_PASS="${PVE_ROOT_PASS:-L@kers2010}"
|
|
|
|
log_step "Completing R630 Cluster Join"
|
|
|
|
# Check current cluster status
|
|
log_info "Checking cluster status on ML110..."
|
|
ML110_STATUS=$(ssh $SSH_OPTS "root@${ML110_IP}" "pvecm nodes 2>&1" || echo "")
|
|
echo "$ML110_STATUS"
|
|
|
|
log_info "Checking cluster status on R630..."
|
|
R630_STATUS=$(ssh $SSH_OPTS "root@${R630_IP}" "pvecm status 2>&1" || echo "")
|
|
echo "$R630_STATUS"
|
|
|
|
if echo "$R630_STATUS" | grep -q "hc-cluster"; then
|
|
log_info "✓ R630 is already in the cluster!"
|
|
exit 0
|
|
fi
|
|
|
|
log_step "Method 1: Join via Proxmox Web UI (Recommended)"
|
|
log_info "1. Open https://${ML110_IP}:8006"
|
|
log_info "2. Login as root"
|
|
log_info "3. Go to: Datacenter → Cluster → Join Information"
|
|
log_info "4. Copy the join command"
|
|
log_info "5. Or go to: Datacenter → Cluster → Add"
|
|
log_info "6. Enter R630 IP: ${R630_IP}"
|
|
log_info "7. Enter root password: ${ROOT_PASS}"
|
|
log_info "8. Click 'Join'"
|
|
|
|
log_step "Method 2: Join via SSH (Manual)"
|
|
log_info "SSH to R630 and run:"
|
|
echo ""
|
|
echo "ssh -i $SSH_KEY root@${R630_IP}"
|
|
echo "pvecm add ${ML110_IP}"
|
|
echo "# Enter password when prompted: ${ROOT_PASS}"
|
|
echo ""
|
|
|
|
log_step "Method 3: Automated Join Attempt"
|
|
log_info "Attempting automated join..."
|
|
|
|
# Try using expect or similar approach
|
|
if command -v expect &>/dev/null; then
|
|
log_info "Using expect for password automation..."
|
|
expect <<EOF
|
|
spawn ssh $SSH_OPTS root@${R630_IP} "pvecm add ${ML110_IP}"
|
|
expect {
|
|
"password:" {
|
|
send "${ROOT_PASS}\r"
|
|
exp_continue
|
|
}
|
|
"yes/no" {
|
|
send "yes\r"
|
|
exp_continue
|
|
}
|
|
eof
|
|
}
|
|
EOF
|
|
else
|
|
log_warn "expect not installed. Install with: sudo apt-get install expect"
|
|
log_info "Or use Method 1 (Web UI) or Method 2 (Manual SSH)"
|
|
fi
|
|
|
|
# Verify join
|
|
sleep 10
|
|
log_info "Verifying cluster join..."
|
|
if ssh $SSH_OPTS "root@${R630_IP}" "pvecm status 2>&1" | grep -q "hc-cluster"; then
|
|
log_info "✓ R630 successfully joined the cluster!"
|
|
ssh $SSH_OPTS "root@${ML110_IP}" "pvecm nodes"
|
|
else
|
|
log_warn "Cluster join may still be in progress or needs manual approval"
|
|
log_info "Check cluster status:"
|
|
log_info " ssh root@${ML110_IP} 'pvecm nodes'"
|
|
log_info " ssh root@${R630_IP} 'pvecm status'"
|
|
fi
|
|
|