Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

VMware import (importVm) fails when datacenter/cluster/host name contains a space

Open
#13,920 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
75/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
java

Research direction

Start in plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapper.java, reading buildVpxUrl, getExportOVAUrlFromRemoteInstance, and encodeUsername. Reproduce the import with a space in a datacenter, cluster, host, path, or VM name and inspect both OVA and VDDK paths. Done means the generated vpx:// and vi:// URIs parse successfully while folder separators remain intact.

Written by the indexing model from the issue text.

Description

component:kvm component:vmware Severity:Minor type:bug

Summary

LibvirtConvertInstanceCommandWrapper builds the vpx:///vi:// connection URIs for virt-v2v by concatenating the vCenter datacenter/cluster/host names without percent-encoding them. A datacenter (or cluster/host) name containing a space — valid in vSphere — produces an invalid URI, and VM import from VMware fails.

Environment

  • CloudStack main (659f675b059c1e5008deb3bb28793eadf377d687)
  • KVM host, virt-v2v 2.7.1, libvirt 9.0.0
  • Import VM from VMware (UI: Import Instance, or the importVm API with importsource=vmware), reproduced on both the OVA-conversion path and the VDDK path (-it vddk)

Steps to Reproduce

  1. Rename a vCenter Datacenter to include a space, e.g. "QA Lab".
  2. Import a VM from it via the CloudStack UI (Import Instance) or the importVm API.
  3. Conversion fails.

Actual Behavior

Using VPX URL: vpx://Administrator%40vsphere.local@203.0.113.10/QA Lab/cluster-a/203.0.113.20?no_verify=1
virt-v2v: error: could not parse '-ic vpx://...QA Lab/cluster-a/203.0.113.20?no_verify=1'. Original error message was: parse_uri: unable to parse URI

Also seen on the VDDK import path (-it vddk), same unencoded QA Lab segment, surfacing as java.io.IOException: Stream closed instead — a downstream symptom of virt-v2v exiting immediately on the same bad URI, not a separate defect.

The username is correctly percent-encoded (Administrator%40vsphere.local); datacenter/cluster/host are not.

Root Cause

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapper.java

  • buildVpxUrl (~L463): appends datacenter, cluster, host raw after url.append("/").
  • getExportOVAUrlFromRemoteInstance (~L203): same pattern for datacenter/path/vm in the vi:// URL.
  • encodeUsername (~L298) uses URLEncoder.encode, which encodes space as + — wrong for a URI path/authority (libvirt only decodes %20). Not yet visible as a bug since vCenter usernames rarely have spaces, but worth fixing alongside the above with the same helper.

Suggested Fix

Percent-encode datacenter/cluster/host/path/vm per /-delimited sub-segment (not as one string) — datacenter/cluster names can be folder-nested (e.g. MyFolder/MyDC), and that / must stay literal.

versions
ACS 4.22.1

Dominant language
Java
Stars
3.1k
Forks
1.4k
Avg merge
6d 20h
Merged PRs (30d)
27

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/cloudstack

All issues in apache/cloudstack

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.