Add --vm-id, --vm-vmid, --vm-storage for fully non-interactive PBS restore

Auto-selects VM backup, target VMID, storage, and auto-confirms existing VM deletion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude
2026-04-06 15:44:35 +00:00
parent a0e94682bf
commit 8d76dc8da2

View File

@@ -25,16 +25,22 @@ ARGS_OWNER=""
ARGS_PHONE="" ARGS_PHONE=""
ARGS_MSSQL="" ARGS_MSSQL=""
SKIP_PBS=false SKIP_PBS=false
ARGS_VM_ID=""
ARGS_VM_VMID=""
ARGS_VM_STORAGE=""
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
--name) ARGS_NAME="$2"; shift 2 ;; --name) ARGS_NAME="$2"; shift 2 ;;
--hira) ARGS_HIRA="$2"; shift 2 ;; --hira) ARGS_HIRA="$2"; shift 2 ;;
--addr) ARGS_ADDR="$2"; shift 2 ;; --addr) ARGS_ADDR="$2"; shift 2 ;;
--owner) ARGS_OWNER="$2"; shift 2 ;; --owner) ARGS_OWNER="$2"; shift 2 ;;
--phone) ARGS_PHONE="$2"; shift 2 ;; --phone) ARGS_PHONE="$2"; shift 2 ;;
--mssql) ARGS_MSSQL="$2"; shift 2 ;; --mssql) ARGS_MSSQL="$2"; shift 2 ;;
--skip-pbs) SKIP_PBS=true; shift ;; --skip-pbs) SKIP_PBS=true; shift ;;
--vm-id) ARGS_VM_ID="$2"; shift 2 ;;
--vm-vmid) ARGS_VM_VMID="$2"; shift 2 ;;
--vm-storage) ARGS_VM_STORAGE="$2"; shift 2 ;;
--help|-h) --help|-h)
echo "사용법: pharmq-setup.sh [옵션]" echo "사용법: pharmq-setup.sh [옵션]"
echo " --name 약국명 (필수 또는 대화형 입력)" echo " --name 약국명 (필수 또는 대화형 입력)"
@@ -421,9 +427,12 @@ else:
PYEOF PYEOF
echo "" echo ""
# --skip-pbs 옵션이면 자동 스킵 # --skip-pbs: PBS 스킵 / --vm-id: 자동 선택 / 없으면 대화형
if [ "$SKIP_PBS" = true ]; then if [ "$SKIP_PBS" = true ]; then
TEMPLATE_VMID="" TEMPLATE_VMID=""
elif [ -n "$ARGS_VM_ID" ]; then
TEMPLATE_VMID="$ARGS_VM_ID"
print_ok "VM 백업 자동 선택: $TEMPLATE_VMID"
else else
echo -ne "${CYAN}복원할 VM 백업 ID (숫자, Enter로 건너뛰기): ${NC}" echo -ne "${CYAN}복원할 VM 백업 ID (숫자, Enter로 건너뛰기): ${NC}"
read -r TEMPLATE_VMID </dev/tty read -r TEMPLATE_VMID </dev/tty
@@ -437,23 +446,31 @@ PYEOF
fi fi
# 복원 VMID # 복원 VMID
echo -ne "${CYAN}복원할 VMID [기본: 200]: ${NC}" if [ -n "$ARGS_VM_VMID" ]; then
read -r VM_VMID </dev/tty VM_VMID="$ARGS_VM_VMID"
VM_VMID=${VM_VMID:-200} else
echo -ne "${CYAN}복원할 VMID [기본: 200]: ${NC}"
read -r VM_VMID </dev/tty
VM_VMID=${VM_VMID:-200}
fi
# 스토리지 선택 # 스토리지 선택
echo "" if [ -n "$ARGS_VM_STORAGE" ]; then
print_step "사용 가능한 스토리지:" TARGET_STORAGE="$ARGS_VM_STORAGE"
pvesm status -content images 2>/dev/null | tail -n +2 | while read -r line; do else
sname=$(echo "$line" | awk '{print $1}') echo ""
stype=$(echo "$line" | awk '{print $2}') print_step "사용 가능한 스토리지:"
echo -e " ${GREEN}${NC} ${sname} (${stype})" pvesm status -content images 2>/dev/null | tail -n +2 | while read -r line; do
done sname=$(echo "$line" | awk '{print $1}')
echo "" stype=$(echo "$line" | awk '{print $2}')
echo -e " ${GREEN}${NC} ${sname} (${stype})"
done
echo ""
echo -ne "${CYAN}저장 스토리지 [기본: local-lvm]: ${NC}" echo -ne "${CYAN}저장 스토리지 [기본: local-lvm]: ${NC}"
read -r TARGET_STORAGE </dev/tty read -r TARGET_STORAGE </dev/tty
TARGET_STORAGE=${TARGET_STORAGE:-local-lvm} TARGET_STORAGE=${TARGET_STORAGE:-local-lvm}
fi
# 최신 스냅샷 찾기 # 최신 스냅샷 찾기
print_step "최신 백업 조회 중..." print_step "최신 백업 조회 중..."
@@ -485,8 +502,13 @@ PYEOF
# 기존 VM 확인 # 기존 VM 확인
if qm status "$VM_VMID" 2>/dev/null; then if qm status "$VM_VMID" 2>/dev/null; then
print_warn "VMID $VM_VMID가 이미 존재합니다." print_warn "VMID $VM_VMID가 이미 존재합니다."
echo -ne "${YELLOW}삭제하고 복원하시겠습니까? (y/N): ${NC}" if [ -n "$ARGS_VM_ID" ]; then
read -r confirm </dev/tty # 자동 모드 — 기존 VM 자동 삭제
confirm="y"
else
echo -ne "${YELLOW}삭제하고 복원하시겠습니까? (y/N): ${NC}"
read -r confirm </dev/tty
fi
if [[ "$confirm" =~ ^[Yy]$ ]]; then if [[ "$confirm" =~ ^[Yy]$ ]]; then
qm stop "$VM_VMID" --skiplock 2>/dev/null || true qm stop "$VM_VMID" --skiplock 2>/dev/null || true
sleep 2 sleep 2