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. --- src/esx/esx_driver.c | 26 +- src/esx/esx_vi.c | 7 +- src/esx/esx_vi_generator.input | 191 +++++++++- src/esx/esx_vi_generator.py | 489 ++++++++++++++++++------ src/esx/esx_vi_methods.c | 854 ++++++---------------------------------- src/esx/esx_vi_methods.h | 132 +------ 6 files changed, 723 insertions(+), 976 deletions(-) diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 4ed9890..e3340c9 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -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; diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index 1a71558..4318ff1 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -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)) { diff --git a/src/esx/esx_vi_generator.input b/src/esx/esx_vi_generator.input index 9c545eb..a016c63 100644 --- a/src/esx/esx_vi_generator.input +++ b/src/esx/esx_vi_generator.input @@ -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 paramater 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 diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py index b933d5b..272b219 100755 --- a/src/esx/esx_vi_generator.py +++ b/src/esx/esx_vi_generator.py @@ -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.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_paramater(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_paramater() + + if self.returns is None: + header += self.parameters[-1].generate_paramater(is_last = True) + else: + header += self.parameters[-1].generate_paramater() + 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_paramater(is_header = False, offset = 9) + + if self.returns is None: + source += self.parameters[-1].generate_paramater(is_last = True, is_header = False, offset = 9) + else: + source += self.parameters[-1].generate_paramater(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") +# 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") -typeenum.write("\n") -typetostring.write("\n") -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()) -names = objects_by_name.keys() -names.sort() +# 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()) diff --git a/src/esx/esx_vi_methods.c b/src/esx/esx_vi_methods.c index b2b3e8d..5c52167 100644 --- a/src/esx/esx_vi_methods.c +++ b/src/esx/esx_vi_methods.c @@ -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" diff --git a/src/esx/esx_vi_methods.h b/src/esx/esx_vi_methods.h index 9ff8b4b..7b6be4e 100644 --- a/src/esx/esx_vi_methods.h +++ b/src/esx/esx_vi_methods.h @@ -32,123 +32,19 @@ * VI Methods */ -int esxVI_RetrieveServiceContent(esxVI_Context *ctx, - esxVI_ServiceContent **serviceContent); - -int esxVI_Login(esxVI_Context *ctx, const char *userName, const char *password, - esxVI_UserSession **userSession); - -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); +int esxVI_RetrieveServiceContent + (esxVI_Context *ctx, + esxVI_ServiceContent **serviceContent); /* required */ + +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 */ + +#include "esx_vi_methods.generated.h" #endif /* __ESX_VI_METHODS_H__ */ -- 1.6.3.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list