Before this patch, esxDomainGetVcpusFlags was returning -1 since
"maxSupportedVcpus" can be NULL in ESXi[1]. In order to make it work,
replicate the same behavior than esxDomainGetInfo that used
config.hardware.numCPU to return the correct number of vcpus of a VM.
This patch, together with the next one, makes the calls
virDomainSetVcpus, virDomainGetMaxVcpus and virDomainGetVcpusFlags to
return successfull again.
[
1]:https://pubs.vmware.com/vi-sdk/visdk250/ReferenceGuide/vim.host.Capabi...
Signed-off-by: Marcos Paulo de Souza <marcos.souza.org(a)gmail.com>
---
src/esx/esx_driver.c | 36 +++++++++++-------------------------
1 file changed, 11 insertions(+), 25 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index c2154799fa..d5e8a7b4eb 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -2547,45 +2547,31 @@ esxDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
{
esxPrivate *priv = domain->conn->privateData;
esxVI_String *propertyNameList = NULL;
- esxVI_ObjectContent *hostSystem = NULL;
- esxVI_DynamicProperty *dynamicProperty = NULL;
+ esxVI_ObjectContent *virtualMachine = NULL;
+ esxVI_Int *vcpus = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_VCPU_MAXIMUM, -1);
- if (priv->maxVcpus > 0)
- return priv->maxVcpus;
-
priv->maxVcpus = -1;
if (esxVI_EnsureSession(priv->primary) < 0)
return -1;
if (esxVI_String_AppendValueToList(&propertyNameList,
- "capability.maxSupportedVcpus") < 0
||
- esxVI_LookupHostSystemProperties(priv->primary, propertyNameList,
- &hostSystem) < 0) {
+ "config.hardware.numCPU\0") < 0
||
+ esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid,
+ propertyNameList, &virtualMachine,
+ esxVI_Occurrence_RequiredItem) < 0 ||
+ esxVI_GetInt(virtualMachine, "config.hardware.numCPU",
+ &vcpus, esxVI_Occurrence_RequiredItem) < 0)
goto cleanup;
- }
-
- for (dynamicProperty = hostSystem->propSet; dynamicProperty;
- dynamicProperty = dynamicProperty->_next) {
- if (STREQ(dynamicProperty->name, "capability.maxSupportedVcpus")) {
- if (esxVI_AnyType_ExpectType(dynamicProperty->val,
- esxVI_Type_Int) < 0) {
- goto cleanup;
- }
-
- priv->maxVcpus = dynamicProperty->val->int32;
- break;
- } else {
- VIR_WARN("Unexpected '%s' property",
dynamicProperty->name);
- }
- }
+ priv->maxVcpus = vcpus->value;
cleanup:
esxVI_String_Free(&propertyNameList);
- esxVI_ObjectContent_Free(&hostSystem);
+ esxVI_ObjectContent_Free(&virtualMachine);
+ esxVI_Int_Free(&vcpus);
return priv->maxVcpus;
}
--
2.17.1