mirror of https://gitee.com/openkylin/libvirt.git
esx: Extend esx_vi_generator.py to cover methods too
Generate almost all SOAP method mapping code. Update the driver code to use the complete paramater list of some methods that had parameters skipped before. Improve the ESX_VI__METHOD marco to do automatic output deserialization based on output occurrence. Also incorporate automatic _this binding and output pointer check.
This commit is contained in:
parent
dc8dd7f8db
commit
71057b1c58
|
@ -1333,7 +1333,8 @@ esxDomainResume(virDomainPtr domain)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
if (esxVI_PowerOnVM_Task(priv->host, virtualMachine->obj, &task) < 0 ||
|
||||
if (esxVI_PowerOnVM_Task(priv->host, virtualMachine->obj, NULL,
|
||||
&task) < 0 ||
|
||||
esxVI_WaitForTaskCompletion(priv->host, task, domain->uuid,
|
||||
priv->autoAnswer, &taskInfoState) < 0) {
|
||||
goto failure;
|
||||
|
@ -1710,8 +1711,9 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
|
|||
esxVI_PerfCounterInfo *perfCounterInfo = NULL;
|
||||
esxVI_PerfCounterInfo *perfCounterInfoList = NULL;
|
||||
esxVI_PerfQuerySpec *querySpec = NULL;
|
||||
esxVI_PerfEntityMetricBase *perfEntityMetricBase = NULL;
|
||||
esxVI_PerfEntityMetricBase *perfEntityMetricBaseList = NULL;
|
||||
esxVI_PerfEntityMetric *perfEntityMetric = NULL;
|
||||
esxVI_PerfEntityMetric *perfEntityMetricList = NULL;
|
||||
esxVI_PerfMetricIntSeries *perfMetricIntSeries = NULL;
|
||||
esxVI_Long *value = NULL;
|
||||
|
||||
|
@ -1883,17 +1885,26 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
|
|||
querySpec->metricId->instance = (char *)"";
|
||||
querySpec->format = (char *)"normal";
|
||||
|
||||
if (esxVI_QueryPerf(priv->host, querySpec, &perfEntityMetricList) < 0) {
|
||||
if (esxVI_QueryPerf(priv->host, querySpec,
|
||||
&perfEntityMetricBaseList) < 0) {
|
||||
querySpec->entity = NULL;
|
||||
querySpec->metricId->instance = NULL;
|
||||
querySpec->format = NULL;
|
||||
goto failure;
|
||||
}
|
||||
|
||||
for (perfEntityMetric = perfEntityMetricList; perfEntityMetric != NULL;
|
||||
perfEntityMetric = perfEntityMetric->_next) {
|
||||
for (perfEntityMetricBase = perfEntityMetricBaseList;
|
||||
perfEntityMetricBase != NULL;
|
||||
perfEntityMetricBase = perfEntityMetricBase->_next) {
|
||||
VIR_DEBUG0("perfEntityMetric ...");
|
||||
|
||||
perfEntityMetric =
|
||||
esxVI_PerfEntityMetric_DynamicCast(perfEntityMetricBase);
|
||||
|
||||
if (perfMetricIntSeries == NULL) {
|
||||
VIR_ERROR0("QueryPerf returned object with unexpected type");
|
||||
}
|
||||
|
||||
perfMetricIntSeries =
|
||||
esxVI_PerfMetricIntSeries_DynamicCast(perfEntityMetric->value);
|
||||
|
||||
|
@ -1927,7 +1938,7 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
|
|||
esxVI_Int_Free(&counterIdList);
|
||||
esxVI_PerfCounterInfo_Free(&perfCounterInfoList);
|
||||
esxVI_PerfQuerySpec_Free(&querySpec);
|
||||
esxVI_PerfEntityMetric_Free(&perfEntityMetricList);
|
||||
esxVI_PerfEntityMetricBase_Free(&perfEntityMetricBaseList);
|
||||
|
||||
return result;
|
||||
|
||||
|
@ -2367,7 +2378,8 @@ esxDomainCreate(virDomainPtr domain)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
if (esxVI_PowerOnVM_Task(priv->host, virtualMachine->obj, &task) < 0 ||
|
||||
if (esxVI_PowerOnVM_Task(priv->host, virtualMachine->obj, NULL,
|
||||
&task) < 0 ||
|
||||
esxVI_WaitForTaskCompletion(priv->host, task, domain->uuid,
|
||||
priv->autoAnswer, &taskInfoState) < 0) {
|
||||
goto failure;
|
||||
|
|
|
@ -444,7 +444,7 @@ esxVI_Context_Connect(esxVI_Context *ctx, const char *url,
|
|||
goto failure;
|
||||
}
|
||||
|
||||
if (esxVI_Login(ctx, username, password, &ctx->session) < 0) {
|
||||
if (esxVI_Login(ctx, username, password, NULL, &ctx->session) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
|
||||
|
@ -1344,7 +1344,7 @@ esxVI_EnsureSession(esxVI_Context *ctx)
|
|||
if (active != esxVI_Boolean_True) {
|
||||
esxVI_UserSession_Free(&ctx->session);
|
||||
|
||||
if (esxVI_Login(ctx, ctx->username, ctx->password,
|
||||
if (esxVI_Login(ctx, ctx->username, ctx->password, NULL,
|
||||
&ctx->session) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -1378,7 +1378,8 @@ esxVI_EnsureSession(esxVI_Context *ctx)
|
|||
if (currentSession == NULL) {
|
||||
esxVI_UserSession_Free(&ctx->session);
|
||||
|
||||
if (esxVI_Login(ctx, ctx->username, ctx->password, &ctx->session) < 0) {
|
||||
if (esxVI_Login(ctx, ctx->username, ctx->password, NULL,
|
||||
&ctx->session) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
} else if (STRNEQ(ctx->session->key, currentSession->key)) {
|
||||
|
|
|
@ -28,7 +28,22 @@
|
|||
# - ol for an optional list
|
||||
# - i for an ignored item or list
|
||||
#
|
||||
# Object member sequence has to match the WSDL sequence
|
||||
# Object member sequence has to match the WSDL sequence.
|
||||
#
|
||||
#
|
||||
# Method definition:
|
||||
#
|
||||
# method <name> [returns <type> <occurrence>]
|
||||
# <type> <name> <occurrence>
|
||||
# ...
|
||||
# end
|
||||
#
|
||||
# The _this parameter can have a type attached to it:
|
||||
#
|
||||
# _this:<type>
|
||||
#
|
||||
# The <type> refers to one of the ServiceContent members. This make the
|
||||
# generator auto-bind _this to the corresponding ServiceContent member.
|
||||
#
|
||||
|
||||
|
||||
|
@ -436,3 +451,177 @@ object VirtualMachineSnapshotTree
|
|||
Boolean quiesced r
|
||||
VirtualMachineSnapshotTree childSnapshotList ol
|
||||
end
|
||||
|
||||
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# Methods
|
||||
#
|
||||
|
||||
method AnswerVM
|
||||
ManagedObjectReference _this r
|
||||
String questionId r
|
||||
String answerChoice r
|
||||
end
|
||||
|
||||
|
||||
method CancelTask
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method CreateFilter returns ManagedObjectReference r
|
||||
ManagedObjectReference _this:PropertyCollector r
|
||||
PropertyFilterSpec spec r
|
||||
Boolean partialUpdates r
|
||||
end
|
||||
|
||||
|
||||
method CreateSnapshot_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
String name r
|
||||
String description o
|
||||
Boolean memory r
|
||||
Boolean quiesce r
|
||||
end
|
||||
|
||||
|
||||
method DestroyPropertyFilter
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method FindByIp returns ManagedObjectReference o
|
||||
ManagedObjectReference _this:SearchIndex r
|
||||
ManagedObjectReference datacenter o
|
||||
String ip r
|
||||
Boolean vmSearch r
|
||||
end
|
||||
|
||||
|
||||
method FindByUuid returns ManagedObjectReference o
|
||||
ManagedObjectReference _this:SearchIndex r
|
||||
ManagedObjectReference datacenter o
|
||||
String uuid r
|
||||
Boolean vmSearch r
|
||||
end
|
||||
|
||||
|
||||
method Login returns UserSession r
|
||||
ManagedObjectReference _this:SessionManager r
|
||||
String userName r
|
||||
String password r
|
||||
String locale o
|
||||
end
|
||||
|
||||
|
||||
method Logout
|
||||
ManagedObjectReference _this:SessionManager r
|
||||
end
|
||||
|
||||
|
||||
method MigrateVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
ManagedObjectReference pool o
|
||||
ManagedObjectReference host o
|
||||
VirtualMachineMovePriority priority r
|
||||
VirtualMachinePowerState state o
|
||||
end
|
||||
|
||||
|
||||
method PowerOffVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method PowerOnVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
ManagedObjectReference host o
|
||||
end
|
||||
|
||||
|
||||
method QueryAvailablePerfMetric returns PerfMetricId ol
|
||||
ManagedObjectReference _this:PerformanceManager r
|
||||
ManagedObjectReference entity r
|
||||
DateTime beginTime o
|
||||
DateTime endTime o
|
||||
Int intervalId o
|
||||
end
|
||||
|
||||
|
||||
method QueryPerf returns PerfEntityMetricBase ol
|
||||
ManagedObjectReference _this:PerformanceManager r
|
||||
PerfQuerySpec querySpec rl
|
||||
end
|
||||
|
||||
|
||||
method QueryPerfCounter returns PerfCounterInfo ol
|
||||
ManagedObjectReference _this:PerformanceManager r
|
||||
Int counterId rl
|
||||
end
|
||||
|
||||
|
||||
method RebootGuest
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method ReconfigVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
VirtualMachineConfigSpec spec r
|
||||
end
|
||||
|
||||
|
||||
method RegisterVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
String path r
|
||||
String name o
|
||||
Boolean asTemplate r
|
||||
ManagedObjectReference pool o
|
||||
ManagedObjectReference host o
|
||||
end
|
||||
|
||||
|
||||
method RemoveSnapshot_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
Boolean removeChildren r
|
||||
end
|
||||
|
||||
|
||||
method RetrieveProperties returns ObjectContent ol
|
||||
ManagedObjectReference _this:PropertyCollector r
|
||||
PropertyFilterSpec specSet rl
|
||||
end
|
||||
|
||||
|
||||
method RevertToSnapshot_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
ManagedObjectReference host o
|
||||
end
|
||||
|
||||
|
||||
method SessionIsActive returns Boolean r
|
||||
ManagedObjectReference _this:SessionManager r
|
||||
String sessionID r
|
||||
String userName r
|
||||
end
|
||||
|
||||
|
||||
method ShutdownGuest
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method SuspendVM_Task returns ManagedObjectReference r
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method UnregisterVM
|
||||
ManagedObjectReference _this r
|
||||
end
|
||||
|
||||
|
||||
method WaitForUpdates returns UpdateSet r
|
||||
ManagedObjectReference _this:PropertyCollector r
|
||||
String version o
|
||||
end
|
||||
|
|
|
@ -27,34 +27,247 @@ import os.path
|
|||
|
||||
|
||||
|
||||
OCCURRENCE__REQUIRED_ITEM = "r"
|
||||
OCCURRENCE__REQUIRED_LIST = "rl"
|
||||
OCCURRENCE__OPTIONAL_ITEM = "o"
|
||||
OCCURRENCE__OPTIONAL_LIST = "ol"
|
||||
OCCURRENCE__IGNORED = "i"
|
||||
|
||||
valid_occurrences = [OCCURRENCE__REQUIRED_ITEM,
|
||||
OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_ITEM,
|
||||
OCCURRENCE__OPTIONAL_LIST,
|
||||
OCCURRENCE__IGNORED]
|
||||
|
||||
|
||||
class Property:
|
||||
OCCURRENCE__REQUIRED_ITEM = "r"
|
||||
OCCURRENCE__REQUIRED_LIST = "rl"
|
||||
OCCURRENCE__OPTIONAL_ITEM = "o"
|
||||
OCCURRENCE__OPTIONAL_LIST = "ol"
|
||||
OCCURRENCE__IGNORED = "i"
|
||||
|
||||
valid_occurrences = [OCCURRENCE__REQUIRED_ITEM,
|
||||
OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_ITEM,
|
||||
OCCURRENCE__OPTIONAL_LIST,
|
||||
OCCURRENCE__IGNORED]
|
||||
|
||||
|
||||
|
||||
class Parameter:
|
||||
autobind_map = { "PerformanceManager" : "perfManager",
|
||||
"PropertyCollector" : "propertyCollector",
|
||||
"SearchIndex" : "searchIndex",
|
||||
"SessionManager" : "sessionManager" }
|
||||
|
||||
def __init__(self, type, name, occurrence):
|
||||
self.type = type
|
||||
self.name = name
|
||||
self.occurrence = occurrence
|
||||
|
||||
if ':' in name and name.startswith("_this"):
|
||||
self.name, self.autobind_type = name.split(":")
|
||||
else:
|
||||
self.name = name
|
||||
self.autobind_type = None
|
||||
|
||||
|
||||
def is_enum(self):
|
||||
global predefined_enums
|
||||
global enums_by_name
|
||||
|
||||
return self.type in predefined_enums or self.type in enums_by_name
|
||||
|
||||
|
||||
def generate_parameter(self, is_last = False, is_header = True, offset = 0):
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
raise ValueError("invalid function parameter occurrence value '%s'" % self.occurrence)
|
||||
elif self.autobind_type is not None:
|
||||
return ""
|
||||
else:
|
||||
string = " "
|
||||
string += " " * offset
|
||||
string += "%s%s" % (self.get_type_string(), self.name)
|
||||
|
||||
if is_last:
|
||||
if is_header:
|
||||
string += "); "
|
||||
else:
|
||||
string += "), "
|
||||
else:
|
||||
string += ", "
|
||||
|
||||
while len(string) < 59:
|
||||
string += " "
|
||||
|
||||
return string + self.get_occurrence_comment() + "\n"
|
||||
|
||||
|
||||
def generate_return(self, offset = 0, end_of_line = ";"):
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
raise ValueError("invalid function parameteroccurrence value '%s'" % self.occurrence)
|
||||
else:
|
||||
string = " "
|
||||
string += " " * offset
|
||||
string += "%s*%s)%s" % (self.get_type_string(), self.name, end_of_line)
|
||||
|
||||
while len(string) < 59:
|
||||
string += " "
|
||||
|
||||
return string + self.get_occurrence_comment() + "\n"
|
||||
|
||||
|
||||
def generate_require_code(self):
|
||||
if self.occurrence in [OCCURRENCE__REQUIRED_ITEM,
|
||||
OCCURRENCE__REQUIRED_LIST]:
|
||||
return " ESX_VI__METHOD__PARAMETER__REQUIRE(%s)\n" % self.name
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
||||
def generate_serialize_code(self):
|
||||
if self.occurrence in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return " ESX_VI__METHOD__PARAMETER__SERIALIZE_LIST(%s, %s)\n" % (self.type, self.name)
|
||||
elif self.type == "String":
|
||||
return " ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, %s)\n" % self.name
|
||||
else:
|
||||
return " ESX_VI__METHOD__PARAMETER__SERIALIZE(%s, %s)\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def get_type_string(self):
|
||||
if self.type == "String" and \
|
||||
self.occurrence not in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return "const char *"
|
||||
elif self.is_enum():
|
||||
return "esxVI_%s " % self.type
|
||||
else:
|
||||
return "esxVI_%s *" % self.type
|
||||
|
||||
|
||||
def get_occurrence_comment(self):
|
||||
if self.occurrence == OCCURRENCE__REQUIRED_ITEM:
|
||||
return "/* required */"
|
||||
elif self.occurrence == OCCURRENCE__REQUIRED_LIST:
|
||||
return "/* required, list */"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_ITEM:
|
||||
return "/* optional */"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_LIST:
|
||||
return "/* optional, list */"
|
||||
|
||||
raise ValueError("unknown occurrence value '%s'" % self.occurrence)
|
||||
|
||||
|
||||
def get_occurrence_short_enum(self):
|
||||
if self.occurrence == OCCURRENCE__REQUIRED_ITEM:
|
||||
return "RequiredItem"
|
||||
elif self.occurrence == OCCURRENCE__REQUIRED_LIST:
|
||||
return "RequiredList"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_ITEM:
|
||||
return "OptionalItem"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_LIST:
|
||||
return "OptionalList"
|
||||
|
||||
raise ValueError("unknown occurrence value '%s'" % self.occurrence)
|
||||
|
||||
|
||||
|
||||
class Method:
|
||||
def __init__(self, name, parameters, returns):
|
||||
self.name = name
|
||||
self.parameters = []
|
||||
self.autobind_parameter = None
|
||||
self.returns = returns
|
||||
|
||||
for parameter in parameters:
|
||||
if parameter.autobind_type is None:
|
||||
self.parameters.append(parameter)
|
||||
else:
|
||||
self.autobind_parameter = parameter
|
||||
|
||||
|
||||
def generate_header(self):
|
||||
header = "int esxVI_%s\n" % self.name
|
||||
header += " (esxVI_Context *ctx"
|
||||
|
||||
if len(self.parameters) > 0 or self.returns is not None:
|
||||
header += ",\n"
|
||||
|
||||
for parameter in self.parameters[:-1]:
|
||||
header += parameter.generate_parameter()
|
||||
|
||||
if self.returns is None:
|
||||
header += self.parameters[-1].generate_parameter(is_last = True)
|
||||
else:
|
||||
header += self.parameters[-1].generate_parameter()
|
||||
header += self.returns.generate_return()
|
||||
else:
|
||||
header += ");\n"
|
||||
|
||||
header += "\n"
|
||||
|
||||
return header
|
||||
|
||||
|
||||
def generate_source(self):
|
||||
source = "/* esxVI_%s */\n" % self.name
|
||||
source += "ESX_VI__METHOD(%s," % self.name
|
||||
|
||||
if self.autobind_parameter is not None:
|
||||
source += " %s,\n" % Parameter.autobind_map[self.autobind_parameter.autobind_type]
|
||||
else:
|
||||
source += " /* explicit _this */,\n"
|
||||
|
||||
source += " (esxVI_Context *ctx"
|
||||
|
||||
if len(self.parameters) > 0 or self.returns is not None:
|
||||
source += ",\n"
|
||||
|
||||
for parameter in self.parameters[:-1]:
|
||||
source += parameter.generate_parameter(is_header = False, offset = 9)
|
||||
|
||||
if self.returns is None:
|
||||
source += self.parameters[-1].generate_parameter(is_last = True, is_header = False, offset = 9)
|
||||
else:
|
||||
source += self.parameters[-1].generate_parameter(is_header = False, offset = 9)
|
||||
source += self.returns.generate_return(offset = 9, end_of_line = ",")
|
||||
else:
|
||||
source += "),\n"
|
||||
|
||||
if self.returns is None:
|
||||
source += " void, None,\n"
|
||||
else:
|
||||
source += " %s, %s,\n" % (self.returns.type, self.returns.get_occurrence_short_enum())
|
||||
|
||||
source += "{\n"
|
||||
|
||||
if self.autobind_parameter is not None:
|
||||
source += self.autobind_parameter.generate_require_code()
|
||||
|
||||
for parameter in self.parameters:
|
||||
source += parameter.generate_require_code()
|
||||
|
||||
source += "},\n"
|
||||
source += "{\n"
|
||||
|
||||
if self.autobind_parameter is not None:
|
||||
source += self.autobind_parameter.generate_serialize_code()
|
||||
|
||||
for parameter in self.parameters:
|
||||
source += parameter.generate_serialize_code()
|
||||
|
||||
source += "})\n\n\n\n"
|
||||
|
||||
return source
|
||||
|
||||
|
||||
|
||||
class Property:
|
||||
def __init__(self, type, name, occurrence):
|
||||
self.type = type
|
||||
self.name = name
|
||||
self.occurrence = occurrence
|
||||
|
||||
|
||||
def is_enum(self):
|
||||
global predefined_enums
|
||||
global enums_by_name
|
||||
|
||||
return self.type in predefined_enums or self.type in enums_by_name
|
||||
|
||||
|
||||
def generate_struct_member(self):
|
||||
if self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " /* FIXME: %s is currently ignored */\n" % self.name
|
||||
else:
|
||||
string = " %s%s; " % (self.get_type_string(), self.name)
|
||||
|
@ -62,36 +275,39 @@ class Property:
|
|||
while len(string) < 59:
|
||||
string += " "
|
||||
|
||||
return string + "/* %s */\n" % self.get_occurrence_string()
|
||||
return string + self.get_occurrence_comment() + "\n"
|
||||
|
||||
|
||||
def generate_free_code(self):
|
||||
if self.type == "String" and \
|
||||
self.occurrence not in [Property.OCCURRENCE__REQUIRED_LIST,
|
||||
Property.OCCURRENCE__OPTIONAL_LIST,
|
||||
Property.OCCURRENCE__IGNORED]:
|
||||
self.occurrence not in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST,
|
||||
OCCURRENCE__IGNORED]:
|
||||
return " VIR_FREE(item->%s);\n" % self.name
|
||||
elif self.is_enum():
|
||||
return ""
|
||||
else:
|
||||
if self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " /* FIXME: %s is currently ignored */\n" % self.name
|
||||
else:
|
||||
return " esxVI_%s_Free(&item->%s);\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def generate_validate_code(self):
|
||||
if self.occurrence in [Property.OCCURRENCE__REQUIRED_ITEM,
|
||||
Property.OCCURRENCE__REQUIRED_LIST]:
|
||||
if self.occurrence in [OCCURRENCE__REQUIRED_ITEM,
|
||||
OCCURRENCE__REQUIRED_LIST]:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__REQUIRE(%s)\n" % self.name
|
||||
elif self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
elif self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " /* FIXME: %s is currently ignored */\n" % self.name
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
||||
def generate_deep_copy_code(self):
|
||||
if self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " /* FIXME: %s is currently ignored */\n" % self.name
|
||||
elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST,
|
||||
Property.OCCURRENCE__OPTIONAL_LIST]:
|
||||
elif self.occurrence in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_LIST(%s, %s)\n" % (self.type, self.name)
|
||||
elif self.type == "String":
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(String, %s)\n" % self.name
|
||||
|
@ -100,54 +316,53 @@ class Property:
|
|||
else:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY(%s, %s)\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def generate_serialize_code(self):
|
||||
if self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " /* FIXME: %s is currently ignored */\n" % self.name
|
||||
elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST,
|
||||
Property.OCCURRENCE__OPTIONAL_LIST]:
|
||||
elif self.occurrence in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(%s, %s)\n" % (self.type, self.name)
|
||||
elif self.type == "String":
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, %s)\n" % self.name
|
||||
else:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(%s, %s)\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def generate_deserialize_code(self):
|
||||
if self.occurrence == Property.OCCURRENCE__IGNORED:
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_IGNORE(%s) /* FIXME */\n" % self.name
|
||||
elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST,
|
||||
Property.OCCURRENCE__OPTIONAL_LIST]:
|
||||
elif self.occurrence in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(%s, %s)\n" % (self.type, self.name)
|
||||
elif self.type == "String":
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, %s)\n" % self.name
|
||||
else:
|
||||
return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(%s, %s)\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def get_type_string(self):
|
||||
if self.type == "String" and \
|
||||
self.occurrence not in [Property.OCCURRENCE__REQUIRED_LIST,
|
||||
Property.OCCURRENCE__OPTIONAL_LIST]:
|
||||
self.occurrence not in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return "char *"
|
||||
elif self.is_enum():
|
||||
return "esxVI_%s " % self.type
|
||||
else:
|
||||
return "esxVI_%s *" % self.type
|
||||
|
||||
def get_occurrence_string(self):
|
||||
if self.occurrence == Property.OCCURRENCE__REQUIRED_ITEM:
|
||||
return "required"
|
||||
elif self.occurrence == Property.OCCURRENCE__REQUIRED_LIST:
|
||||
return "required, list"
|
||||
elif self.occurrence == Property.OCCURRENCE__OPTIONAL_ITEM:
|
||||
return "optional"
|
||||
elif self.occurrence == Property.OCCURRENCE__OPTIONAL_LIST:
|
||||
return "optional, list"
|
||||
|
||||
raise ValueError("unknown cardinality value '%s'" % self.cardinality)
|
||||
|
||||
|
||||
|
||||
|
||||
def get_occurrence_comment(self):
|
||||
if self.occurrence == OCCURRENCE__REQUIRED_ITEM:
|
||||
return "/* required */"
|
||||
elif self.occurrence == OCCURRENCE__REQUIRED_LIST:
|
||||
return "/* required, list */"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_ITEM:
|
||||
return "/* optional */"
|
||||
elif self.occurrence == OCCURRENCE__OPTIONAL_LIST:
|
||||
return "/* optional, list */"
|
||||
|
||||
raise ValueError("unknown occurrence value '%s'" % self.occurrence)
|
||||
|
||||
|
||||
|
||||
|
@ -159,6 +374,7 @@ class Object:
|
|||
FEATURE__SERIALIZE = (1 << 5)
|
||||
FEATURE__DESERIALIZE = (1 << 6)
|
||||
|
||||
|
||||
def __init__(self, name, extends, properties, features = 0, extended_by = None):
|
||||
self.name = name
|
||||
self.extends = extends
|
||||
|
@ -166,10 +382,6 @@ class Object:
|
|||
self.properties = properties
|
||||
self.extended_by = extended_by
|
||||
|
||||
self.properties_by_name = {}
|
||||
|
||||
for property in self.properties:
|
||||
self.properties_by_name[property.name] = property
|
||||
|
||||
def generate_struct_members(self, add_banner = False, struct_gap = False):
|
||||
global objects_by_name
|
||||
|
@ -201,6 +413,7 @@ class Object:
|
|||
|
||||
return members
|
||||
|
||||
|
||||
def generate_free_code(self, add_banner = False):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -226,6 +439,7 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_validate_code(self, add_banner = False):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -251,6 +465,7 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_dynamic_cast_code(self):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -266,6 +481,7 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_deep_copy_code(self, add_banner = False):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -291,6 +507,7 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_serialize_code(self, add_banner = False):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -309,6 +526,7 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_deserialize_code(self, add_banner = False):
|
||||
global objects_by_name
|
||||
source = ""
|
||||
|
@ -327,18 +545,22 @@ class Object:
|
|||
|
||||
return source
|
||||
|
||||
|
||||
def generate_typedef(self):
|
||||
return "typedef struct _esxVI_%s esxVI_%s;\n" % (self.name, self.name)
|
||||
|
||||
|
||||
def generate_typeenum(self):
|
||||
return " esxVI_Type_%s,\n" % self.name
|
||||
|
||||
|
||||
def generate_typetostring(self):
|
||||
string = " case esxVI_Type_%s:\n" % self.name
|
||||
string += " return \"%s\";\n\n" % self.name
|
||||
|
||||
return string
|
||||
|
||||
|
||||
def generate_typefromstring(self):
|
||||
string = " else if (STREQ(type, \"%s\")) {\n" % self.name
|
||||
string += " return esxVI_Type_%s;\n" % self.name
|
||||
|
@ -346,6 +568,7 @@ class Object:
|
|||
|
||||
return string
|
||||
|
||||
|
||||
def generate_header(self):
|
||||
header = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"
|
||||
header += " * VI Type: %s\n" % self.name
|
||||
|
@ -424,6 +647,7 @@ class Object:
|
|||
|
||||
return header
|
||||
|
||||
|
||||
def generate_source(self):
|
||||
source = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"
|
||||
source += " * VI Type: %s\n" % self.name
|
||||
|
@ -601,11 +825,6 @@ class Object:
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class Enum:
|
||||
FEATURE__ANY_TYPE = (1 << 1)
|
||||
FEATURE__SERIALIZE = (1 << 2)
|
||||
|
@ -617,18 +836,22 @@ class Enum:
|
|||
self.values = values
|
||||
self.features = features | Enum.FEATURE__SERIALIZE | Enum.FEATURE__DESERIALIZE
|
||||
|
||||
|
||||
def generate_typedef(self):
|
||||
return "typedef enum _esxVI_%s esxVI_%s;\n" % (self.name, self.name)
|
||||
|
||||
|
||||
def generate_typeenum(self):
|
||||
return " esxVI_Type_%s,\n" % self.name
|
||||
|
||||
|
||||
def generate_typetostring(self):
|
||||
string = " case esxVI_Type_%s:\n" % self.name
|
||||
string += " return \"%s\";\n\n" % self.name
|
||||
|
||||
return string
|
||||
|
||||
|
||||
def generate_typefromstring(self):
|
||||
string = " else if (STREQ(type, \"%s\")) {\n" % self.name
|
||||
string += " return esxVI_Type_%s;\n" % self.name
|
||||
|
@ -636,6 +859,7 @@ class Enum:
|
|||
|
||||
return string
|
||||
|
||||
|
||||
def generate_header(self):
|
||||
header = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"
|
||||
header += " * VI Enum: %s\n" % self.name
|
||||
|
@ -664,6 +888,7 @@ class Enum:
|
|||
|
||||
return header
|
||||
|
||||
|
||||
def generate_source(self):
|
||||
source = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"
|
||||
source += " * VI Enum: %s\n" % self.name
|
||||
|
@ -698,20 +923,12 @@ class Enum:
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
def report_error(message):
|
||||
print "error: " + message
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
||||
def usage():
|
||||
print "%s <input-filename> <output-directory>" % sys.argv[0]
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
|
||||
def capitalize_first(string):
|
||||
return string[:1].upper() + string[1:]
|
||||
|
||||
|
@ -744,7 +961,7 @@ def parse_object(block):
|
|||
if len(items) != 3:
|
||||
report_error("line %d: invalid property" % line[0])
|
||||
|
||||
if items[2] not in Property.valid_occurrences:
|
||||
if items[2] not in valid_occurrences:
|
||||
report_error("line %d: invalid occurrence" % line[0])
|
||||
|
||||
properties.append(Property(type = items[0], name = items[1],
|
||||
|
@ -775,6 +992,44 @@ def parse_enum(block):
|
|||
|
||||
|
||||
|
||||
def parse_method(block):
|
||||
# expected format: method <name> [returns <type> <occurrence>]
|
||||
header_items = block[0][1].split()
|
||||
|
||||
if len(header_items) < 2:
|
||||
report_error("line %d: invalid block header" % (number))
|
||||
|
||||
assert header_items[0] == "method"
|
||||
|
||||
name = header_items[1]
|
||||
returns = None
|
||||
|
||||
if len(header_items) > 2:
|
||||
if header_items[2] != "returns":
|
||||
report_error("line %d: invalid block header" % (number))
|
||||
else:
|
||||
returns = Parameter(type = header_items[3], name = "output",
|
||||
occurrence = header_items[4])
|
||||
|
||||
parameters = []
|
||||
|
||||
for line in block[1:]:
|
||||
# expected format: <type> <name> <occurrence>
|
||||
items = line[1].split()
|
||||
|
||||
if len(items) != 3:
|
||||
report_error("line %d: invalid property" % line[0])
|
||||
|
||||
if items[2] not in valid_occurrences:
|
||||
report_error("line %d: invalid occurrence" % line[0])
|
||||
|
||||
parameters.append(Parameter(type = items[0], name = items[1],
|
||||
occurrence = items[2]))
|
||||
|
||||
return Method(name = name, parameters = parameters, returns = returns)
|
||||
|
||||
|
||||
|
||||
def inherit_features(obj):
|
||||
if obj.extended_by is not None:
|
||||
for extended_by in obj.extended_by:
|
||||
|
@ -834,7 +1089,7 @@ additional_object_features = { "Event" : Object.FEATURE__LI
|
|||
"ManagedObjectReference" : Object.FEATURE__ANY_TYPE,
|
||||
"ObjectContent" : Object.FEATURE__DEEP_COPY | Object.FEATURE__LIST,
|
||||
"PerfCounterInfo" : Object.FEATURE__LIST,
|
||||
"PerfEntityMetric" : Object.FEATURE__LIST,
|
||||
"PerfEntityMetric" : Object.FEATURE__LIST | Object.FEATURE__DYNAMIC_CAST,
|
||||
"PerfQuerySpec" : Object.FEATURE__LIST,
|
||||
"PerfMetricIntSeries" : Object.FEATURE__DYNAMIC_CAST,
|
||||
"PropertyFilterSpec" : Object.FEATURE__LIST,
|
||||
|
@ -859,7 +1114,6 @@ removed_object_features = { "DynamicProperty" : Object.FEATURE__SERIA
|
|||
|
||||
|
||||
|
||||
|
||||
if "srcdir" in os.environ:
|
||||
input_filename = os.path.join(os.environ["srcdir"], "esx/esx_vi_generator.input")
|
||||
output_dirname = os.path.join(os.environ["srcdir"], "esx")
|
||||
|
@ -869,18 +1123,21 @@ else:
|
|||
|
||||
|
||||
|
||||
typedef = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typedef"))
|
||||
typeenum = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typeenum"))
|
||||
typetostring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typetostring"))
|
||||
typefromstring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring"))
|
||||
header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.h"))
|
||||
source = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.c"))
|
||||
types_typedef = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typedef"))
|
||||
types_typeenum = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typeenum"))
|
||||
types_typetostring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typetostring"))
|
||||
types_typefromstring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring"))
|
||||
types_header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.h"))
|
||||
types_source = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.c"))
|
||||
methods_header = open_and_print(os.path.join(output_dirname, "esx_vi_methods.generated.h"))
|
||||
methods_source = open_and_print(os.path.join(output_dirname, "esx_vi_methods.generated.c"))
|
||||
|
||||
|
||||
|
||||
number = 0
|
||||
objects_by_name = {}
|
||||
enums_by_name = {}
|
||||
methods_by_name = {}
|
||||
block = None
|
||||
|
||||
|
||||
|
@ -896,7 +1153,7 @@ for line in file(input_filename, "rb").readlines():
|
|||
if len(line) < 1:
|
||||
continue
|
||||
|
||||
if line.startswith("object") or line.startswith("enum"):
|
||||
if line.startswith("object") or line.startswith("enum") or line.startswith("method"):
|
||||
if block is not None:
|
||||
report_error("line %d: nested block found" % (number))
|
||||
else:
|
||||
|
@ -907,9 +1164,12 @@ for line in file(input_filename, "rb").readlines():
|
|||
if block[0][1].startswith("object"):
|
||||
obj = parse_object(block)
|
||||
objects_by_name[obj.name] = obj
|
||||
else:
|
||||
elif block[0][1].startswith("enum"):
|
||||
enum = parse_enum(block)
|
||||
enums_by_name[enum.name] = enum
|
||||
else:
|
||||
method = parse_method(block)
|
||||
methods_by_name[method.name] = method
|
||||
|
||||
block = None
|
||||
else:
|
||||
|
@ -926,7 +1186,7 @@ for enum in enums_by_name.values():
|
|||
|
||||
for obj in objects_by_name.values():
|
||||
for property in obj.properties:
|
||||
if property.occurrence != Property.OCCURRENCE__IGNORED and \
|
||||
if property.occurrence != OCCURRENCE__IGNORED and \
|
||||
not is_known_type(property.type):
|
||||
report_error("object '%s' contains unknown property type '%s'" % (obj.name, property.type))
|
||||
|
||||
|
@ -936,8 +1196,8 @@ for obj in objects_by_name.values():
|
|||
|
||||
# detect list usage
|
||||
for property in obj.properties:
|
||||
if (property.occurrence == Property.OCCURRENCE__REQUIRED_LIST or \
|
||||
property.occurrence == Property.OCCURRENCE__OPTIONAL_LIST) and \
|
||||
if (property.occurrence == OCCURRENCE__REQUIRED_LIST or \
|
||||
property.occurrence == OCCURRENCE__OPTIONAL_LIST) and \
|
||||
property.type not in predefined_objects:
|
||||
objects_by_name[property.type].features |= Object.FEATURE__LIST
|
||||
|
||||
|
@ -951,7 +1211,7 @@ for obj in objects_by_name.values():
|
|||
# spread deep copy onto properties
|
||||
if obj.features & Object.FEATURE__DEEP_COPY:
|
||||
for property in obj.properties:
|
||||
if property.occurrence != Property.OCCURRENCE__IGNORED and \
|
||||
if property.occurrence != OCCURRENCE__IGNORED and \
|
||||
property.type not in predefined_objects and \
|
||||
property.type in objects_by_name:
|
||||
objects_by_name[property.type].features |= Object.FEATURE__DEEP_COPY
|
||||
|
@ -976,55 +1236,62 @@ for obj in objects_by_name.values():
|
|||
|
||||
|
||||
|
||||
typedef.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
typeenum.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
typetostring.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
typefromstring.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
|
||||
|
||||
typedef.write("/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" +
|
||||
" * VI Enums\n" +
|
||||
" */\n\n")
|
||||
types_typedef.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
types_typeenum.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
types_typetostring.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
types_typefromstring.write("/* Generated by esx_vi_generator.py */\n\n")
|
||||
types_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
types_source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
methods_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
methods_source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
|
||||
|
||||
|
||||
# output enums
|
||||
types_typedef.write("/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" +
|
||||
" * VI Enums\n" +
|
||||
" */\n\n")
|
||||
|
||||
names = enums_by_name.keys()
|
||||
names.sort()
|
||||
|
||||
|
||||
for name in names:
|
||||
typedef.write(enums_by_name[name].generate_typedef())
|
||||
typeenum.write(enums_by_name[name].generate_typeenum())
|
||||
typetostring.write(enums_by_name[name].generate_typetostring())
|
||||
typefromstring.write(enums_by_name[name].generate_typefromstring())
|
||||
header.write(enums_by_name[name].generate_header())
|
||||
source.write(enums_by_name[name].generate_source())
|
||||
types_typedef.write(enums_by_name[name].generate_typedef())
|
||||
types_typeenum.write(enums_by_name[name].generate_typeenum())
|
||||
types_typetostring.write(enums_by_name[name].generate_typetostring())
|
||||
types_typefromstring.write(enums_by_name[name].generate_typefromstring())
|
||||
types_header.write(enums_by_name[name].generate_header())
|
||||
types_source.write(enums_by_name[name].generate_source())
|
||||
|
||||
|
||||
|
||||
typedef.write("\n\n\n" +
|
||||
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" +
|
||||
" * VI Types\n" +
|
||||
" */\n\n")
|
||||
|
||||
typeenum.write("\n")
|
||||
|
||||
typetostring.write("\n")
|
||||
|
||||
typefromstring.write("\n")
|
||||
# output objects
|
||||
types_typedef.write("\n\n\n" +
|
||||
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" +
|
||||
" * VI Types\n" +
|
||||
" */\n\n")
|
||||
types_typeenum.write("\n")
|
||||
types_typetostring.write("\n")
|
||||
types_typefromstring.write("\n")
|
||||
|
||||
|
||||
|
||||
names = objects_by_name.keys()
|
||||
names.sort()
|
||||
|
||||
for name in names:
|
||||
types_typedef.write(objects_by_name[name].generate_typedef())
|
||||
types_typeenum.write(objects_by_name[name].generate_typeenum())
|
||||
types_typetostring.write(objects_by_name[name].generate_typetostring())
|
||||
types_typefromstring.write(objects_by_name[name].generate_typefromstring())
|
||||
types_header.write(objects_by_name[name].generate_header())
|
||||
types_source.write(objects_by_name[name].generate_source())
|
||||
|
||||
|
||||
|
||||
# output methods
|
||||
names = methods_by_name.keys()
|
||||
names.sort()
|
||||
|
||||
for name in names:
|
||||
typedef.write(objects_by_name[name].generate_typedef())
|
||||
typeenum.write(objects_by_name[name].generate_typeenum())
|
||||
typetostring.write(objects_by_name[name].generate_typetostring())
|
||||
typefromstring.write(objects_by_name[name].generate_typefromstring())
|
||||
header.write(objects_by_name[name].generate_header())
|
||||
source.write(objects_by_name[name].generate_source())
|
||||
methods_header.write(methods_by_name[name].generate_header())
|
||||
methods_source.write(methods_by_name[name].generate_source())
|
||||
|
|
|
@ -51,18 +51,88 @@
|
|||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD(_name, _parameters, _occurrence, _prolog, _validate, \
|
||||
_serialize, _deserialize) \
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__None \
|
||||
/* nothing */
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__NotNone \
|
||||
if (output == NULL || *output != 0) { \
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument")); \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__RequiredItem \
|
||||
ESX_VI__METHOD__CHECK_OUTPUT__NotNone
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__RequiredList \
|
||||
ESX_VI__METHOD__CHECK_OUTPUT__NotNone
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__OptionalItem \
|
||||
ESX_VI__METHOD__CHECK_OUTPUT__NotNone
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_OUTPUT__OptionalList \
|
||||
ESX_VI__METHOD__CHECK_OUTPUT__NotNone
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__None(_type) \
|
||||
/* nothing */
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredItem(_type) \
|
||||
if (esxVI_##_type##_Deserialize(response->node, output) < 0) { \
|
||||
goto failure; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredList(_type) \
|
||||
if (esxVI_##_type##_DeserializeList(response->node, output) < 0) { \
|
||||
goto failure; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalItem(_type) \
|
||||
if (response->node != NULL && \
|
||||
esxVI_##_type##_Deserialize(response->node, output) < 0) { \
|
||||
goto failure; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalList(_type) \
|
||||
if (response->node != NULL && \
|
||||
esxVI_##_type##_DeserializeList(response->node, output) < 0) { \
|
||||
goto failure; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD(_name, _this_from_service, _parameters, _output_type, \
|
||||
_occurrence, _validate, _serialize) \
|
||||
int \
|
||||
esxVI_##_name _parameters \
|
||||
{ \
|
||||
int result = 0; \
|
||||
const char* method_name = #_name; \
|
||||
const char *methodName = #_name; \
|
||||
virBuffer buffer = VIR_BUFFER_INITIALIZER; \
|
||||
char *request = NULL; \
|
||||
esxVI_Response *response = NULL; \
|
||||
\
|
||||
_prolog \
|
||||
ESX_VI__METHOD__PARAMETER__THIS__##_this_from_service \
|
||||
\
|
||||
ESX_VI__METHOD__CHECK_OUTPUT__##_occurrence \
|
||||
\
|
||||
_validate \
|
||||
\
|
||||
|
@ -81,14 +151,12 @@
|
|||
\
|
||||
request = virBufferContentAndReset(&buffer); \
|
||||
\
|
||||
if (esxVI_Context_Execute(ctx, #_name, request, &response, \
|
||||
if (esxVI_Context_Execute(ctx, methodName, request, &response, \
|
||||
esxVI_Occurrence_##_occurrence) < 0) { \
|
||||
goto failure; \
|
||||
} \
|
||||
\
|
||||
if (response->node != NULL) { \
|
||||
_deserialize \
|
||||
} \
|
||||
ESX_VI__METHOD__DESERIALIZE_OUTPUT__##_occurrence(_output_type) \
|
||||
\
|
||||
cleanup: \
|
||||
VIR_FREE(request); \
|
||||
|
@ -106,19 +174,44 @@
|
|||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__CHECK_SERVICE() \
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(_type, _name) \
|
||||
esxVI_##_type *_this = NULL; \
|
||||
\
|
||||
if (ctx->service == NULL) { \
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid call")); \
|
||||
return -1; \
|
||||
}
|
||||
} \
|
||||
\
|
||||
_this = ctx->service->_name;
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(_name) \
|
||||
if (_name == NULL || *_name != NULL) { \
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument")); \
|
||||
return -1; \
|
||||
}
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS__/* explicit _this */ \
|
||||
/* nothing */
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS__perfManager \
|
||||
ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \
|
||||
perfManager)
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS__propertyCollector \
|
||||
ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \
|
||||
propertyCollector)
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS__searchIndex \
|
||||
ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \
|
||||
searchIndex)
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__THIS__sessionManager \
|
||||
ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference, \
|
||||
sessionManager)
|
||||
|
||||
|
||||
|
||||
|
@ -132,17 +225,7 @@
|
|||
if (_name == 0) { \
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \
|
||||
"Required parameter '%s' is missing for call to %s", \
|
||||
#_name, method_name); \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(_name) \
|
||||
if (_name == 0) { \
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \
|
||||
"Required parameter '_this' is missing for call to %s", \
|
||||
method_name); \
|
||||
#_name, methodName); \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
|
@ -169,13 +252,6 @@
|
|||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(_type, _name) \
|
||||
if (esxVI_##_type##_Serialize(_name, "_this", &buffer) < 0) { \
|
||||
goto failure; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* VI Methods
|
||||
*/
|
||||
|
@ -220,553 +296,16 @@ esxVI_RetrieveServiceContent(esxVI_Context *ctx,
|
|||
|
||||
|
||||
|
||||
/* esxVI_Login */
|
||||
ESX_VI__METHOD(Login,
|
||||
(esxVI_Context *ctx,
|
||||
const char *userName, const char *password,
|
||||
esxVI_UserSession **userSession),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(userSession)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->sessionManager)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(userName)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(password)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->sessionManager)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, userName)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, password)
|
||||
},
|
||||
{
|
||||
if (esxVI_UserSession_Deserialize(response->node, userSession) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_Logout */
|
||||
ESX_VI__METHOD(Logout, (esxVI_Context *ctx), None,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->sessionManager)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->sessionManager)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_SessionIsActive */
|
||||
ESX_VI__METHOD(SessionIsActive,
|
||||
(esxVI_Context *ctx, const char *sessionID,
|
||||
const char *userName, esxVI_Boolean *active),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
|
||||
if (active == NULL) {
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
|
||||
return -1;
|
||||
}
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->sessionManager)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(sessionID)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(userName)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->sessionManager)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, sessionID)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, userName)
|
||||
},
|
||||
{
|
||||
if (esxVI_Boolean_Deserialize(response->node, active) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_RetrieveProperties */
|
||||
ESX_VI__METHOD(RetrieveProperties,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_PropertyFilterSpec *specSet, /* list */
|
||||
esxVI_ObjectContent **objectContentList),
|
||||
OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(objectContentList)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(specSet)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_LIST(PropertyFilterSpec, specSet)
|
||||
},
|
||||
{
|
||||
if (esxVI_ObjectContent_DeserializeList(response->node,
|
||||
objectContentList) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_PowerOnVM_Task */
|
||||
ESX_VI__METHOD(PowerOnVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_PowerOffVM_Task */
|
||||
ESX_VI__METHOD(PowerOffVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_SuspendVM_Task */
|
||||
ESX_VI__METHOD(SuspendVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_MigrateVM_Task */
|
||||
ESX_VI__METHOD(MigrateVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_VirtualMachineMovePriority priority,
|
||||
esxVI_VirtualMachinePowerState state,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(priority)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, pool)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, host)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(VirtualMachineMovePriority, priority)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(VirtualMachinePowerState, state)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_ReconfigVM_Task */
|
||||
ESX_VI__METHOD(ReconfigVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_VirtualMachineConfigSpec *spec,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(spec)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(VirtualMachineConfigSpec, spec)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_RegisterVM_Task */
|
||||
ESX_VI__METHOD(RegisterVM_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *folder,
|
||||
const char *path, const char *name,
|
||||
esxVI_Boolean asTemplate,
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(folder)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(path)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference, folder)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, path)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, name)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, asTemplate)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, pool)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, host)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_CreateSnapshot_Task */
|
||||
ESX_VI__METHOD(CreateSnapshot_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
const char *name, const char *description,
|
||||
esxVI_Boolean memory, esxVI_Boolean quiesce,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(name)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(memory)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(quiesce)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, name)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, description)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, memory)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, quiesce)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_RevertToSnapshot_Task */
|
||||
ESX_VI__METHOD(RevertToSnapshot_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachineSnapshot,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachineSnapshot)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachineSnapshot)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, host)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_RemoveSnapshot_Task */
|
||||
ESX_VI__METHOD(RemoveSnapshot_Task,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachineSnapshot,
|
||||
esxVI_Boolean removeChildren,
|
||||
esxVI_ManagedObjectReference **task),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachineSnapshot)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(removeChildren)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachineSnapshot)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, removeChildren)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_CancelTask */
|
||||
ESX_VI__METHOD(CancelTask,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *task),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(task)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference, task)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_UnregisterVM */
|
||||
ESX_VI__METHOD(UnregisterVM,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_AnswerVM */
|
||||
ESX_VI__METHOD(AnswerVM,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
const char *questionId,
|
||||
const char *answerChoice),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(questionId)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(answerChoice)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, questionId)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, answerChoice)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_CreateFilter */
|
||||
ESX_VI__METHOD(CreateFilter,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_PropertyFilterSpec *spec,
|
||||
esxVI_Boolean partialUpdates,
|
||||
esxVI_ManagedObjectReference **propertyFilter),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(propertyFilter)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(spec)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(partialUpdates)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(PropertyFilterSpec, spec)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, partialUpdates)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node,
|
||||
propertyFilter) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_DestroyPropertyFilter */
|
||||
ESX_VI__METHOD(DestroyPropertyFilter,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *propertyFilter),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(propertyFilter)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
propertyFilter)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_WaitForUpdates */
|
||||
ESX_VI__METHOD(WaitForUpdates,
|
||||
(esxVI_Context *ctx,
|
||||
const char *version,
|
||||
esxVI_UpdateSet **updateSet),
|
||||
RequiredItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(updateSet)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(version)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->propertyCollector)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, version)
|
||||
},
|
||||
{
|
||||
if (esxVI_UpdateSet_Deserialize(response->node, updateSet) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_RebootGuest */
|
||||
ESX_VI__METHOD(RebootGuest,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_ShutdownGuest */
|
||||
ESX_VI__METHOD(ShutdownGuest,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine),
|
||||
None,
|
||||
{
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(virtualMachine)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
virtualMachine)
|
||||
},
|
||||
{
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_ValidateMigration */
|
||||
ESX_VI__METHOD(ValidateMigration,
|
||||
ESX_VI__METHOD(ValidateMigration, /* special _this */,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *vm, /* list */
|
||||
esxVI_VirtualMachinePowerState state,
|
||||
esxVI_String *testType, /* list */
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_Event **eventList),
|
||||
OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(eventList)
|
||||
},
|
||||
esxVI_ManagedObjectReference *vm, /* required, list */
|
||||
esxVI_VirtualMachinePowerState state, /* optional */
|
||||
esxVI_String *testType, /* optional, list */
|
||||
esxVI_ManagedObjectReference *pool, /* optional */
|
||||
esxVI_ManagedObjectReference *host, /* optional */
|
||||
esxVI_Event **output), /* optional, list */
|
||||
Event, OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(vm)
|
||||
},
|
||||
|
@ -781,165 +320,8 @@ ESX_VI__METHOD(ValidateMigration,
|
|||
ESX_VI__METHOD__PARAMETER__SERIALIZE_LIST(String, testType)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, pool)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, host)
|
||||
},
|
||||
{
|
||||
if (esxVI_Event_DeserializeList(response->node, eventList) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_FindByIp */
|
||||
ESX_VI__METHOD(FindByIp,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *datacenter,
|
||||
const char *ip,
|
||||
esxVI_Boolean vmSearch,
|
||||
esxVI_ManagedObjectReference **managedObjectReference),
|
||||
OptionalItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(managedObjectReference)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->searchIndex)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(ip)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(vmSearch)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->searchIndex)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, datacenter)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, ip)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, vmSearch)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node,
|
||||
managedObjectReference) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_FindByUuid */
|
||||
ESX_VI__METHOD(FindByUuid,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *datacenter,
|
||||
const char *uuid, /* string */
|
||||
esxVI_Boolean vmSearch,
|
||||
esxVI_ManagedObjectReference **managedObjectReference),
|
||||
OptionalItem,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(managedObjectReference)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->searchIndex)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(uuid)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(vmSearch)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->searchIndex)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, datacenter)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_VALUE(String, uuid)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, vmSearch)
|
||||
},
|
||||
{
|
||||
if (esxVI_ManagedObjectReference_Deserialize(response->node,
|
||||
managedObjectReference) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_QueryAvailablePerfMetric */
|
||||
ESX_VI__METHOD(QueryAvailablePerfMetric,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *entity,
|
||||
esxVI_DateTime *beginTime,
|
||||
esxVI_DateTime *endTime,
|
||||
esxVI_Int *intervalId,
|
||||
esxVI_PerfMetricId **perfMetricIdList),
|
||||
OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfMetricIdList)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(entity)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, entity)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(DateTime, beginTime)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(DateTime, endTime)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE(Int, intervalId)
|
||||
},
|
||||
{
|
||||
if (esxVI_PerfMetricId_DeserializeList(response->node,
|
||||
perfMetricIdList) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_QueryPerfCounter */
|
||||
ESX_VI__METHOD(QueryPerfCounter,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_Int *counterId, /* list */
|
||||
esxVI_PerfCounterInfo **perfCounterInfoList),
|
||||
OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfCounterInfoList)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(counterId)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_LIST(Int, counterId)
|
||||
},
|
||||
{
|
||||
if (esxVI_PerfCounterInfo_DeserializeList(response->node,
|
||||
perfCounterInfoList) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
/* esxVI_QueryPerf */
|
||||
ESX_VI__METHOD(QueryPerf,
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_PerfQuerySpec *querySpec, /* list */
|
||||
esxVI_PerfEntityMetric **perfEntityMetricList),
|
||||
OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__CHECK_SERVICE()
|
||||
ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfEntityMetricList)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE_THIS(ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(querySpec)
|
||||
},
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_THIS(ManagedObjectReference,
|
||||
ctx->service->perfManager)
|
||||
ESX_VI__METHOD__PARAMETER__SERIALIZE_LIST(PerfQuerySpec, querySpec)
|
||||
},
|
||||
{
|
||||
if (esxVI_PerfEntityMetric_DeserializeList(response->node,
|
||||
perfEntityMetricList) < 0) {
|
||||
goto failure;
|
||||
}
|
||||
})
|
||||
#include "esx_vi_methods.generated.c"
|
||||
|
|
|
@ -32,123 +32,19 @@
|
|||
* VI Methods
|
||||
*/
|
||||
|
||||
int esxVI_RetrieveServiceContent(esxVI_Context *ctx,
|
||||
esxVI_ServiceContent **serviceContent);
|
||||
int esxVI_RetrieveServiceContent
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ServiceContent **serviceContent); /* required */
|
||||
|
||||
int esxVI_Login(esxVI_Context *ctx, const char *userName, const char *password,
|
||||
esxVI_UserSession **userSession);
|
||||
int esxVI_ValidateMigration
|
||||
(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *vm, /* required, list */
|
||||
esxVI_VirtualMachinePowerState state, /* optional */
|
||||
esxVI_String *testType, /* optional, list */
|
||||
esxVI_ManagedObjectReference *pool, /* optional */
|
||||
esxVI_ManagedObjectReference *host, /* optional */
|
||||
esxVI_Event **output); /* optional, list */
|
||||
|
||||
int esxVI_Logout(esxVI_Context *ctx);
|
||||
|
||||
int esxVI_SessionIsActive(esxVI_Context *ctx, const char *sessionID,
|
||||
const char *userName, esxVI_Boolean *active);
|
||||
|
||||
int esxVI_RetrieveProperties(esxVI_Context *ctx,
|
||||
esxVI_PropertyFilterSpec *specSet, /* list */
|
||||
esxVI_ObjectContent **objectContentList);
|
||||
|
||||
int esxVI_PowerOnVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_PowerOffVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_SuspendVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_MigrateVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_VirtualMachineMovePriority priority,
|
||||
esxVI_VirtualMachinePowerState state,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_ReconfigVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
esxVI_VirtualMachineConfigSpec *spec,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_RegisterVM_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *folder,
|
||||
const char *path, const char *name,
|
||||
esxVI_Boolean asTemplate,
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_CreateSnapshot_Task(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
const char *name, const char *description,
|
||||
esxVI_Boolean memory, esxVI_Boolean quiesce,
|
||||
esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_RevertToSnapshot_Task
|
||||
(esxVI_Context *ctx, esxVI_ManagedObjectReference *virtualMachineSnapshot,
|
||||
esxVI_ManagedObjectReference *host, esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_RemoveSnapshot_Task
|
||||
(esxVI_Context *ctx, esxVI_ManagedObjectReference *virtualMachineSnapshot,
|
||||
esxVI_Boolean removeChildren, esxVI_ManagedObjectReference **task);
|
||||
|
||||
int esxVI_CancelTask(esxVI_Context *ctx, esxVI_ManagedObjectReference *task);
|
||||
|
||||
int esxVI_UnregisterVM(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine);
|
||||
|
||||
int esxVI_AnswerVM(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine,
|
||||
const char *questionId, const char *answerChoice);
|
||||
|
||||
int esxVI_CreateFilter(esxVI_Context *ctx,
|
||||
esxVI_PropertyFilterSpec *spec,
|
||||
esxVI_Boolean partialUpdates,
|
||||
esxVI_ManagedObjectReference **propertyFilter);
|
||||
|
||||
int esxVI_DestroyPropertyFilter(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *propertyFilter);
|
||||
|
||||
int esxVI_WaitForUpdates(esxVI_Context *ctx, const char *version,
|
||||
esxVI_UpdateSet **updateSet);
|
||||
|
||||
int esxVI_RebootGuest(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine);
|
||||
|
||||
int esxVI_ShutdownGuest(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *virtualMachine);
|
||||
|
||||
int esxVI_ValidateMigration(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *vm, /* list */
|
||||
esxVI_VirtualMachinePowerState state,
|
||||
esxVI_String *testType, /* list */ // FIXME: see ValidateMigrationTestType
|
||||
esxVI_ManagedObjectReference *pool,
|
||||
esxVI_ManagedObjectReference *host,
|
||||
esxVI_Event **eventList);
|
||||
|
||||
int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter,
|
||||
const char *ip, esxVI_Boolean vmSearch,
|
||||
esxVI_ManagedObjectReference **managedObjectReference);
|
||||
|
||||
int esxVI_FindByUuid(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *datacenter,
|
||||
const char *uuid, /* string */
|
||||
esxVI_Boolean vmSearch,
|
||||
esxVI_ManagedObjectReference **managedObjectReference);
|
||||
|
||||
int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx,
|
||||
esxVI_ManagedObjectReference *entity,
|
||||
esxVI_DateTime *beginTime,
|
||||
esxVI_DateTime *endTime,
|
||||
esxVI_Int *intervalId,
|
||||
esxVI_PerfMetricId **perfMetricIdList);
|
||||
|
||||
int esxVI_QueryPerfCounter(esxVI_Context *ctx, esxVI_Int *counterId, /* list */
|
||||
esxVI_PerfCounterInfo **perfCounterInfoList);
|
||||
|
||||
int esxVI_QueryPerf(esxVI_Context *ctx, esxVI_PerfQuerySpec *querySpecList,
|
||||
esxVI_PerfEntityMetric **perfEntityMetricList);
|
||||
#include "esx_vi_methods.generated.h"
|
||||
|
||||
#endif /* __ESX_VI_METHODS_H__ */
|
||||
|
|
Loading…
Reference in New Issue