| | | ``no_verify`` is set |
| | | to ``1``. |
+-----------------+-----------------------------+-----------------------------+
+| ``legacy_uuid`` | ``0`` or ``1`` | If set to ``1``, the driver |
+| | | will track VMs based on |
+| | | their "Host-unique" UUID. |
+| | | If set to ``0`` it will use |
+| | | the "Cluster-unique" UUID |
+| | | instead. The default value |
+| | | is ``0``. |
+| | | :since:`Since 12.4.0`. |
++-----------------+-----------------------------+-----------------------------+
Authentication
~~~~~~~~~~~~~~
unrestricted ``root`` account. Problems may occur if you use a restricted
account. Detailed testing with restricted accounts has not been done yet.
+UUID Stability
+~~~~~~~~~~~~~~
+
+:since:`Since 12.4.0` there is a change to which UUIDs a domain can be
+identified with. Before this version there was a possible clash of UUIDs even
+on the same host, leading to unexpected issues. In order to fix this libvirt
+started using a different UUID which might cause issues if any user has a domain
+UUID saved anywhere. The older UUID is still available under ``<hwuuid>`` in
+the `General metadata <formatdomain.html#general-metadata>`__ section of the
+domain XML.
+
+In order to restore the previous behaviour parameter ``legacy_uuid=1`` (see
+`Extra parameters`_) can be appended to the URI, but only if needed as it may
+cause the aforementioned issues.
+
Certificates for HTTPS
~~~~~~~~~~~~~~~~~~~~~~
if (esxVI_String_AppendValueListToList(&propertyNameList,
"configStatus\0"
"name\0"
- "runtime.powerState\0"
- "config.uuid\0") < 0 ||
+ "runtime.powerState\0") < 0 ||
+ esxVI_String_AppendValueToList(&propertyNameList,
+ priv->primary->uuid_key) < 0 ||
esxVI_LookupVirtualMachineList(priv->primary, propertyNameList,
&virtualMachineList) < 0) {
goto cleanup;
continue;
if (esxVI_GetVirtualMachineIdentity(virtualMachine,
+ priv->primary->uuid_key,
&id_candidate, &name_candidate,
uuid_candidate) < 0) {
goto cleanup;
esxVI_LookupVirtualMachineByUuid(priv->primary, uuid, propertyNameList,
&virtualMachine,
esxVI_Occurrence_RequiredItem) < 0 ||
- esxVI_GetVirtualMachineIdentity(virtualMachine, &id, &name, NULL) < 0 ||
+ esxVI_GetVirtualMachineIdentity(virtualMachine, NULL, &id, &name, NULL) < 0 ||
esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0) {
goto cleanup;
}
if (esxVI_String_AppendValueListToList(&propertyNameList,
"configStatus\0"
- "runtime.powerState\0"
- "config.uuid\0") < 0 ||
+ "runtime.powerState\0") < 0 ||
+ esxVI_String_AppendValueToList(&propertyNameList,
+ priv->primary->uuid_key) < 0 ||
esxVI_LookupVirtualMachineByName(priv->primary, name, propertyNameList,
&virtualMachine,
esxVI_Occurrence_RequiredItem) < 0) {
goto cleanup;
}
- if (esxVI_GetVirtualMachineIdentity(virtualMachine, &id, NULL, uuid) < 0 ||
+ if (esxVI_GetVirtualMachineIdentity(virtualMachine, priv->primary->uuid_key,
+ &id, NULL, uuid) < 0 ||
esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0) {
goto cleanup;
}
esxVI_Occurrence_RequiredItem) < 0 ||
esxVI_GetVirtualMachineMORef(virtualMachine, &moref) < 0 ||
esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0 ||
- esxVI_GetVirtualMachineIdentity(virtualMachine, &id, NULL, NULL) < 0 ||
+ esxVI_GetVirtualMachineIdentity(virtualMachine, NULL, &id, NULL, NULL) < 0 ||
esxVI_GetStringValue(virtualMachine, "config.files.vmPathName",
&vmPathName, esxVI_Occurrence_RequiredItem) < 0) {
goto cleanup;
if (powerState != esxVI_VirtualMachinePowerState_PoweredOff)
def->id = id;
+ if (priv->primary->legacy_uuid)
+ memcpy(def->uuid, def->hw_uuid, VIR_UUID_BUFLEN);
+
xml = virDomainDefFormat(def, priv->xmlopt,
virDomainDefFormatConvertXMLFlags(flags));
}
names[count] = NULL;
- if (esxVI_GetVirtualMachineIdentity(virtualMachine, NULL, &names[count],
+ if (esxVI_GetVirtualMachineIdentity(virtualMachine, NULL, NULL, &names[count],
NULL) < 0) {
goto cleanup;
}
(priv->primary, domain->uuid, propertyNameList, &virtualMachine,
priv->parsedUri->autoAnswer) < 0 ||
esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0 ||
- esxVI_GetVirtualMachineIdentity(virtualMachine, &id, NULL, NULL) < 0) {
+ esxVI_GetVirtualMachineIdentity(virtualMachine, NULL, &id, NULL, NULL) < 0) {
goto cleanup;
}
/* Request required data for esxVI_GetVirtualMachineIdentity */
if (esxVI_String_AppendValueListToList(&propertyNameList,
"configStatus\0"
- "name\0"
- "config.uuid\0") < 0) {
+ "name\0") < 0 ||
+ esxVI_String_AppendValueToList(&propertyNameList,
+ priv->primary->uuid_key) < 0) {
goto cleanup;
}
}
/* If the lookup of the required properties fails for some of the machines
* in the list it's preferrable to return the valid objects instead of
* failing outright */
- if ((needIdentity && esxVI_GetVirtualMachineIdentity(virtualMachine, &id, &name, uuid) < 0) ||
- (needPowerState && esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0)) {
+ if ((needIdentity &&
+ esxVI_GetVirtualMachineIdentity(virtualMachine, priv->primary->uuid_key,
+ &id, &name, uuid) < 0) ||
+ (needPowerState &&
+ esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0)) {
/* Raise error only if we didn't successfuly fill any domain */
if (count == 0 && !virtualMachine->_next)
esxPrivate *priv = domain->conn->privateData;
esxVI_ManagedObjectReference *managedObjectReference = NULL;
char uuid_string[VIR_UUID_STRING_BUFLEN] = "";
+ esxVI_Boolean instanceUuid = esxVI_Boolean_True;
virCheckFlags(0, -1);
+ if (priv->primary->legacy_uuid)
+ instanceUuid = esxVI_Boolean_Undefined;
+
if (esxVI_EnsureSession(priv->primary) < 0)
return -1;
if (esxVI_FindByUuid(priv->primary, priv->primary->datacenter->_reference,
uuid_string, esxVI_Boolean_True,
- esxVI_Boolean_Undefined,
+ instanceUuid,
&managedObjectReference) < 0) {
return -1;
}
size_t i;
int noVerify;
int autoAnswer;
+ int legacy_uuid;
char *tmp;
ESX_VI_CHECK_ARG_LIST(parsedUri);
}
(*parsedUri)->autoAnswer = autoAnswer != 0;
+ } else if (STRCASEEQ(queryParam->name, "legacy_uuid")) {
+ if (virStrToLong_i(queryParam->value, NULL, 10, &legacy_uuid) < 0 ||
+ (legacy_uuid != 0 && legacy_uuid != 1)) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("Query parameter 'legacy_uuid' has unexpected value '%1$s' (should be 0 or 1)"),
+ queryParam->value);
+ goto cleanup;
+ }
+
+ (*parsedUri)->legacy_uuid = legacy_uuid != 0;
} else if (STRCASEEQ(queryParam->name, "proxy")) {
/* Expected format: [<type>://]<hostname>[:<port>] */
(*parsedUri)->proxy = true;
int proxy_port;
char *path;
char *cacert;
+ bool legacy_uuid;
};
int esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURI *uri);
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.
if (ctx->productLine == esxVI_ProductLine_VPX)
ctx->hasSessionIsActive = true;
-
+ ctx->legacy_uuid = parsedUri->legacy_uuid;
+ ctx->uuid_key = ctx->legacy_uuid ? "config.uuid" : "config.instanceUuid";
if (esxVI_Login(ctx, username, escapedPassword, NULL, &ctx->session) < 0 ||
esxVI_BuildSelectSetCollection(ctx) < 0) {
int
esxVI_GetVirtualMachineIdentity(esxVI_ObjectContent *virtualMachine,
+ const char *uuid_key,
int *id, char **name, unsigned char *uuid)
{
const char *uuid_string = NULL;
}
if (uuid) {
+ if (!uuid_key) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Cannot get VM's UUID without supplying a VM UUID key"));
+ goto failure;
+ }
+
if (esxVI_GetManagedEntityStatus(virtualMachine, "configStatus",
&configStatus) < 0) {
goto failure;
for (dynamicProperty = virtualMachine->propSet;
dynamicProperty;
dynamicProperty = dynamicProperty->_next) {
- if (STREQ(dynamicProperty->name, "config.uuid")) {
+
+ if (STREQ(dynamicProperty->name, uuid_key)) {
if (esxVI_AnyType_ExpectType(dynamicProperty->val,
esxVI_Type_String) < 0) {
goto failure;
int result = -1;
esxVI_ManagedObjectReference *managedObjectReference = NULL;
char uuid_string[VIR_UUID_STRING_BUFLEN] = "";
+ esxVI_Boolean instanceUuid = esxVI_Boolean_True;
+
+ if (ctx->legacy_uuid)
+ instanceUuid = esxVI_Boolean_Undefined;
ESX_VI_CHECK_ARG_LIST(virtualMachine);
virUUIDFormat(uuid, uuid_string);
if (esxVI_FindByUuid(ctx, ctx->datacenter->_reference, uuid_string,
- esxVI_Boolean_True, esxVI_Boolean_Undefined,
+ esxVI_Boolean_True, instanceUuid,
&managedObjectReference) < 0) {
return -1;
}
candidate = candidate->_next) {
g_autofree char *name_candidate = NULL;
- if (esxVI_GetVirtualMachineIdentity(candidate, NULL, &name_candidate,
+ if (esxVI_GetVirtualMachineIdentity(candidate, NULL, NULL, &name_candidate,
NULL) < 0) {
goto cleanup;
}
esxVI_SelectionSpec *selectSet_datacenterToNetwork;
bool hasQueryVirtualDiskUuid;
bool hasSessionIsActive;
+ bool legacy_uuid;
+ const char *uuid_key;
};
int esxVI_Context_Alloc(esxVI_Context **ctx);
bool inverse);
int esxVI_GetVirtualMachineIdentity(esxVI_ObjectContent *virtualMachine,
+ const char *uuid_key,
int *id, char **name, unsigned char *uuid);
int esxVI_GetNumberOfSnapshotTrees
def->scsiBusMaxUnit = SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT;
}
- /* vmx:uuid.bios -> def:uuid */
+ /* vmx:uuid.bios -> def:hwuuid */
/* FIXME: Need to handle 'uuid.action = "create"' */
- if (virVMXGetConfigUUID(conf, "uuid.bios", def->uuid, true) < 0)
+ if (virVMXGetConfigUUID(conf, "uuid.bios", def->hw_uuid, true) < 0)
goto cleanup;
+ /* vmx:vc.uuid -> def:uuid */
+ if (virVMXGetConfigUUID(conf, "vc.uuid", def->uuid, true) < 0)
+ goto cleanup;
+
+ /* Fallback to legacy behaviour if there is no vc.uuid */
+ if (!virUUIDIsValid(def->uuid))
+ memcpy(def->uuid, def->hw_uuid, VIR_UUID_BUFLEN);
+
/* vmx:displayName -> def:name */
if (virVMXGetConfigString(conf, "displayName", &def->name, true) < 0)
goto cleanup;
<domain type='vmware'>
<name>FEDORA11</name>
<uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <hwuuid>50115e16-9bdc-49d7-f171-53c4d7f91710</hwuuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>fedora11</name>
<uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <hwuuid>50115e16-9bdc-49d7-f171-53c4d7f91710</hwuuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>Fedora11</name>
<uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <hwuuid>50115e16-9bdc-49d7-f171-53c4d7f91710</hwuuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>w2019biosvmware</name>
- <uuid>421a6177-5aa9-abb7-5924-fc376c18a1b4</uuid>
+ <uuid>501af9f2-6d29-1c76-19a9-b208ede5f374</uuid>
+ <hwuuid>421a6177-5aa9-abb7-5924-fc376c18a1b4</hwuuid>
<genid>13c67c91-9f47-526f-b0d6-e4dd2e4bb4f9</genid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<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>
+ <hwuuid>422c0152-63ab-cd03-9650-4301ae77aefd</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>1</vcpu>
<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>
+ <hwuuid>4220fca7-11dd-d67e-19cc-fcad0a37c342</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>1</vcpu>
<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>
+ <hwuuid>421eb458-5448-fc12-2074-83d5e419e138</hwuuid>
<description>name:Test-Mig-VM-1
userid:962314ba515c48388a0e95c0961709ff
username:admin
<domain type='vmware'>
<name>wild14</name>
- <uuid>421b223a-f2c1-c7c9-a399-34d2d9fde26d</uuid>
+ <uuid>501b831e-75d8-15f8-36fa-b9e225f395aa</uuid>
+ <hwuuid>421b223a-f2c1-c7c9-a399-34d2d9fde26d</hwuuid>
<description>execution env sandbox automation platform</description>
<memory unit='KiB'>33554432</memory>
<currentMemory unit='KiB'>33554432</currentMemory>
<domain type='vmware'>
<name>dokuwiki</name>
- <uuid>420338bd-1c9e-ad50-99a2-59e92ddda8b6</uuid>
+ <uuid>500341d5-fe23-ac46-8cb3-77a8e5a1143d</uuid>
+ <hwuuid>420338bd-1c9e-ad50-99a2-59e92ddda8b6</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>2</vcpu>
<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>
+ <hwuuid>4220df89-e3a8-8513-f611-ad252bfd7047</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>1</vcpu>
<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>
+ <hwuuid>42256ec1-e066-9364-3dd1-36a0b75263dd</hwuuid>
<genid>3191ed70-eb21-9c71-2478-373fb27fed9b</genid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<domain type='vmware'>
<name>virtDebian1</name>
<uuid>564dcd37-3685-8889-35ea-719fc93c983e</uuid>
+ <hwuuid>564dcd37-3685-8889-35ea-719fc93c983e</hwuuid>
<memory unit='KiB'>1024000</memory>
<currentMemory unit='KiB'>120832</currentMemory>
<vcpu placement='static' cpuset='0-2,5-7'>4</vcpu>
<domain type='vmware'>
<name>virtDebian2</name>
<uuid>564db768-f332-42ee-6201-06973cf5c30c</uuid>
+ <hwuuid>564db768-f332-42ee-6201-06973cf5c30c</hwuuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static' cpuset='0,3-5'>2</vcpu>
<domain type='vmware'>
<name>virtMonServ1</name>
<uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid>
+ <hwuuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</hwuuid>
<memory unit='KiB'>524288</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>vmtest.local</name>
- <uuid>423e94a9-a1c7-b31d-7161-76c7586c830e</uuid>
+ <uuid>503e06db-f8d5-458e-a2fb-f9820253a7be</uuid>
+ <hwuuid>423e94a9-a1c7-b31d-7161-76c7586c830e</hwuuid>
<description>Centos 5.5 64bit Server</description>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<domain type='vmware'>
<name>el6-test</name>
- <uuid>564d15d4-d062-fe9a-80f5-eb8e1a2c3afc</uuid>
+ <uuid>5200b69b-8d88-7bdf-a14a-02705d653772</uuid>
+ <hwuuid>564d15d4-d062-fe9a-80f5-eb8e1a2c3afc</hwuuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<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>
+ <hwuuid>564d9176-621f-0239-f5ad-3a002371953b</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>RHEL7_10_NICs</name>
- <uuid>42359420-99dc-4261-5264-ba58ddae20e4</uuid>
+ <uuid>50351de6-7d56-29ab-9d72-c7f9ea3fcfd0</uuid>
+ <hwuuid>42359420-99dc-4261-5264-ba58ddae20e4</hwuuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>8</vcpu>
<domain type='vmware'>
<name>v2v-windows-kkulkarn</name>
- <uuid>42009372-17da-be73-779d-007ccf1bd228</uuid>
+ <uuid>5000d2b0-616e-6129-8c06-82b07440a871</uuid>
+ <hwuuid>42009372-17da-be73-779d-007ccf1bd228</hwuuid>
<description>MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5</description>
<memory unit='KiB'>16777216</memory>
<currentMemory unit='KiB'>16777216</currentMemory>
<domain type='vmware'>
<name>ATTM_VM</name>
<uuid>564d7088-01a1-9832-e72b-6790c73b64ea</uuid>
+ <hwuuid>564d7088-01a1-9832-e72b-6790c73b64ea</hwuuid>
<memory unit='KiB'>3657728</memory>
<currentMemory unit='KiB'>3657728</currentMemory>
<vcpu placement='static'>2</vcpu>
<domain type='vmware'>
<name>Server1</name>
<uuid>564d1223-f835-c4b1-bbf6-e32390d62bd3</uuid>
+ <hwuuid>564d1223-f835-c4b1-bbf6-e32390d62bd3</hwuuid>
<memory unit='KiB'>32768</memory>
<currentMemory unit='KiB'>32768</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>Server2</name>
<uuid>564d3301-267f-a0ef-8b7d-d45e98d6cba4</uuid>
+ <hwuuid>564d3301-267f-a0ef-8b7d-d45e98d6cba4</hwuuid>
<memory unit='KiB'>32768</memory>
<currentMemory unit='KiB'>32768</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>Router</name>
<uuid>564ddebe-e86f-d586-0854-a0879cc4be5a</uuid>
+ <hwuuid>564ddebe-e86f-d586-0854-a0879cc4be5a</hwuuid>
<memory unit='KiB'>32768</memory>
<currentMemory unit='KiB'>32768</currentMemory>
<vcpu placement='static'>1</vcpu>
<domain type='vmware'>
<name>Client</name>
<uuid>564dad58-0629-d3e6-ecfe-8ff839c5e35d</uuid>
+ <hwuuid>564dad58-0629-d3e6-ecfe-8ff839c5e35d</hwuuid>
<memory unit='KiB'>270336</memory>
<currentMemory unit='KiB'>270336</currentMemory>
<vcpu placement='static'>1</vcpu>