提交 d304352b 编写于 作者: M Matthias Bolte

esx: Generate method mappings via macros

This is actually a consequence of the reworked required parameter
checking: Unify the required parameter check into a Validate function
instead of doing it separately im the (de)serialization part.

The required parameter checking for the mapped methods parameter was
done in the (de)serialize functions before. Now it's explicitly done
in the mapped method itself.
上级 09fafa1e
...@@ -3128,7 +3128,10 @@ esxDomainMigratePerform(virDomainPtr domain, ...@@ -3128,7 +3128,10 @@ esxDomainMigratePerform(virDomainPtr domain,
/* Perform the purposed migration */ /* Perform the purposed migration */
if (esxVI_MigrateVM_Task(priv->vCenter, virtualMachine->obj, resourcePool, if (esxVI_MigrateVM_Task(priv->vCenter, virtualMachine->obj, resourcePool,
hostSystem->obj, &task) < 0 || hostSystem->obj,
esxVI_VirtualMachineMovePriority_DefaultPriority,
esxVI_VirtualMachinePowerState_Undefined,
&task) < 0 ||
esxVI_WaitForTaskCompletion(priv->vCenter, task, domain->uuid, esxVI_WaitForTaskCompletion(priv->vCenter, task, domain->uuid,
priv->autoAnswer, &taskInfoState) < 0) { priv->autoAnswer, &taskInfoState) < 0) {
goto failure; goto failure;
......
...@@ -844,8 +844,7 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration, ...@@ -844,8 +844,7 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration,
int int
esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration, esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
int value, const char *element, int value, const char *element, virBufferPtr output)
virBufferPtr output, esxVI_Boolean required)
{ {
int i; int i;
const char *name = NULL; const char *name = NULL;
...@@ -856,7 +855,7 @@ esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration, ...@@ -856,7 +855,7 @@ esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
} }
if (value == 0) { /* undefined */ if (value == 0) { /* undefined */
return esxVI_CheckSerializationNecessity(element, required); return 0;
} }
for (i = 0; enumeration->values[i].name != NULL; ++i) { for (i = 0; enumeration->values[i].name != NULL; ++i) {
...@@ -1045,7 +1044,7 @@ esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list, ...@@ -1045,7 +1044,7 @@ esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list,
int int
esxVI_List_Serialize(esxVI_List *list, const char *element, esxVI_List_Serialize(esxVI_List *list, const char *element,
virBufferPtr output, esxVI_Boolean required, virBufferPtr output,
esxVI_List_SerializeFunc serializeFunc) esxVI_List_SerializeFunc serializeFunc)
{ {
esxVI_List *item = NULL; esxVI_List *item = NULL;
...@@ -1056,11 +1055,11 @@ esxVI_List_Serialize(esxVI_List *list, const char *element, ...@@ -1056,11 +1055,11 @@ esxVI_List_Serialize(esxVI_List *list, const char *element,
} }
if (list == NULL) { if (list == NULL) {
return esxVI_CheckSerializationNecessity(element, required); return 0;
} }
for (item = list; item != NULL; item = item->_next) { for (item = list; item != NULL; item = item->_next) {
if (serializeFunc(item, element, output, esxVI_Boolean_True) < 0) { if (serializeFunc(item, element, output) < 0) {
return -1; return -1;
} }
} }
...@@ -1137,27 +1136,6 @@ esxVI_Alloc(void **ptrptr, size_t size) ...@@ -1137,27 +1136,6 @@ esxVI_Alloc(void **ptrptr, size_t size)
int
esxVI_CheckSerializationNecessity(const char *element,
esxVI_Boolean required)
{
if (element == NULL) {
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument");
return -1;
}
if (required == esxVI_Boolean_True) {
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR,
"Required property missing while trying to serialize "
"'%s'", element);
return -1;
} else {
return 0;
}
}
int int
esxVI_BuildFullTraversalSpecItem(esxVI_SelectionSpec **fullTraversalSpecList, esxVI_BuildFullTraversalSpecItem(esxVI_SelectionSpec **fullTraversalSpecList,
const char *name, const char *type, const char *name, const char *type,
...@@ -1861,7 +1839,9 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid, ...@@ -1861,7 +1839,9 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid,
return -1; return -1;
} }
if (esxVI_FindByUuid(ctx, ctx->datacenter, uuid, esxVI_Boolean_True, virUUIDFormat(uuid, uuid_string);
if (esxVI_FindByUuid(ctx, ctx->datacenter, uuid_string, esxVI_Boolean_True,
&managedObjectReference) < 0) { &managedObjectReference) < 0) {
goto failure; goto failure;
} }
...@@ -1870,8 +1850,6 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid, ...@@ -1870,8 +1850,6 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid,
if (occurrence == esxVI_Occurrence_OptionalItem) { if (occurrence == esxVI_Occurrence_OptionalItem) {
return 0; return 0;
} else { } else {
virUUIDFormat(uuid, uuid_string);
ESX_VI_ERROR(VIR_ERR_NO_DOMAIN, ESX_VI_ERROR(VIR_ERR_NO_DOMAIN,
"Could not find domain with UUID '%s'", uuid_string); "Could not find domain with UUID '%s'", uuid_string);
goto failure; goto failure;
...@@ -2267,149 +2245,6 @@ esxVI_LookupAndHandleVirtualMachineQuestion(esxVI_Context *ctx, ...@@ -2267,149 +2245,6 @@ esxVI_LookupAndHandleVirtualMachineQuestion(esxVI_Context *ctx,
int
esxVI_StartVirtualMachineTask(esxVI_Context *ctx, const char *name,
const char *request,
esxVI_ManagedObjectReference **task)
{
int result = 0;
char *methodName = NULL;
esxVI_Response *response = NULL;
if (virAsprintf(&methodName, "%s_Task", name) < 0) {
virReportOOMError();
goto failure;
}
if (esxVI_Context_Execute(ctx, methodName, request, &response,
esxVI_Occurrence_RequiredItem) < 0 ||
esxVI_ManagedObjectReference_Deserialize(response->node, task,
"Task") < 0) {
goto failure;
}
cleanup:
VIR_FREE(methodName);
esxVI_Response_Free(&response);
return result;
failure:
result = -1;
goto cleanup;
}
int
esxVI_StartSimpleVirtualMachineTask
(esxVI_Context *ctx, const char *name,
esxVI_ManagedObjectReference *virtualMachine,
esxVI_ManagedObjectReference **task)
{
int result = 0;
virBuffer buffer = VIR_BUFFER_INITIALIZER;
char *request = NULL;
virBufferAddLit(&buffer, ESX_VI__SOAP__REQUEST_HEADER);
virBufferAddLit(&buffer, "<");
virBufferAdd(&buffer, name, -1);
virBufferAddLit(&buffer, "_Task xmlns=\"urn:vim25\">");
if (esxVI_ManagedObjectReference_Serialize(virtualMachine, "_this", &buffer,
esxVI_Boolean_True) < 0) {
goto failure;
}
virBufferAddLit(&buffer, "</");
virBufferAdd(&buffer, name, -1);
virBufferAddLit(&buffer, "_Task>");
virBufferAddLit(&buffer, ESX_VI__SOAP__REQUEST_FOOTER);
if (virBufferError(&buffer)) {
virReportOOMError();
goto failure;
}
request = virBufferContentAndReset(&buffer);
if (esxVI_StartVirtualMachineTask(ctx, name, request, task) < 0) {
goto failure;
}
cleanup:
VIR_FREE(request);
return result;
failure:
virBufferFreeAndReset(&buffer);
result = -1;
goto cleanup;
}
int
esxVI_SimpleVirtualMachineMethod(esxVI_Context *ctx, const char *name,
esxVI_ManagedObjectReference *virtualMachine)
{
int result = 0;
virBuffer buffer = VIR_BUFFER_INITIALIZER;
char *request = NULL;
esxVI_Response *response = NULL;
if (ctx->service == NULL) {
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument");
return -1;
}
virBufferAddLit(&buffer, ESX_VI__SOAP__REQUEST_HEADER);
virBufferAddLit(&buffer, "<");
virBufferAdd(&buffer, name, -1);
virBufferAddLit(&buffer, " xmlns=\"urn:vim25\">");
if (esxVI_ManagedObjectReference_Serialize(virtualMachine, "_this", &buffer,
esxVI_Boolean_True) < 0) {
goto failure;
}
virBufferAddLit(&buffer, "</");
virBufferAdd(&buffer, name, -1);
virBufferAddLit(&buffer, ">");
virBufferAddLit(&buffer, ESX_VI__SOAP__REQUEST_FOOTER);
if (virBufferError(&buffer)) {
virReportOOMError();
goto failure;
}
request = virBufferContentAndReset(&buffer);
if (esxVI_Context_Execute(ctx, name, request, &response,
esxVI_Occurrence_None) < 0) {
goto failure;
}
cleanup:
VIR_FREE(request);
esxVI_Response_Free(&response);
return result;
failure:
virBufferFreeAndReset(&buffer);
result = -1;
goto cleanup;
}
int int
esxVI_HandleVirtualMachineQuestion esxVI_HandleVirtualMachineQuestion
(esxVI_Context *ctx, esxVI_ManagedObjectReference *virtualMachine, (esxVI_Context *ctx, esxVI_ManagedObjectReference *virtualMachine,
......
...@@ -140,7 +140,7 @@ int esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration, ...@@ -140,7 +140,7 @@ int esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration,
esxVI_AnyType *anyType, int *value); esxVI_AnyType *anyType, int *value);
int esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration, int esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
int value, const char *element, int value, const char *element,
virBufferPtr output, esxVI_Boolean required); virBufferPtr output);
int esxVI_Enumeration_Deserialize(const esxVI_Enumeration *enumeration, int esxVI_Enumeration_Deserialize(const esxVI_Enumeration *enumeration,
xmlNodePtr node, int *value); xmlNodePtr node, int *value);
...@@ -159,8 +159,7 @@ typedef int (*esxVI_List_DeepCopyFunc) (esxVI_List **dest, esxVI_List *src); ...@@ -159,8 +159,7 @@ typedef int (*esxVI_List_DeepCopyFunc) (esxVI_List **dest, esxVI_List *src);
typedef int (*esxVI_List_CastFromAnyTypeFunc) (esxVI_AnyType *anyType, typedef int (*esxVI_List_CastFromAnyTypeFunc) (esxVI_AnyType *anyType,
esxVI_List **item); esxVI_List **item);
typedef int (*esxVI_List_SerializeFunc) (esxVI_List *item, const char *element, typedef int (*esxVI_List_SerializeFunc) (esxVI_List *item, const char *element,
virBufferPtr output, virBufferPtr output);
esxVI_Boolean required);
typedef int (*esxVI_List_DeserializeFunc) (xmlNodePtr node, esxVI_List **item); typedef int (*esxVI_List_DeserializeFunc) (xmlNodePtr node, esxVI_List **item);
int esxVI_List_Append(esxVI_List **list, esxVI_List *item); int esxVI_List_Append(esxVI_List **list, esxVI_List *item);
...@@ -171,7 +170,7 @@ int esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list, ...@@ -171,7 +170,7 @@ int esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list,
esxVI_List_CastFromAnyTypeFunc castFromAnyTypeFunc, esxVI_List_CastFromAnyTypeFunc castFromAnyTypeFunc,
esxVI_List_FreeFunc freeFunc); esxVI_List_FreeFunc freeFunc);
int esxVI_List_Serialize(esxVI_List *list, const char *element, int esxVI_List_Serialize(esxVI_List *list, const char *element,
virBufferPtr output, esxVI_Boolean required, virBufferPtr output,
esxVI_List_SerializeFunc serializeFunc); esxVI_List_SerializeFunc serializeFunc);
int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list, int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list,
esxVI_List_DeserializeFunc deserializeFunc, esxVI_List_DeserializeFunc deserializeFunc,
...@@ -189,9 +188,6 @@ int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list, ...@@ -189,9 +188,6 @@ int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list,
int esxVI_Alloc(void **ptrptr, size_t size); int esxVI_Alloc(void **ptrptr, size_t size);
int esxVI_CheckSerializationNecessity(const char *element,
esxVI_Boolean required);
int esxVI_BuildFullTraversalSpecItem int esxVI_BuildFullTraversalSpecItem
(esxVI_SelectionSpec **fullTraversalSpecList, const char *name, (esxVI_SelectionSpec **fullTraversalSpecList, const char *name,
const char *type, const char *path, const char *selectSetNames); const char *type, const char *path, const char *selectSetNames);
...@@ -263,19 +259,6 @@ int esxVI_LookupAndHandleVirtualMachineQuestion(esxVI_Context *ctx, ...@@ -263,19 +259,6 @@ int esxVI_LookupAndHandleVirtualMachineQuestion(esxVI_Context *ctx,
const unsigned char *uuid, const unsigned char *uuid,
esxVI_Boolean autoAnswer); esxVI_Boolean autoAnswer);
int esxVI_StartVirtualMachineTask(esxVI_Context *ctx, const char *name,
const char *request,
esxVI_ManagedObjectReference **task);
int esxVI_StartSimpleVirtualMachineTask
(esxVI_Context *ctx, const char *name,
esxVI_ManagedObjectReference *virtualMachine,
esxVI_ManagedObjectReference **task);
int esxVI_SimpleVirtualMachineMethod
(esxVI_Context *ctx, const char *name,
esxVI_ManagedObjectReference *virtualMachine);
int esxVI_HandleVirtualMachineQuestion int esxVI_HandleVirtualMachineQuestion
(esxVI_Context *ctx, (esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine, esxVI_ManagedObjectReference *virtualMachine,
......
此差异已折叠。
...@@ -44,7 +44,7 @@ int esxVI_SessionIsActive(esxVI_Context *ctx, const char *sessionID, ...@@ -44,7 +44,7 @@ int esxVI_SessionIsActive(esxVI_Context *ctx, const char *sessionID,
const char *userName, esxVI_Boolean *active); const char *userName, esxVI_Boolean *active);
int esxVI_RetrieveProperties(esxVI_Context *ctx, int esxVI_RetrieveProperties(esxVI_Context *ctx,
esxVI_PropertyFilterSpec *propertyFilterSpecList, esxVI_PropertyFilterSpec *specSet, /* list */
esxVI_ObjectContent **objectContentList); esxVI_ObjectContent **objectContentList);
int esxVI_PowerOnVM_Task(esxVI_Context *ctx, int esxVI_PowerOnVM_Task(esxVI_Context *ctx,
...@@ -61,8 +61,10 @@ int esxVI_SuspendVM_Task(esxVI_Context *ctx, ...@@ -61,8 +61,10 @@ int esxVI_SuspendVM_Task(esxVI_Context *ctx,
int esxVI_MigrateVM_Task(esxVI_Context *ctx, int esxVI_MigrateVM_Task(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine, esxVI_ManagedObjectReference *virtualMachine,
esxVI_ManagedObjectReference *resourcePool, esxVI_ManagedObjectReference *pool,
esxVI_ManagedObjectReference *hostSystem, esxVI_ManagedObjectReference *host,
esxVI_VirtualMachineMovePriority priority,
esxVI_VirtualMachinePowerState state,
esxVI_ManagedObjectReference **task); esxVI_ManagedObjectReference **task);
int esxVI_ReconfigVM_Task(esxVI_Context *ctx, int esxVI_ReconfigVM_Task(esxVI_Context *ctx,
...@@ -74,8 +76,8 @@ int esxVI_RegisterVM_Task(esxVI_Context *ctx, ...@@ -74,8 +76,8 @@ int esxVI_RegisterVM_Task(esxVI_Context *ctx,
esxVI_ManagedObjectReference *folder, esxVI_ManagedObjectReference *folder,
const char *path, const char *name, const char *path, const char *name,
esxVI_Boolean asTemplate, esxVI_Boolean asTemplate,
esxVI_ManagedObjectReference *resourcePool, esxVI_ManagedObjectReference *pool,
esxVI_ManagedObjectReference *hostSystem, esxVI_ManagedObjectReference *host,
esxVI_ManagedObjectReference **task); esxVI_ManagedObjectReference **task);
int esxVI_CancelTask(esxVI_Context *ctx, esxVI_ManagedObjectReference *task); int esxVI_CancelTask(esxVI_Context *ctx, esxVI_ManagedObjectReference *task);
...@@ -88,7 +90,7 @@ int esxVI_AnswerVM(esxVI_Context *ctx, ...@@ -88,7 +90,7 @@ int esxVI_AnswerVM(esxVI_Context *ctx,
const char *questionId, const char *answerChoice); const char *questionId, const char *answerChoice);
int esxVI_CreateFilter(esxVI_Context *ctx, int esxVI_CreateFilter(esxVI_Context *ctx,
esxVI_PropertyFilterSpec *propertyFilterSpec, esxVI_PropertyFilterSpec *spec,
esxVI_Boolean partialUpdates, esxVI_Boolean partialUpdates,
esxVI_ManagedObjectReference **propertyFilter); esxVI_ManagedObjectReference **propertyFilter);
...@@ -105,11 +107,11 @@ int esxVI_ShutdownGuest(esxVI_Context *ctx, ...@@ -105,11 +107,11 @@ int esxVI_ShutdownGuest(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine); esxVI_ManagedObjectReference *virtualMachine);
int esxVI_ValidateMigration(esxVI_Context *ctx, int esxVI_ValidateMigration(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachineList, esxVI_ManagedObjectReference *vm, /* list */
esxVI_VirtualMachinePowerState powerState, esxVI_VirtualMachinePowerState state,
esxVI_String *testTypeList, // FIXME: see ValidateMigrationTestType esxVI_String *testType, /* list */ // FIXME: see ValidateMigrationTestType
esxVI_ManagedObjectReference *resourcePool, esxVI_ManagedObjectReference *pool,
esxVI_ManagedObjectReference *hostSystem, esxVI_ManagedObjectReference *host,
esxVI_Event **eventList); esxVI_Event **eventList);
int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter, int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter,
...@@ -118,7 +120,8 @@ int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter, ...@@ -118,7 +120,8 @@ int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter,
int esxVI_FindByUuid(esxVI_Context *ctx, int esxVI_FindByUuid(esxVI_Context *ctx,
esxVI_ManagedObjectReference *datacenter, esxVI_ManagedObjectReference *datacenter,
const unsigned char *uuid, esxVI_Boolean vmSearch, const char *uuid, /* string */
esxVI_Boolean vmSearch,
esxVI_ManagedObjectReference **managedObjectReference); esxVI_ManagedObjectReference **managedObjectReference);
int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx, int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx,
...@@ -128,7 +131,7 @@ int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx, ...@@ -128,7 +131,7 @@ int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx,
esxVI_Int *intervalId, esxVI_Int *intervalId,
esxVI_PerfMetricId **perfMetricIdList); esxVI_PerfMetricId **perfMetricIdList);
int esxVI_QueryPerfCounter(esxVI_Context *ctx, esxVI_Int *counterIdList, int esxVI_QueryPerfCounter(esxVI_Context *ctx, esxVI_Int *counterId, /* list */
esxVI_PerfCounterInfo **perfCounterInfoList); esxVI_PerfCounterInfo **perfCounterInfoList);
int esxVI_QueryPerf(esxVI_Context *ctx, esxVI_PerfQuerySpec *querySpecList, int esxVI_QueryPerf(esxVI_Context *ctx, esxVI_PerfQuerySpec *querySpecList,
......
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册