Skip to content

doccaz/vm-import-ui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Harvester VM Import UI

A web-based interface for importing virtual machines into Harvester / SUSE Virtualization clusters. Supports two migration engines — the native VM Import Controller and Forklift (Konveyor Migration Toolkit for Virtualization) — driven by a unified wizard-based UI.


Features

Migration Engines

Both engines are available from the same wizard. Select the one that best fits your environment.

VM Import Controller (native Harvester)

  • Source types: VMware vCenter or flat OVA file
  • vCenter Source Explorer:
    • Browse the full vCenter inventory (Datacenter → Cluster → Host → VM)
    • Power On / Off / Reset / Graceful Shutdown VMs before migration
    • Rename source VMs directly from the UI
    • Edit MAC addresses on individual NICs
  • Migration wizard:
    • Automated network and storage mapping
    • Per-NIC interface model selection (v1.6+)
    • Disk bus type selection (v1.6+)
    • Force power-off and configurable shutdown timeout (v1.6+)
    • Skip preflight validation option (v1.6+)
    • Annotations tracking: original CPU, memory, and disk characteristics saved on the plan
  • Plan management:
    • List, inspect, run, and delete plans
    • Integrated log viewer — toggle between full controller logs and plan-filtered logs
    • YAML view for created CRs

Forklift (Konveyor / Migration Toolkit for Virtualization)

  • Provider types: vSphere (vCenter or standalone ESXi) and OVA (NFS-mounted)
  • Provider management:
    • Create, edit, and delete Forklift Providers
    • TLS options per provider: skip verification or supply a custom CA certificate
    • VDDK init image configuration for optimised disk transfer (dramatically faster than the fallback method)
    • Automatic annotation when no VDDK image is provided
    • Availability check with configurable Forklift namespace
  • Migration wizard:
    • Network mapping: map source vSphere networks / port groups to pod network or Multus attachments
    • Storage mapping: map source datastores (vSphere) or disks (OVA) to destination storage classes, with volume mode and access mode selection
    • Custom destination VM name (RFC-1123 compliant)
    • Migration options: warm migration, migrate shared disks, volume populator labels, preserve cluster CPU model, preserve static IPs, default NIC model
  • Plan detail view (tabbed):
    • Overview: provider, target namespace, VM list, readiness status
    • Mappings: live NetworkMap and StorageMap status with condition badges
    • Migration: per-VM progress bars and phase tracking
    • Conditions: full condition list with timestamps
    • Debug: aggregated logs from Forklift controller and virt-v2v worker pods
  • Full lifecycle: run, cancel, delete migration; delete plan with cleanup of NetworkMap + StorageMap
  • YAML view for Plans, NetworkMaps, StorageMaps, and Migration CRs

General UI

  • Three themes: Light, SUSE, Dark (switchable at runtime)
  • About screen with version and build info
  • Version-aware capabilities: detects Harvester v1.6+ to unlock advanced options
  • Responsive layout with resizable log/debug panels

Quick Start

  1. Obtain the kubeconfig for your Harvester / SUSE Virtualization cluster (Support → Download KubeConfig in the Harvester UI).
  2. Pull and run the container (Podman or Docker):
podman run -p 8080:8080 \
  -v ~/myharvester-kubeconfig:/kubeconfig:ro \
  ghcr.io/doccaz/vm-import-ui:latest
  1. Open your browser at http://localhost:8080
  2. Create a vCenter Source (for VMIC) or a Forklift Provider (for Forklift)
  3. Create a Migration Plan, select the VM, configure mappings
  4. Run the plan and monitor progress — done!

DNS note: if your vSphere host uses a .lan or private domain that the container cannot resolve, mount your host resolver:

podman run -p 8080:8080 \
  -v ~/myharvester-kubeconfig:/kubeconfig:ro \
  -v /etc/resolv.conf:/etc/resolv.conf:ro \
  ghcr.io/doccaz/vm-import-ui:latest

Screenshots — VM Import Controller

Create a vCenter source: Create the VMware source configuration

Browse the vCenter inventory and select a VM: Select the source VM

Configure the destination VM: Configure the destination VM

Map source and destination networks: Map the source and destination networks

Review the migration plan summary: Summary of what will be done

Migration plan created and submitted: The migration starts

Monitor migration progress: Migration progress

VM successfully created in Harvester: Migration finished

YAML view for a migration plan: YAML view


Screenshots — Forklift

Forklift — screenshot 1

Forklift — screenshot 2

Forklift — screenshot 3

Forklift — screenshot 4

Forklift — screenshot 5

Forklift — screenshot 6


Building Locally

Step 1 — Build the container image

podman build -t vm-import-ui:local .

Step 2 — Run the container

podman run -p 8080:8080 \
  -v ~/.kube/config:/kubeconfig:ro \
  -e KUBECONFIG=/kubeconfig \
  vm-import-ui:local

Step 3 — Enable debug logging

podman run -p 8080:8080 \
  -v ~/myharvester-kubeconfig:/kubeconfig:ro \
  -e LOG_LEVEL=debug \
  vm-import-ui:local

Run tests

# Go backend
cd pkg && go test -v ./...

# React frontend
cd frontend && npx react-scripts test --watchAll=false

Environment Variables

Variable Default Description
KUBECONFIG /kubeconfig Path to kubeconfig file
LOG_LEVEL info Log level: debug, info, warn, error
UI_PATH /ui Path to frontend build directory
USE_MOCK_DATA false Run without a Kubernetes cluster (dev mode)

Latest Release (v1.7.0)

  • Full Forklift (MTV) support: provider management, plan creation, migration lifecycle, detailed plan view with log aggregation
  • TLS options and VDDK image configuration for Forklift vSphere providers
  • OVA provider support via Forklift (NFS-mounted OVF/OVA files)
  • Warm migration, shared disk, and static IP preservation options for Forklift
  • PortGroup support in network mapping
  • Three UI themes (Light, SUSE, Dark)

About

Trying to create a more user-friendly VM import UI

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages