Skip to content

v2k/n2k VM Import Cloud 통합#831

Merged
dhslove merged 4 commits into
ablecloud-team:ablestack-europafrom
dhslove:codex/import-ui-v2k-n2k-cloud
May 25, 2026
Merged

v2k/n2k VM Import Cloud 통합#831
dhslove merged 4 commits into
ablecloud-team:ablestack-europafrom
dhslove:codex/import-ui-v2k-n2k-cloud

Conversation

@dhslove
Copy link
Copy Markdown

@dhslove dhslove commented May 25, 2026

개요

이 PR은 ablestack-europa 브랜치의 기존 가상머신 Import/Export 화면과 API를 기준으로 VMware v2k 및 Nutanix n2k 이관을 Cloud 관점에서 통합합니다.

주요 목표는 다음과 같습니다.

  • VMware Import를 기존 v2k 연동에 맞춰 보강하고 Cloud wrapper 기반 cutover/import 경로로 정리
  • Nutanix Import를 ablestack-n2k와 연동하여 Phase1/Phase2 분리 실행, 상태 조회, 작업 이력, credential 재사용 흐름 제공
  • Import VM 작업 목록에서 상태, 이벤트, 동기화 진행률, 작업 액션을 Cloud UI에서 일관되게 관리
  • v2k/n2k 작업 시작 후 상단 진행 알림은 즉시 종료하고 실제 진행 상황은 작업 목록/상세 화면에서 조회하도록 정리
  • 기존 UI 룩앤필, 다크 모드, 다국어 리소스, 테이블 스크롤/정렬 보정

주요 변경 사항

API 및 Backend

  • Import VM 작업 관리 API 추가/확장
    • listImportVMTasks
    • listImportVMTaskEvents
    • executeImportVMTaskAction
    • preflightAblestackVmImport
    • importUnmanagedInstanceForAblestackV2K
    • importUnmanagedInstanceForAblestackN2K
  • v2k/n2k 마이그레이션 도구별 Adapter 구조 추가
    • VMware source 및 Nutanix source 처리 분리
    • Cloud target adapter 추가
    • v2k target storage resolver 추가
  • Import VM Task 상태 모델 보강
    • phase/state/step/status_json/workdir/sync progress 정규화
    • Phase2 실행 가능 여부 판정 보강
    • resume, retry from start, cancel, delete, credential clear 액션을 enum/API/i18n/UI에 반영
  • credential 처리 개선
    • 최초 입력한 VMware/Nutanix credential을 DB에 암호화 저장
    • Phase2 또는 resume 시 저장된 credential 재사용
    • 평문 credential이 CLI argument로 전달되지 않도록 임시 credential file 기반으로 wrapper 실행
  • Cloud API sensitive parameter 처리 보강
    • sensitive parameter 탐지/마스킹 유틸과 테스트 추가
  • KVM agent wrapper 추가/개선
    • AblestackN2KConvertInstanceCommand, AblestackN2KStatusCommand, AblestackN2KCleanupCommand
    • AblestackV2KConvertInstanceCommand, AblestackV2KStatusAnswer, AblestackV2KCleanupCommand
    • VMware VM 목록 조회 wrapper 보강
    • n2k background 실행 및 상태 조회 wrapper 정리

UI

  • ManageInstances 화면에서 VMware/Nutanix/ABLESTACK 선택 흐름 정리
  • 최초 진입 시 기본 동작을 VMware Import로 설정
  • Nutanix 동작명을 Nutanix에서 ABLESTACK 클러스터로 인스턴스 가져오기로 정리
  • VMware/Nutanix Import 대화상자 레이아웃 개선
    • 섹션 단위 구분
    • 컴포넌트 간격 보정
    • 내부 스크롤바 다크 모드 적용
    • 아이콘/필터/새로고침 버튼 정렬 보정
  • VM 가져오기 작업 목록 개선
    • 동기화 진행 상태 컬럼 추가/정리
    • Phase와 현재 단계 컬럼 배치 조정
    • 작업 액션을 작업 선택 드롭다운으로 통일
    • 각 액션 실행 전 확인 모달 표시
    • 다크 모드 테이블/상세 슬라이드/확인 모달 스타일 보정
  • 좌측 메뉴 스크롤바 일반/다크 모드 크기와 색상 보정
  • 한글/영문 i18n 리소스 반영

문서 및 설계

  • v2k/n2k Cloud Import 통합 설계 문서 추가
  • 작업 액션 설계 문서 추가
  • 동기화 진행률 표시 설계 문서 추가
  • n2k background 실행 설계 문서 추가

DB 변경 사항

이 PR은 DB schema 변경을 포함합니다. DB schema가 제대로 반영되지 않으면 API/Management Server 기동 또는 Import VM Task API 호출 중 503이 발생할 수 있으므로, 배포 시 DB upgrade SQL 적용 여부를 반드시 확인해야 합니다.

변경 파일:

  • engine/schema/src/main/resources/META-INF/db/schema-42100to42200.sql
  • engine/schema/src/main/resources/META-INF/db/schema-Europa-After.sql

신규 또는 확장 테이블: cloud.import_vm_task

신규 설치 경로에서는 schema-42100to42200.sql에서 테이블을 생성하고, Europa 업그레이드 경로에서는 schema-Europa-After.sql에서 기존 테이블에 필요한 컬럼을 idempotent 방식으로 추가합니다.

주요 컬럼:

컬럼 설명
id, uuid 작업 식별자
zone_id, account_id, user_id 작업 소유/권한 및 Zone 식별
vm_id import 완료 후 Cloud VM 참조
display_name, source_vm_name, target_vm_name 표시명, 원본 VM명, 대상 VM명
vcenter, datacenter, vcenter_id, vcenter_username, vcenter_password 기존 VMware import 호환 정보
convert_host_id, import_host_id 변환/Import 수행 호스트
cluster_id, service_offering_id, service_offering_details 대상 클러스터/서비스 오퍼링 정보
v2k_step, step 기존 v2k/legacy step 호환 필드
migration_tool legacy, ablestack-v2k, ablestack-n2k 등 마이그레이션 도구
source_provider VMware, Nutanix 등 원본 제공자
target_provider ablestack-cloud 등 대상 제공자
target_profile, target_storage_pool_id, v2k_target_storage_pool_id 대상 스토리지 계획
target_format, target_storage_type 변환 결과 포맷 및 스토리지 타입
source_endpoint, source_ref secret을 제외한 원본 endpoint 및 원본 VM 참조
source_cluster_name, source_host_name 원본 클러스터/호스트 표시 정보
source_inventory_json 원본 VM inventory snapshot
source_context_json secret 없는 원본 context
source_credential_id 암호화 credential row 참조
target_context_json 대상 context 및 disk map
nic_network_map NIC별 네트워크/IP 선택 정보
workdir, split_mode, cutover_policy 도구 실행 경로와 split/cutover 정책
current_phase, migration_state, migration_step 정규화된 현재 진행 상태
status_json 최신 정규화 상태 payload
error_code 정규화된 오류 코드
state, description, duration 작업 상태/설명/소요 시간
created, updated, removed 생성/수정/삭제 시간

인덱스/제약:

  • fk_import_vm_task__zone_id
  • fk_import_vm_task__account_id
  • fk_import_vm_task__user_id
  • fk_import_vm_task__vm_id
  • fk_import_vm_task__convert_host_id
  • fk_import_vm_task__import_host_id
  • i_import_vm_task__zone_id
  • i_import_vm_task__zone_tool_state_created
  • i_import_vm_task__zone_source_state_created
  • i_import_vm_task__target_phase_state
  • i_import_vm_task__source_credential_id

문자셋:

  • import_vm_taskutf8mb4로 변환합니다.
  • 이 변경은 작업 설명/이벤트/JSON payload에 한글 등 다국어 문자열이 들어갈 때 collation 변환 오류를 방지하기 위한 것입니다.

신규 테이블: cloud.import_vm_task_event

Import VM 작업의 상태 변경, credential 저장, Phase 진행, 오류 등 이벤트 이력을 저장합니다.

컬럼 설명
id, uuid 이벤트 식별자
task_id import_vm_task.id 참조
event_type 이벤트 유형
phase, state, step 이벤트 시점의 migration phase/state/step
message 이벤트 메시지
payload_json secret 없는 이벤트 payload
created 생성 시간

인덱스/제약:

  • fk_import_vm_task_event__task_id
  • i_import_vm_task_event__task_id_created

문자셋:

  • utf8mb4

신규 테이블: cloud.import_vm_task_credential

VMware/Nutanix source credential을 암호화하여 저장합니다. Phase2, resume, retry 등의 후속 동작에서 재사용하기 위한 테이블입니다.

컬럼 설명
id, uuid credential row 식별자
task_id import_vm_task.id 참조
provider credential 제공자, 예: VMware/Nutanix
credential_type credential 유형
username_hint secret이 아닌 사용자명 힌트
encrypted_payload 암호화된 credential payload
encryption_version 암호화 버전
key_id 암호화 key 식별자
created, updated, removed 생성/수정/삭제 시간

인덱스/제약:

  • fk_import_vm_task_credential__task_id
  • i_import_vm_task_credential__task_id_created
  • i_import_vm_task_credential__task_id_removed

문자셋:

  • utf8mb4

배포 및 운영 주의사항

  • Management Server 업데이트 전 DB schema upgrade가 정상 적용되는지 확인해야 합니다.
  • 특히 기존 Europa 환경은 schema-Europa-After.sql의 idempotent column/table 추가가 누락되면 Import VM Task API에서 503이 발생할 수 있습니다.
  • import_vm_task_credential.encrypted_payload에는 암호화된 credential만 저장되어야 하며, API 응답/이벤트 payload에는 secret이 노출되지 않아야 합니다.
  • 호스트 Agent는 실제 systemd 서비스명 mold-agent.service로 관리됩니다.
  • n2k/v2k Phase1/Phase2 진행은 Cloud UI 상단 알림에서 장시간 blocking하지 않고, 작업 목록과 상세 슬라이드에서 상태를 조회합니다.

검증

  • GitHub Actions 전체 Build 성공
  • 로컬 모듈 테스트
    • mvn -pl plugins/hypervisors/kvm -am -Dtest=LibvirtAblestackN2KConvertInstanceCommandWrapperTest -DfailIfNoTests=false test -Dskip.ui.build=true -Dskip.license.check=true -Dsimulator
  • 22번 Cloud 환경에서 VMware/Nutanix Import UI, Phase1/Phase2, 작업 목록/상세, credential clear/delete, 다크 모드 UI를 반복 검증

참고

  • PR 본문은 한글 UTF-8 기준으로 작성했습니다.
  • PR 생성 대상: ablecloud-team/ablestack-cloud:ablestack-europa

@dhslove dhslove merged commit 21ae7bf into ablecloud-team:ablestack-europa May 25, 2026
6 of 9 checks 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.

1 participant