goto failure;
}
- def = esxVMX_ParseConfig(domain->conn, vmx);
+ def = esxVMX_ParseConfig(domain->conn, vmx, priv->host->serverVersion);
if (def != NULL) {
xml = virDomainDefFormat(domain->conn, def, flags);
const char *nativeConfig,
unsigned int flags ATTRIBUTE_UNUSED)
{
+ esxPrivate *priv = (esxPrivate *)conn->privateData;
+ int serverVersion = -1;
virDomainDefPtr def = NULL;
char *xml = NULL;
return NULL;
}
- def = esxVMX_ParseConfig(conn, nativeConfig);
+ if (! priv->phantom) {
+ serverVersion = priv->host->serverVersion;
+ }
+
+ def = esxVMX_ParseConfig(conn, nativeConfig, serverVersion);
if (def != NULL) {
xml = virDomainDefFormat(conn, def, VIR_DOMAIN_XML_INACTIVE);
goto failure;
}
- if (STREQ(ctx->service->about->apiType, "HostAgent")) {
- if (STRNEQ(ctx->service->about->apiVersion, "2.5.0") &&
- STRNEQ(ctx->service->about->apiVersion, "2.5u2")) {
+ if (STREQ(ctx->service->about->apiType, "HostAgent") ||
+ STREQ(ctx->service->about->apiType, "VirtualCenter")) {
+ if (STRPREFIX(ctx->service->about->apiVersion, "2.5")) {
+ ctx->apiVersion = 25;
+ } else if (STRPREFIX(ctx->service->about->apiVersion, "4.0")) {
+ ctx->apiVersion = 40;
+ } else {
ESX_VI_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
- "Expecting VI API version '2.5.0' or '2.5u2' but "
- "found '%s'", ctx->service->about->apiVersion);
+ "Expecting VI API major/minor version '2.5' or '4.0' "
+ "but found '%s'", ctx->service->about->apiVersion);
goto failure;
}
- } else if (STREQ(ctx->service->about->apiType, "VirtualCenter")) {
- if (STRNEQ(ctx->service->about->apiVersion, "2.5u2")) {
+
+ if (STRPREFIX(ctx->service->about->version, "3.5")) {
+ ctx->serverVersion = 35;
+ } else if (STRPREFIX(ctx->service->about->version, "4.0")) {
+ ctx->serverVersion = 40;
+ } else {
ESX_VI_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
- "Expecting VI API version '2.5u2' but found '%s'",
- ctx->service->about->apiVersion);
+ "Expecting server major/minor version '3.5' or '4.0' "
+ "but found '%s'", ctx->service->about->version);
goto failure;
}
} else {
char *username;
char *password;
esxVI_ServiceContent *service;
+ int apiVersion;
+ int serverVersion;
esxVI_UserSession *session;
esxVI_ManagedObjectReference *datacenter;
esxVI_ManagedObjectReference *vmFolder;
config.version = "8" # essential
- virtualHW.version = "4" # essential
+ virtualHW.version = "4" # essential for ESX 3.5
+ virtualHW.version = "7" # essential for ESX 4.0
??? <=> guestOS = "<value>" # essential, FIXME: not representable
virDomainDefPtr
-esxVMX_ParseConfig(virConnectPtr conn, const char *vmx)
+esxVMX_ParseConfig(virConnectPtr conn, const char *vmx, int serverVersion)
{
virConfPtr conf = NULL;
virDomainDefPtr def = NULL;
if (config_version != 8) {
ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
- "Expecting VMX entry 'config.version' to be \"8\" but "
- "found \"%lld\"", config_version);
+ "Expecting VMX entry 'config.version' to be 8 but found "
+ "%lld", config_version);
goto failure;
}
goto failure;
}
- if (virtualHW_version != 4) {
+ switch (serverVersion) {
+ case 35:
+ if (virtualHW_version != 4) {
+ ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
+ "Expecting VMX entry 'virtualHW.version' to be 4 for "
+ "server version 3.5 but found %lld", virtualHW_version);
+ goto failure;
+ }
+
+ break;
+
+ case 40:
+ if (virtualHW_version != 7) {
+ ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
+ "Expecting VMX entry 'virtualHW.version' to be 7 for "
+ "server version 4.0 but found %lld", virtualHW_version);
+ goto failure;
+ }
+
+ break;
+
+ case -1:
+ if (virtualHW_version != 4 && virtualHW_version != 7) {
+ ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
+ "Expecting VMX entry 'virtualHW.version' to be 4 or 7 "
+ "but found %lld", virtualHW_version);
+ goto failure;
+ }
+
+ break;
+
+ default:
ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
- "Expecting VMX entry 'virtualHW.version' to be \"4\" but "
- "found \"%lld\"", virtualHW_version);
+ "Expecting server version 3.5 or 4.0 but got %d",
+ serverVersion);
goto failure;
}
#include "domain_conf.h"
virDomainDefPtr
-esxVMX_ParseConfig(virConnectPtr conn, const char *vmx);
+esxVMX_ParseConfig(virConnectPtr conn, const char *vmx, int serverVersion);
int
esxVMX_ParseSCSIController(virConnectPtr conn, virConfPtr conf,