
Hello Based on http://www.redhat.com/archives/libvir-list/2010-July/msg00480.html, I created this quick patch to accept connection to vSphere 5.x Notes: - I had to remove the warnings for version > 4.1 & 5 because they were generating errors when running scripts encapsulating virsh commands with opennebula. A better option might be to relie on an environment variable (for example DONT_BLAME_LIBVIRT!) to toggle warnings on/off - Ran only a few tests but it works as expected. - Next steps should be to work on VMware API 5. integration Patrice diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 41086ef..78872d4 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -730,9 +730,11 @@ esxConnectToHost(esxPrivate *priv, virConnectAuthPtr auth, if (priv->host->productVersion != esxVI_ProductVersion_ESX35 && priv->host->productVersion != esxVI_ProductVersion_ESX40 && priv->host->productVersion != esxVI_ProductVersion_ESX41 && - priv->host->productVersion != esxVI_ProductVersion_ESX4x) { + priv->host->productVersion != esxVI_ProductVersion_ESX4x && + priv->host->productVersion != esxVI_ProductVersion_ESX50 && + priv->host->productVersion != esxVI_ProductVersion_ESX5x) { ESX_ERROR(VIR_ERR_INTERNAL_ERROR, - _("%s is neither an ESX 3.5 host nor an ESX 4.x host"), + _("%s is neither an ESX 3.5, 4.x nor 5.x host"), hostname); goto cleanup; } @@ -857,10 +859,11 @@ esxConnectToVCenter(esxPrivate *priv, virConnectAuthPtr auth, if (priv->vCenter->productVersion != esxVI_ProductVersion_VPX25 && priv->vCenter->productVersion != esxVI_ProductVersion_VPX40 && priv->vCenter->productVersion != esxVI_ProductVersion_VPX41 && - priv->vCenter->productVersion != esxVI_ProductVersion_VPX4x) { + priv->vCenter->productVersion != esxVI_ProductVersion_VPX4x && + priv->vCenter->productVersion != esxVI_ProductVersion_VPX50 && + priv->vCenter->productVersion != esxVI_ProductVersion_VPX5x) { ESX_ERROR(VIR_ERR_INTERNAL_ERROR, - _("%s is neither a vCenter 2.5 server nor a vCenter " - "4.x server"), hostname); + _("%s is neither a vCenter 2.5, 4.x nor 5.x server"), hostname); goto cleanup; } diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index 325157c..3a11116 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -675,9 +675,23 @@ esxVI_Context_Connect(esxVI_Context *ctx, const char *url, VIR_WARN("Found untested VI API major/minor version '%s'", ctx->service->about->apiVersion); + } else if (STRPREFIX(ctx->service->about->apiVersion, "5.0")) { + ctx->apiVersion = esxVI_APIVersion_50; + + /* + VIR_WARN("Found untested VI API major/minor version '%s'", + ctx->service->about->apiVersion); + */ + } else if (STRPREFIX(ctx->service->about->apiVersion, "5.")) { + ctx->apiVersion = esxVI_APIVersion_5x; + + /* + VIR_WARN("Found untested VI API major/minor version '%s'", + ctx->service->about->apiVersion); + */ } else { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - _("Expecting VI API major/minor version '2.5' or '4.x' " + _("Expecting VI API major/minor version '2.5', '4.x' or '5.x' " "but found '%s'"), ctx->service->about->apiVersion); return -1; } @@ -704,10 +718,24 @@ esxVI_Context_Connect(esxVI_Context *ctx, const char *url, VIR_WARN("Found untested ESX major/minor version '%s'", ctx->service->about->version); + } else if (STRPREFIX(ctx->service->about->version, "5.0")) { + ctx->productVersion = esxVI_ProductVersion_ESX50; + + /* + VIR_WARN("Found untested ESX major/minor version '%s'", + ctx->service->about->version); + */ + } else if (STRPREFIX(ctx->service->about->version, "5.")) { + ctx->productVersion = esxVI_ProductVersion_ESX5x; + + /* + VIR_WARN("Found untested ESX major/minor version '%s'", + ctx->service->about->version); + */ } else { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - _("Expecting ESX major/minor version '3.5' or " - "'4.x' but found '%s'"), + _("Expecting ESX major/minor version '3.5', '4.x' or " + "'5.x' but found '%s'"), ctx->service->about->version); return -1; } @@ -723,9 +751,23 @@ esxVI_Context_Connect(esxVI_Context *ctx, const char *url, VIR_WARN("Found untested VPX major/minor version '%s'", ctx->service->about->version); + } else if (STRPREFIX(ctx->service->about->version, "5.0")) { + ctx->productVersion = esxVI_ProductVersion_VPX50; + + /* + VIR_WARN("Found untested VPX major/minor version '%s'", + ctx->service->about->version); + */ + } else if (STRPREFIX(ctx->service->about->version, "5.")) { + ctx->productVersion = esxVI_ProductVersion_VPX5x; + + /* + VIR_WARN("Found untested VPX major/minor version '%s'", + ctx->service->about->version); + */ } else { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - _("Expecting VPX major/minor version '2.5' or '4.x' " + _("Expecting VPX major/minor version '2.5', '4.x' or '5.x' " "but found '%s'"), ctx->service->about->version); return -1; } @@ -3919,6 +3961,12 @@ esxVI_ProductVersionToDefaultVirtualHWVersion(esxVI_ProductVersion productVersio case esxVI_ProductVersion_VPX4x: return 7; + case esxVI_ProductVersion_ESX50: + case esxVI_ProductVersion_VPX50: + case esxVI_ProductVersion_ESX5x: + case esxVI_ProductVersion_VPX5x: + return 8; + default: ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Unexpected product version")); diff --git a/src/esx/esx_vi.h b/src/esx/esx_vi.h index b8e921f..fbf3fb2 100644 --- a/src/esx/esx_vi.h +++ b/src/esx/esx_vi.h @@ -99,7 +99,9 @@ enum _esxVI_APIVersion { esxVI_APIVersion_25, esxVI_APIVersion_40, esxVI_APIVersion_41, - esxVI_APIVersion_4x /* > 4.1 */ + esxVI_APIVersion_4x, + esxVI_APIVersion_50, + esxVI_APIVersion_5x /* > 5.0 */ }; /* @@ -116,13 +118,17 @@ enum _esxVI_ProductVersion { esxVI_ProductVersion_ESX35 = esxVI_ProductVersion_ESX | 1, esxVI_ProductVersion_ESX40 = esxVI_ProductVersion_ESX | 2, esxVI_ProductVersion_ESX41 = esxVI_ProductVersion_ESX | 3, - esxVI_ProductVersion_ESX4x = esxVI_ProductVersion_ESX | 4, /* > 4.1 */ + esxVI_ProductVersion_ESX4x = esxVI_ProductVersion_ESX | 4, + esxVI_ProductVersion_ESX50 = esxVI_ProductVersion_ESX | 5, + esxVI_ProductVersion_ESX5x = esxVI_ProductVersion_ESX | 6, /* > 5.0 */ esxVI_ProductVersion_VPX = (1 << 2) << 16, esxVI_ProductVersion_VPX25 = esxVI_ProductVersion_VPX | 1, esxVI_ProductVersion_VPX40 = esxVI_ProductVersion_VPX | 2, esxVI_ProductVersion_VPX41 = esxVI_ProductVersion_VPX | 3, - esxVI_ProductVersion_VPX4x = esxVI_ProductVersion_VPX | 4 /* > 4.1 */ + esxVI_ProductVersion_VPX4x = esxVI_ProductVersion_VPX | 4, + esxVI_ProductVersion_VPX50 = esxVI_ProductVersion_VPX | 5, + esxVI_ProductVersion_VPX5x = esxVI_ProductVersion_VPX | 6 /* > 5.0 */ }; enum _esxVI_Occurrence {