sudo87 opened a new issue, #13920: URL: https://github.com/apache/cloudstack/issues/13920
## 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%[email protected]/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. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
