提交 71057b1c 编写于 作者: M Matthias Bolte

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.
上级 dc8dd7f8
......@@ -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
此差异已折叠。
此差异已折叠。
......@@ -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__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册