From: Martin Kletzander <[email protected]>

The difference is that the usual UUID is supposed to be unique per host
and instanceUuid should be unique across the whole cluster.  One could
think of them as HUID and CUID (as the first "U" does apparently mean
something else in the Broadcom world).  That _would_ be fine for our
scenario.  However, that piece of information turns out to be false as
well and the UUID we were using (`config.uuid`, or in VMX the
`uuid.bios`) can be the same in two machines on the same host.

Fortunately the `FindByUuid()` function can also search for VMs based on
their `instanceUuid`, dictated by the so far omitted third parameter.
Unfortunately that parameter is not parsed (or at least properly) before
vSphere API 4.0 (the documentation says 2.0, but we are not using that
namespace and 4.0 is the lowest we can target), which we are not
specifying in the server returns a 500 HTTP error if we use the
`instanceUuid` parameter.

So this patch adds the `SOAPAction: urn:vim25/4.0` header to the cURL
requests which makes that `FindByUuid()` function work even with the
`instanceUuid` set, but without any extra labor.

After that this patch also changes all UUIDs to be parsed from the
`config.instanceUuid` (or `vc.uuid` in the VMX, but there's a fallback
to the old `uuid.bios`) and adjusts tests accordingly.

Last, but not least it changes the parameter to aforementioned function
to be always true and henceforth all searching ought to be done with the
more unique ID.

Resolves: https://redhat.atlassian.net/browse/RHEL-174300
Signed-off-by: Martin Kletzander <[email protected]>
---
 src/esx/esx_driver.c                     |  8 ++++----
 src/esx/esx_vi.c                         | 16 ++++++++++++++--
 src/vmx/vmx.c                            | 10 +++++++---
 tests/vmx2xmldata/esx-in-the-wild-10.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-11.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-12.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-13.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-14.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-15.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-16.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-17.xml |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-5.xml  |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-6.xml  |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-7.xml  |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-8.xml  |  2 +-
 tests/vmx2xmldata/esx-in-the-wild-9.xml  |  2 +-
 16 files changed, 38 insertions(+), 22 deletions(-)

diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 010c62b8e880..7cc54af69239 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -1419,7 +1419,7 @@ esxDomainLookupByID(virConnectPtr conn, int id)
                                            "configStatus\0"
                                            "name\0"
                                            "runtime.powerState\0"
-                                           "config.uuid\0") < 0 ||
+                                           "config.instanceUuid\0") < 0 ||
         esxVI_LookupVirtualMachineList(priv->primary, propertyNameList,
                                        &virtualMachineList) < 0) {
         goto cleanup;
@@ -1522,7 +1522,7 @@ esxDomainLookupByName(virConnectPtr conn, const char 
*name)
     if (esxVI_String_AppendValueListToList(&propertyNameList,
                                            "configStatus\0"
                                            "runtime.powerState\0"
-                                           "config.uuid\0") < 0 ||
+                                           "config.instanceUuid\0") < 0 ||
         esxVI_LookupVirtualMachineByName(priv->primary, name, propertyNameList,
                                          &virtualMachine,
                                          esxVI_Occurrence_RequiredItem) < 0) {
@@ -4788,7 +4788,7 @@ esxConnectListAllDomains(virConnectPtr conn,
         if (esxVI_String_AppendValueListToList(&propertyNameList,
                                                "configStatus\0"
                                                "name\0"
-                                               "config.uuid\0") < 0) {
+                                               "config.instanceUuid\0") < 0) {
             goto cleanup;
         }
     }
@@ -4970,7 +4970,7 @@ esxDomainHasManagedSaveImage(virDomainPtr domain, 
unsigned int flags)
 
     if (esxVI_FindByUuid(priv->primary, priv->primary->datacenter->_reference,
                          uuid_string, esxVI_Boolean_True,
-                         esxVI_Boolean_Undefined,
+                         esxVI_Boolean_True,
                          &managedObjectReference) < 0) {
         return -1;
     }
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index db006ed16f40..55d5d1478586 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -300,6 +300,17 @@ esxVI_CURL_Connect(esxVI_CURL *curl, esxUtil_ParsedUri 
*parsedUri)
     curl->headers = curl_slist_append(curl->headers,
                                       "Content-Type: text/xml; charset=UTF-8");
 
+    /*
+     * Testing showed that the 4.0 version is most close to our current types 
in
+     * esx_vi_generator.input data.  We could update the version if new method
+     * parameters or object properties are needed.
+     *
+     * The other option is to drop the "/x.y" suffix completely once
+     * https://gitlab.com/libvirt/libvirt/-/work_items/878 is implemented since
+     * that will not limit the version at all.
+     */
+    curl->headers = curl_slist_append(curl->headers, "SOAPAction: 
urn:vim25/4.0");
+
     /*
      * Add an empty expect header to stop CURL from waiting for a response code
      * 100 (Continue) from the server before continuing the POST operation.
@@ -2452,7 +2463,8 @@ esxVI_GetVirtualMachineIdentity(esxVI_ObjectContent 
*virtualMachine,
             for (dynamicProperty = virtualMachine->propSet;
                  dynamicProperty;
                  dynamicProperty = dynamicProperty->_next) {
-                if (STREQ(dynamicProperty->name, "config.uuid")) {
+
+                if (STREQ(dynamicProperty->name, "config.instanceUuid")) {
                     if (esxVI_AnyType_ExpectType(dynamicProperty->val,
                                                  esxVI_Type_String) < 0) {
                         goto failure;
@@ -2682,7 +2694,7 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, 
const unsigned char *uuid,
     virUUIDFormat(uuid, uuid_string);
 
     if (esxVI_FindByUuid(ctx, ctx->datacenter->_reference, uuid_string,
-                         esxVI_Boolean_True, esxVI_Boolean_Undefined,
+                         esxVI_Boolean_True, esxVI_Boolean_True,
                          &managedObjectReference) < 0) {
         return -1;
     }
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 084b4154427f..a2422c37355c 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -1492,9 +1492,13 @@ virVMXParseConfig(virVMXContext *ctx,
         def->scsiBusMaxUnit = SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT;
     }
 
-    /* vmx:uuid.bios -> def:uuid */
-    /* FIXME: Need to handle 'uuid.action = "create"' */
-    if (virVMXGetConfigUUID(conf, "uuid.bios", def->uuid, true) < 0)
+    /* vmx:vc.uuid (fallback to uuid.bios) -> def:uuid */
+    if (virVMXGetConfigUUID(conf, "vc.uuid", def->uuid, true) < 0)
+        goto cleanup;
+
+    /* FIXME: Need to handle 'uuid.action = "create"' ? */
+    if (!virUUIDIsValid(def->uuid) &&
+        virVMXGetConfigUUID(conf, "uuid.bios", def->uuid, true) < 0)
         goto cleanup;
 
     /* vmx:displayName -> def:name */
diff --git a/tests/vmx2xmldata/esx-in-the-wild-10.xml 
b/tests/vmx2xmldata/esx-in-the-wild-10.xml
index 1b1fdf06623f..3a8bb20140a1 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-10.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-10.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>w2019biosvmware</name>
-  <uuid>421a6177-5aa9-abb7-5924-fc376c18a1b4</uuid>
+  <uuid>501af9f2-6d29-1c76-19a9-b208ede5f374</uuid>
   <genid>13c67c91-9f47-526f-b0d6-e4dd2e4bb4f9</genid>
   <memory unit='KiB'>4194304</memory>
   <currentMemory unit='KiB'>4194304</currentMemory>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-11.xml 
b/tests/vmx2xmldata/esx-in-the-wild-11.xml
index 0dd297af43f0..6398e50c5c6c 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-11.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-11.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>esx6.7-rhel7.7-x86_64</name>
-  <uuid>422c0152-63ab-cd03-9650-4301ae77aefd</uuid>
+  <uuid>502ca229-12eb-24f6-0c37-c025ff5da005</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>1</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml 
b/tests/vmx2xmldata/esx-in-the-wild-12.xml
index ac83982b9b88..d505ff58d12d 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-12.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>Auto-esx8.0-rhell9.3-efi-with-empty-cdrom</name>
-  <uuid>4220fca7-11dd-d67e-19cc-fcad0a37c342</uuid>
+  <uuid>5020ca5b-7ac1-5c44-cfa1-9e762e2f933b</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>1</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-13.xml 
b/tests/vmx2xmldata/esx-in-the-wild-13.xml
index cef9fd4e48c9..2bea51a087eb 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-13.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-13.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)</name>
-  <uuid>421eb458-5448-fc12-2074-83d5e419e138</uuid>
+  <uuid>01ce57d0-4e20-41a5-8b6c-bcbf49a032ec</uuid>
   <description>name:Test-Mig-VM-1
 userid:962314ba515c48388a0e95c0961709ff
 username:admin
diff --git a/tests/vmx2xmldata/esx-in-the-wild-14.xml 
b/tests/vmx2xmldata/esx-in-the-wild-14.xml
index f10707d1d412..574dd2097455 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-14.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-14.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>wild14</name>
-  <uuid>421b223a-f2c1-c7c9-a399-34d2d9fde26d</uuid>
+  <uuid>501b831e-75d8-15f8-36fa-b9e225f395aa</uuid>
   <description>execution env sandbox automation platform</description>
   <memory unit='KiB'>33554432</memory>
   <currentMemory unit='KiB'>33554432</currentMemory>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.xml 
b/tests/vmx2xmldata/esx-in-the-wild-15.xml
index 78d15e1538e6..4c753f87e2ea 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-15.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-15.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>dokuwiki</name>
-  <uuid>420338bd-1c9e-ad50-99a2-59e92ddda8b6</uuid>
+  <uuid>500341d5-fe23-ac46-8cb3-77a8e5a1143d</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>2</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml 
b/tests/vmx2xmldata/esx-in-the-wild-16.xml
index 51746dd77ef0..8c5bc7f43513 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-16.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>Auto-esx8.0-rhel9.4-efi-nvme-disk</name>
-  <uuid>4220df89-e3a8-8513-f611-ad252bfd7047</uuid>
+  <uuid>5020196e-c5c8-7310-fcdb-d2933d0c4b2f</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>1</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-17.xml 
b/tests/vmx2xmldata/esx-in-the-wild-17.xml
index 725f21bdf601..506e08fc54ec 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-17.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-17.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>esx8.0-win11-with-second-disk-in-subfolder</name>
-  <uuid>42256ec1-e066-9364-3dd1-36a0b75263dd</uuid>
+  <uuid>50250f27-538b-5091-a43b-a50ce95f2382</uuid>
   <genid>3191ed70-eb21-9c71-2478-373fb27fed9b</genid>
   <memory unit='KiB'>4194304</memory>
   <currentMemory unit='KiB'>4194304</currentMemory>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-5.xml 
b/tests/vmx2xmldata/esx-in-the-wild-5.xml
index c88e60bdc070..a86119508c70 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-5.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-5.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>vmtest.local</name>
-  <uuid>423e94a9-a1c7-b31d-7161-76c7586c830e</uuid>
+  <uuid>503e06db-f8d5-458e-a2fb-f9820253a7be</uuid>
   <description>Centos 5.5 64bit Server</description>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-6.xml 
b/tests/vmx2xmldata/esx-in-the-wild-6.xml
index 805f03356129..f252304f9796 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-6.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-6.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>el6-test</name>
-  <uuid>564d15d4-d062-fe9a-80f5-eb8e1a2c3afc</uuid>
+  <uuid>5200b69b-8d88-7bdf-a14a-02705d653772</uuid>
   <memory unit='KiB'>1048576</memory>
   <currentMemory unit='KiB'>1048576</currentMemory>
   <vcpu placement='static'>1</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-7.xml 
b/tests/vmx2xmldata/esx-in-the-wild-7.xml
index b641574776b6..076655f37ac2 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-7.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-7.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>esx-rhel6-mini-with-scsi-device</name>
-  <uuid>564d9176-621f-0239-f5ad-3a002371953b</uuid>
+  <uuid>52409533-33a2-56c5-36ce-80d605f8ecf4</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>1</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml 
b/tests/vmx2xmldata/esx-in-the-wild-8.xml
index f13e6f744880..2ef609e87bdb 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-8.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>RHEL7_10_NICs</name>
-  <uuid>42359420-99dc-4261-5264-ba58ddae20e4</uuid>
+  <uuid>50351de6-7d56-29ab-9d72-c7f9ea3fcfd0</uuid>
   <memory unit='KiB'>2097152</memory>
   <currentMemory unit='KiB'>2097152</currentMemory>
   <vcpu placement='static'>8</vcpu>
diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml 
b/tests/vmx2xmldata/esx-in-the-wild-9.xml
index 6b4d878ab18a..4fbe141f6c47 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-9.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml
@@ -1,6 +1,6 @@
 <domain type='vmware'>
   <name>v2v-windows-kkulkarn</name>
-  <uuid>42009372-17da-be73-779d-007ccf1bd228</uuid>
+  <uuid>5000d2b0-616e-6129-8c06-82b07440a871</uuid>
   <description>MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5</description>
   <memory unit='KiB'>16777216</memory>
   <currentMemory unit='KiB'>16777216</currentMemory>
-- 
2.54.0

Reply via email to