Skip to content

feat: VM 생성 시 남은 용량이 큰 스토리지로 클론 - #177

Merged
soyuo merged 7 commits into
mainfrom
feat/vm-clone-storage-only
Oct 24, 2026
Merged

soyuo merged 7 commits into
mainfrom
feat/vm-clone-storage-only

Conversation

@whi02

@whi02 whi02 commented Oct 23, 2026

Copy link
Copy Markdown
Member

Summary

  • 클론 대상 스토리지 선택: .env의 NODE_{N}_CLONE_STORAGES(쉼표 구분)에 후보를 적은 노드는, 후보 중 사용률 80% 미만이고 VM 디스크(티어 크기)가 들어가는 스토리지에서 남은 용량이 가장 큰 곳을 골라 clone.post(storage=...)로 클론 (mon_service.select_clone_storage)
  • SSD 검사 기준: 후보가 설정된 노드는 합산 SSD 80% 검사 대신 스토리지별로 검사. 설정이 없는 노드는 기존 동작 그대로(합산 검사, storage 인자 없음). 대시보드·Discord 리포트는 그대로 합산 표시
  • 실패 처리: 후보 없음 507, 스토리지 조회 실패 503. VMID·IP·DB 기록 전에 선택해서 실패해도 남는 것이 없음. 다른 스토리지로 대체 시도하지 않음
  • 클론 실패 정리 (fix): _wait_for_clone의 HTTPException(클론 실패·타임아웃) 때 DB 레코드만 지우고 Proxmox VM이 남던 문제 수정. 정리 코드를 _cleanup_failed_vm_resources로 묶어 두 예외 분기에서 함께 쓰고, VM이 이미 없을 때(does not exist)만 lock 대기·삭제를 건너뜀. 권한·일시 오류면 삭제를 시도
  • 오류 메시지 (리뷰 반영): _wait_for_clone이 Proxmox exitstatus 원문(스토리지·볼륨 이름 포함 가능)을 사용자 메시지에 넣던 것을 로그로만 남기고 일반 문구로 변경. 스토리지 목록 응답이 리스트가 아니면 503
  • 상수 분리: 80% 기준을 RESOURCE_USAGE_THRESHOLD_PCT로 분리해 create_vm과 스토리지 선택이 같은 값을 사용
  • 동시성: 선택을 create_vm() 안에서 하므로 기존 VM 생성 큐(워커 1개)가 순서를 보장. 백엔드가 프로세스 1개로 돈다는 전제
  • 명세: SPEC.md (공개 저장소라 운영 정보는 빼고 일반화)

Test plan

  • tests/test_clone_storage.py 신규 32개 + test_vm_lifecycle.py·test_vm_policy.py·test_discord_daily_report.py·test_monitoring_rbac.py — 111 passed (Python 3.11, main 기준)
  • ruff check . (CI와 같은 0.15.22) — All checks passed
  • 배포 전: 운영 백엔드가 프로세스 1개인지 확인 (WEB_CONCURRENCY 없음 또는 1, --workers 없음)
  • 배포 후: 운영 .env에 NODE_3_CLONE_STORAGES 설정 후 백엔드 재시작
  • 배포 후: gsmgpu3에 테스트 VM 생성 → Proxmox Hardware에서 디스크가 새 스토리지에 있는지 확인 후 콘솔에서 삭제

참고

@whi02 whi02 self-assigned this Oct 23, 2026
@whi02 whi02 mentioned this pull request Oct 23, 2026
@whi02
whi02 requested a review from soyuo October 23, 2026 16:23

@soyuo soyuo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@soyuo
soyuo merged commit ba91e93 into main Oct 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants