diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 1cd5a82227..04eabff18a 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -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) { diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-10.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-10.xml index b8c522af1f..47ed637920 100644 --- a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-10.xml +++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-10.xml @@ -1,6 +1,7 @@ w2019biosvmware 421a6177-5aa9-abb7-5924-fc376c18a1b4 + 13c67c91-9f47-526f-b0d6-e4dd2e4bb4f9 4194304 4194304 2