mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
vmx: Parse vm.genid
The VMware metadata file contains genid but we are not parsing and thus reporting it in domain XML. However, it's not as straightforward as one might think. The UUID reported by VMware is not in its usual string form, but split into two signed long longs. That means, we have to do a bit of trickery when parsing. But looking around it's the same magic that libguestfs does: https://github.com/libguestfs/virt-v2v/blob/master/v2v/input_vmx.ml#L421 It's also explained by Rich on qemu-devel: https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg02019.html Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1598348 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
This commit is contained in:
parent
919f25d36e
commit
7d661d6e20
@ -1337,6 +1337,32 @@ virVMXConfigScanResultsCollector(const char* name,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
virVMXParseGenID(virConf *conf,
|
||||
virDomainDef *def)
|
||||
{
|
||||
long long vmid[2] = { 0 };
|
||||
g_autofree char *uuidstr = NULL;
|
||||
|
||||
if (virVMXGetConfigLong(conf, "vm.genid", &vmid[0], 0, true) < 0 ||
|
||||
virVMXGetConfigLong(conf, "vm.genidX", &vmid[1], 0, true) < 0)
|
||||
return -1;
|
||||
|
||||
if (vmid[0] == 0 && vmid[1] == 0)
|
||||
return 0;
|
||||
|
||||
uuidstr = g_strdup_printf("%.16llx%.16llx", vmid[0], vmid[1]);
|
||||
if (virUUIDParse(uuidstr, def->genid) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Could not parse UUID from string '%s'"), uuidstr);
|
||||
return -1;
|
||||
}
|
||||
def->genidRequested = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* VMX -> Domain XML
|
||||
@ -1466,6 +1492,10 @@ virVMXParseConfig(virVMXContext *ctx,
|
||||
}
|
||||
}
|
||||
|
||||
/* vmx:vm.genid + vm.genidX -> def:genid */
|
||||
if (virVMXParseGenID(conf, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* vmx:annotation -> def:description */
|
||||
if (virVMXGetConfigString(conf, "annotation", &def->description,
|
||||
true) < 0) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<domain type='vmware'>
|
||||
<name>w2019biosvmware</name>
|
||||
<uuid>421a6177-5aa9-abb7-5924-fc376c18a1b4</uuid>
|
||||
<genid>13c67c91-9f47-526f-b0d6-e4dd2e4bb4f9</genid>
|
||||
<memory unit='KiB'>4194304</memory>
|
||||
<currentMemory unit='KiB'>4194304</currentMemory>
|
||||
<vcpu placement='static'>2</vcpu>
|
||||
|
Loading…
x
Reference in New Issue
Block a user