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]

Reply via email to