提交 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,
/* Perform the purposed migration */
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,
priv->autoAnswer, &taskInfoState) < 0) {
goto failure;
......
......@@ -844,8 +844,7 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration,
int
esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
int value, const char *element,
virBufferPtr output, esxVI_Boolean required)
int value, const char *element, virBufferPtr output)
{
int i;
const char *name = NULL;
......@@ -856,7 +855,7 @@ esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
}
if (value == 0) { /* undefined */
return esxVI_CheckSerializationNecessity(element, required);
return 0;
}
for (i = 0; enumeration->values[i].name != NULL; ++i) {
......@@ -1045,7 +1044,7 @@ esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list,
int
esxVI_List_Serialize(esxVI_List *list, const char *element,
virBufferPtr output, esxVI_Boolean required,
virBufferPtr output,
esxVI_List_SerializeFunc serializeFunc)
{
esxVI_List *item = NULL;
......@@ -1056,11 +1055,11 @@ esxVI_List_Serialize(esxVI_List *list, const char *element,
}
if (list == NULL) {
return esxVI_CheckSerializationNecessity(element, required);
return 0;
}
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;
}
}
......@@ -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
esxVI_BuildFullTraversalSpecItem(esxVI_SelectionSpec **fullTraversalSpecList,
const char *name, const char *type,
......@@ -1861,7 +1839,9 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid,
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) {
goto failure;
}
......@@ -1870,8 +1850,6 @@ esxVI_LookupVirtualMachineByUuid(esxVI_Context *ctx, const unsigned char *uuid,
if (occurrence == esxVI_Occurrence_OptionalItem) {
return 0;
} else {
virUUIDFormat(uuid, uuid_string);
ESX_VI_ERROR(VIR_ERR_NO_DOMAIN,
"Could not find domain with UUID '%s'", uuid_string);
goto failure;
......@@ -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
esxVI_HandleVirtualMachineQuestion
(esxVI_Context *ctx, esxVI_ManagedObjectReference *virtualMachine,
......
......@@ -140,7 +140,7 @@ int esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration,
esxVI_AnyType *anyType, int *value);
int esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration,
int value, const char *element,
virBufferPtr output, esxVI_Boolean required);
virBufferPtr output);
int esxVI_Enumeration_Deserialize(const esxVI_Enumeration *enumeration,
xmlNodePtr node, int *value);
......@@ -159,8 +159,7 @@ typedef int (*esxVI_List_DeepCopyFunc) (esxVI_List **dest, esxVI_List *src);
typedef int (*esxVI_List_CastFromAnyTypeFunc) (esxVI_AnyType *anyType,
esxVI_List **item);
typedef int (*esxVI_List_SerializeFunc) (esxVI_List *item, const char *element,
virBufferPtr output,
esxVI_Boolean required);
virBufferPtr output);
typedef int (*esxVI_List_DeserializeFunc) (xmlNodePtr node, 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,
esxVI_List_CastFromAnyTypeFunc castFromAnyTypeFunc,
esxVI_List_FreeFunc freeFunc);
int esxVI_List_Serialize(esxVI_List *list, const char *element,
virBufferPtr output, esxVI_Boolean required,
virBufferPtr output,
esxVI_List_SerializeFunc serializeFunc);
int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list,
esxVI_List_DeserializeFunc deserializeFunc,
......@@ -189,9 +188,6 @@ int esxVI_List_Deserialize(xmlNodePtr node, esxVI_List **list,
int esxVI_Alloc(void **ptrptr, size_t size);
int esxVI_CheckSerializationNecessity(const char *element,
esxVI_Boolean required);
int esxVI_BuildFullTraversalSpecItem
(esxVI_SelectionSpec **fullTraversalSpecList, const char *name,
const char *type, const char *path, const char *selectSetNames);
......@@ -263,19 +259,6 @@ int esxVI_LookupAndHandleVirtualMachineQuestion(esxVI_Context *ctx,
const unsigned char *uuid,
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
(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine,
......
此差异已折叠。
......@@ -44,7 +44,7 @@ int esxVI_SessionIsActive(esxVI_Context *ctx, const char *sessionID,
const char *userName, esxVI_Boolean *active);
int esxVI_RetrieveProperties(esxVI_Context *ctx,
esxVI_PropertyFilterSpec *propertyFilterSpecList,
esxVI_PropertyFilterSpec *specSet, /* list */
esxVI_ObjectContent **objectContentList);
int esxVI_PowerOnVM_Task(esxVI_Context *ctx,
......@@ -61,8 +61,10 @@ int esxVI_SuspendVM_Task(esxVI_Context *ctx,
int esxVI_MigrateVM_Task(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine,
esxVI_ManagedObjectReference *resourcePool,
esxVI_ManagedObjectReference *hostSystem,
esxVI_ManagedObjectReference *pool,
esxVI_ManagedObjectReference *host,
esxVI_VirtualMachineMovePriority priority,
esxVI_VirtualMachinePowerState state,
esxVI_ManagedObjectReference **task);
int esxVI_ReconfigVM_Task(esxVI_Context *ctx,
......@@ -74,8 +76,8 @@ int esxVI_RegisterVM_Task(esxVI_Context *ctx,
esxVI_ManagedObjectReference *folder,
const char *path, const char *name,
esxVI_Boolean asTemplate,
esxVI_ManagedObjectReference *resourcePool,
esxVI_ManagedObjectReference *hostSystem,
esxVI_ManagedObjectReference *pool,
esxVI_ManagedObjectReference *host,
esxVI_ManagedObjectReference **task);
int esxVI_CancelTask(esxVI_Context *ctx, esxVI_ManagedObjectReference *task);
......@@ -88,7 +90,7 @@ int esxVI_AnswerVM(esxVI_Context *ctx,
const char *questionId, const char *answerChoice);
int esxVI_CreateFilter(esxVI_Context *ctx,
esxVI_PropertyFilterSpec *propertyFilterSpec,
esxVI_PropertyFilterSpec *spec,
esxVI_Boolean partialUpdates,
esxVI_ManagedObjectReference **propertyFilter);
......@@ -105,11 +107,11 @@ int esxVI_ShutdownGuest(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachine);
int esxVI_ValidateMigration(esxVI_Context *ctx,
esxVI_ManagedObjectReference *virtualMachineList,
esxVI_VirtualMachinePowerState powerState,
esxVI_String *testTypeList, // FIXME: see ValidateMigrationTestType
esxVI_ManagedObjectReference *resourcePool,
esxVI_ManagedObjectReference *hostSystem,
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,
......@@ -118,7 +120,8 @@ int esxVI_FindByIp(esxVI_Context *ctx, esxVI_ManagedObjectReference *datacenter,
int esxVI_FindByUuid(esxVI_Context *ctx,
esxVI_ManagedObjectReference *datacenter,
const unsigned char *uuid, esxVI_Boolean vmSearch,
const char *uuid, /* string */
esxVI_Boolean vmSearch,
esxVI_ManagedObjectReference **managedObjectReference);
int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx,
......@@ -128,7 +131,7 @@ int esxVI_QueryAvailablePerfMetric(esxVI_Context *ctx,
esxVI_Int *intervalId,
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);
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.
先完成此消息的编辑!
想要评论请 注册