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:
Michal Privoznik 2021-07-28 13:32:10 +02:00
parent 919f25d36e
commit 7d661d6e20
2 changed files with 31 additions and 0 deletions

View File

@ -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) {

View File

@ -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>