From 8070464da9c8e3be6cc1eb49ade59d0cc9667cbe Mon Sep 17 00:00:00 2001 From: "shan.wu" Date: Mon, 23 Mar 2026 11:37:45 +0800 Subject: [PATCH 01/56] [dpu-bm2]: support attaching novlan and vxlan network to baremetal2 instance support attaching novlan and vxlan network to baremetal2 instance Resolves/Related: ZSTAC-82781 Change-Id: I736d637a7168656a6c726c6769777a726e616974 (cherry picked from commit 249982672ecebea77d4acfa2480485847f2c50e6) --- sdk/src/main/java/SourceClassMap.java | 2 ++ .../sdk/BareMetal2DpuChassisConfig.java | 8 +++++ .../sdk/YuccaBareMetal2DpuChassisConfig.java | 31 +++++++++++++++++++ .../CloudOperationsErrorCode.java | 12 +++++++ 4 files changed, 53 insertions(+) create mode 100644 sdk/src/main/java/org/zstack/sdk/YuccaBareMetal2DpuChassisConfig.java diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index ab5ec3770f3..4f67267093d 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -71,6 +71,7 @@ public class SourceClassMap { put("org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory", "org.zstack.sdk.BareMetal2IpmiChassisInventory"); put("org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory", "org.zstack.sdk.BareMetal2ChassisOfferingInventory"); put("org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory", "org.zstack.sdk.BareMetal2DpuHostInventory"); + put("org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig", "org.zstack.sdk.YuccaBareMetal2DpuChassisConfig"); put("org.zstack.baremetal2.gateway.BareMetal2GatewayInventory", "org.zstack.sdk.BareMetal2GatewayInventory"); put("org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory", "org.zstack.sdk.BareMetal2GatewayProvisionNicInventory"); put("org.zstack.baremetal2.instance.BareMetal2InstanceInventory", "org.zstack.sdk.BareMetal2InstanceInventory"); @@ -1612,6 +1613,7 @@ public class SourceClassMap { put("org.zstack.sdk.XmlHookInventory", "org.zstack.kvm.xmlhook.XmlHookInventory"); put("org.zstack.sdk.XmlHookType", "org.zstack.kvm.xmlhook.XmlHookType"); put("org.zstack.sdk.XskyBlockVolumeInventory", "org.zstack.header.volume.block.XskyBlockVolumeInventory"); + put("org.zstack.sdk.YuccaBareMetal2DpuChassisConfig", "org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig"); put("org.zstack.sdk.ZBoxBackupInventory", "org.zstack.externalbackup.zbox.ZBoxBackupInventory"); put("org.zstack.sdk.ZBoxBackupStorageBackupInfo", "org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo"); put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/BareMetal2DpuChassisConfig.java b/sdk/src/main/java/org/zstack/sdk/BareMetal2DpuChassisConfig.java index a4c6b03fd08..6ae70437623 100644 --- a/sdk/src/main/java/org/zstack/sdk/BareMetal2DpuChassisConfig.java +++ b/sdk/src/main/java/org/zstack/sdk/BareMetal2DpuChassisConfig.java @@ -4,6 +4,14 @@ public class BareMetal2DpuChassisConfig { + public java.lang.String vendorType; + public void setVendorType(java.lang.String vendorType) { + this.vendorType = vendorType; + } + public java.lang.String getVendorType() { + return this.vendorType; + } + public java.lang.String ipmiAddress; public void setIpmiAddress(java.lang.String ipmiAddress) { this.ipmiAddress = ipmiAddress; diff --git a/sdk/src/main/java/org/zstack/sdk/YuccaBareMetal2DpuChassisConfig.java b/sdk/src/main/java/org/zstack/sdk/YuccaBareMetal2DpuChassisConfig.java new file mode 100644 index 00000000000..3601c8573a5 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/YuccaBareMetal2DpuChassisConfig.java @@ -0,0 +1,31 @@ +package org.zstack.sdk; + + + +public class YuccaBareMetal2DpuChassisConfig extends org.zstack.sdk.BareMetal2DpuChassisConfig { + + public java.lang.String phyInterface; + public void setPhyInterface(java.lang.String phyInterface) { + this.phyInterface = phyInterface; + } + public java.lang.String getPhyInterface() { + return this.phyInterface; + } + + public java.lang.String bondMode; + public void setBondMode(java.lang.String bondMode) { + this.bondMode = bondMode; + } + public java.lang.String getBondMode() { + return this.bondMode; + } + + public java.lang.String tunnelType; + public void setTunnelType(java.lang.String tunnelType) { + this.tunnelType = tunnelType; + } + public java.lang.String getTunnelType() { + return this.tunnelType; + } + +} diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index ab1c62da4c1..f9c9c3f1cf6 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -7726,6 +7726,18 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10092 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10092"; + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10093 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10093"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10094 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10094"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10095 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10095"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10096 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10096"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10097 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10097"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10098 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10098"; + public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000"; public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001"; From 1f69b478fdb31878c75ac2c0925b3bfd3cbec916 Mon Sep 17 00:00:00 2001 From: "zhong.xian" Date: Thu, 26 Mar 2026 15:24:13 +0800 Subject: [PATCH 02/56] [kvm]: user vm mount model Add virtiofs-based model mounting capability for user VMs: - Add VmModelMountVO database table and schema with hostUuid tracking - Add AttachVirtiofsCmd/DetachVirtiofsCmd for KVM agent - Add MountModelCenterCmd with storageUrl field - Add SDK actions for mount/unmount/query operations - Add error codes 10138-10149 Resolves: ZSTAC-83157 Change-Id: I746679736f7a7176646e646d797969766f697a76 --- .../global-error-zh_CN.json | 14 ++- .../main/java/org/zstack/kvm/KVMConstant.java | 5 + sdk/src/main/java/SourceClassMap.java | 4 + .../sdk/MountModelToVmInstanceAction.java | 107 ++++++++++++++++++ .../sdk/MountModelToVmInstanceResult.java | 14 +++ .../zstack/sdk/QueryVmModelMountAction.java | 75 ++++++++++++ .../zstack/sdk/QueryVmModelMountResult.java | 22 ++++ .../sdk/UnmountModelFromVmInstanceAction.java | 101 +++++++++++++++++ .../sdk/UnmountModelFromVmInstanceResult.java | 7 ++ .../org/zstack/sdk/VmModelMountInventory.java | 87 ++++++++++++++ .../org/zstack/sdk/VmModelMountStatus.java | 7 ++ .../java/org/zstack/testlib/ApiHelper.groovy | 83 ++++++++++++++ .../CloudOperationsErrorCode.java | 15 +++ 13 files changed, 540 insertions(+), 1 deletion(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/QueryVmModelMountAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/QueryVmModelMountResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/VmModelMountInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json index be35880ac65..4b4f1efae5e 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json @@ -4720,5 +4720,17 @@ "ORG_ZSTACK_VPCFIREWALL_10035": "无法添加防火墙规则[%d]因为%s", "ORG_ZSTACK_DGPU_10010": "未找到可用的 dGPU AddOn License,请为 dGPU 产品申请并上传对应授权。", "ORG_ZSTACK_DGPU_10011": "dGPU 产品的 AddOn License 已过期,请及时续期。", - "ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。" + "ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。", + "ORG_ZSTACK_AI_10138": "虚拟机[uuid:%s]未找到", + "ORG_ZSTACK_AI_10139": "模型[uuid:%s]未找到", + "ORG_ZSTACK_AI_10140": "虚拟机[uuid:%s]必须处于运行状态才能挂载模型,当前状态: %s", + "ORG_ZSTACK_AI_10141": "虚拟机[uuid:%s]未运行在任何主机上", + "ORG_ZSTACK_AI_10142": "模型[uuid:%s]属于账户[%s]但虚拟机[uuid:%s]属于账户[%s],无法跨账户挂载模型", + "ORG_ZSTACK_AI_10143": "模型中心[uuid:%s]未找到", + "ORG_ZSTACK_AI_10144": "挂载路径[%s]已被虚拟机[uuid:%s]上的另一个挂载[uuid:%s]使用", + "ORG_ZSTACK_AI_10145": "挂载路径[%s]不允许,不能挂载到系统目录", + "ORG_ZSTACK_AI_10146": "模型安装路径[%s]无效,预期格式: file:///root/bentoml/models/", + "ORG_ZSTACK_AI_10147": "挂载记录[uuid:%s]未找到", + "ORG_ZSTACK_AI_10148": "挂载记录[uuid:%s]未处于已挂载状态,当前状态: %s", + "ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s" } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java index 303a12bc6fc..314ff983470 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java @@ -97,6 +97,11 @@ public interface KVMConstant { String CLEAN_FIRMWARE_FLASH = "/clean/firmware/flash"; String FSTRIM_VM_PATH = "/vm/fstrim"; + // ZSTAC-83157: virtiofs model mount paths + String KVM_VIRTIOFS_ATTACH_PATH = "/virtiofs/attach"; + String KVM_VIRTIOFS_DETACH_PATH = "/virtiofs/detach"; + String KVM_MODEL_CENTER_MOUNT_PATH = "/modelcenter/mount"; + String ISO_TO = "kvm.isoto"; String ANSIBLE_PLAYBOOK_NAME = "kvm.py"; String ANSIBLE_MODULE_PATH = "ansible/kvm"; diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 1206558cff1..6decef8aaec 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -25,6 +25,8 @@ public class SourceClassMap { put("org.zstack.ai.entity.ModelServiceRefInventory", "org.zstack.sdk.ModelServiceRefInventory"); put("org.zstack.ai.entity.ModelServiceTemplateInventory", "org.zstack.sdk.ModelServiceTemplateInventory"); put("org.zstack.ai.entity.TrainedModelRecordInventory", "org.zstack.sdk.TrainedModelRecordInventory"); + put("org.zstack.ai.entity.VmModelMountInventory", "org.zstack.sdk.VmModelMountInventory"); + put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); @@ -1565,6 +1567,8 @@ public class SourceClassMap { put("org.zstack.sdk.VmInstancePciDeviceSpecRefInventory", "org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory"); put("org.zstack.sdk.VmMemoryBillingInventory", "org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory"); put("org.zstack.sdk.VmMemorySpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails"); + put("org.zstack.sdk.VmModelMountInventory", "org.zstack.ai.entity.VmModelMountInventory"); + put("org.zstack.sdk.VmModelMountStatus", "org.zstack.ai.entity.VmModelMountStatus"); put("org.zstack.sdk.VmNicBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails"); put("org.zstack.sdk.VmNicInventory", "org.zstack.header.vm.VmNicInventory"); put("org.zstack.sdk.VmNicSecurityGroupRefInventory", "org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceAction.java b/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceAction.java new file mode 100644 index 00000000000..9dfca7a35d1 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceAction.java @@ -0,0 +1,107 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class MountModelToVmInstanceAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.MountModelToVmInstanceResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String vmInstanceUuid; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String modelUuid; + + @Param(required = false, maxLength = 512, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String mountPath; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.MountModelToVmInstanceResult value = res.getResult(org.zstack.sdk.MountModelToVmInstanceResult.class); + ret.value = value == null ? new org.zstack.sdk.MountModelToVmInstanceResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "POST"; + info.path = "/vm-model-mounts"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceResult.java b/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceResult.java new file mode 100644 index 00000000000..0feb080e656 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/MountModelToVmInstanceResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.VmModelMountInventory; + +public class MountModelToVmInstanceResult { + public VmModelMountInventory inventory; + public void setInventory(VmModelMountInventory inventory) { + this.inventory = inventory; + } + public VmModelMountInventory getInventory() { + return this.inventory; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountAction.java b/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountAction.java new file mode 100644 index 00000000000..3205a750d34 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountAction.java @@ -0,0 +1,75 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class QueryVmModelMountAction extends QueryAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.QueryVmModelMountResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.QueryVmModelMountResult value = res.getResult(org.zstack.sdk.QueryVmModelMountResult.class); + ret.value = value == null ? new org.zstack.sdk.QueryVmModelMountResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "GET"; + info.path = "/vm-model-mounts"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountResult.java b/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountResult.java new file mode 100644 index 00000000000..de488a4a8a0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/QueryVmModelMountResult.java @@ -0,0 +1,22 @@ +package org.zstack.sdk; + + + +public class QueryVmModelMountResult { + public java.util.List inventories; + public void setInventories(java.util.List inventories) { + this.inventories = inventories; + } + public java.util.List getInventories() { + return this.inventories; + } + + public java.lang.Long total; + public void setTotal(java.lang.Long total) { + this.total = total; + } + public java.lang.Long getTotal() { + return this.total; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceAction.java b/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceAction.java new file mode 100644 index 00000000000..677cd311888 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceAction.java @@ -0,0 +1,101 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class UnmountModelFromVmInstanceAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.UnmountModelFromVmInstanceResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String uuid; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.UnmountModelFromVmInstanceResult value = res.getResult(org.zstack.sdk.UnmountModelFromVmInstanceResult.class); + ret.value = value == null ? new org.zstack.sdk.UnmountModelFromVmInstanceResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "DELETE"; + info.path = "/vm-model-mounts/{uuid}"; + info.needSession = true; + info.needPoll = true; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceResult.java b/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceResult.java new file mode 100644 index 00000000000..736cdec965f --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/UnmountModelFromVmInstanceResult.java @@ -0,0 +1,7 @@ +package org.zstack.sdk; + + + +public class UnmountModelFromVmInstanceResult { + +} diff --git a/sdk/src/main/java/org/zstack/sdk/VmModelMountInventory.java b/sdk/src/main/java/org/zstack/sdk/VmModelMountInventory.java new file mode 100644 index 00000000000..e328b9292b4 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/VmModelMountInventory.java @@ -0,0 +1,87 @@ +package org.zstack.sdk; + +import org.zstack.sdk.VmModelMountStatus; + +public class VmModelMountInventory { + + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + + public java.lang.String vmInstanceUuid; + public void setVmInstanceUuid(java.lang.String vmInstanceUuid) { + this.vmInstanceUuid = vmInstanceUuid; + } + public java.lang.String getVmInstanceUuid() { + return this.vmInstanceUuid; + } + + public java.lang.String modelUuid; + public void setModelUuid(java.lang.String modelUuid) { + this.modelUuid = modelUuid; + } + public java.lang.String getModelUuid() { + return this.modelUuid; + } + + public java.lang.String modelName; + public void setModelName(java.lang.String modelName) { + this.modelName = modelName; + } + public java.lang.String getModelName() { + return this.modelName; + } + + public java.lang.String mountPath; + public void setMountPath(java.lang.String mountPath) { + this.mountPath = mountPath; + } + public java.lang.String getMountPath() { + return this.mountPath; + } + + public java.lang.String sourcePath; + public void setSourcePath(java.lang.String sourcePath) { + this.sourcePath = sourcePath; + } + public java.lang.String getSourcePath() { + return this.sourcePath; + } + + public VmModelMountStatus status; + public void setStatus(VmModelMountStatus status) { + this.status = status; + } + public VmModelMountStatus getStatus() { + return this.status; + } + + public java.lang.String accountUuid; + public void setAccountUuid(java.lang.String accountUuid) { + this.accountUuid = accountUuid; + } + public java.lang.String getAccountUuid() { + return this.accountUuid; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java b/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java new file mode 100644 index 00000000000..f4f42f5e8b0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java @@ -0,0 +1,7 @@ +package org.zstack.sdk; + +public enum VmModelMountStatus { + Mounting, + Mounted, + Unmounting, +} diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 5a9b5138a3d..db88ce60bae 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -27745,6 +27745,33 @@ abstract class ApiHelper { } + def mountModelToVmInstance(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.MountModelToVmInstanceAction.class) Closure c) { + def a = new org.zstack.sdk.MountModelToVmInstanceAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def mountVmInstanceRecoveryPoint(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.MountVmInstanceRecoveryPointAction.class) Closure c) { def a = new org.zstack.sdk.MountVmInstanceRecoveryPointAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -36211,6 +36238,35 @@ abstract class ApiHelper { } + def queryVmModelMount(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.QueryVmModelMountAction.class) Closure c) { + def a = new org.zstack.sdk.QueryVmModelMountAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + a.conditions = a.conditions.collect { it.toString() } + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def queryVmNic(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.QueryVmNicAction.class) Closure c) { def a = new org.zstack.sdk.QueryVmNicAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -42673,6 +42729,33 @@ abstract class ApiHelper { } + def unmountModelFromVmInstance(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.UnmountModelFromVmInstanceAction.class) Closure c) { + def a = new org.zstack.sdk.UnmountModelFromVmInstanceAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def unmountVmInstanceRecoveryPoint(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.UnmountVmInstanceRecoveryPointAction.class) Closure c) { def a = new org.zstack.sdk.UnmountVmInstanceRecoveryPointAction() a.sessionId = Test.currentEnvSpec?.session?.uuid diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 47e32c7cf90..068d1f50755 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -14904,6 +14904,21 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10142 = "ORG_ZSTACK_AI_10142"; public static final String ORG_ZSTACK_AI_10143 = "ORG_ZSTACK_AI_10143"; + + public static final String ORG_ZSTACK_AI_10144 = "ORG_ZSTACK_AI_10144"; + + public static final String ORG_ZSTACK_AI_10145 = "ORG_ZSTACK_AI_10145"; + + public static final String ORG_ZSTACK_AI_10146 = "ORG_ZSTACK_AI_10146"; + + public static final String ORG_ZSTACK_AI_10147 = "ORG_ZSTACK_AI_10147"; + + public static final String ORG_ZSTACK_AI_10148 = "ORG_ZSTACK_AI_10148"; + + public static final String ORG_ZSTACK_AI_10149 = "ORG_ZSTACK_AI_10149"; + + public static final String ORG_ZSTACK_AI_10157 = "ORG_ZSTACK_AI_10157"; + public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10001 = "ORG_ZSTACK_CORE_CLOUDBUS_10001"; From d913f8480429e6db73be2d83330117b877ca46a3 Mon Sep 17 00:00:00 2001 From: "zhong.xian" Date: Sun, 29 Mar 2026 15:45:48 +0800 Subject: [PATCH 03/56] [conf]: add errorcode and sql Resolves: ZSTAC-83157 Change-Id: I62696a6d667468766a6575656763707374757277 --- conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json | 3 ++- sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java | 1 - .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json index 4b4f1efae5e..ff1fda1ebcd 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json @@ -4732,5 +4732,6 @@ "ORG_ZSTACK_AI_10146": "模型安装路径[%s]无效,预期格式: file:///root/bentoml/models/", "ORG_ZSTACK_AI_10147": "挂载记录[uuid:%s]未找到", "ORG_ZSTACK_AI_10148": "挂载记录[uuid:%s]未处于已挂载状态,当前状态: %s", - "ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s" + "ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s", + "ORG_ZSTACK_AI_10150": "模型[uuid:%s, 名称:%s]已挂载到虚拟机[uuid:%s],挂载路径[%s]。每个模型在每个虚拟机上只能挂载一次" } diff --git a/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java b/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java index f4f42f5e8b0..67222f08987 100644 --- a/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java +++ b/sdk/src/main/java/org/zstack/sdk/VmModelMountStatus.java @@ -1,7 +1,6 @@ package org.zstack.sdk; public enum VmModelMountStatus { - Mounting, Mounted, Unmounting, } diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 068d1f50755..7dd2e42f08d 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -14916,7 +14916,9 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10148 = "ORG_ZSTACK_AI_10148"; public static final String ORG_ZSTACK_AI_10149 = "ORG_ZSTACK_AI_10149"; - + + public static final String ORG_ZSTACK_AI_10150 = "ORG_ZSTACK_AI_10150"; + public static final String ORG_ZSTACK_AI_10157 = "ORG_ZSTACK_AI_10157"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; From 80ddd2008aef00cff205b04f9bc875cf938f4fef Mon Sep 17 00:00:00 2001 From: "chao.he" Date: Mon, 20 Apr 2026 15:49:48 +0800 Subject: [PATCH 04/56] [aios]: add i18n mapping for fatal image pull error - add dedicated container image pull error code mapping Resolves: ZSTAC-84175 Change-Id: Iabcdef1234567890abcdef1234567890abcdef12 --- conf/i18n/globalErrorCodeMapping/global-error-en_US.json | 1 + conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json | 1 + .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 2 ++ 3 files changed, 4 insertions(+) diff --git a/conf/i18n/globalErrorCodeMapping/global-error-en_US.json b/conf/i18n/globalErrorCodeMapping/global-error-en_US.json index af8d1b29ac6..a9dca2b91dc 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-en_US.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-en_US.json @@ -1116,6 +1116,7 @@ "ORG_ZSTACK_CORE_PROGRESS_10000": "parameter apiId[%s] is not a valid UUID for cloud service configuration.", "ORG_ZSTACK_BAREMETAL2_GATEWAY_10029": "failed to delete convert volume to chassis local disk configurations in gateway[uuid:%s] for baremetal instance[uuid:%s]", "ORG_ZSTACK_CONTAINER_10056": "Cannot find Container Backup Storage with UUID: %s", + "ORG_ZSTACK_CONTAINER_10057": "Failed to pull container image: the image does not exist or the image name/tag is incorrect. Underlying error: %s", "ORG_ZSTACK_BAREMETAL2_GATEWAY_10024": "provisioned_ip %s is unavailable as it cannot connect to the gateway %s; detailed error:%s", "ORG_ZSTACK_CONTAINER_10047": "Failed to retrieve service status bundle for service[%s]", "ORG_ZSTACK_CONTAINER_10049": "Cannot find cluster by specified cluster id: %s", diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json index be35880ac65..69777965cfd 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json @@ -1116,6 +1116,7 @@ "ORG_ZSTACK_CORE_PROGRESS_10000": "参数 apiId[%s] 不是一个有效的UUID。", "ORG_ZSTACK_BAREMETAL2_GATEWAY_10029": "删除转换卷到机箱本地磁盘配置在网关[uuid:%s]中失败,针对裸金属2实例[uuid:%s]", "ORG_ZSTACK_CONTAINER_10056": "无法找到容器备份存储对象[uuid:%s]", + "ORG_ZSTACK_CONTAINER_10057": "容器镜像拉取失败:镜像不存在或填错,请检查镜像名称或 tag。底层报错:%s", "ORG_ZSTACK_BAREMETAL2_GATEWAY_10024": "分配的 IP %s 不可用,它无法连接到网关 %s,详情:%s", "ORG_ZSTACK_CONTAINER_10047": "获取服务[%s]的状态包失败", "ORG_ZSTACK_CONTAINER_10049": "无法找到集群:%s", diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 47e32c7cf90..bf5b1bdedda 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -8406,6 +8406,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_CONTAINER_10056 = "ORG_ZSTACK_CONTAINER_10056"; + public static final String ORG_ZSTACK_CONTAINER_10057 = "ORG_ZSTACK_CONTAINER_10057"; + public static final String ORG_ZSTACK_ZWATCH_ALARM_SNS_TEMPLATE_HTTP_10000 = "ORG_ZSTACK_ZWATCH_ALARM_SNS_TEMPLATE_HTTP_10000"; public static final String ORG_ZSTACK_ZWATCH_ALARM_SNS_TEMPLATE_HTTP_10001 = "ORG_ZSTACK_ZWATCH_ALARM_SNS_TEMPLATE_HTTP_10001"; From 3936530bfbe6c2092b13160e7719c386ea3e18e7 Mon Sep 17 00:00:00 2001 From: "zhong.xian" Date: Tue, 31 Mar 2026 14:29:18 +0800 Subject: [PATCH 05/56] [conf]: Add ORG_ZSTACK_AI_10158 error code" Resolves: ZSTAC-83157 Change-Id: I756c7073707a6468676c70696a7a746870767777 --- conf/db/upgrade/V5.5.16__schema.sql | 21 +++++++++++++++++++ .../global-error-zh_CN.json | 14 ++++++------- conf/springConfigXml/VolumeManager.xml | 2 +- .../java/org/zstack/testlib/ApiHelper.groovy | 14 +++++++------ .../CloudOperationsErrorCode.java | 1 + 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/conf/db/upgrade/V5.5.16__schema.sql b/conf/db/upgrade/V5.5.16__schema.sql index 0d8412840ce..8bb7cbbf9d7 100644 --- a/conf/db/upgrade/V5.5.16__schema.sql +++ b/conf/db/upgrade/V5.5.16__schema.sql @@ -344,3 +344,24 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmInstanceDGpuStrategyVO` ( FOREIGN KEY (`gpuDeviceUuid`) REFERENCES `zstack`.`PciDeviceVO`(`uuid`) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- ZSTAC-83157: VM model mount table (virtiofs model mount to user VMs) +CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` ( + `uuid` VARCHAR(32) NOT NULL, + `vmInstanceUuid` VARCHAR(32) NOT NULL, + `modelUuid` VARCHAR(32) NOT NULL, + `modelName` VARCHAR(256) DEFAULT NULL, + `mountPath` VARCHAR(512) NOT NULL, + `sourcePath` VARCHAR(1024) NOT NULL, + `status` VARCHAR(32) NOT NULL, + `accountUuid` VARCHAR(32) DEFAULT NULL, + `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`uuid`), + UNIQUE KEY `uk_vm_mountpath` (`vmInstanceUuid`, `mountPath`(255)), + UNIQUE KEY `uk_vm_model` (`vmInstanceUuid`, `modelUuid`), + CONSTRAINT `fk_vm_model_mount_vm` + FOREIGN KEY (`vmInstanceUuid`) REFERENCES `zstack`.`VmInstanceEO`(`uuid`) ON DELETE CASCADE, + CONSTRAINT `fk_vm_model_mount_model` + FOREIGN KEY (`modelUuid`) REFERENCES `zstack`.`ModelVO`(`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json index ff1fda1ebcd..826e57aa36c 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json @@ -4723,15 +4723,15 @@ "ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。", "ORG_ZSTACK_AI_10138": "虚拟机[uuid:%s]未找到", "ORG_ZSTACK_AI_10139": "模型[uuid:%s]未找到", - "ORG_ZSTACK_AI_10140": "虚拟机[uuid:%s]必须处于运行状态才能挂载模型,当前状态: %s", - "ORG_ZSTACK_AI_10141": "虚拟机[uuid:%s]未运行在任何主机上", - "ORG_ZSTACK_AI_10142": "模型[uuid:%s]属于账户[%s]但虚拟机[uuid:%s]属于账户[%s],无法跨账户挂载模型", - "ORG_ZSTACK_AI_10143": "模型中心[uuid:%s]未找到", - "ORG_ZSTACK_AI_10144": "挂载路径[%s]已被虚拟机[uuid:%s]上的另一个挂载[uuid:%s]使用", + "ORG_ZSTACK_AI_10140": "虚拟机「%s」(UUID: %s) 必须处于运行状态才能挂载模型,当前状态: %s", + "ORG_ZSTACK_AI_10141": "虚拟机「%s」(UUID: %s) 未运行在任何主机上", + "ORG_ZSTACK_AI_10142": "模型「%s」(账户: %s) 与虚拟机「%s」(账户: %s) 属于不同账户,无法挂载。\n请确保模型和虚拟机属于同一账户。", + "ORG_ZSTACK_AI_10143": "模型「%s」(UUID: %s) 关联的模型中心(UUID: %s) 未找到。\n请检查模型中心是否已被删除。", + "ORG_ZSTACK_AI_10144": "挂载失败:路径 %s 已被该虚拟机上的另一个挂载占用。\n冲突挂载模型:%s\n冲突挂载UUID:%s\n所属虚拟机:%s\n所属虚拟机UUID:%s\n请先卸载该路径上的已有挂载,或使用其他挂载路径。", "ORG_ZSTACK_AI_10145": "挂载路径[%s]不允许,不能挂载到系统目录", "ORG_ZSTACK_AI_10146": "模型安装路径[%s]无效,预期格式: file:///root/bentoml/models/", "ORG_ZSTACK_AI_10147": "挂载记录[uuid:%s]未找到", - "ORG_ZSTACK_AI_10148": "挂载记录[uuid:%s]未处于已挂载状态,当前状态: %s", + "ORG_ZSTACK_AI_10148": "挂载记录「%s」(UUID: %s) 未处于已挂载状态,当前状态: %s", "ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s", - "ORG_ZSTACK_AI_10150": "模型[uuid:%s, 名称:%s]已挂载到虚拟机[uuid:%s],挂载路径[%s]。每个模型在每个虚拟机上只能挂载一次" + "ORG_ZSTACK_AI_10150": "模型「%s」(UUID: %s) 已挂载到虚拟机「%s」(UUID: %s),路径: %s。\n每个模型在每个虚拟机上只能挂载一次。" } diff --git a/conf/springConfigXml/VolumeManager.xml b/conf/springConfigXml/VolumeManager.xml index 977134a8873..55a7fbad61c 100755 --- a/conf/springConfigXml/VolumeManager.xml +++ b/conf/springConfigXml/VolumeManager.xml @@ -49,7 +49,7 @@ - + diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index db88ce60bae..ab4531b5ade 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -26962,26 +26962,27 @@ abstract class ApiHelper { } } + def getVpcVRouterSnatLogState(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetVpcVRouterSnatLogStateAction.class) Closure c) { def a = new org.zstack.sdk.GetVpcVRouterSnatLogStateAction() a.sessionId = Test.currentEnvSpec?.session?.uuid c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40974,26 +40975,27 @@ abstract class ApiHelper { } } + def setVpcVRouterSnatLogState(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.SetVpcVRouterSnatLogStateAction.class) Closure c) { def a = new org.zstack.sdk.SetVpcVRouterSnatLogStateAction() a.sessionId = Test.currentEnvSpec?.session?.uuid c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 7dd2e42f08d..4a0eaf20428 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -14920,6 +14920,7 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10150 = "ORG_ZSTACK_AI_10150"; public static final String ORG_ZSTACK_AI_10157 = "ORG_ZSTACK_AI_10157"; + public static final String ORG_ZSTACK_AI_10158 = "ORG_ZSTACK_AI_10158"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; From 38fc186f87e9adf60c9614fc52953ed0865fcca1 Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Tue, 21 Apr 2026 17:50:56 +0800 Subject: [PATCH 06/56] [flatNetworkProvider]: keep userdata immutable Revert the flat userdata hostname fallback so VM creation and reboot do not inject derived hostname metadata into userdata payloads when no hostname is configured. Add CreateRebootVmKeepUserdataContentCase to capture flat userdata apply requests during VM create and reboot, and assert the userdata list remains unchanged while hostname metadata stays absent. Resolves: ZSTAC-84529 Change-Id: I6f6e6b6b796e6e7a73727673626b7569696a6172 --- .../service/flat/FlatUserdataBackend.java | 7 -- ...eateRebootVmKeepUserdataContentCase.groovy | 77 +++++++++++++++++++ 2 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/userdata/CreateRebootVmKeepUserdataContentCase.groovy diff --git a/plugin/flatNetworkProvider/src/main/java/org/zstack/network/service/flat/FlatUserdataBackend.java b/plugin/flatNetworkProvider/src/main/java/org/zstack/network/service/flat/FlatUserdataBackend.java index 15ef662ad80..f6d15a229aa 100755 --- a/plugin/flatNetworkProvider/src/main/java/org/zstack/network/service/flat/FlatUserdataBackend.java +++ b/plugin/flatNetworkProvider/src/main/java/org/zstack/network/service/flat/FlatUserdataBackend.java @@ -310,10 +310,6 @@ private List getUserData() { continue; } - if (mto.vmHostname == null) { - mto.vmHostname = l.vmIp.replaceAll("\\.", "-"); - } - if (bridgeNames.get(l.l3Uuid) == null) { continue; } @@ -784,9 +780,6 @@ public void run(final FlowTrigger trigger, Map data) { MetadataTO to = new MetadataTO(); to.vmUuid = struct.getVmUuid(); to.vmHostname = VmSystemTags.HOSTNAME.getTokenByResourceUuid(struct.getVmUuid(), VmSystemTags.HOSTNAME_TOKEN); - if (to.vmHostname == null) { - to.vmHostname = ipv4.getIp().replaceAll("\\.", "-"); - } to.regionName = getZoneNameByVmInstanceUuid(struct.getVmUuid()); to.mac = destNic.getMac(); to.dnsServersIp = getDnsServersIpFromVm(struct.getVmUuid()); diff --git a/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/userdata/CreateRebootVmKeepUserdataContentCase.groovy b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/userdata/CreateRebootVmKeepUserdataContentCase.groovy new file mode 100644 index 00000000000..8212721e247 --- /dev/null +++ b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/userdata/CreateRebootVmKeepUserdataContentCase.groovy @@ -0,0 +1,77 @@ +package org.zstack.test.integration.networkservice.provider.flat.userdata + +import org.springframework.http.HttpEntity +import org.zstack.compute.vm.VmSystemTags +import org.zstack.network.service.flat.FlatUserdataBackend +import org.zstack.sdk.ImageInventory +import org.zstack.sdk.InstanceOfferingInventory +import org.zstack.sdk.L3NetworkInventory +import org.zstack.sdk.VmInstanceInventory +import org.zstack.test.integration.networkservice.provider.NetworkServiceProviderTest +import org.zstack.test.integration.networkservice.provider.flat.FlatNetworkServiceEnv +import org.zstack.testlib.EnvSpec +import org.zstack.testlib.SubCase + +class CreateRebootVmKeepUserdataContentCase extends SubCase { + EnvSpec env + + @Override + void setup() { + useSpring(NetworkServiceProviderTest.springSpec) + } + + @Override + void environment() { + env = FlatNetworkServiceEnv.oneHostNoVmEnv() + } + + @Override + void test() { + env.create { + testCreateAndRebootKeepUserdataContent() + } + } + + void testCreateAndRebootKeepUserdataContent() { + String userdata = "#cloud-config\nruncmd:\n - echo keep-userdata-content\n" + String encodedUserdata = new String(Base64.getEncoder().encode(userdata.getBytes())) + FlatUserdataBackend.ApplyUserdataCmd applyCmd = null + + env.afterSimulator(FlatUserdataBackend.APPLY_USER_DATA) { rsp, HttpEntity e -> + applyCmd = json(e.body, FlatUserdataBackend.ApplyUserdataCmd.class) + return rsp + } + + InstanceOfferingInventory offering = env.inventoryByName("instanceOffering") + ImageInventory image = env.inventoryByName("image") + L3NetworkInventory l3 = env.inventoryByName("l3") + + VmInstanceInventory vm = createVmInstance { + name = "vm" + instanceOfferingUuid = offering.uuid + imageUuid = image.uuid + l3NetworkUuids = [l3.uuid] + systemTags = [VmSystemTags.USERDATA.instantiateTag([(VmSystemTags.USERDATA_TOKEN): encodedUserdata])] + } + + assertUserdataNotModified(applyCmd, userdata) + + applyCmd = null + rebootVmInstance { + uuid = vm.uuid + } + + assertUserdataNotModified(applyCmd, userdata) + } + + private void assertUserdataNotModified(FlatUserdataBackend.ApplyUserdataCmd cmd, String expectedUserdata) { + assert cmd != null + assert cmd.userdata.userdataList == [expectedUserdata] + assert cmd.userdata.metadata.vmHostname == null + } + + @Override + void clean() { + env.delete() + } +} From 369649894cc36cf71c885ec5edf8c5c289d64a44 Mon Sep 17 00:00:00 2001 From: "zhong.xian" Date: Tue, 21 Apr 2026 14:08:13 +0800 Subject: [PATCH 07/56] [sdk,db]: add PodInventory request fields Expose requestCpu/requestMemory on the generated PodInventory so SDK callers can deserialize the fields returned by ZQL. Upgrade script adds matching columns on PodVO and backfills existing pods with request=limit for legacy-equivalent behaviour. Resolves: ZSTAC-80103 Change-Id: I5b2a9d4e8c6f3b7a1d0e9c5b4a8f2d7e6c1b3a9f --- conf/db/upgrade/V5.5.16__schema.sql | 10 ++++++++++ .../main/java/org/zstack/sdk/PodInventory.java | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/conf/db/upgrade/V5.5.16__schema.sql b/conf/db/upgrade/V5.5.16__schema.sql index 8bb7cbbf9d7..c50d752aa8a 100644 --- a/conf/db/upgrade/V5.5.16__schema.sql +++ b/conf/db/upgrade/V5.5.16__schema.sql @@ -365,3 +365,13 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` ( FOREIGN KEY (`modelUuid`) REFERENCES `zstack`.`ModelVO`(`uuid`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- ZSTAC-80103: Record K8s resources.requests.cpu/memory on PodVO so ZQL can return them +CALL ADD_COLUMN('PodVO', 'requestCpu', 'INT', 1, NULL); +CALL ADD_COLUMN('PodVO', 'requestMemory', 'BIGINT', 1, NULL); + +-- Backfill legacy pods: before this change request was implicitly equal to limit +UPDATE `zstack`.`PodVO` p + INNER JOIN `zstack`.`VmInstanceVO` v ON p.uuid = v.uuid +SET p.requestCpu = COALESCE(p.requestCpu, v.cpuNum), p.requestMemory = COALESCE(p.requestMemory, v.memorySize) +WHERE p.requestCpu IS NULL OR p.requestMemory IS NULL; + diff --git a/sdk/src/main/java/org/zstack/sdk/PodInventory.java b/sdk/src/main/java/org/zstack/sdk/PodInventory.java index 1e7db6ae39f..8cc713a210f 100644 --- a/sdk/src/main/java/org/zstack/sdk/PodInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/PodInventory.java @@ -28,4 +28,20 @@ public java.lang.Long getClusterId() { return this.clusterId; } + public java.lang.Integer requestCpu; + public void setRequestCpu(java.lang.Integer requestCpu) { + this.requestCpu = requestCpu; + } + public java.lang.Integer getRequestCpu() { + return this.requestCpu; + } + + public java.lang.Long requestMemory; + public void setRequestMemory(java.lang.Long requestMemory) { + this.requestMemory = requestMemory; + } + public java.lang.Long getRequestMemory() { + return this.requestMemory; + } + } From 2697ef2195b950c6b61d6eab88a03f12a267b06b Mon Sep 17 00:00:00 2001 From: "yingzhe.hu" Date: Tue, 21 Apr 2026 15:38:53 +0800 Subject: [PATCH 08/56] [kvm]: unify TLS cert IP collection to avoid reconnect-triggered redeploy Resolves: ZSTAC-84446 Change-Id: I8af5e3887a5bad286b43dda00c874c9de999e1cb --- .../src/main/java/org/zstack/kvm/KVMHost.java | 55 ++---- .../java/org/zstack/kvm/KVMHostUtils.java | 119 ++++++++++++ .../org/zstack/test/kvm/KVMHostUtilsTest.java | 172 ++++++++++++++++++ .../CloudOperationsErrorCode.java | 30 +++ 4 files changed, 334 insertions(+), 42 deletions(-) create mode 100644 test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index 8696757bc92..5052ba7aa84 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -5727,39 +5727,21 @@ public boolean skip(Map data) { public void run(FlowTrigger trigger, Map data) { String managementIp = getSelf().getManagementIp(); - // 1. Get all IPs on the host via SSH SshShell sshShell = new SshShell(); sshShell.setHostname(managementIp); sshShell.setUsername(getSelf().getUsername()); sshShell.setPassword(getSelf().getPassword()); sshShell.setPort(getSelf().getPort()); - SshResult ipResult = sshShell.runCommand( - "ip -4 -o addr show scope global | sed -n \"s/.* inet \\([0-9.]\\+\\).*/\\1/p\""); - if (ipResult.isSshFailure() || ipResult.getReturnCode() != 0) { - logger.warn(String.format("Failed to get host IPs via SSH for TLS cert check on host[uuid:%s]: %s", - self.getUuid(), ipResult.getExitErrorMessage())); - trigger.next(); - return; - } - - // 2. Build IP list: managementIp + extra IPs (exclude managementIp and MN VIP) - List allIps = new ArrayList<>(); - allIps.add(managementIp); - String[] hostIps = ipResult.getStdout().trim().split("\n"); - for (String ip : hostIps) { - String trimmed = ip.trim(); - if (!trimmed.isEmpty() && !trimmed.equals(managementIp) - && !trimmed.equals(CoreGlobalProperty.MN_VIP) - && !trimmed.equals("127.0.0.1") - && !allIps.contains(trimmed)) { - allIps.add(trimmed); - } - } + // Use the same logic as zstack-utility host_plugin.fact() so MN's + // expectation matches what the host itself reports. + String certIpList = KVMHostUtils.collectHostIps( + sshShell, self.getUuid(), managementIp); + List allIps = new ArrayList<>(Arrays.asList(certIpList.split(","))); + // Save detected IPs so apply-ansible-playbook can union with EXTRA_IPS + // without running a second SSH. + data.put("TLS_DETECTED_IPS", certIpList); - String certIpList = String.join(",", allIps); - - // 3. Check existing cert SAN via SSH SshResult sanResult = sshShell.runCommand( "openssl x509 -in /etc/pki/libvirt/servercert.pem -noout -ext subjectAltName 2>/dev/null"); @@ -5783,7 +5765,6 @@ public void run(FlowTrigger trigger, Map data) { if (needDeploy) { data.put("NEED_DEPLOY_TLS_CERT", true); } - data.put("TLS_CERT_IPS", certIpList); trigger.next(); } @@ -5923,21 +5904,11 @@ public void run(final FlowTrigger trigger, Map data) { deployArguments.setSkipPackages(info.getSkipPackages()); deployArguments.setUpdatePackages(String.valueOf(CoreGlobalProperty.UPDATE_PKG_WHEN_CONNECT)); - // Build TLS cert IP list: prefer SSH-detected IPs from check-tls-certs flow - String tlsCertIpsFromData = (String) data.get("TLS_CERT_IPS"); - if (tlsCertIpsFromData != null) { - deployArguments.setTlsCertIps(tlsCertIpsFromData); - } else { - // Fallback: management IP + extra IPs from system tag - String managementIp = getSelf().getManagementIp(); - String extraIps = HostSystemTags.EXTRA_IPS.getTokenByResourceUuid( - self.getUuid(), HostSystemTags.EXTRA_IPS_TOKEN); - if (extraIps != null && !extraIps.isEmpty()) { - deployArguments.setTlsCertIps(managementIp + "," + extraIps); - } else { - deployArguments.setTlsCertIps(managementIp); - } - } + String managementIp = getSelf().getManagementIp(); + String detectedIps = (String) data.get("TLS_DETECTED_IPS"); + String tlsCertIps = KVMHostUtils.unionTlsCertIps( + self.getUuid(), managementIp, detectedIps); + deployArguments.setTlsCertIps(tlsCertIps); // Force ansible deploy when TLS cert needs update (detected by check-tls-certs flow) Boolean needDeployTlsCert = (Boolean) data.get("NEED_DEPLOY_TLS_CERT"); diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java index cf6d16e7560..01b42b4b663 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java @@ -1,6 +1,8 @@ package org.zstack.kvm; import org.apache.commons.codec.digest.DigestUtils; +import org.zstack.compute.host.HostSystemTags; +import org.zstack.core.CoreGlobalProperty; import org.zstack.core.db.Q; import org.zstack.header.network.l2.*; import org.zstack.header.tag.SystemTagVO; @@ -9,9 +11,12 @@ import org.zstack.utils.TagUtils; import org.zstack.utils.logging.CLogger; import org.zstack.utils.logging.CLoggerImpl; +import org.zstack.utils.ssh.SshResult; +import org.zstack.utils.ssh.SshShell; import java.util.Collections; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -21,6 +26,120 @@ public class KVMHostUtils { private static final CLogger logger = CLoggerImpl.getLogger(KVMHostUtils.class); + /** + * Collect host IPv4 addresses, mirroring zstack-utility host_plugin.fact() + * (only filter: ifname endswith "zs", drop 127.0.0.1 / MN VIP). + */ + public static String collectHostIps(SshShell sshShell, String hostUuid, String managementIp) { + if (sshShell == null) { + return managementIp; + } + // Run a quote-free command; parse on the MN side to avoid nested-quote + // mangling when SshShell wraps the command with single quotes. + SshResult r = sshShell.runCommand("ip -4 -o addr show"); + if (r.isSshFailure() || r.getReturnCode() != 0 + || r.getStdout() == null || r.getStdout().trim().isEmpty()) { + logger.warn(String.format( + "ssh-collect host IPs failed on host[uuid:%s], fallback to mgmtIp: %s", + hostUuid, r.getExitErrorMessage())); + return managementIp; + } + return buildIpList(managementIp, r.getStdout(), CoreGlobalProperty.MN_VIP); + } + + /** + * TLS cert IP list for ansible deploy: detectedIps ∪ EXTRA_IPS tag. + * detectedIps comes from the prior check-tls-certs flow (no second SSH). + * If detectedIps is null/empty, fall back to managementIp + EXTRA_IPS. + */ + public static String unionTlsCertIps(String hostUuid, String managementIp, String detectedIpsCsv) { + String extraIps = HostSystemTags.EXTRA_IPS.getTokenByResourceUuid( + hostUuid, HostSystemTags.EXTRA_IPS_TOKEN); + return unionIps(detectedIpsCsv, managementIp, extraIps, CoreGlobalProperty.MN_VIP); + } + + /** Pure function for unit tests: detectedIps ∪ extraIps, fall back to mgmtIp when detected empty. */ + public static String unionIps(String detectedIpsCsv, String managementIp, String extraIpsCsv, String mnVip) { + Set ips = new LinkedHashSet<>(); + if (detectedIpsCsv != null && !detectedIpsCsv.trim().isEmpty()) { + for (String ip : detectedIpsCsv.split(",")) { + String t = ip.trim(); + if (!t.isEmpty()) { + ips.add(t); + } + } + } else { + ips.add(managementIp); + } + + if (extraIpsCsv != null && !extraIpsCsv.isEmpty()) { + for (String ip : extraIpsCsv.split(",")) { + String t = ip.trim(); + if (!t.isEmpty()) { + ips.add(t); + } + } + } + + ips.remove("127.0.0.1"); + if (mnVip != null) { + ips.remove(mnVip); + } + return String.join(",", ips); + } + + /** + * Parse the raw output of "ip -4 -o addr show" and build the IP list, + * mirroring zstack-utility host_plugin.fact() (filter ifname endswith "zs", + * drop 127.0.0.1 / MN VIP). Each line looks like: + * "5: zsn0.2000 inet 12.1.251.206/16 brd ... scope global zsn0.2000\..." + * Pure function for unit tests. + */ + public static String buildIpList(String managementIp, String ipAddrOutput, String mnVip) { + Set ips = new LinkedHashSet<>(); + ips.add(managementIp); + + if (ipAddrOutput != null) { + for (String line : ipAddrOutput.trim().split("\n")) { + String[] parts = line.trim().split("\\s+"); + // expect at least: ":" "" "inet" "/" + if (parts.length < 4 || !"inet".equals(parts[2])) { + continue; + } + String iface = parts[1]; + if (iface.endsWith("zs")) { + continue; + } + String cidr = parts[3]; + int slash = cidr.indexOf('/'); + String ip = slash >= 0 ? cidr.substring(0, slash) : cidr; + if (!ip.isEmpty()) { + ips.add(ip); + } + } + } + + ips.remove("127.0.0.1"); + if (mnVip != null) { + ips.remove(mnVip); + } + return String.join(",", ips); + } + + public static String collectHostIps(String hostUuid, String managementIp, + String username, String password, int sshPort) { + return collectHostIps(newSsh(managementIp, username, password, sshPort), hostUuid, managementIp); + } + + private static SshShell newSsh(String host, String user, String pwd, int port) { + SshShell s = new SshShell(); + s.setHostname(host); + s.setUsername(user); + s.setPassword(pwd); + s.setPort(port); + return s; + } + /** * Get normalized bridge name for l2 network, which at most has 15 chars. * - if l2 network has L2_BRIDGE_NAME tag, then return it's value directly; diff --git a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java new file mode 100644 index 00000000000..2f70c327bc0 --- /dev/null +++ b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java @@ -0,0 +1,172 @@ +package org.zstack.test.kvm; + +import org.junit.Assert; +import org.junit.Test; +import org.zstack.kvm.KVMHostUtils; + +/** + * Unit tests for KVMHostUtils#buildIpList -- mirrors zstack-utility + * host_plugin.fact() so MN expectation matches what the host self-reports. + */ +public class KVMHostUtilsTest { + + @Test + public void mgmtIpOnlyWhenNoSshOutput() { + Assert.assertEquals("192.168.1.10", + KVMHostUtils.buildIpList("192.168.1.10", null, null)); + Assert.assertEquals("192.168.1.10", + KVMHostUtils.buildIpList("192.168.1.10", "", null)); + } + + @Test + public void filtersZsSuffixIface_consistentWithHostFact() { + String out = String.join("\n", + "1: br_zsn0 inet 172.24.250.175/16 scope global br_zsn0\\ valid_lft forever preferred_lft forever", + "2: vnic42_eth0zs inet 10.99.99.99/16 scope global vnic42_eth0zs\\ valid_lft forever", + "3: docker0 inet 172.17.0.1/16 scope global docker0\\ valid_lft forever", + "4: br_conn_all_ns inet 169.254.64.1/18 scope global br_conn_all_ns\\ valid_lft forever", + "5: eth1 inet 192.168.50.10/24 scope global eth1\\ valid_lft forever"); + String r = KVMHostUtils.buildIpList("172.24.250.175", out, null); + Assert.assertEquals("172.24.250.175,172.17.0.1,169.254.64.1,192.168.50.10", r); + } + + @Test + public void mnVipAndLoopbackRemoved() { + String out = String.join("\n", + "1: lo inet 127.0.0.1/8 scope host lo\\ valid_lft forever", + "2: eth0 inet 192.168.1.10/24 scope global eth0\\ valid_lft forever", + "3: eth1 inet 10.0.0.99/8 scope global eth1\\ valid_lft forever"); + Assert.assertEquals("192.168.1.10", + KVMHostUtils.buildIpList("192.168.1.10", out, "10.0.0.99")); + } + + @Test + public void mgmtIpAlwaysFirst() { + String out = String.join("\n", + "2: eth0 inet 10.0.0.5/24 scope global eth0\\ valid_lft forever", + "3: eth1 inet 192.168.1.10/24 scope global eth1\\ valid_lft forever"); + String r = KVMHostUtils.buildIpList("192.168.1.10", out, null); + Assert.assertTrue("mgmt ip must be first, got: " + r, r.startsWith("192.168.1.10")); + } + + @Test + public void duplicatedIpsDeduped() { + String out = String.join("\n", + "2: eth0 inet 192.168.1.10/24 scope global eth0\\ valid_lft forever", + "3: eth1 inet 192.168.1.10/24 scope global eth1\\ valid_lft forever", + "4: eth2 inet 10.0.0.5/24 scope global eth2\\ valid_lft forever"); + Assert.assertEquals("192.168.1.10,10.0.0.5", + KVMHostUtils.buildIpList("192.168.1.10", out, null)); + } + + @Test + public void handlesMalformedLines() { + String out = String.join("\n", + "garbage_only_one_field", + "2: eth0 inet 10.0.0.5/24 scope global eth0\\ valid_lft forever", + " ", + "3: eth1 inet6 fe80::1/64 scope link eth1\\ valid_lft forever"); + Assert.assertEquals("192.168.1.10,10.0.0.5", + KVMHostUtils.buildIpList("192.168.1.10", out, null)); + } + + /** + * ZSTAC-84446 regression: check and first-deploy must produce identical + * lists from the same SSH output, so cert-check after first deploy never + * triggers a force-redeploy (kvmagent restart -> PID change). + */ + @Test + public void zstac84446_checkAndFirstDeployUseSameSource() { + String out = String.join("\n", + "1: br_zsn0 inet 172.24.250.175/16 scope global br_zsn0\\ valid_lft forever", + "2: docker0 inet 172.17.0.1/16 scope global docker0\\ valid_lft forever", + "3: br_conn_all_ns inet 169.254.64.1/18 scope global br_conn_all_ns\\ valid_lft forever"); + String firstDeploy = KVMHostUtils.buildIpList("172.24.250.175", out, null); + String onCheck = KVMHostUtils.buildIpList("172.24.250.175", out, null); + Assert.assertEquals(firstDeploy, onCheck); + Assert.assertTrue(firstDeploy.contains("172.17.0.1")); + Assert.assertTrue(firstDeploy.contains("169.254.64.1")); + } + + /** + * Real-world output from `ip -4 -o addr show` on a KVM host (incl. \ continuation). + * Confirms the parser tolerates trailing fields and CIDR notation. + */ + @Test + public void parsesRealIpAddrOutput() { + String out = String.join("\n", + "1: lo inet 127.0.0.1/8 scope host lo\\ valid_lft forever preferred_lft forever", + "5: zsn0.2000 inet 12.1.251.206/16 brd 12.1.255.255 scope global zsn0.2000\\ valid_lft forever preferred_lft forever", + "6: br_zsn0 inet 172.24.251.206/16 scope global dynamic br_zsn0\\ valid_lft 404688sec preferred_lft 404688sec", + "53: br_conn_all_ns inet 169.254.64.1/18 scope global br_conn_all_ns\\ valid_lft forever preferred_lft forever"); + Assert.assertEquals( + "172.24.251.206,12.1.251.206,169.254.64.1", + KVMHostUtils.buildIpList("172.24.251.206", out, null)); + } + + // ----- unionIps coverage (no SystemTag dependency) ----- + + @Test + public void unionIps_detectedIsBaseAndExtraAppended() { + String r = KVMHostUtils.unionIps( + "172.24.250.175,172.17.0.1", + "172.24.250.175", + "10.0.0.7,10.0.0.8", + null); + Assert.assertEquals("172.24.250.175,172.17.0.1,10.0.0.7,10.0.0.8", r); + } + + @Test + public void unionIps_fallbackToMgmtWhenDetectedEmpty() { + Assert.assertEquals("192.168.1.10,10.0.0.7", + KVMHostUtils.unionIps(null, "192.168.1.10", "10.0.0.7", null)); + Assert.assertEquals("192.168.1.10,10.0.0.7", + KVMHostUtils.unionIps("", "192.168.1.10", "10.0.0.7", null)); + Assert.assertEquals("192.168.1.10,10.0.0.7", + KVMHostUtils.unionIps(" ", "192.168.1.10", "10.0.0.7", null)); + } + + @Test + public void unionIps_dropsLoopbackAndMnVip() { + String r = KVMHostUtils.unionIps( + "192.168.1.10,127.0.0.1,10.0.0.99", + "192.168.1.10", + "127.0.0.1,10.0.0.99,10.0.0.7", + "10.0.0.99"); + Assert.assertEquals("192.168.1.10,10.0.0.7", r); + } + + @Test + public void unionIps_detectedDeduplicatesExtra() { + String r = KVMHostUtils.unionIps( + "192.168.1.10,10.0.0.7", + "192.168.1.10", + "10.0.0.7,10.0.0.8", + null); + Assert.assertEquals("192.168.1.10,10.0.0.7,10.0.0.8", r); + } + + @Test + public void unionIps_noExtraTagYieldsDetectedOnly() { + String r = KVMHostUtils.unionIps( + "192.168.1.10,172.17.0.1", + "192.168.1.10", + null, + null); + Assert.assertEquals("192.168.1.10,172.17.0.1", r); + } + + /** + * ZSTAC-84446 root-cause coverage: deploy must include detectedIps so the + * subsequent cert-check (whose SAN now contains all detectedIps) matches. + */ + @Test + public void zstac84446_deployUnionContainsAllDetected() { + String detected = "172.24.250.175,172.17.0.1,169.254.64.1"; + String deployIps = KVMHostUtils.unionIps(detected, "172.24.250.175", "10.0.0.7", null); + for (String ip : detected.split(",")) { + Assert.assertTrue("deploy must include detected " + ip, deployIps.contains(ip)); + } + Assert.assertTrue("deploy must include extra", deployIps.contains("10.0.0.7")); + } +} diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 47e32c7cf90..720902d8b36 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -7734,6 +7734,18 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10092 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10092"; + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10093 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10093"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10094 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10094"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10095 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10095"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10096 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10096"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10097 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10097"; + + public static final String ORG_ZSTACK_BAREMETAL2_INSTANCE_10098 = "ORG_ZSTACK_BAREMETAL2_INSTANCE_10098"; + public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10000"; public static final String ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001 = "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_SECRETRESOURCEPOOL_10001"; @@ -14904,6 +14916,24 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10142 = "ORG_ZSTACK_AI_10142"; public static final String ORG_ZSTACK_AI_10143 = "ORG_ZSTACK_AI_10143"; + + public static final String ORG_ZSTACK_AI_10144 = "ORG_ZSTACK_AI_10144"; + + public static final String ORG_ZSTACK_AI_10145 = "ORG_ZSTACK_AI_10145"; + + public static final String ORG_ZSTACK_AI_10146 = "ORG_ZSTACK_AI_10146"; + + public static final String ORG_ZSTACK_AI_10147 = "ORG_ZSTACK_AI_10147"; + + public static final String ORG_ZSTACK_AI_10148 = "ORG_ZSTACK_AI_10148"; + + public static final String ORG_ZSTACK_AI_10149 = "ORG_ZSTACK_AI_10149"; + + public static final String ORG_ZSTACK_AI_10150 = "ORG_ZSTACK_AI_10150"; + + public static final String ORG_ZSTACK_AI_10157 = "ORG_ZSTACK_AI_10157"; + public static final String ORG_ZSTACK_AI_10158 = "ORG_ZSTACK_AI_10158"; + public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10001 = "ORG_ZSTACK_CORE_CLOUDBUS_10001"; From 16950d322485bf7dd626ed080914ff704132f002 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 27 Apr 2026 13:32:00 +0800 Subject: [PATCH 09/56] [sdk]: sync OSPF neighbor adjacency fields Resolves: ZSTAC-84751 Change-Id: I84751b1c2d3e4f5a678901234567890abcdef1235 --- .../main/java/org/zstack/sdk/Neighbor.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/sdk/src/main/java/org/zstack/sdk/Neighbor.java b/sdk/src/main/java/org/zstack/sdk/Neighbor.java index 58efdd0bb7c..0fe96fb84e9 100644 --- a/sdk/src/main/java/org/zstack/sdk/Neighbor.java +++ b/sdk/src/main/java/org/zstack/sdk/Neighbor.java @@ -4,6 +4,14 @@ public class Neighbor { + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + public java.lang.String id; public void setId(java.lang.String id) { this.id = id; @@ -12,6 +20,14 @@ public java.lang.String getId() { return this.id; } + public java.lang.String neighborRouterId; + public void setNeighborRouterId(java.lang.String neighborRouterId) { + this.neighborRouterId = neighborRouterId; + } + public java.lang.String getNeighborRouterId() { + return this.neighborRouterId; + } + public java.lang.String priority; public void setPriority(java.lang.String priority) { this.priority = priority; @@ -52,4 +68,12 @@ public java.lang.String getDevice() { return this.device; } + public java.lang.String localInterface; + public void setLocalInterface(java.lang.String localInterface) { + this.localInterface = localInterface; + } + public java.lang.String getLocalInterface() { + return this.localInterface; + } + } From 51086aef78ab4ab6be99190969dfe30d539778f8 Mon Sep 17 00:00:00 2001 From: "zhongqi.liu" Date: Fri, 24 Apr 2026 02:16:58 -0500 Subject: [PATCH 10/56] [conf]: fix ai error-code 10138-10144 collisions and add 10159-10165 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: ZSTAC-84677 Related: ZSTAC-80103 Two overlapping problems are addressed in the ai module's global error codes; both root from the same author reusing codes that were already allocated for other semantics. (1) ZSTAC-84677: AIModelManagerImpl model-service startup-timeout path passed the string literal "ORG_ZSTACK_AI_10144" to operr(). That code is owned by VmModelMountManager (mount path conflict, 5 %s template); the timeout only supplies 3 formatArgs, so the UI rendered a garbled "挂载失败:路径..." message for a health-check timeout. (2) ZSTAC-80103: error codes 10138-10143 had two conflicting owners: - AIModelManagerApiInterceptor: CPU / memory request validation (this is the canonical semantics per the AI error-code spec) - VmModelMountManager: VM/model not-found, VM-state checks, cross-account mount, ModelCenter not-found The mount feature wrote zh_CN i18n templates with mount semantics, so when the CPU/memory validation actually fired, users saw the unrelated mount text with %s slots filled by CPU/memory args (e.g. "虚拟机「1」(UUID: 4) 必须处于运行状态才能挂载模型,当前状态: 4" for a CPU-below-min error). This commit (zstack side): - Add 7 new error-code constants in CloudOperationsErrorCode: 10159 (model service startup timeout) 10160-10165 (relocated mount-feature errors that previously squatted on 10138-10143) - Rewrite globalErrorCodeMapping entries for 10138-10143 to the canonical CPU/memory validation semantics - Add localized templates for 10159-10165 across all 10 locales (zh_CN, en_US, zh_TW, ja-JP, ko-KR, de-DE, fr-FR, ru-RU, id-ID, th-TH) so non-Chinese users see localized messages The companion premium MR switches: - AIModelManagerImpl startup-timeout call site to 10159 - VmModelMountManager 6 call sites from 10138-10143 to 10160-10165 Change-Id: I076f8da0b935a47cd4956e039e1e0b05206d085e --- .../global-error-de-DE.json | 15 ++++++++++++- .../global-error-en_US.json | 15 ++++++++++++- .../global-error-fr-FR.json | 15 ++++++++++++- .../global-error-id-ID.json | 15 ++++++++++++- .../global-error-ja-JP.json | 15 ++++++++++++- .../global-error-ko-KR.json | 15 ++++++++++++- .../global-error-ru-RU.json | 15 ++++++++++++- .../global-error-th-TH.json | 15 ++++++++++++- .../global-error-zh_CN.json | 21 ++++++++++++------- .../global-error-zh_TW.json | 15 ++++++++++++- .../CloudOperationsErrorCode.java | 7 +++++++ 11 files changed, 147 insertions(+), 16 deletions(-) diff --git a/conf/i18n/globalErrorCodeMapping/global-error-de-DE.json b/conf/i18n/globalErrorCodeMapping/global-error-de-DE.json index 1e24c52ea11..3aeec70b44c 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-de-DE.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-de-DE.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_SDNCONTROLLER_10025": "SDN-Controller [UUID:%s] nicht gefunden.", "ORG_ZSTACK_ZBOX_10002": "", "ORG_ZSTACK_BILLING_10020": "Das Konto[uuid=%s] hat eine Preisliste angehängt", - "ORG_ZSTACK_BAREMETAL2_GATEWAY_10046": "Fehler beim Zerstören des Bereitstellungsnetzwerks im Gateway[uuid:%s], weil %s" + "ORG_ZSTACK_BAREMETAL2_GATEWAY_10046": "Fehler beim Zerstören des Bereitstellungsnetzwerks im Gateway[uuid:%s], weil %s", + "ORG_ZSTACK_AI_10159": "Modelldienst-Instanz[UUID: %s] konnte nicht innerhalb von %s Sekunden gestartet werden. Grund: %s", + "ORG_ZSTACK_AI_10138": "Angeforderte CPU-Anzahl[%s] überschreitet das CPU-Limit[%s]", + "ORG_ZSTACK_AI_10139": "Angeforderte Speichergröße[%s] überschreitet das Speicherlimit[%s]", + "ORG_ZSTACK_AI_10140": "Angeforderte CPU-Anzahl[%s] muss >= max(cpuNum*20%%, %s) sein; aktuelles Minimum: %s", + "ORG_ZSTACK_AI_10141": "Angeforderte Speichergröße[%s] muss >= max(memorySize*20%%, %s) sein; aktuelles Minimum: %s", + "ORG_ZSTACK_AI_10142": "cpuNum muss positiv sein", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize gelten nur für Container-Modelldienste", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s] nicht gefunden", + "ORG_ZSTACK_AI_10161": "Modell[uuid:%s] nicht gefunden", + "ORG_ZSTACK_AI_10162": "VM[name:%s, uuid:%s] muss zum Mounten/Unmounten des Modells laufen. Aktueller Zustand: %s", + "ORG_ZSTACK_AI_10163": "VM[name:%s, uuid:%s] läuft auf keinem Host", + "ORG_ZSTACK_AI_10164": "Modell[name:%s, uuid:%s] ist nicht für das Konto der VM freigegeben (oder öffentlich). Zum Mounten muss das Modell denselben Freigaberegeln wie die VM unterliegen.", + "ORG_ZSTACK_AI_10165": "ModelCenter[uuid:%s] wurde für das Modell[name:%s, uuid:%s] nicht gefunden" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-en_US.json b/conf/i18n/globalErrorCodeMapping/global-error-en_US.json index af8d1b29ac6..974a468b5db 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-en_US.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-en_US.json @@ -4720,5 +4720,18 @@ "ORG_ZSTACK_VPCFIREWALL_10035": "could not add firewall rule[%d] because of a %s error", "ORG_ZSTACK_DGPU_10010": "Available License not found, please apply addon license for product dGPU.", "ORG_ZSTACK_DGPU_10011": "Addon license for product dGPU has expired, please renew it.", - "ORG_ZSTACK_DGPU_10012": "Insufficient dGPU GPU number licensed. Your license permits %d GPU, there are %d GPU used, shared: %d, need: %d." + "ORG_ZSTACK_DGPU_10012": "Insufficient dGPU GPU number licensed. Your license permits %d GPU, there are %d GPU used, shared: %d, need: %d.", + "ORG_ZSTACK_AI_10159": "Model service instance[UUID: %s] failed to start within %s seconds. Reason: %s", + "ORG_ZSTACK_AI_10138": "Requested CPU count[%s] exceeds the CPU limit[%s]", + "ORG_ZSTACK_AI_10139": "Requested memory size[%s] exceeds the memory limit[%s]", + "ORG_ZSTACK_AI_10140": "Requested CPU count[%s] must be >= max(cpuNum*20%%, %s); current minimum is %s", + "ORG_ZSTACK_AI_10141": "Requested memory size[%s] must be >= max(memorySize*20%%, %s); current minimum is %s", + "ORG_ZSTACK_AI_10142": "cpuNum must be positive", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize only apply to Container model service", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s] not found", + "ORG_ZSTACK_AI_10161": "Model[uuid:%s] not found", + "ORG_ZSTACK_AI_10162": "VM[name:%s, uuid:%s] must be running to mount/unmount model. Current state: %s", + "ORG_ZSTACK_AI_10163": "VM[name:%s, uuid:%s] is not running on any host", + "ORG_ZSTACK_AI_10164": "Model[name:%s, uuid:%s] is not shared to the account that owns this VM (or to public). Mount requires the model to be accessible under the same sharing rules as the VM.", + "ORG_ZSTACK_AI_10165": "ModelCenter[uuid:%s] not found for Model[name:%s, uuid:%s]" } diff --git a/conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json b/conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json index 8fb00fa5776..b1ac5f6ba2c 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Arguments inconnus détectés. Veuillez vous assurer que tous les paramètres de ligne de commande sont valides et consulter la documentation pour obtenir la liste des arguments acceptés.", "ORG_ZSTACK_VPCFIREWALL_10034": "impossible d'ajouter la règle de pare-feu[%d] car seul le protocole TCP prend en charge les drapeaux TCP dans cet environnement", "ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "impossible d'arrêter le serveur DHCP sur l'instance de routeur virtuel [uuid:%s] car %s", - "ORG_ZSTACK_VPCFIREWALL_10035": "impossible d'ajouter la règle de pare-feu[%d] en raison d'une erreur %s" + "ORG_ZSTACK_VPCFIREWALL_10035": "impossible d'ajouter la règle de pare-feu[%d] en raison d'une erreur %s", + "ORG_ZSTACK_AI_10159": "L'instance du service de modèle[UUID : %s] n'a pas démarré dans le délai de %s secondes. Raison : %s", + "ORG_ZSTACK_AI_10138": "Le nombre de CPU demandé[%s] dépasse la limite CPU[%s]", + "ORG_ZSTACK_AI_10139": "La taille de mémoire demandée[%s] dépasse la limite de mémoire[%s]", + "ORG_ZSTACK_AI_10140": "Le nombre de CPU demandé[%s] doit être >= max(cpuNum*20%%, %s) ; minimum actuel : %s", + "ORG_ZSTACK_AI_10141": "La taille de mémoire demandée[%s] doit être >= max(memorySize*20%%, %s) ; minimum actuel : %s", + "ORG_ZSTACK_AI_10142": "cpuNum doit être positif", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize ne s'appliquent qu'aux services de modèle de type Container", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s] introuvable", + "ORG_ZSTACK_AI_10161": "Modèle[uuid:%s] introuvable", + "ORG_ZSTACK_AI_10162": "La VM[nom:%s, uuid:%s] doit être en cours d'exécution pour monter/démonter le modèle. État actuel : %s", + "ORG_ZSTACK_AI_10163": "La VM[nom:%s, uuid:%s] ne s'exécute sur aucun hôte", + "ORG_ZSTACK_AI_10164": "Le modèle[nom:%s, uuid:%s] n'est pas partagé avec le compte propriétaire de cette VM (ni public). Le montage exige que le modèle soit accessible selon les mêmes règles de partage.", + "ORG_ZSTACK_AI_10165": "ModelCenter[uuid:%s] introuvable pour le modèle[nom:%s, uuid:%s]" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-id-ID.json b/conf/i18n/globalErrorCodeMapping/global-error-id-ID.json index 7e41658f314..a1daa8a6768 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-id-ID.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-id-ID.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Terdeteksi argumen yang tidak diketahui. Harap pastikan semua parameter baris perintah valid dan lihat dokumentasi untuk daftar argumen yang diterima.", "ORG_ZSTACK_VPCFIREWALL_10034": "tidak dapat menambahkan aturan firewall[%d] karena hanya protokol TCP yang mendukung flag TCP di lingkungan ini", "ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "tidak dapat menghentikan server DHCP pada instance router virtual [uuid:%s] karena %s", - "ORG_ZSTACK_VPCFIREWALL_10035": "tidak dapat menambahkan aturan firewall[%d] karena error %s" + "ORG_ZSTACK_VPCFIREWALL_10035": "tidak dapat menambahkan aturan firewall[%d] karena error %s", + "ORG_ZSTACK_AI_10159": "Instansi layanan model[UUID: %s] gagal dimulai dalam %s detik. Alasan: %s", + "ORG_ZSTACK_AI_10138": "Jumlah CPU yang diminta[%s] melebihi batas CPU[%s]", + "ORG_ZSTACK_AI_10139": "Ukuran memori yang diminta[%s] melebihi batas memori[%s]", + "ORG_ZSTACK_AI_10140": "Jumlah CPU yang diminta[%s] harus >= max(cpuNum*20%%, %s); minimum saat ini: %s", + "ORG_ZSTACK_AI_10141": "Ukuran memori yang diminta[%s] harus >= max(memorySize*20%%, %s); minimum saat ini: %s", + "ORG_ZSTACK_AI_10142": "cpuNum harus bernilai positif", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize hanya berlaku untuk layanan model bertipe Container", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s] tidak ditemukan", + "ORG_ZSTACK_AI_10161": "Model[uuid:%s] tidak ditemukan", + "ORG_ZSTACK_AI_10162": "VM[nama:%s, uuid:%s] harus dalam status running untuk mount/unmount model. Status saat ini: %s", + "ORG_ZSTACK_AI_10163": "VM[nama:%s, uuid:%s] tidak berjalan pada host manapun", + "ORG_ZSTACK_AI_10164": "Model[nama:%s, uuid:%s] tidak dibagikan ke akun pemilik VM ini (atau ke publik). Mount membutuhkan model yang dapat diakses dengan aturan berbagi yang sama dengan VM.", + "ORG_ZSTACK_AI_10165": "ModelCenter[uuid:%s] tidak ditemukan untuk Model[nama:%s, uuid:%s]" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-ja-JP.json b/conf/i18n/globalErrorCodeMapping/global-error-ja-JP.json index bf73aa503ff..a1ede2a0151 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-ja-JP.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-ja-JP.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_PCIDEVICE_10063": "PCIデバイス[%s]がすべて使用可能ではありません", "ORG_ZSTACK_PCIDEVICE_10058": "ホスト [%s] のメンテナンスモードへの移行に失敗しました。PCIデバイスの存在により、VM [%s] は自動移行できません。", "ORG_ZSTACK_PCIDEVICE_10052": "VM[%s]の他のPCIデバイスを取り外してから、再試行してください", - "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_THIRDPARTY_INFOSEC_10024": "大規模ファイルのHMAC暗号化に失敗しました、コード: %s、詳細: %s" + "ORG_ZSTACK_CRYPTO_SECURITYMACHINE_THIRDPARTY_INFOSEC_10024": "大規模ファイルのHMAC暗号化に失敗しました、コード: %s、詳細: %s", + "ORG_ZSTACK_AI_10159": "モデルサービスインスタンス[UUID: %s] が %s 秒以内に起動できませんでした。理由: %s", + "ORG_ZSTACK_AI_10138": "要求 CPU 数[%s] が CPU 上限[%s] を超えています", + "ORG_ZSTACK_AI_10139": "要求メモリサイズ[%s] がメモリ上限[%s] を超えています", + "ORG_ZSTACK_AI_10140": "要求 CPU 数[%s] は最小保証値以上である必要があります。設定最小値: %s、実効最小値: %s(max(cpuNum × 20%%, 設定最小値))", + "ORG_ZSTACK_AI_10141": "要求メモリサイズ[%s] は最小保証値以上である必要があります。設定最小値: %s、実効最小値: %s(max(memorySize × 20%%, 設定最小値))", + "ORG_ZSTACK_AI_10142": "cpuNum は正の数である必要があります", + "ORG_ZSTACK_AI_10143": "requestCpuNum / requestMemorySize は Container 型の推論サービスにのみ適用されます", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s] が見つかりません", + "ORG_ZSTACK_AI_10161": "モデル[uuid:%s] が見つかりません", + "ORG_ZSTACK_AI_10162": "VM「%s」(UUID: %s) はモデルのマウント/アンマウントには Running 状態である必要があります。現在の状態: %s", + "ORG_ZSTACK_AI_10163": "VM「%s」(UUID: %s) はどのホストでも実行されていません", + "ORG_ZSTACK_AI_10164": "モデル「%s」(UUID: %s) は VM の所属アカウントに共有されていない(または公開されていない)ため、マウントできません。", + "ORG_ZSTACK_AI_10165": "モデルセンター (UUID: %s) が見つかりません(関連モデル: 「%s」UUID: %s)" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-ko-KR.json b/conf/i18n/globalErrorCodeMapping/global-error-ko-KR.json index d9323871208..7ad24c14f1c 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-ko-KR.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-ko-KR.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_COMPUTE_VM_10129": "메시지 %s에서 vmUuid를 검색할 수 없습니다", "ORG_ZSTACK_COMPUTE_VM_10127": "실행 중인 VM[uuid:%s]의 CPU를 줄일 수 없습니다", "ORG_ZSTACK_IAM2_ATTRIBUTE_PROJECT_10007": "잘못된 날짜 또는 시간[%s]으로, 현재 타임스탬프[%s]보다 이전일 수 없습니다.", - "ORG_ZSTACK_NETWORK_SERVICE_LB_10077": "세션 쿠키 이름 [%s]이(가) 잘못되었습니다. [%d]자 미만이어야 합니다" + "ORG_ZSTACK_NETWORK_SERVICE_LB_10077": "세션 쿠키 이름 [%s]이(가) 잘못되었습니다. [%d]자 미만이어야 합니다", + "ORG_ZSTACK_AI_10159": "모델 서비스 인스턴스[UUID: %s]가 %s초 내에 시작되지 못했습니다. 원인: %s", + "ORG_ZSTACK_AI_10138": "요청한 CPU 수[%s]가 CPU 한계[%s]를 초과했습니다", + "ORG_ZSTACK_AI_10139": "요청한 메모리 크기[%s]가 메모리 한계[%s]를 초과했습니다", + "ORG_ZSTACK_AI_10140": "요청한 CPU 수[%s]는 최소 보장값 이상이어야 합니다. 설정 최소값: %s, 실제 최소값: %s (max(cpuNum × 20%%, 설정 최소값))", + "ORG_ZSTACK_AI_10141": "요청한 메모리 크기[%s]는 최소 보장값 이상이어야 합니다. 설정 최소값: %s, 실제 최소값: %s (max(memorySize × 20%%, 설정 최소값))", + "ORG_ZSTACK_AI_10142": "cpuNum은 양수여야 합니다", + "ORG_ZSTACK_AI_10143": "requestCpuNum / requestMemorySize는 Container 유형의 추론 서비스에만 적용됩니다", + "ORG_ZSTACK_AI_10160": "VM[uuid:%s]을(를) 찾을 수 없습니다", + "ORG_ZSTACK_AI_10161": "모델[uuid:%s]을(를) 찾을 수 없습니다", + "ORG_ZSTACK_AI_10162": "VM「%s」(UUID: %s)는 모델을 마운트/언마운트하려면 실행 중 상태여야 합니다. 현재 상태: %s", + "ORG_ZSTACK_AI_10163": "VM「%s」(UUID: %s)는 어떤 호스트에서도 실행되고 있지 않습니다", + "ORG_ZSTACK_AI_10164": "모델「%s」(UUID: %s)이(가) 이 VM이 속한 계정에 공유되어 있지 않습니다(또는 공개되지 않음). 마운트하려면 동일한 공유 규칙을 따르세요.", + "ORG_ZSTACK_AI_10165": "모델 센터 (UUID: %s)를 찾을 수 없습니다 (관련 모델: 「%s」UUID: %s)" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-ru-RU.json b/conf/i18n/globalErrorCodeMapping/global-error-ru-RU.json index 55bde5ee0c5..7a9891325cf 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-ru-RU.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-ru-RU.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Обнаружены неизвестные аргументы. Убедитесь, что все параметры командной строки действительны, и обратитесь к документации для получения списка допустимых аргументов.", "ORG_ZSTACK_VPCFIREWALL_10034": "не удалось добавить правило брандмауэра[%d], так как только протокол TCP поддерживает TCP-флаги в этой среде", "ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "не удалось остановить DHCP-сервер на экземпляре виртуального маршрутизатора [uuid:%s], поскольку %s", - "ORG_ZSTACK_VPCFIREWALL_10035": "не удалось добавить правило брандмауэра[%d] из-за ошибки %s" + "ORG_ZSTACK_VPCFIREWALL_10035": "не удалось добавить правило брандмауэра[%d] из-за ошибки %s", + "ORG_ZSTACK_AI_10159": "Экземпляр службы модели[UUID: %s] не запустился за %s секунд. Причина: %s", + "ORG_ZSTACK_AI_10138": "Запрошенное число CPU[%s] превышает лимит CPU[%s]", + "ORG_ZSTACK_AI_10139": "Запрошенный размер памяти[%s] превышает лимит памяти[%s]", + "ORG_ZSTACK_AI_10140": "Запрошенное число CPU[%s] должно быть >= max(cpuNum*20%%, %s); текущий минимум: %s", + "ORG_ZSTACK_AI_10141": "Запрошенный размер памяти[%s] должен быть >= max(memorySize*20%%, %s); текущий минимум: %s", + "ORG_ZSTACK_AI_10142": "cpuNum должен быть положительным", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize применяются только к службам моделей типа Container", + "ORG_ZSTACK_AI_10160": "ВМ[uuid:%s] не найдена", + "ORG_ZSTACK_AI_10161": "Модель[uuid:%s] не найдена", + "ORG_ZSTACK_AI_10162": "ВМ[имя:%s, uuid:%s] должна быть запущена для монтирования/размонтирования модели. Текущее состояние: %s", + "ORG_ZSTACK_AI_10163": "ВМ[имя:%s, uuid:%s] не запущена ни на одном хосте", + "ORG_ZSTACK_AI_10164": "Модель[имя:%s, uuid:%s] не предоставлена аккаунту-владельцу этой ВМ (и не является публичной). Для монтирования модель должна быть доступна по тем же правилам, что и ВМ.", + "ORG_ZSTACK_AI_10165": "ModelCenter[uuid:%s] не найден для модели[имя:%s, uuid:%s]" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-th-TH.json b/conf/i18n/globalErrorCodeMapping/global-error-th-TH.json index 3118556b6d7..3d8a70d36ad 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-th-TH.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-th-TH.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_ZWATCH_FUNCTION_10013": "ตรวจพบอาร์กิวเมนต์ที่ไม่รู้จัก โปรดตรวจสอบว่าพารามิเตอร์บรรทัดคำสั่งทั้งหมดถูกต้อง และอ้างอิงเอกสารสำหรับรายการอาร์กิวเมนต์ที่รองรับ", "ORG_ZSTACK_VPCFIREWALL_10034": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากมีเพียงโปรโตคอล TCP ที่รองรับ TCP flags ในสภาพแวดล้อมนี้", "ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "ไม่สามารถหยุดเซิร์ฟเวอร์ DHCP บนอินสแตนซ์เราเตอร์เสมือน [uuid:%s] เนื่องจาก %s", - "ORG_ZSTACK_VPCFIREWALL_10035": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากเกิดข้อผิดพลาด %s" + "ORG_ZSTACK_VPCFIREWALL_10035": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากเกิดข้อผิดพลาด %s", + "ORG_ZSTACK_AI_10159": "อินสแตนซ์บริการโมเดล[UUID: %s] เริ่มต้นไม่สำเร็จภายใน %s วินาที สาเหตุ: %s", + "ORG_ZSTACK_AI_10138": "จำนวน CPU ที่ขอ[%s] เกินขีดจำกัด CPU[%s]", + "ORG_ZSTACK_AI_10139": "ขนาดหน่วยความจำที่ขอ[%s] เกินขีดจำกัดหน่วยความจำ[%s]", + "ORG_ZSTACK_AI_10140": "จำนวน CPU ที่ขอ[%s] ต้อง >= max(cpuNum*20%%, %s) ปัจจุบันขั้นต่ำคือ %s", + "ORG_ZSTACK_AI_10141": "ขนาดหน่วยความจำที่ขอ[%s] ต้อง >= max(memorySize*20%%, %s) ปัจจุบันขั้นต่ำคือ %s", + "ORG_ZSTACK_AI_10142": "cpuNum ต้องเป็นจำนวนบวก", + "ORG_ZSTACK_AI_10143": "requestCpuNum/requestMemorySize ใช้ได้เฉพาะกับบริการโมเดลแบบ Container เท่านั้น", + "ORG_ZSTACK_AI_10160": "ไม่พบ VM[uuid:%s]", + "ORG_ZSTACK_AI_10161": "ไม่พบโมเดล[uuid:%s]", + "ORG_ZSTACK_AI_10162": "VM「%s」(UUID: %s) ต้องอยู่ในสถานะ Running เพื่อ mount/unmount โมเดล สถานะปัจจุบัน: %s", + "ORG_ZSTACK_AI_10163": "VM「%s」(UUID: %s) ไม่ได้ทำงานอยู่บนโฮสต์ใด ๆ", + "ORG_ZSTACK_AI_10164": "โมเดล「%s」(UUID: %s) ไม่ได้แชร์ให้บัญชีของ VM นี้ (หรือสาธารณะ) การ mount ต้องเข้าถึงได้ตามกฎการแชร์เดียวกับ VM", + "ORG_ZSTACK_AI_10165": "ไม่พบ ModelCenter[uuid:%s] สำหรับโมเดล[name:%s, uuid:%s]" } \ No newline at end of file diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json index 826e57aa36c..504fb27c121 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json @@ -4721,17 +4721,24 @@ "ORG_ZSTACK_DGPU_10010": "未找到可用的 dGPU AddOn License,请为 dGPU 产品申请并上传对应授权。", "ORG_ZSTACK_DGPU_10011": "dGPU 产品的 AddOn License 已过期,请及时续期。", "ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。", - "ORG_ZSTACK_AI_10138": "虚拟机[uuid:%s]未找到", - "ORG_ZSTACK_AI_10139": "模型[uuid:%s]未找到", - "ORG_ZSTACK_AI_10140": "虚拟机「%s」(UUID: %s) 必须处于运行状态才能挂载模型,当前状态: %s", - "ORG_ZSTACK_AI_10141": "虚拟机「%s」(UUID: %s) 未运行在任何主机上", - "ORG_ZSTACK_AI_10142": "模型「%s」(账户: %s) 与虚拟机「%s」(账户: %s) 属于不同账户,无法挂载。\n请确保模型和虚拟机属于同一账户。", - "ORG_ZSTACK_AI_10143": "模型「%s」(UUID: %s) 关联的模型中心(UUID: %s) 未找到。\n请检查模型中心是否已被删除。", + "ORG_ZSTACK_AI_10138": "请求 CPU 数量[%s]超过 CPU 上限[%s]", + "ORG_ZSTACK_AI_10139": "请求内存大小[%s]超过内存上限[%s]", + "ORG_ZSTACK_AI_10140": "请求 CPU 数量[%s] 不能低于最小保证值,配置最小值: %s,实际最小值: %s(max(cpuNum × 20%%, 配置最小值))", + "ORG_ZSTACK_AI_10141": "请求内存大小[%s] 不能低于最小保证值,配置最小值: %s,实际最小值: %s(max(memorySize × 20%%, 配置最小值))", + "ORG_ZSTACK_AI_10142": "cpuNum 必须为正数", + "ORG_ZSTACK_AI_10143": "requestCpuNum / requestMemorySize 仅适用于容器类型的推理服务", "ORG_ZSTACK_AI_10144": "挂载失败:路径 %s 已被该虚拟机上的另一个挂载占用。\n冲突挂载模型:%s\n冲突挂载UUID:%s\n所属虚拟机:%s\n所属虚拟机UUID:%s\n请先卸载该路径上的已有挂载,或使用其他挂载路径。", "ORG_ZSTACK_AI_10145": "挂载路径[%s]不允许,不能挂载到系统目录", "ORG_ZSTACK_AI_10146": "模型安装路径[%s]无效,预期格式: file:///root/bentoml/models/", "ORG_ZSTACK_AI_10147": "挂载记录[uuid:%s]未找到", "ORG_ZSTACK_AI_10148": "挂载记录「%s」(UUID: %s) 未处于已挂载状态,当前状态: %s", "ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s", - "ORG_ZSTACK_AI_10150": "模型「%s」(UUID: %s) 已挂载到虚拟机「%s」(UUID: %s),路径: %s。\n每个模型在每个虚拟机上只能挂载一次。" + "ORG_ZSTACK_AI_10150": "模型「%s」(UUID: %s) 已挂载到虚拟机「%s」(UUID: %s),路径: %s。\n每个模型在每个虚拟机上只能挂载一次。", + "ORG_ZSTACK_AI_10159": "推理服务实例(UUID: %s)启动超时(%s 秒),原因: %s", + "ORG_ZSTACK_AI_10160": "虚拟机[uuid:%s]未找到", + "ORG_ZSTACK_AI_10161": "模型[uuid:%s]未找到", + "ORG_ZSTACK_AI_10162": "虚拟机「%s」(UUID: %s) 必须处于运行状态才能挂载/卸载模型,当前状态: %s", + "ORG_ZSTACK_AI_10163": "虚拟机「%s」(UUID: %s) 未运行在任何主机上", + "ORG_ZSTACK_AI_10164": "模型「%s」(UUID: %s) 与该虚拟机所属账户的共享规则不匹配,无法挂载。\n请确认模型已共享给该账户或设为公开。", + "ORG_ZSTACK_AI_10165": "模型中心 (UUID: %s) 未找到(关联模型: 「%s」UUID: %s)。\n请检查模型中心是否已被删除。" } diff --git a/conf/i18n/globalErrorCodeMapping/global-error-zh_TW.json b/conf/i18n/globalErrorCodeMapping/global-error-zh_TW.json index b696d46d059..e4519a55611 100644 --- a/conf/i18n/globalErrorCodeMapping/global-error-zh_TW.json +++ b/conf/i18n/globalErrorCodeMapping/global-error-zh_TW.json @@ -4716,5 +4716,18 @@ "ORG_ZSTACK_ZWATCH_FUNCTION_10013": "未知參數", "ORG_ZSTACK_VPCFIREWALL_10034": "無法添加防火墙規则[%d],因为只有TCP协议可以使用TCP標誌", "ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "無法停止虚拟路由器VM[uuid:%s]上的DHCP服務器,因为%s", - "ORG_ZSTACK_VPCFIREWALL_10035": "無法添加防火墙規则[%d]因为%s" + "ORG_ZSTACK_VPCFIREWALL_10035": "無法添加防火墙規则[%d]因为%s", + "ORG_ZSTACK_AI_10159": "推理服務實例(UUID: %s)啟動逾時(%s 秒),原因: %s", + "ORG_ZSTACK_AI_10138": "請求 CPU 數量[%s]超過 CPU 上限[%s]", + "ORG_ZSTACK_AI_10139": "請求記憶體大小[%s]超過記憶體上限[%s]", + "ORG_ZSTACK_AI_10140": "請求 CPU 數量[%s] 不能低於最小保證值,配置最小值: %s,實際最小值: %s(max(cpuNum × 20%%, 配置最小值))", + "ORG_ZSTACK_AI_10141": "請求記憶體大小[%s] 不能低於最小保證值,配置最小值: %s,實際最小值: %s(max(memorySize × 20%%, 配置最小值))", + "ORG_ZSTACK_AI_10142": "cpuNum 必須為正數", + "ORG_ZSTACK_AI_10143": "requestCpuNum / requestMemorySize 僅適用於容器類型的推理服務", + "ORG_ZSTACK_AI_10160": "虛擬機[uuid:%s]未找到", + "ORG_ZSTACK_AI_10161": "模型[uuid:%s]未找到", + "ORG_ZSTACK_AI_10162": "虛擬機「%s」(UUID: %s) 必須處於運行狀態才能掛載/卸載模型,當前狀態: %s", + "ORG_ZSTACK_AI_10163": "虛擬機「%s」(UUID: %s) 未運行在任何主機上", + "ORG_ZSTACK_AI_10164": "模型「%s」(UUID: %s) 與該虛擬機所屬帳戶的共享規則不匹配,無法掛載。\n請確認模型已共享給該帳戶或設為公開。", + "ORG_ZSTACK_AI_10165": "模型中心 (UUID: %s) 未找到(關聯模型: 「%s」UUID: %s)。\n請檢查模型中心是否已被刪除。" } \ No newline at end of file diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 720902d8b36..0956c89edad 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -14933,6 +14933,13 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10157 = "ORG_ZSTACK_AI_10157"; public static final String ORG_ZSTACK_AI_10158 = "ORG_ZSTACK_AI_10158"; + public static final String ORG_ZSTACK_AI_10159 = "ORG_ZSTACK_AI_10159"; + public static final String ORG_ZSTACK_AI_10160 = "ORG_ZSTACK_AI_10160"; + public static final String ORG_ZSTACK_AI_10161 = "ORG_ZSTACK_AI_10161"; + public static final String ORG_ZSTACK_AI_10162 = "ORG_ZSTACK_AI_10162"; + public static final String ORG_ZSTACK_AI_10163 = "ORG_ZSTACK_AI_10163"; + public static final String ORG_ZSTACK_AI_10164 = "ORG_ZSTACK_AI_10164"; + public static final String ORG_ZSTACK_AI_10165 = "ORG_ZSTACK_AI_10165"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; From ad8a4c51107b47225e4562b6dc805fdbb207d44d Mon Sep 17 00:00:00 2001 From: "yingzhe.hu" Date: Mon, 27 Apr 2026 14:51:39 +0800 Subject: [PATCH 11/56] [kvm]: decouple TLS cert detection from libvirtd restart toggle Resolves: ZSTAC-84446 Change-Id: I9bed31c0cefddd6ed11f59cd13e36eb1c2abc029 --- .../src/main/java/org/zstack/kvm/KVMHost.java | 99 +++++++++++-------- .../java/org/zstack/kvm/KVMHostUtils.java | 15 +++ .../org/zstack/test/kvm/KVMHostUtilsTest.java | 29 ++++++ 3 files changed, 101 insertions(+), 42 deletions(-) diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index 5052ba7aa84..b485c343d18 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -5716,54 +5716,61 @@ public void run(FlowTrigger trigger, Map data) { @Override public boolean skip(Map data) { + // ZSTAC-84446: run detection whenever TLS is enabled so check + // and first-deploy share the same IP source. return CoreGlobalProperty.UNIT_TEST_ON - || !KVMGlobalConfig.LIBVIRT_TLS_ENABLED.value(Boolean.class) - || !rcf.getResourceConfigValue( - KVMGlobalConfig.RECONNECT_HOST_RESTART_LIBVIRTD_SERVICE, - self.getUuid(), Boolean.class); + || !KVMGlobalConfig.LIBVIRT_TLS_ENABLED.value(Boolean.class); } @Override public void run(FlowTrigger trigger, Map data) { - String managementIp = getSelf().getManagementIp(); - - SshShell sshShell = new SshShell(); - sshShell.setHostname(managementIp); - sshShell.setUsername(getSelf().getUsername()); - sshShell.setPassword(getSelf().getPassword()); - sshShell.setPort(getSelf().getPort()); - - // Use the same logic as zstack-utility host_plugin.fact() so MN's - // expectation matches what the host itself reports. - String certIpList = KVMHostUtils.collectHostIps( - sshShell, self.getUuid(), managementIp); - List allIps = new ArrayList<>(Arrays.asList(certIpList.split(","))); - // Save detected IPs so apply-ansible-playbook can union with EXTRA_IPS - // without running a second SSH. - data.put("TLS_DETECTED_IPS", certIpList); - - SshResult sanResult = sshShell.runCommand( - "openssl x509 -in /etc/pki/libvirt/servercert.pem -noout -ext subjectAltName 2>/dev/null"); - - boolean needDeploy = false; - if (sanResult.isSshFailure() || sanResult.getReturnCode() != 0 - || sanResult.getStdout() == null || sanResult.getStdout().trim().isEmpty()) { - // cert doesn't exist or can't be read - logger.info(String.format("TLS cert not found or unreadable on host[uuid:%s], need deploy", self.getUuid())); - needDeploy = true; - } else { - Set sanIps = parseSanIps(sanResult.getStdout()); - for (String ip : allIps) { - if (!sanIps.contains(ip)) { - logger.info(String.format("TLS cert SAN missing IP %s on host[uuid:%s], need deploy", ip, self.getUuid())); - needDeploy = true; - break; + // ZSTAC-84446: detection is best-effort. SSH failures must NOT + // break reconnect; on error we skip and let the deploy step + // fall back to mgmtIp + EXTRA_IPS. + try { + String managementIp = getSelf().getManagementIp(); + + SshShell sshShell = new SshShell(); + sshShell.setHostname(managementIp); + sshShell.setUsername(getSelf().getUsername()); + sshShell.setPassword(getSelf().getPassword()); + sshShell.setPort(getSelf().getPort()); + + // Same logic as zstack-utility host_plugin.fact() so MN's + // expectation matches what the host itself reports. + String certIpList = KVMHostUtils.collectHostIps( + sshShell, self.getUuid(), managementIp); + List allIps = new ArrayList<>(Arrays.asList(certIpList.split(","))); + // Save detected IPs so apply-ansible-playbook can union with + // EXTRA_IPS without running a second SSH. + data.put("TLS_DETECTED_IPS", certIpList); + + SshResult sanResult = sshShell.runCommand( + "openssl x509 -in /etc/pki/libvirt/servercert.pem -noout -ext subjectAltName 2>/dev/null"); + + boolean needDeploy = false; + if (sanResult.isSshFailure() || sanResult.getReturnCode() != 0 + || sanResult.getStdout() == null || sanResult.getStdout().trim().isEmpty()) { + logger.info(String.format("TLS cert not found or unreadable on host[uuid:%s], need deploy", self.getUuid())); + needDeploy = true; + } else { + Set sanIps = parseSanIps(sanResult.getStdout()); + for (String ip : allIps) { + if (!sanIps.contains(ip)) { + logger.info(String.format("TLS cert SAN missing IP %s on host[uuid:%s], need deploy", ip, self.getUuid())); + needDeploy = true; + break; + } } } - } - if (needDeploy) { - data.put("NEED_DEPLOY_TLS_CERT", true); + if (needDeploy) { + data.put("NEED_DEPLOY_TLS_CERT", true); + } + } catch (Exception e) { + logger.warn(String.format( + "TLS cert detection failed on host[uuid:%s], continue connect flow: %s", + self.getUuid(), e.getMessage()), e); } trigger.next(); @@ -5910,11 +5917,19 @@ public void run(final FlowTrigger trigger, Map data) { self.getUuid(), managementIp, detectedIps); deployArguments.setTlsCertIps(tlsCertIps); - // Force ansible deploy when TLS cert needs update (detected by check-tls-certs flow) + // ZSTAC-84446: force ansible re-run only when policy allows; + // see KVMHostUtils#shouldForceTlsRedeploy. Boolean needDeployTlsCert = (Boolean) data.get("NEED_DEPLOY_TLS_CERT"); - if (Boolean.TRUE.equals(needDeployTlsCert)) { + boolean allowRestart = rcf.getResourceConfigValue( + KVMGlobalConfig.RECONNECT_HOST_RESTART_LIBVIRTD_SERVICE, + self.getUuid(), Boolean.class); + if (KVMHostUtils.shouldForceTlsRedeploy( + Boolean.TRUE.equals(needDeployTlsCert), allowRestart, info.isNewAdded())) { runner.setForceRun(true); deployArguments.setRestartLibvirtd("true"); + } else if (Boolean.TRUE.equals(needDeployTlsCert)) { + logger.info(String.format("TLS cert needs deploy on host[uuid:%s], skip " + + "force-run to keep kvmagent PID stable", self.getUuid())); } if (deployArguments.isForceRun()) { diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java index 01b42b4b663..6934d7112d1 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java @@ -131,6 +131,21 @@ public static String collectHostIps(String hostUuid, String managementIp, return collectHostIps(newSsh(managementIp, username, password, sshPort), hostUuid, managementIp); } + /** + * ZSTAC-84446: force ansible re-run + libvirtd restart only when operator + * opted in (RECONNECT_HOST_RESTART_LIBVIRTD_SERVICE) or it's a fresh add + * (full-deploy will start libvirtd anyway). Skipping on plain reconnect + * keeps kvmagent PID stable. + */ + public static boolean shouldForceTlsRedeploy(boolean needDeployTlsCert, + boolean allowRestartLibvirtd, + boolean isNewAdded) { + if (!needDeployTlsCert) { + return false; + } + return allowRestartLibvirtd || isNewAdded; + } + private static SshShell newSsh(String host, String user, String pwd, int port) { SshShell s = new SshShell(); s.setHostname(host); diff --git a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java index 2f70c327bc0..5dc53aee890 100644 --- a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java +++ b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java @@ -169,4 +169,33 @@ public void zstac84446_deployUnionContainsAllDetected() { } Assert.assertTrue("deploy must include extra", deployIps.contains("10.0.0.7")); } + + // ----- shouldForceTlsRedeploy coverage (ZSTAC-84446) ----- + + /** needDeployTlsCert=false short-circuits regardless of other flags. */ + @Test + public void shouldForceTlsRedeploy_noNeedNeverForces() { + Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, true, true)); + Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, true, false)); + Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, false, true)); + Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, false, false)); + } + + /** Operator opted in: force-run allowed on reconnect. */ + @Test + public void shouldForceTlsRedeploy_allowRestartForces() { + Assert.assertTrue(KVMHostUtils.shouldForceTlsRedeploy(true, true, false)); + } + + /** First-add: full-deploy will start libvirtd, so force-run is safe. */ + @Test + public void shouldForceTlsRedeploy_newAddedForces() { + Assert.assertTrue(KVMHostUtils.shouldForceTlsRedeploy(true, false, true)); + } + + /** Reconnect + toggle off: must NOT force-run (would change kvmagent PID). */ + @Test + public void shouldForceTlsRedeploy_reconnectWithoutRestartSkips() { + Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(true, false, false)); + } } From c5011ac6e831bc580859e5d3d6ad83f30039504d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 27 Apr 2026 19:55:13 +0800 Subject: [PATCH 12/56] [portforwarding]: skip detach when serviceUuids is empty PortForwardingConfigProxy.detachNetworkServiceFromNoHaVirtualRouter would generate 'AND vo.uuid IN ()' when called with an empty list, causing a MariaDB syntax error. Add an early return guard. Resolves: ZSTAC-84748 Change-Id: I15a86ffb92829af6952697a4f3cb1351cd5ed28c --- .../portforwarding/PortForwardingConfigProxy.java | 3 +++ .../java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java index feff1ea1f01..2a1b8dd4920 100644 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java @@ -35,6 +35,9 @@ protected void attachNetworkServiceToNoHaVirtualRouter(String vrUuid, String typ @Override protected void detachNetworkServiceFromNoHaVirtualRouter(String vrUuid, String type, List serviceUuids) { + if (serviceUuids == null || serviceUuids.isEmpty()) { + return; + } SQL.New(VirtualRouterPortForwardingRuleRefVO.class).eq(VirtualRouterPortForwardingRuleRefVO_.virtualRouterVmUuid, vrUuid) .in(VirtualRouterPortForwardingRuleRefVO_.uuid, serviceUuids).delete(); } diff --git a/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy b/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy index 1279c3a47df..db49c2ab57c 100755 --- a/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy +++ b/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy @@ -141,6 +141,10 @@ class VirtualRouterOfferingSpec extends InstanceOfferingSpec { return new VirtualRouterCommands.SetSNATRsp() } + simulator(VirtualRouterConstant.VR_REMOVE_SNAT_PATH) { + return new VirtualRouterCommands.RemoveSNATRsp() + } + simulator(VirtualRouterCentralizedDnsBackend.SET_DNS_FORWARD_PATH) { return new VirtualRouterCommands.SetForwardDnsRsp() } From f8e039a061f305a952e8cda92f73ce15cbf3eb94 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 28 Apr 2026 14:21:50 +0800 Subject: [PATCH 13/56] [primaryStorage]: validate ExternalPrimaryStorage config JSON at marshal time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per ZSTAC-84817, malformed JSON in APIAddExternalPrimaryStorage.config slipped past the API boundary and surfaced as SYS.1000 InternalError from a deep Gson parse, after the message had already reached the cloud-bus handler. Fix: * PrimaryStorageApiInterceptor now validates msg.getConfig() with org.json (strict — rejects unquoted keys / missing colons that Gson lenient mode silently tolerates) and throws ApiMessageInterceptionException with ORG_ZSTACK_STORAGE_PRIMARY_10053 if it isn't a valid JSON object. * conf/serviceConfig/externalPrimaryStorage.xml wires PrimaryStorageApiInterceptor at service level so the interceptor actually runs for APIAddExternalPrimaryStorageMsg (the existing wiring in primaryStorage.xml does not cover messages declared in this file). * CloudOperationsErrorCode.ORG_ZSTACK_STORAGE_PRIMARY_10053 constant added. Test: ZbsPrimaryStorageCase gains testAddExternalPrimaryStorageWithMalformedJsonRejectedByInterceptor — sends "{this is not valid json" via API, asserts the call fails AND no PrimaryStorageVO/ExternalPrimaryStorageVO/PrimaryStorageOutputProtocolRefVO row leaks. Verified locally: Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 92.788 sec, BUILD SUCCESS. Resolves: ZSTAC-84817 Change-Id: Icf6c648133d7866edf35940d56a28f74f4c64817 --- conf/serviceConfig/externalPrimaryStorage.xml | 1 + .../primary/PrimaryStorageApiInterceptor.java | 18 +++++++++ .../addon/zbs/ZbsPrimaryStorageCase.groovy | 40 +++++++++++++++++++ .../CloudOperationsErrorCode.java | 2 + 4 files changed, 61 insertions(+) diff --git a/conf/serviceConfig/externalPrimaryStorage.xml b/conf/serviceConfig/externalPrimaryStorage.xml index d1687fe7685..e076cc55bc1 100644 --- a/conf/serviceConfig/externalPrimaryStorage.xml +++ b/conf/serviceConfig/externalPrimaryStorage.xml @@ -1,6 +1,7 @@ storage.primary + PrimaryStorageApiInterceptor org.zstack.header.storage.addon.primary.APIUpdateExternalPrimaryStorageMsg diff --git a/storage/src/main/java/org/zstack/storage/primary/PrimaryStorageApiInterceptor.java b/storage/src/main/java/org/zstack/storage/primary/PrimaryStorageApiInterceptor.java index 53fa4e6a4a5..11c09d144cb 100755 --- a/storage/src/main/java/org/zstack/storage/primary/PrimaryStorageApiInterceptor.java +++ b/storage/src/main/java/org/zstack/storage/primary/PrimaryStorageApiInterceptor.java @@ -13,9 +13,12 @@ import org.zstack.header.apimediator.ApiMessageInterceptionException; import org.zstack.header.apimediator.ApiMessageInterceptor; import org.zstack.header.apimediator.StopRoutingException; +import org.json.JSONException; +import org.json.JSONObject; import org.zstack.header.cluster.ClusterVO; import org.zstack.header.cluster.ClusterVO_; import org.zstack.header.message.APIMessage; +import org.zstack.header.storage.addon.primary.APIAddExternalPrimaryStorageMsg; import org.zstack.header.storage.addon.primary.PrimaryStorageOutputProtocolRefVO; import org.zstack.header.storage.addon.primary.PrimaryStorageOutputProtocolRefVO_; import org.zstack.header.storage.primary.*; @@ -77,12 +80,27 @@ public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionExcepti validate((APICreateVolumeSnapshotGroupMsg) msg); } else if (msg instanceof APIAddStorageProtocolMsg) { validate((APIAddStorageProtocolMsg) msg); + } else if (msg instanceof APIAddExternalPrimaryStorageMsg) { + validate((APIAddExternalPrimaryStorageMsg) msg); } setServiceId(msg); return msg; } + private void validate(APIAddExternalPrimaryStorageMsg msg) { + String config = msg.getConfig(); + if (config == null || config.trim().isEmpty()) { + return; + } + try { + new JSONObject(config); + } catch (JSONException e) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_STORAGE_PRIMARY_10053, + "config is not a valid JSON object: %s", e.getMessage())); + } + } + private void validate(APIAddStorageProtocolMsg msg) { if (Q.New(PrimaryStorageOutputProtocolRefVO.class) .eq(PrimaryStorageOutputProtocolRefVO_.primaryStorageUuid, msg.getUuid()) diff --git a/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy b/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy index f07add523d3..e5bfba095e9 100644 --- a/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy @@ -9,11 +9,13 @@ import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageVO import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageSpaceVO import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageVO_ import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageSpaceVO_ +import org.zstack.header.storage.addon.primary.PrimaryStorageOutputProtocolRefVO import org.zstack.header.storage.primary.PrimaryStorageCapacityVO import org.zstack.header.storage.primary.PrimaryStorageCapacityVO_ import org.zstack.header.storage.primary.PrimaryStorageHostRefVO import org.zstack.header.storage.primary.PrimaryStorageHostRefVO_ import org.zstack.header.storage.primary.PrimaryStorageStatus +import org.zstack.header.storage.primary.PrimaryStorageVO import org.zstack.storage.zbs.MdsStatus import org.zstack.storage.zbs.MdsUri import org.zstack.sdk.* @@ -179,6 +181,7 @@ class ZbsPrimaryStorageCase extends SubCase { testMdsPing() testCheckHostStorageConnection() testNegativeScenario() + testAddExternalPrimaryStorageWithMalformedJsonRejectedByInterceptor() testDataVolumeNegativeScenario() testDecodeMdsUriWithSpecialPassword() testMdsReconnectAfterMaximumPingFailures() @@ -725,6 +728,43 @@ class ZbsPrimaryStorageCase extends SubCase { } } + void testAddExternalPrimaryStorageWithMalformedJsonRejectedByInterceptor() { + long extPsCountBefore = Q.New(ExternalPrimaryStorageVO.class).count() + long primaryStorageCountBefore = Q.New(PrimaryStorageVO.class).count() + long protocolRefCountBefore = Q.New(PrimaryStorageOutputProtocolRefVO.class).count() + + expect(AssertionError.class) { + addExternalPrimaryStorage { + zoneUuid = zone.uuid + name = "zbs-bad-json" + identity = "zbs" + defaultOutputProtocol = "CBD" + config = "{this is not valid json" + url = "" + } + } + + long extPsCountAfter = Q.New(ExternalPrimaryStorageVO.class).count() + long primaryStorageCountAfter = Q.New(PrimaryStorageVO.class).count() + long protocolRefCountAfter = Q.New(PrimaryStorageOutputProtocolRefVO.class).count() + assert extPsCountAfter == extPsCountBefore : \ + "ExternalPrimaryStorageVO leaked despite marshal-time JSON rejection: " + + "before=${extPsCountBefore} after=${extPsCountAfter}" + assert primaryStorageCountAfter == primaryStorageCountBefore : \ + "PrimaryStorageVO leaked despite marshal-time JSON rejection: " + + "before=${primaryStorageCountBefore} after=${primaryStorageCountAfter}" + assert protocolRefCountAfter == protocolRefCountBefore : \ + "PrimaryStorageOutputProtocolRefVO leaked despite marshal-time JSON rejection: " + + "before=${protocolRefCountBefore} after=${protocolRefCountAfter}" + boolean stalePsByName = Q.New(ExternalPrimaryStorageVO.class) + .eq(ExternalPrimaryStorageVO_.name, "zbs-bad-json") + .isExists() + assert !stalePsByName : "stale ExternalPrimaryStorageVO[name=zbs-bad-json] reached DB despite interceptor rejection" + + def psList = queryPrimaryStorage {} as List + assert psList != null : "queryPrimaryStorage threw / returned null after attempted bad-JSON Add" + } + void testDataVolumeNegativeScenario() { env.simulator(ZbsStorageController.CREATE_VOLUME_PATH) { HttpEntity e, EnvSpec spec -> def rsp = new ZbsStorageController.CreateVolumeRsp() diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 18f84a9a0fa..c38599da944 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -3536,6 +3536,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_STORAGE_PRIMARY_10052 = "ORG_ZSTACK_STORAGE_PRIMARY_10052"; + public static final String ORG_ZSTACK_STORAGE_PRIMARY_10053 = "ORG_ZSTACK_STORAGE_PRIMARY_10053"; + public static final String ORG_ZSTACK_CORE_ENCRYPT_10000 = "ORG_ZSTACK_CORE_ENCRYPT_10000"; public static final String ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_NETWORKSERVICE_SLB_10000 = "ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_NETWORKSERVICE_SLB_10000"; From f98a027e500d7e6f369119851748d27ec9aa6251 Mon Sep 17 00:00:00 2001 From: "xinhao.huang" Date: Tue, 28 Apr 2026 17:24:03 +0800 Subject: [PATCH 14/56] [allocator]: thread HostAllocationPurpose through allocator path Resolves: ZSTAC-84839 Change-Id: I7a756e72627a6c67736a72656669677667747067 --- .../org/zstack/compute/vm/VmInstanceBase.java | 5 +++++ .../header/allocator/AllocateHostMsg.java | 14 ++++++++++++++ .../allocator/HostAllocationPurpose.java | 17 +++++++++++++++++ .../header/allocator/HostAllocatorSpec.java | 18 ++++++++++++++++++ ...GetVmStartingCandidateClustersHostsMsg.java | 18 ++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/allocator/HostAllocationPurpose.java diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index 58ff4e7b8d9..a52c9010bc7 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -917,6 +917,11 @@ private void getStartingCandidateHosts(final NeedReplyMessage msg, final ReturnV } final DesignatedAllocateHostMsg amsg = new DesignatedAllocateHostMsg(); + if (msg instanceof GetVmStartingCandidateClustersHostsMsg) { + // propagate allocation purpose so downstream filters know this is a + // candidate-listing call rather than a real allocation + amsg.setPurpose(((GetVmStartingCandidateClustersHostsMsg) msg).getPurpose()); + } amsg.setCpuCapacity(self.getCpuNum()); amsg.setMemoryCapacity(self.getMemorySize()); amsg.setVmInstance(VmInstanceInventory.valueOf(self)); diff --git a/header/src/main/java/org/zstack/header/allocator/AllocateHostMsg.java b/header/src/main/java/org/zstack/header/allocator/AllocateHostMsg.java index 11f911dff0b..cb0ddeeb081 100755 --- a/header/src/main/java/org/zstack/header/allocator/AllocateHostMsg.java +++ b/header/src/main/java/org/zstack/header/allocator/AllocateHostMsg.java @@ -32,6 +32,12 @@ public class AllocateHostMsg extends NeedReplyMessage { private AllocationScene allocationScene; private String architecture; private String accountUuid; + /** + * Allocation purpose. Defaults to ALLOCATE; LIST_CANDIDATES tells the + * downstream filters this is a candidate-listing call. Callers must gate + * LIST_CANDIDATES on admin permission. + */ + private HostAllocationPurpose purpose = HostAllocationPurpose.ALLOCATE; public List> getOptionalPrimaryStorageUuids() { return optionalPrimaryStorageUuids; @@ -216,4 +222,12 @@ public void setArchitecture(String architecture) { public String getAccountUuid() { return accountUuid; } public void setAccountUuid(String accountUuid) { this.accountUuid = accountUuid; } + + public HostAllocationPurpose getPurpose() { + return purpose; + } + + public void setPurpose(HostAllocationPurpose purpose) { + this.purpose = purpose == null ? HostAllocationPurpose.ALLOCATE : purpose; + } } diff --git a/header/src/main/java/org/zstack/header/allocator/HostAllocationPurpose.java b/header/src/main/java/org/zstack/header/allocator/HostAllocationPurpose.java new file mode 100644 index 00000000000..b9893311b21 --- /dev/null +++ b/header/src/main/java/org/zstack/header/allocator/HostAllocationPurpose.java @@ -0,0 +1,17 @@ +package org.zstack.header.allocator; + +/** + * Purpose of a host allocation request. Filter extension points may relax some + * checks (e.g. PCI device owner-RBAC) when the purpose is LIST_CANDIDATES so + * that callers can list "what could be available" without enforcing all access + * restrictions that would apply to a real allocation. + * + * Default is ALLOCATE so existing call sites keep their current behavior. + * + * Callers must restrict who is allowed to set LIST_CANDIDATES (e.g. admin only). + * Filters trust the value carried by HostAllocatorSpec. + */ +public enum HostAllocationPurpose { + ALLOCATE, + LIST_CANDIDATES +} diff --git a/header/src/main/java/org/zstack/header/allocator/HostAllocatorSpec.java b/header/src/main/java/org/zstack/header/allocator/HostAllocatorSpec.java index e0ed69c47a1..8b9adfadc54 100755 --- a/header/src/main/java/org/zstack/header/allocator/HostAllocatorSpec.java +++ b/header/src/main/java/org/zstack/header/allocator/HostAllocatorSpec.java @@ -38,6 +38,15 @@ public class HostAllocatorSpec { private AllocationScene allocationScene; private String architecture; private String accountUuid; + /** + * Allocation purpose. Defaults to ALLOCATE so existing call sites keep + * their current behavior. Filters may relax some checks (e.g. PCI device + * owner-RBAC) when this is LIST_CANDIDATES. + * + * Permission gating is the caller's responsibility; filters trust this + * value as-is. + */ + private HostAllocationPurpose purpose = HostAllocationPurpose.ALLOCATE; public AllocationScene getAllocationScene() { return allocationScene; @@ -229,6 +238,14 @@ public void setArchitecture(String architecture) { this.architecture = architecture; } + public HostAllocationPurpose getPurpose() { + return purpose; + } + + public void setPurpose(HostAllocationPurpose purpose) { + this.purpose = purpose == null ? HostAllocationPurpose.ALLOCATE : purpose; + } + public static HostAllocatorSpec fromAllocationMsg(AllocateHostMsg msg) { HostAllocatorSpec spec = new HostAllocatorSpec(); spec.setAllocatorStrategy(msg.getAllocatorStrategy()); @@ -258,6 +275,7 @@ public static HostAllocatorSpec fromAllocationMsg(AllocateHostMsg msg) { spec.setAllocationScene(msg.getAllocationScene()); spec.setArchitecture(msg.getArchitecture()); spec.setAccountUuid(msg.getAccountUuid()); + spec.setPurpose(msg.getPurpose()); if (msg.getSystemTags() != null && !msg.getSystemTags().isEmpty()){ spec.setSystemTags(new ArrayList(msg.getSystemTags())); } diff --git a/header/src/main/java/org/zstack/header/vm/GetVmStartingCandidateClustersHostsMsg.java b/header/src/main/java/org/zstack/header/vm/GetVmStartingCandidateClustersHostsMsg.java index 104c05e1a63..07bf7fa682e 100644 --- a/header/src/main/java/org/zstack/header/vm/GetVmStartingCandidateClustersHostsMsg.java +++ b/header/src/main/java/org/zstack/header/vm/GetVmStartingCandidateClustersHostsMsg.java @@ -1,5 +1,6 @@ package org.zstack.header.vm; +import org.zstack.header.allocator.HostAllocationPurpose; import org.zstack.header.message.APIParam; import org.zstack.header.message.NeedReplyMessage; @@ -8,6 +9,16 @@ */ public class GetVmStartingCandidateClustersHostsMsg extends NeedReplyMessage implements VmInstanceMessage { private String uuid; + /** + * Allocation purpose. Defaults to ALLOCATE so existing callers keep the same + * filter behavior. Setting to LIST_CANDIDATES tells filters that this is a + * candidate-listing call and certain restrictions (e.g. PCI device + * owner-RBAC) may be relaxed. + * + * Callers MUST gate this on admin permission before setting LIST_CANDIDATES; + * filters trust the value as-is. + */ + private HostAllocationPurpose purpose = HostAllocationPurpose.ALLOCATE; public String getUuid() { return uuid; @@ -22,4 +33,11 @@ public String getVmInstanceUuid() { return uuid; } + public HostAllocationPurpose getPurpose() { + return purpose; + } + + public void setPurpose(HostAllocationPurpose purpose) { + this.purpose = purpose == null ? HostAllocationPurpose.ALLOCATE : purpose; + } } \ No newline at end of file From a54406505ca76cd3543ee466a47c38899765ad75 Mon Sep 17 00:00:00 2001 From: "yingzhe.hu" Date: Wed, 29 Apr 2026 15:09:24 +0800 Subject: [PATCH 15/56] [kvm]: exclude br_conn_all_ns IP from TLS cert SAN br_conn_all_ns (169.254.64.1, mevoco.py CONNECT_ALL_NETNS_BR_OUTER_IP) is created on the host only when the first flat L3 network lands, AFTER the add-host ansible playbook has generated the TLS cert. The cert SAN therefore lacks this IP, and on every subsequent reconnect the check-tls-certs flow detects the gap and triggers an ansible redeploy plus libvirtd/kvmagent restart, breaking PID stability. This IP is host-internal (used only for VM <-> root-netns userdata / pushgateway / kvmagent HTTP) and has no business in a libvirtd TLS cert. Add EXCLUDED_INTERNAL_IPS as a single source of truth used by both the check flow (buildIpList) and the deploy flow (unionTlsCertIps) so the two flows can never disagree, regardless of when the bridge appears. host_plugin.fact() on the agent side is unchanged. Resolves: ZSTAC-84446 Change-Id: I10821d8c68190f2cbc8a0679d19ed053916d9184 --- .../java/org/zstack/kvm/KVMHostUtils.java | 65 +++++----- .../org/zstack/test/kvm/KVMHostUtilsTest.java | 111 ++++++++---------- 2 files changed, 82 insertions(+), 94 deletions(-) diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java index 6934d7112d1..3a0d857ff47 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java @@ -8,6 +8,7 @@ import org.zstack.header.tag.SystemTagVO; import org.zstack.header.tag.SystemTagVO_; import org.zstack.header.tag.TagType; +import org.zstack.utils.CollectionUtils; import org.zstack.utils.TagUtils; import org.zstack.utils.logging.CLogger; import org.zstack.utils.logging.CLoggerImpl; @@ -26,16 +27,18 @@ public class KVMHostUtils { private static final CLogger logger = CLoggerImpl.getLogger(KVMHostUtils.class); - /** - * Collect host IPv4 addresses, mirroring zstack-utility host_plugin.fact() - * (only filter: ifname endswith "zs", drop 127.0.0.1 / MN VIP). - */ + // ZSTAC-84446: br_conn_all_ns is host-internal; exclude from TLS cert SAN + // to keep check-flow and deploy-flow IP lists identical. + public static final Set EXCLUDED_INTERNAL_IPS = Collections.unmodifiableSet( + new LinkedHashSet<>(Collections.singletonList("169.254.64.1"))); + + // Collect host IPv4 addresses; mirrors host_plugin.fact() filters and + // applies EXCLUDED_INTERNAL_IPS so check and deploy share one source. public static String collectHostIps(SshShell sshShell, String hostUuid, String managementIp) { if (sshShell == null) { return managementIp; } - // Run a quote-free command; parse on the MN side to avoid nested-quote - // mangling when SshShell wraps the command with single quotes. + // Quote-free command; parsed on MN side to avoid SshShell quote mangling. SshResult r = sshShell.runCommand("ip -4 -o addr show"); if (r.isSshFailure() || r.getReturnCode() != 0 || r.getStdout() == null || r.getStdout().trim().isEmpty()) { @@ -47,19 +50,18 @@ public static String collectHostIps(SshShell sshShell, String hostUuid, String m return buildIpList(managementIp, r.getStdout(), CoreGlobalProperty.MN_VIP); } - /** - * TLS cert IP list for ansible deploy: detectedIps ∪ EXTRA_IPS tag. - * detectedIps comes from the prior check-tls-certs flow (no second SSH). - * If detectedIps is null/empty, fall back to managementIp + EXTRA_IPS. - */ + // TLS cert IPs for ansible deploy: detectedIps ∪ EXTRA_IPS − EXCLUDED_INTERNAL_IPS, + // falls back to managementIp when detectedIps is empty. Shares filter with collectHostIps. public static String unionTlsCertIps(String hostUuid, String managementIp, String detectedIpsCsv) { String extraIps = HostSystemTags.EXTRA_IPS.getTokenByResourceUuid( hostUuid, HostSystemTags.EXTRA_IPS_TOKEN); - return unionIps(detectedIpsCsv, managementIp, extraIps, CoreGlobalProperty.MN_VIP); + return unionIps(detectedIpsCsv, managementIp, extraIps, + CoreGlobalProperty.MN_VIP, EXCLUDED_INTERNAL_IPS); } - /** Pure function for unit tests: detectedIps ∪ extraIps, fall back to mgmtIp when detected empty. */ - public static String unionIps(String detectedIpsCsv, String managementIp, String extraIpsCsv, String mnVip) { + public static String unionIps(String detectedIpsCsv, String managementIp, + String extraIpsCsv, String mnVip, + Set excludedInternalIps) { Set ips = new LinkedHashSet<>(); if (detectedIpsCsv != null && !detectedIpsCsv.trim().isEmpty()) { for (String ip : detectedIpsCsv.split(",")) { @@ -81,20 +83,25 @@ public static String unionIps(String detectedIpsCsv, String managementIp, String } } + return String.join(",", filterIps(ips, mnVip, excludedInternalIps)); + } + + // Single source of truth for TLS cert SAN IPs; shared by buildIpList (check) + // and unionIps (deploy) so the two flows can never diverge. + private static Set filterIps(Set ips, String mnVip, + Set excludedInternalIps) { ips.remove("127.0.0.1"); if (mnVip != null) { ips.remove(mnVip); } - return String.join(",", ips); + if (!CollectionUtils.isEmpty(excludedInternalIps)) { + ips.removeAll(excludedInternalIps); + } + return ips; } - /** - * Parse the raw output of "ip -4 -o addr show" and build the IP list, - * mirroring zstack-utility host_plugin.fact() (filter ifname endswith "zs", - * drop 127.0.0.1 / MN VIP). Each line looks like: - * "5: zsn0.2000 inet 12.1.251.206/16 brd ... scope global zsn0.2000\..." - * Pure function for unit tests. - */ + // Parse "ip -4 -o addr show" output and build the IP list, mirroring + // host_plugin.fact() (drop ifname *zs, 127.0.0.1, MN VIP, EXCLUDED_INTERNAL_IPS). public static String buildIpList(String managementIp, String ipAddrOutput, String mnVip) { Set ips = new LinkedHashSet<>(); ips.add(managementIp); @@ -119,11 +126,7 @@ public static String buildIpList(String managementIp, String ipAddrOutput, Strin } } - ips.remove("127.0.0.1"); - if (mnVip != null) { - ips.remove(mnVip); - } - return String.join(",", ips); + return String.join(",", filterIps(ips, mnVip, EXCLUDED_INTERNAL_IPS)); } public static String collectHostIps(String hostUuid, String managementIp, @@ -131,12 +134,8 @@ public static String collectHostIps(String hostUuid, String managementIp, return collectHostIps(newSsh(managementIp, username, password, sshPort), hostUuid, managementIp); } - /** - * ZSTAC-84446: force ansible re-run + libvirtd restart only when operator - * opted in (RECONNECT_HOST_RESTART_LIBVIRTD_SERVICE) or it's a fresh add - * (full-deploy will start libvirtd anyway). Skipping on plain reconnect - * keeps kvmagent PID stable. - */ + // ZSTAC-84446: force ansible re-run + libvirtd restart only when operator opted in + // or it's a fresh add; skip on plain reconnect to keep kvmagent PID stable. public static boolean shouldForceTlsRedeploy(boolean needDeployTlsCert, boolean allowRestartLibvirtd, boolean isNewAdded) { diff --git a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java index 5dc53aee890..6933d2e9db2 100644 --- a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java +++ b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java @@ -4,10 +4,8 @@ import org.junit.Test; import org.zstack.kvm.KVMHostUtils; -/** - * Unit tests for KVMHostUtils#buildIpList -- mirrors zstack-utility - * host_plugin.fact() so MN expectation matches what the host self-reports. - */ +import java.util.Collections; + public class KVMHostUtilsTest { @Test @@ -26,8 +24,8 @@ public void filtersZsSuffixIface_consistentWithHostFact() { "3: docker0 inet 172.17.0.1/16 scope global docker0\\ valid_lft forever", "4: br_conn_all_ns inet 169.254.64.1/18 scope global br_conn_all_ns\\ valid_lft forever", "5: eth1 inet 192.168.50.10/24 scope global eth1\\ valid_lft forever"); - String r = KVMHostUtils.buildIpList("172.24.250.175", out, null); - Assert.assertEquals("172.24.250.175,172.17.0.1,169.254.64.1,192.168.50.10", r); + Assert.assertEquals("172.24.250.175,172.17.0.1,192.168.50.10", + KVMHostUtils.buildIpList("172.24.250.175", out, null)); } @Test @@ -46,7 +44,7 @@ public void mgmtIpAlwaysFirst() { "2: eth0 inet 10.0.0.5/24 scope global eth0\\ valid_lft forever", "3: eth1 inet 192.168.1.10/24 scope global eth1\\ valid_lft forever"); String r = KVMHostUtils.buildIpList("192.168.1.10", out, null); - Assert.assertTrue("mgmt ip must be first, got: " + r, r.startsWith("192.168.1.10")); + Assert.assertTrue(r.startsWith("192.168.1.10")); } @Test @@ -70,11 +68,6 @@ public void handlesMalformedLines() { KVMHostUtils.buildIpList("192.168.1.10", out, null)); } - /** - * ZSTAC-84446 regression: check and first-deploy must produce identical - * lists from the same SSH output, so cert-check after first deploy never - * triggers a force-redeploy (kvmagent restart -> PID change). - */ @Test public void zstac84446_checkAndFirstDeployUseSameSource() { String out = String.join("\n", @@ -85,13 +78,9 @@ public void zstac84446_checkAndFirstDeployUseSameSource() { String onCheck = KVMHostUtils.buildIpList("172.24.250.175", out, null); Assert.assertEquals(firstDeploy, onCheck); Assert.assertTrue(firstDeploy.contains("172.17.0.1")); - Assert.assertTrue(firstDeploy.contains("169.254.64.1")); + Assert.assertFalse(firstDeploy.contains("169.254.64.1")); } - /** - * Real-world output from `ip -4 -o addr show` on a KVM host (incl. \ continuation). - * Confirms the parser tolerates trailing fields and CIDR notation. - */ @Test public void parsesRealIpAddrOutput() { String out = String.join("\n", @@ -99,80 +88,83 @@ public void parsesRealIpAddrOutput() { "5: zsn0.2000 inet 12.1.251.206/16 brd 12.1.255.255 scope global zsn0.2000\\ valid_lft forever preferred_lft forever", "6: br_zsn0 inet 172.24.251.206/16 scope global dynamic br_zsn0\\ valid_lft 404688sec preferred_lft 404688sec", "53: br_conn_all_ns inet 169.254.64.1/18 scope global br_conn_all_ns\\ valid_lft forever preferred_lft forever"); - Assert.assertEquals( - "172.24.251.206,12.1.251.206,169.254.64.1", + Assert.assertEquals("172.24.251.206,12.1.251.206", KVMHostUtils.buildIpList("172.24.251.206", out, null)); } - // ----- unionIps coverage (no SystemTag dependency) ----- - @Test public void unionIps_detectedIsBaseAndExtraAppended() { - String r = KVMHostUtils.unionIps( - "172.24.250.175,172.17.0.1", - "172.24.250.175", - "10.0.0.7,10.0.0.8", - null); - Assert.assertEquals("172.24.250.175,172.17.0.1,10.0.0.7,10.0.0.8", r); + Assert.assertEquals("172.24.250.175,172.17.0.1,10.0.0.7,10.0.0.8", + KVMHostUtils.unionIps("172.24.250.175,172.17.0.1", "172.24.250.175", + "10.0.0.7,10.0.0.8", null, Collections.emptySet())); } @Test public void unionIps_fallbackToMgmtWhenDetectedEmpty() { Assert.assertEquals("192.168.1.10,10.0.0.7", - KVMHostUtils.unionIps(null, "192.168.1.10", "10.0.0.7", null)); + KVMHostUtils.unionIps(null, "192.168.1.10", "10.0.0.7", null, Collections.emptySet())); Assert.assertEquals("192.168.1.10,10.0.0.7", - KVMHostUtils.unionIps("", "192.168.1.10", "10.0.0.7", null)); + KVMHostUtils.unionIps("", "192.168.1.10", "10.0.0.7", null, Collections.emptySet())); Assert.assertEquals("192.168.1.10,10.0.0.7", - KVMHostUtils.unionIps(" ", "192.168.1.10", "10.0.0.7", null)); + KVMHostUtils.unionIps(" ", "192.168.1.10", "10.0.0.7", null, Collections.emptySet())); } @Test public void unionIps_dropsLoopbackAndMnVip() { - String r = KVMHostUtils.unionIps( - "192.168.1.10,127.0.0.1,10.0.0.99", - "192.168.1.10", - "127.0.0.1,10.0.0.99,10.0.0.7", - "10.0.0.99"); - Assert.assertEquals("192.168.1.10,10.0.0.7", r); + Assert.assertEquals("192.168.1.10,10.0.0.7", + KVMHostUtils.unionIps("192.168.1.10,127.0.0.1,10.0.0.99", "192.168.1.10", + "127.0.0.1,10.0.0.99,10.0.0.7", "10.0.0.99", Collections.emptySet())); } @Test public void unionIps_detectedDeduplicatesExtra() { - String r = KVMHostUtils.unionIps( - "192.168.1.10,10.0.0.7", - "192.168.1.10", - "10.0.0.7,10.0.0.8", - null); - Assert.assertEquals("192.168.1.10,10.0.0.7,10.0.0.8", r); + Assert.assertEquals("192.168.1.10,10.0.0.7,10.0.0.8", + KVMHostUtils.unionIps("192.168.1.10,10.0.0.7", "192.168.1.10", + "10.0.0.7,10.0.0.8", null, Collections.emptySet())); } @Test public void unionIps_noExtraTagYieldsDetectedOnly() { - String r = KVMHostUtils.unionIps( - "192.168.1.10,172.17.0.1", - "192.168.1.10", - null, - null); - Assert.assertEquals("192.168.1.10,172.17.0.1", r); + Assert.assertEquals("192.168.1.10,172.17.0.1", + KVMHostUtils.unionIps("192.168.1.10,172.17.0.1", "192.168.1.10", + null, null, Collections.emptySet())); } - /** - * ZSTAC-84446 root-cause coverage: deploy must include detectedIps so the - * subsequent cert-check (whose SAN now contains all detectedIps) matches. - */ @Test public void zstac84446_deployUnionContainsAllDetected() { - String detected = "172.24.250.175,172.17.0.1,169.254.64.1"; - String deployIps = KVMHostUtils.unionIps(detected, "172.24.250.175", "10.0.0.7", null); + String detected = "172.24.250.175,172.17.0.1"; + String deployIps = KVMHostUtils.unionIps(detected, "172.24.250.175", + "10.0.0.7", null, Collections.emptySet()); for (String ip : detected.split(",")) { - Assert.assertTrue("deploy must include detected " + ip, deployIps.contains(ip)); + Assert.assertTrue(deployIps.contains(ip)); } - Assert.assertTrue("deploy must include extra", deployIps.contains("10.0.0.7")); + Assert.assertTrue(deployIps.contains("10.0.0.7")); + } + + @Test + public void unionIps_excludesInternalIps_whetherDetectedOrNot() { + Assert.assertEquals("172.24.250.175", + KVMHostUtils.unionIps("172.24.250.175", "172.24.250.175", + null, null, Collections.singleton("169.254.64.1"))); + + Assert.assertEquals("172.24.250.175,172.17.0.1", + KVMHostUtils.unionIps("172.24.250.175,172.17.0.1,169.254.64.1", "172.24.250.175", + null, null, Collections.singleton("169.254.64.1"))); } - // ----- shouldForceTlsRedeploy coverage (ZSTAC-84446) ----- + @Test + public void unionIps_excludedBeatsExtraIps() { + Assert.assertEquals("192.168.1.10,10.0.0.7", + KVMHostUtils.unionIps("192.168.1.10", "192.168.1.10", + "169.254.64.1,10.0.0.7", null, + Collections.singleton("169.254.64.1"))); + } + + @Test + public void excludedInternalIps_containsBrConnAllNsOuterIp() { + Assert.assertTrue(KVMHostUtils.EXCLUDED_INTERNAL_IPS.contains("169.254.64.1")); + } - /** needDeployTlsCert=false short-circuits regardless of other flags. */ @Test public void shouldForceTlsRedeploy_noNeedNeverForces() { Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, true, true)); @@ -181,19 +173,16 @@ public void shouldForceTlsRedeploy_noNeedNeverForces() { Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(false, false, false)); } - /** Operator opted in: force-run allowed on reconnect. */ @Test public void shouldForceTlsRedeploy_allowRestartForces() { Assert.assertTrue(KVMHostUtils.shouldForceTlsRedeploy(true, true, false)); } - /** First-add: full-deploy will start libvirtd, so force-run is safe. */ @Test public void shouldForceTlsRedeploy_newAddedForces() { Assert.assertTrue(KVMHostUtils.shouldForceTlsRedeploy(true, false, true)); } - /** Reconnect + toggle off: must NOT force-run (would change kvmagent PID). */ @Test public void shouldForceTlsRedeploy_reconnectWithoutRestartSkips() { Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(true, false, false)); From 18b0d5363297468f7f8884d6bacd1d54206a77c4 Mon Sep 17 00:00:00 2001 From: gitlab Date: Sat, 2 May 2026 03:37:01 +0000 Subject: [PATCH 16/56] bump version to 5.5.22 DBImpact Change-Id: I6d757a76676d6763697161776a61796175737775 --- VERSION | 2 +- conf/db/upgrade/V5.5.22__schema.sql | 0 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 conf/db/upgrade/V5.5.22__schema.sql diff --git a/VERSION b/VERSION index 8fc74fe766b..aa87198d370 100755 --- a/VERSION +++ b/VERSION @@ -1,3 +1,3 @@ MAJOR=5 MINOR=5 -UPDATE=16 +UPDATE=22 diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql new file mode 100644 index 00000000000..e69de29bb2d From fe02151008c7d31dfb4674be4bc0c3f00b4a25a2 Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Mon, 27 Apr 2026 22:19:46 +0800 Subject: [PATCH 17/56] [ai]: schema add ModelVO.pipelineTag/manifestJson and ModelServiceRefVO.isDefault/createDate/lastOpDate Resolves: ZSTAC-84025 Change-Id: Ifbb68c9d475aa19762bb053e6545381a305dfe5b --- conf/db/upgrade/V5.5.22__schema.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index e69de29bb2d..f680641fbdc 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -0,0 +1,17 @@ +-- ZSTAC-84025: Add pipelineTag to ModelVO for inference template auto-matching +CALL ADD_COLUMN('ModelVO', 'pipelineTag', 'VARCHAR(64)', 1, NULL); + +-- ZSTAC-84025: Add isDefault to ModelServiceRefVO to mark the default inference template per model +ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `isDefault` TINYINT(1) NOT NULL DEFAULT 0; + +-- Backfill isDefault: all existing refs default to 0 (no default template designated) +UPDATE `zstack`.`ModelServiceRefVO` SET `isDefault` = 0; + +-- ZSTAC-84025-F2: Add manifestJson to ModelVO so Step 1 (file format) of the auto-match Matcher can +-- parse file_types/file_extensions from the manifest returned by the aios agent. +CALL ADD_COLUMN('ModelVO', 'manifestJson', 'TEXT', 1, NULL); + +-- ZSTAC-84025: Add createDate/lastOpDate to ModelServiceRefVO so the auto-match Matcher can +-- pick the earliest isDefault=true row when DB has the rare 2+ defaults anomaly (Q5). +ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; +ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'; From 0311282cbd0eb4e98709973104366503a8d603ac Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Mon, 27 Apr 2026 22:19:55 +0800 Subject: [PATCH 18/56] [ai]: sdk AutoMatchModelServiceByModel action and UpdateModel.defaultModelServiceUuid Resolves: ZSTAC-84025 Change-Id: I4046976b0c4437ba4c14069946b8075393f152ed --- .../AutoMatchModelServiceByModelAction.java | 101 ++++++++++++++++++ .../AutoMatchModelServiceByModelResult.java | 39 +++++++ .../org/zstack/sdk/UpdateModelAction.java | 3 + 3 files changed, 143 insertions(+) create mode 100644 sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java diff --git a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java new file mode 100644 index 00000000000..b9030f9b8ca --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java @@ -0,0 +1,101 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class AutoMatchModelServiceByModelAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.AutoMatchModelServiceByModelResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String modelUuid; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.AutoMatchModelServiceByModelResult value = res.getResult(org.zstack.sdk.AutoMatchModelServiceByModelResult.class); + ret.value = value == null ? new org.zstack.sdk.AutoMatchModelServiceByModelResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "GET"; + info.path = "/ai/models/{modelUuid}/auto-match-service"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java new file mode 100644 index 00000000000..95393cb6ea0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java @@ -0,0 +1,39 @@ +package org.zstack.sdk; + +public class AutoMatchModelServiceByModelResult { + /** + * UUID of the recommended ModelServiceVO. May be null if FALLBACK step + * found no Transformers candidate. + */ + public java.lang.String recommendedServiceUuid; + public void setRecommendedServiceUuid(java.lang.String recommendedServiceUuid) { + this.recommendedServiceUuid = recommendedServiceUuid; + } + public java.lang.String getRecommendedServiceUuid() { + return this.recommendedServiceUuid; + } + + /** + * Which matching step produced this recommendation: + * USER_PRESET | FILE_FORMAT | PIPELINE_TAG | FALLBACK + */ + public java.lang.String matchedByStep; + public void setMatchedByStep(java.lang.String matchedByStep) { + this.matchedByStep = matchedByStep; + } + public java.lang.String getMatchedByStep() { + return this.matchedByStep; + } + + /** + * Diagnostic evidence for the match decision. + */ + public java.util.LinkedHashMap evidence; + public void setEvidence(java.util.LinkedHashMap evidence) { + this.evidence = evidence; + } + public java.util.LinkedHashMap getEvidence() { + return this.evidence; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/UpdateModelAction.java b/sdk/src/main/java/org/zstack/sdk/UpdateModelAction.java index 3b27ed271d8..f7936631adf 100644 --- a/sdk/src/main/java/org/zstack/sdk/UpdateModelAction.java +++ b/sdk/src/main/java/org/zstack/sdk/UpdateModelAction.java @@ -58,6 +58,9 @@ public Result throwExceptionIfError() { @Param(required = false, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String modelId; + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String defaultModelServiceUuid; + @Param(required = false) public java.util.List systemTags; From 4b352ab705d602a50fadbd51fde9acc6f8f01274 Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Mon, 27 Apr 2026 22:19:55 +0800 Subject: [PATCH 19/56] [ai]: regenerate ApiHelper.groovy with autoMatchModelServiceByModel DSL Resolves: ZSTAC-84025 Change-Id: I0df26f7367a28da9c6c825dcddcb829db133374e --- .../java/org/zstack/testlib/ApiHelper.groovy | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index ab4531b5ade..b505a267862 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -4769,6 +4769,33 @@ abstract class ApiHelper { } + def autoMatchModelServiceByModel(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.AutoMatchModelServiceByModelAction.class) Closure c) { + def a = new org.zstack.sdk.AutoMatchModelServiceByModelAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def backupDatabaseToPublicCloud(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.BackupDatabaseToPublicCloudAction.class) Closure c) { def a = new org.zstack.sdk.BackupDatabaseToPublicCloudAction() a.sessionId = Test.currentEnvSpec?.session?.uuid From 23cb7642b1fbe7fb7bd26a71412072d028fe4488 Mon Sep 17 00:00:00 2001 From: AlanJager Date: Thu, 7 May 2026 14:48:52 +0800 Subject: [PATCH 20/56] [sdk]: Update all sdks Resolves: ZSTAC-84025 Change-Id: I7a6c657369736978676164676b616b626d707974 --- sdk/src/main/java/SourceClassMap.java | 4 ++ .../java/org/zstack/sdk/AddModelAction.java | 3 ++ .../AutoMatchModelServiceByModelAction.java | 14 ++---- .../AutoMatchModelServiceByModelResult.java | 26 ++++------ .../java/org/zstack/sdk/MatchEvidence.java | 47 +++++++++++++++++++ .../main/java/org/zstack/sdk/MatchedStep.java | 8 ++++ .../zstack/sdk/ModelServiceRefInventory.java | 8 ++++ 7 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/MatchEvidence.java create mode 100644 sdk/src/main/java/org/zstack/sdk/MatchedStep.java diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 5104ebb6a6f..72fbac9b302 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -29,6 +29,8 @@ public class SourceClassMap { put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); + put("org.zstack.ai.message.MatchEvidence", "org.zstack.sdk.MatchEvidence"); + put("org.zstack.ai.message.MatchedStep", "org.zstack.sdk.MatchedStep"); put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); put("org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService", "org.zstack.sdk.MetaServerService"); put("org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus", "org.zstack.sdk.ServiceStatus"); @@ -1241,6 +1243,8 @@ public class SourceClassMap { put("org.zstack.sdk.LunInventory", "org.zstack.header.storageDevice.LunInventory"); put("org.zstack.sdk.MaaSUsage", "org.zstack.ai.message.MaaSUsage"); put("org.zstack.sdk.ManagementNodeInventory", "org.zstack.header.managementnode.ManagementNodeInventory"); + put("org.zstack.sdk.MatchEvidence", "org.zstack.ai.message.MatchEvidence"); + put("org.zstack.sdk.MatchedStep", "org.zstack.ai.message.MatchedStep"); put("org.zstack.sdk.MdevDeviceChooser", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser"); put("org.zstack.sdk.MdevDeviceInventory", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory"); put("org.zstack.sdk.MdevDeviceSpecInventory", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/AddModelAction.java b/sdk/src/main/java/org/zstack/sdk/AddModelAction.java index 6e3d3d27bc2..eb9a4a4cbf7 100644 --- a/sdk/src/main/java/org/zstack/sdk/AddModelAction.java +++ b/sdk/src/main/java/org/zstack/sdk/AddModelAction.java @@ -73,6 +73,9 @@ public Result throwExceptionIfError() { @Param(required = false, validValues = {"Public"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String shareMode; + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String defaultModelServiceUuid; + @Param(required = false) public java.lang.String resourceUuid; diff --git a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java index b9030f9b8ca..51765809a69 100644 --- a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java +++ b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelAction.java @@ -17,10 +17,10 @@ public static class Result { public Result throwExceptionIfError() { if (error != null) { throw new ApiException( - String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) ); } - + return this; } } @@ -46,12 +46,6 @@ public Result throwExceptionIfError() { @Param(required = false) public String requestIp; - @NonAPIParam - public long timeout = -1; - - @NonAPIParam - public long pollingInterval = -1; - private Result makeResult(ApiResult res) { Result ret = new Result(); @@ -59,9 +53,9 @@ private Result makeResult(ApiResult res) { ret.error = res.error; return ret; } - + org.zstack.sdk.AutoMatchModelServiceByModelResult value = res.getResult(org.zstack.sdk.AutoMatchModelServiceByModelResult.class); - ret.value = value == null ? new org.zstack.sdk.AutoMatchModelServiceByModelResult() : value; + ret.value = value == null ? new org.zstack.sdk.AutoMatchModelServiceByModelResult() : value; return ret; } diff --git a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java index 95393cb6ea0..9d53b9056fb 100644 --- a/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java +++ b/sdk/src/main/java/org/zstack/sdk/AutoMatchModelServiceByModelResult.java @@ -1,10 +1,9 @@ package org.zstack.sdk; +import org.zstack.sdk.MatchedStep; +import org.zstack.sdk.MatchEvidence; + public class AutoMatchModelServiceByModelResult { - /** - * UUID of the recommended ModelServiceVO. May be null if FALLBACK step - * found no Transformers candidate. - */ public java.lang.String recommendedServiceUuid; public void setRecommendedServiceUuid(java.lang.String recommendedServiceUuid) { this.recommendedServiceUuid = recommendedServiceUuid; @@ -13,26 +12,19 @@ public java.lang.String getRecommendedServiceUuid() { return this.recommendedServiceUuid; } - /** - * Which matching step produced this recommendation: - * USER_PRESET | FILE_FORMAT | PIPELINE_TAG | FALLBACK - */ - public java.lang.String matchedByStep; - public void setMatchedByStep(java.lang.String matchedByStep) { + public MatchedStep matchedByStep; + public void setMatchedByStep(MatchedStep matchedByStep) { this.matchedByStep = matchedByStep; } - public java.lang.String getMatchedByStep() { + public MatchedStep getMatchedByStep() { return this.matchedByStep; } - /** - * Diagnostic evidence for the match decision. - */ - public java.util.LinkedHashMap evidence; - public void setEvidence(java.util.LinkedHashMap evidence) { + public MatchEvidence evidence; + public void setEvidence(MatchEvidence evidence) { this.evidence = evidence; } - public java.util.LinkedHashMap getEvidence() { + public MatchEvidence getEvidence() { return this.evidence; } diff --git a/sdk/src/main/java/org/zstack/sdk/MatchEvidence.java b/sdk/src/main/java/org/zstack/sdk/MatchEvidence.java new file mode 100644 index 00000000000..3d297660fc0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/MatchEvidence.java @@ -0,0 +1,47 @@ +package org.zstack.sdk; + + + +public class MatchEvidence { + + public java.lang.String matchedRefUuid; + public void setMatchedRefUuid(java.lang.String matchedRefUuid) { + this.matchedRefUuid = matchedRefUuid; + } + public java.lang.String getMatchedRefUuid() { + return this.matchedRefUuid; + } + + public java.lang.String matchedFileExtension; + public void setMatchedFileExtension(java.lang.String matchedFileExtension) { + this.matchedFileExtension = matchedFileExtension; + } + public java.lang.String getMatchedFileExtension() { + return this.matchedFileExtension; + } + + public java.lang.String matchedPipelineTag; + public void setMatchedPipelineTag(java.lang.String matchedPipelineTag) { + this.matchedPipelineTag = matchedPipelineTag; + } + public java.lang.String getMatchedPipelineTag() { + return this.matchedPipelineTag; + } + + public java.util.List detectedPipelineTags; + public void setDetectedPipelineTags(java.util.List detectedPipelineTags) { + this.detectedPipelineTags = detectedPipelineTags; + } + public java.util.List getDetectedPipelineTags() { + return this.detectedPipelineTags; + } + + public java.lang.String warning; + public void setWarning(java.lang.String warning) { + this.warning = warning; + } + public java.lang.String getWarning() { + return this.warning; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/MatchedStep.java b/sdk/src/main/java/org/zstack/sdk/MatchedStep.java new file mode 100644 index 00000000000..65b0607c986 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/MatchedStep.java @@ -0,0 +1,8 @@ +package org.zstack.sdk; + +public enum MatchedStep { + USER_PRESET, + FILE_FORMAT, + PIPELINE_TAG, + FALLBACK, +} diff --git a/sdk/src/main/java/org/zstack/sdk/ModelServiceRefInventory.java b/sdk/src/main/java/org/zstack/sdk/ModelServiceRefInventory.java index 93f3f18ea78..e658e48914c 100644 --- a/sdk/src/main/java/org/zstack/sdk/ModelServiceRefInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/ModelServiceRefInventory.java @@ -28,4 +28,12 @@ public java.lang.String getModelServiceUuid() { return this.modelServiceUuid; } + public java.lang.Boolean isDefault; + public void setIsDefault(java.lang.Boolean isDefault) { + this.isDefault = isDefault; + } + public java.lang.Boolean getIsDefault() { + return this.isDefault; + } + } From 165548d901bf88ea29a2573cb3cdea31ba8ff9ca Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Thu, 7 May 2026 15:24:44 +0800 Subject: [PATCH 21/56] [ai]: make schema strict-mode safe Review found the new ModelServiceRefVO createDate column used a zero-date default, which is unsafe under strict SQL mode. The upgrade now adds the column as nullable, backfills existing rows, then tightens it to NOT NULL with CURRENT_TIMESTAMP. This also adds the shared AI error code consumed by the premium review fix. Constraint: Premium branch references CloudOperationsErrorCode from zstack utils Rejected: Keep zero-date default | fails SQL coding rules and strict-mode upgrades Confidence: high Scope-risk: narrow Tested: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn -pl utils -DskipTests install Tested: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn -pl sdk -DskipTests install Not-tested: Full database migration against a live strict-mode MySQL instance Resolves: ZSTAC-84025 Change-Id: Ic0a63eec1e3db23e4bb8843efd8e2aee143dce21 --- conf/db/upgrade/V5.5.22__schema.sql | 16 +++++++++++++++- .../clouderrorcode/CloudOperationsErrorCode.java | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index f680641fbdc..000e130680c 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -14,4 +14,18 @@ CALL ADD_COLUMN('ModelVO', 'manifestJson', 'TEXT', 1, NULL); -- ZSTAC-84025: Add createDate/lastOpDate to ModelServiceRefVO so the auto-match Matcher can -- pick the earliest isDefault=true row when DB has the rare 2+ defaults anomaly (Q5). ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; -ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'; +ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `createDate` TIMESTAMP NULL DEFAULT NULL; + +DROP PROCEDURE IF EXISTS backfill_model_service_ref_create_date; +DELIMITER $$ +CREATE PROCEDURE backfill_model_service_ref_create_date() +BEGIN + UPDATE `zstack`.`ModelServiceRefVO` + SET `createDate` = CURRENT_TIMESTAMP + WHERE `createDate` IS NULL OR `createDate` = '0000-00-00 00:00:00'; +END $$ +DELIMITER ; +CALL backfill_model_service_ref_create_date(); +DROP PROCEDURE IF EXISTS backfill_model_service_ref_create_date; + +ALTER TABLE `zstack`.`ModelServiceRefVO` MODIFY COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index c38599da944..0c66ce52f55 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -14944,6 +14944,7 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_AI_10163 = "ORG_ZSTACK_AI_10163"; public static final String ORG_ZSTACK_AI_10164 = "ORG_ZSTACK_AI_10164"; public static final String ORG_ZSTACK_AI_10165 = "ORG_ZSTACK_AI_10165"; + public static final String ORG_ZSTACK_AI_10166 = "ORG_ZSTACK_AI_10166"; public static final String ORG_ZSTACK_CORE_CLOUDBUS_10000 = "ORG_ZSTACK_CORE_CLOUDBUS_10000"; From 1b617a79a52d76d50cecc5f2746946e6a19ebbcc Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Thu, 7 May 2026 15:49:23 +0800 Subject: [PATCH 22/56] [ai]: avoid second timestamp default CI hit MySQL error 1293 because ModelServiceRefVO.lastOpDate already uses TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, and older MySQL/MariaDB versions allow only one automatic TIMESTAMP column per table. Keep createDate non-zero with a fixed default while the migration backfills existing rows with CURRENT_TIMESTAMP and premium ModelServiceRefVO prePersist sets real creation time for new JPA inserts. Constraint: Older MySQL/MariaDB permits only one automatic TIMESTAMP column per table Rejected: DEFAULT CURRENT_TIMESTAMP on createDate | conflicts with lastOpDate automatic timestamp Confidence: high Scope-risk: narrow Tested: git diff --check Tested: rg createDate/current timestamp/default checks in V5.5.22__schema.sql Tested: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn -pl utils -DskipTests install Not-tested: Full Flyway migration against the CI MySQL image Resolves: ZSTAC-84025 Change-Id: I095a6818443441409c84988dafbb6c16ef5d8e54 --- conf/db/upgrade/V5.5.22__schema.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index 000e130680c..5d241582609 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -28,4 +28,7 @@ DELIMITER ; CALL backfill_model_service_ref_create_date(); DROP PROCEDURE IF EXISTS backfill_model_service_ref_create_date; -ALTER TABLE `zstack`.`ModelServiceRefVO` MODIFY COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; +-- Older MySQL/MariaDB versions allow only one TIMESTAMP column with CURRENT_TIMESTAMP +-- in DEFAULT or ON UPDATE. lastOpDate already uses it, so keep createDate non-zero +-- and let ModelServiceRefVO.@PrePersist populate the real creation time for new rows. +ALTER TABLE `zstack`.`ModelServiceRefVO` MODIFY COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00'; From 621c2958a0e5bd2ea47b9155ac9c531f947845af Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Thu, 7 May 2026 15:57:41 +0800 Subject: [PATCH 23/56] [ai]: drop redundant isDefault backfill Code review noted that adding ModelServiceRefVO.isDefault as NOT NULL DEFAULT 0 already initializes existing rows, so the immediate UPDATE to the same value only adds unnecessary migration work. The schema keeps the defaulted column and removes the redundant write.\n\nConstraint: MySQL initializes existing rows when adding a NOT NULL column with a DEFAULT\nRejected: Keep explicit UPDATE | unnecessary table write during upgrade\nConfidence: high\nScope-risk: narrow\nTested: git diff --check\nTested: rg check for redundant isDefault UPDATE and zero-date defaults in V5.5.22__schema.sql\nTested: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn -pl utils -DskipTests install\nNot-tested: Full Flyway migration against CI database image Resolves: ZSTAC-84025 Change-Id: I062d884ed6232fa603a6ecfd68c2124db85c5ed6 --- conf/db/upgrade/V5.5.22__schema.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index 5d241582609..94b14f06535 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -4,9 +4,6 @@ CALL ADD_COLUMN('ModelVO', 'pipelineTag', 'VARCHAR(64)', 1, NULL); -- ZSTAC-84025: Add isDefault to ModelServiceRefVO to mark the default inference template per model ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `isDefault` TINYINT(1) NOT NULL DEFAULT 0; --- Backfill isDefault: all existing refs default to 0 (no default template designated) -UPDATE `zstack`.`ModelServiceRefVO` SET `isDefault` = 0; - -- ZSTAC-84025-F2: Add manifestJson to ModelVO so Step 1 (file format) of the auto-match Matcher can -- parse file_types/file_extensions from the manifest returned by the aios agent. CALL ADD_COLUMN('ModelVO', 'manifestJson', 'TEXT', 1, NULL); From 96fe476ec6fc8ca4c7f63d6023e70867f1b1fda6 Mon Sep 17 00:00:00 2001 From: "haoyu.ding" Date: Wed, 4 Feb 2026 11:24:42 +0800 Subject: [PATCH 24/56] [utils]: Network group high availability strategy DBImpact Resolves: ZSTAC-81413 Change-Id: I6a7574656467636e686377756f716d67707a7063 --- conf/db/upgrade/V5.5.22__schema.sql | 49 +++++++ .../java/org/zstack/kvm/KVMAgentCommands.java | 46 ++++++ .../main/java/org/zstack/kvm/KVMConstant.java | 3 + sdk/src/main/java/SourceClassMap.java | 2 + .../sdk/ChangeHaNetworkGroupStateAction.java | 104 +++++++++++++ .../sdk/ChangeHaNetworkGroupStateResult.java | 14 ++ .../sdk/CreateHaNetworkGroupAction.java | 119 +++++++++++++++ .../sdk/CreateHaNetworkGroupResult.java | 14 ++ .../sdk/DeleteHaNetworkGroupAction.java | 104 +++++++++++++ .../sdk/DeleteHaNetworkGroupResult.java | 7 + .../zstack/sdk/HaNetworkGroupInventory.java | 79 ++++++++++ .../zstack/sdk/QueryHaNetworkGroupAction.java | 75 ++++++++++ .../zstack/sdk/QueryHaNetworkGroupResult.java | 22 +++ .../sdk/UpdateHaNetworkGroupAction.java | 113 +++++++++++++++ .../sdk/UpdateHaNetworkGroupResult.java | 14 ++ .../simulator/kvm/KVMSimulatorConfig.java | 3 + .../simulator/kvm/KVMSimulatorController.java | 32 ++++ .../java/org/zstack/testlib/ApiHelper.groovy | 137 ++++++++++++++++++ .../java/org/zstack/testlib/EnvSpec.groovy | 3 +- .../org/zstack/testlib/KVMSimulator.groovy | 12 ++ .../CloudOperationsErrorCode.java | 36 +++++ 21 files changed, 987 insertions(+), 1 deletion(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/HaNetworkGroupInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupResult.java diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index 94b14f06535..8981b3f1920 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -29,3 +29,52 @@ DROP PROCEDURE IF EXISTS backfill_model_service_ref_create_date; -- in DEFAULT or ON UPDATE. lastOpDate already uses it, so keep createDate non-zero -- and let ModelServiceRefVO.@PrePersist populate the real creation time for new rows. ALTER TABLE `zstack`.`ModelServiceRefVO` MODIFY COLUMN `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00'; + +CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupVO` ( + `uuid` VARCHAR(32) NOT NULL UNIQUE COMMENT 'uuid', + `name` VARCHAR(255) NOT NULL, + `description` VARCHAR(2048) DEFAULT NULL, + `type` VARCHAR(128) NOT NULL, + `minAvailableCount` INT(10) NOT NULL DEFAULT 1, + `state` VARCHAR(32) NOT NULL DEFAULT 'Enabled', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`uuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupL3NetworkRefVO` ( + `uuid` VARCHAR(32) NOT NULL UNIQUE COMMENT 'uuid', + `haNetworkGroupUuid` VARCHAR(32) NOT NULL, + `l3NetworkUuid` VARCHAR(32) NOT NULL, + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`uuid`), + INDEX `idxHaNetworkGroupL3NetworkRefVOhaNetworkGroupUuid` (`haNetworkGroupUuid`), + UNIQUE INDEX `ukHaNetworkGroupL3NetworkRefVOl3NetworkUuid` (`l3NetworkUuid`), + CONSTRAINT `fkHaNetworkGroupL3NetworkRefVOHaNetworkGroupVO` FOREIGN KEY (`haNetworkGroupUuid`) REFERENCES `zstack`.`HaNetworkGroupVO` (`uuid`) ON DELETE CASCADE, + CONSTRAINT `fkHaNetworkGroupL3NetworkRefVOL3NetworkEO` FOREIGN KEY (`l3NetworkUuid`) REFERENCES `zstack`.`L3NetworkEO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`HostHaNetworkGroupStatusVO` ( + `uuid` VARCHAR(32) NOT NULL UNIQUE COMMENT 'uuid', + `hostUuid` VARCHAR(32) NOT NULL, + `networkGroupUuid` VARCHAR(32) NOT NULL, + `status` VARCHAR(32) NOT NULL DEFAULT 'Unknown', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`uuid`), + UNIQUE INDEX `ukHostHaNetworkGroupStatusVOHostUuidNetworkGroupUuid` (`hostUuid`, `networkGroupUuid`), + INDEX `idxHostHaNetworkGroupStatusVOhostUuid` (`hostUuid`), + INDEX `idxHostHaNetworkGroupStatusVOnetworkGroupUuid` (`networkGroupUuid`), + CONSTRAINT `fkHostHaNetworkGroupStatusVOHostEO` FOREIGN KEY (`hostUuid`) REFERENCES `zstack`.`HostEO` (`uuid`) ON DELETE CASCADE, + CONSTRAINT `fkHostHaNetworkGroupStatusVOHaNetworkGroupVO` FOREIGN KEY (`networkGroupUuid`) REFERENCES `zstack`.`HaNetworkGroupVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupGlobalConfigVersionVO` ( + `name` VARCHAR(64) NOT NULL, + `version` BIGINT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT IGNORE INTO `zstack`.`HaNetworkGroupGlobalConfigVersionVO` (`name`, `version`) +VALUES ('ha-network-group', 0); diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java index 90e576cad7f..ff737c20e83 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java @@ -1014,6 +1014,42 @@ public static class SetVmConsolePasswordLiveCmd extends AgentCommand implements public void setPassword(String password) { this.password = password; } } + public static class SetupVmHaEnabledMetadataLiveCmd extends AgentCommand implements Serializable { + @GrayVersion(value = "5.5.22") + private String vmUuid; + @GrayVersion(value = "5.5.22") + private Boolean enableHa; + + public String getVmUuid() { + return vmUuid; + } + + public void setVmUuid(String vmUuid) { + this.vmUuid = vmUuid; + } + + public Boolean getEnableHa() { + return enableHa; + } + + public void setEnableHa(Boolean enableHa) { + this.enableHa = enableHa; + } + } + + public static class ReconcileVmHaEnabledMetadataLiveCmd extends AgentCommand implements Serializable { + @GrayVersion(value = "5.5.22") + private List neverStopVmUuids; + + public List getNeverStopVmUuids() { + return neverStopVmUuids; + } + + public void setNeverStopVmUuids(List neverStopVmUuids) { + this.neverStopVmUuids = neverStopVmUuids; + } + } + public static class UpdateL2NetworkCmd extends AgentCommand { private String physicalInterfaceName; private String bridgeName; @@ -2236,6 +2272,8 @@ public static class StartVmCmd extends vdiCmd implements VmAddOnsCmd { private String nestedVirtualization; @GrayVersion(value = "5.0.0") private String hostManagementIp; + @GrayVersion(value = "5.5.22") + private Boolean enableHa; @GrayVersion(value = "5.0.0") private String clock; @GrayVersion(value = "5.0.0") @@ -2726,6 +2764,14 @@ public void setHostManagementIp(String hostManagementIp) { this.hostManagementIp = hostManagementIp; } + public Boolean getEnableHa() { + return enableHa; + } + + public void setEnableHa(Boolean enableHa) { + this.enableHa = enableHa; + } + public VolumeTO getRootVolume() { return rootVolume; } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java index 314ff983470..5f08e6fdb98 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java @@ -133,6 +133,9 @@ public interface KVMConstant { String KVM_BLOCK_PULL_VOLUME_PATH = "/vm/volume/blockpull"; String TAKE_VM_CONSOLE_SCREENSHOT_PATH = "/vm/console/screenshot"; String UPDATE_VM_CONSOLE_PASSWORD_PATH = "/host/vm/updateConsolePassword/live"; + String SETUP_VM_HA_ENABLED_METADATA_LIVE_PATH = "/host/vm/setupHaEnabledMetadata/live"; + String RECONCILE_VM_HA_ENABLED_METADATA_LIVE_PATH = "/host/vm/reconcileHaEnabledMetadata/live"; + String HA_NETWORK_GROUP_SYNC_PATH = "/ha/networkgroup/sync"; String KVM_HOST_IPSET_ATTACH_NIC_PATH = "/network/ipset/attach"; String KVM_HOST_IPSET_DETACH_NIC_PATH = "/network/ipset/detach"; diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 72fbac9b302..4190373705a 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -187,6 +187,7 @@ public class SourceClassMap { put("org.zstack.guesttools.GuestVmScriptInventory", "org.zstack.sdk.GuestVmScriptInventory"); put("org.zstack.guesttools.InvocationRecord", "org.zstack.sdk.InvocationRecord"); put("org.zstack.guesttools.InvocationRecordDetail", "org.zstack.sdk.InvocationRecordDetail"); + put("org.zstack.ha.HaNetworkGroupInventory", "org.zstack.sdk.HaNetworkGroupInventory"); put("org.zstack.ha.HaStrategyConditionInventory", "org.zstack.sdk.HaStrategyConditionInventory"); put("org.zstack.header.acl.AccessControlListEntryInventory", "org.zstack.sdk.AccessControlListEntryInventory"); put("org.zstack.header.acl.AccessControlListInventory", "org.zstack.sdk.AccessControlListInventory"); @@ -1124,6 +1125,7 @@ public class SourceClassMap { put("org.zstack.sdk.GuestVmScriptExecutedRecordInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordInventory"); put("org.zstack.sdk.GuestVmScriptInventory", "org.zstack.guesttools.GuestVmScriptInventory"); put("org.zstack.sdk.H3cSdnControllerTenantInventory", "org.zstack.sdnController.header.H3cSdnControllerTenantInventory"); + put("org.zstack.sdk.HaNetworkGroupInventory", "org.zstack.ha.HaNetworkGroupInventory"); put("org.zstack.sdk.HaStrategyConditionInventory", "org.zstack.ha.HaStrategyConditionInventory"); put("org.zstack.sdk.HaiTaiSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory"); put("org.zstack.sdk.HardwareL2VxlanNetworkInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateAction.java b/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateAction.java new file mode 100644 index 00000000000..81cd9a1925c --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateAction.java @@ -0,0 +1,104 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class ChangeHaNetworkGroupStateAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.ChangeHaNetworkGroupStateResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String uuid; + + @Param(required = true, validValues = {"enable","disable"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String stateEvent; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.ChangeHaNetworkGroupStateResult value = res.getResult(org.zstack.sdk.ChangeHaNetworkGroupStateResult.class); + ret.value = value == null ? new org.zstack.sdk.ChangeHaNetworkGroupStateResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "PUT"; + info.path = "/ha/network-groups/{uuid}/actions"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "changeHaNetworkGroupState"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateResult.java b/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateResult.java new file mode 100644 index 00000000000..b579aa5771d --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/ChangeHaNetworkGroupStateResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.HaNetworkGroupInventory; + +public class ChangeHaNetworkGroupStateResult { + public HaNetworkGroupInventory inventory; + public void setInventory(HaNetworkGroupInventory inventory) { + this.inventory = inventory; + } + public HaNetworkGroupInventory getInventory() { + return this.inventory; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupAction.java b/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupAction.java new file mode 100644 index 00000000000..4ec460f54a1 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupAction.java @@ -0,0 +1,119 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class CreateHaNetworkGroupAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.CreateHaNetworkGroupResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String name; + + @Param(required = false, maxLength = 2048, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String description; + + @Param(required = true, validValues = {"Flat","Public"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String type; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, numberRange = {1L,2147483647L}, noTrim = false) + public int minAvailableCount = 0; + + @Param(required = true, nonempty = true, nullElements = false, emptyString = true, noTrim = false) + public java.util.List l3NetworkUuids; + + @Param(required = false) + public java.lang.String resourceUuid; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.util.List tagUuids; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.CreateHaNetworkGroupResult value = res.getResult(org.zstack.sdk.CreateHaNetworkGroupResult.class); + ret.value = value == null ? new org.zstack.sdk.CreateHaNetworkGroupResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "POST"; + info.path = "/ha/network-groups"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupResult.java b/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupResult.java new file mode 100644 index 00000000000..64326458698 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/CreateHaNetworkGroupResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.HaNetworkGroupInventory; + +public class CreateHaNetworkGroupResult { + public HaNetworkGroupInventory inventory; + public void setInventory(HaNetworkGroupInventory inventory) { + this.inventory = inventory; + } + public HaNetworkGroupInventory getInventory() { + return this.inventory; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupAction.java b/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupAction.java new file mode 100644 index 00000000000..1738b04a0e0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupAction.java @@ -0,0 +1,104 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class DeleteHaNetworkGroupAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.DeleteHaNetworkGroupResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String uuid; + + @Param(required = false) + public java.lang.String deleteMode = "Permissive"; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.DeleteHaNetworkGroupResult value = res.getResult(org.zstack.sdk.DeleteHaNetworkGroupResult.class); + ret.value = value == null ? new org.zstack.sdk.DeleteHaNetworkGroupResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "DELETE"; + info.path = "/ha/network-groups/{uuid}"; + info.needSession = true; + info.needPoll = true; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupResult.java b/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupResult.java new file mode 100644 index 00000000000..602e0408c62 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/DeleteHaNetworkGroupResult.java @@ -0,0 +1,7 @@ +package org.zstack.sdk; + + + +public class DeleteHaNetworkGroupResult { + +} diff --git a/sdk/src/main/java/org/zstack/sdk/HaNetworkGroupInventory.java b/sdk/src/main/java/org/zstack/sdk/HaNetworkGroupInventory.java new file mode 100644 index 00000000000..af8235e50e0 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/HaNetworkGroupInventory.java @@ -0,0 +1,79 @@ +package org.zstack.sdk; + + + +public class HaNetworkGroupInventory { + + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + + public java.lang.String name; + public void setName(java.lang.String name) { + this.name = name; + } + public java.lang.String getName() { + return this.name; + } + + public java.lang.String description; + public void setDescription(java.lang.String description) { + this.description = description; + } + public java.lang.String getDescription() { + return this.description; + } + + public java.lang.String type; + public void setType(java.lang.String type) { + this.type = type; + } + public java.lang.String getType() { + return this.type; + } + + public int minAvailableCount; + public void setMinAvailableCount(int minAvailableCount) { + this.minAvailableCount = minAvailableCount; + } + public int getMinAvailableCount() { + return this.minAvailableCount; + } + + public java.lang.String state; + public void setState(java.lang.String state) { + this.state = state; + } + public java.lang.String getState() { + return this.state; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + + public java.util.Set l3NetworkUuids; + public void setL3NetworkUuids(java.util.Set l3NetworkUuids) { + this.l3NetworkUuids = l3NetworkUuids; + } + public java.util.Set getL3NetworkUuids() { + return this.l3NetworkUuids; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupAction.java b/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupAction.java new file mode 100644 index 00000000000..f358fa563ef --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupAction.java @@ -0,0 +1,75 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class QueryHaNetworkGroupAction extends QueryAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.QueryHaNetworkGroupResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.QueryHaNetworkGroupResult value = res.getResult(org.zstack.sdk.QueryHaNetworkGroupResult.class); + ret.value = value == null ? new org.zstack.sdk.QueryHaNetworkGroupResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "GET"; + info.path = "/ha/network-groups"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupResult.java b/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupResult.java new file mode 100644 index 00000000000..b865e2ded08 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/QueryHaNetworkGroupResult.java @@ -0,0 +1,22 @@ +package org.zstack.sdk; + + + +public class QueryHaNetworkGroupResult { + public java.util.List inventories; + public void setInventories(java.util.List inventories) { + this.inventories = inventories; + } + public java.util.List getInventories() { + return this.inventories; + } + + public java.lang.Long total; + public void setTotal(java.lang.Long total) { + this.total = total; + } + public java.lang.Long getTotal() { + return this.total; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupAction.java b/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupAction.java new file mode 100644 index 00000000000..6bbc6dc2350 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupAction.java @@ -0,0 +1,113 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class UpdateHaNetworkGroupAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.UpdateHaNetworkGroupResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String uuid; + + @Param(required = false, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String name; + + @Param(required = false, maxLength = 2048, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String description; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, numberRange = {1L,2147483647L}, noTrim = false) + public java.lang.Integer minAvailableCount; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.util.List l3NetworkUuids; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.UpdateHaNetworkGroupResult value = res.getResult(org.zstack.sdk.UpdateHaNetworkGroupResult.class); + ret.value = value == null ? new org.zstack.sdk.UpdateHaNetworkGroupResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "PUT"; + info.path = "/ha/network-groups/{uuid}"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "updateHaNetworkGroup"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupResult.java b/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupResult.java new file mode 100644 index 00000000000..d2294f92d05 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/UpdateHaNetworkGroupResult.java @@ -0,0 +1,14 @@ +package org.zstack.sdk; + +import org.zstack.sdk.HaNetworkGroupInventory; + +public class UpdateHaNetworkGroupResult { + public HaNetworkGroupInventory inventory; + public void setInventory(HaNetworkGroupInventory inventory) { + this.inventory = inventory; + } + public HaNetworkGroupInventory getInventory() { + return this.inventory; + } + +} diff --git a/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorConfig.java b/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorConfig.java index 4a1cfaa1798..4fd96811d08 100755 --- a/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorConfig.java +++ b/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorConfig.java @@ -85,6 +85,9 @@ public class KVMSimulatorConfig { public volatile boolean vmSyncSuccess = true; public List hardenVmConsoleCmds = new ArrayList(); public List deleteVmConsoleFirewallCmds = new ArrayList(); + public volatile List setupVmHaEnabledMetadataLiveCmds = new ArrayList(); + public volatile List reconcileVmHaEnabledMetadataLiveCmds = new ArrayList(); + public volatile List syncHaNetworkGroupConfigCmds = new ArrayList(); public Map takeSnapshotCmdSize = new HashMap(); } diff --git a/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorController.java b/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorController.java index 802fffbd702..e58b718cfd7 100755 --- a/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorController.java +++ b/simulator/simulatorImpl/src/main/java/org/zstack/simulator/kvm/KVMSimulatorController.java @@ -705,6 +705,38 @@ private void getVncPort(HttpEntity entity) { replyer.reply(entity, rsp); } + @RequestMapping(value = KVMConstant.SETUP_VM_HA_ENABLED_METADATA_LIVE_PATH, method = RequestMethod.POST) + private @ResponseBody String setupVmHaEnabledMetadataLive(HttpServletRequest req) { + HttpEntity entity = restf.httpServletRequestToHttpEntity(req); + SetupVmHaEnabledMetadataLiveCmd cmd = JSONObjectUtil.toObject(entity.getBody(), SetupVmHaEnabledMetadataLiveCmd.class); + synchronized (config.setupVmHaEnabledMetadataLiveCmds) { + config.setupVmHaEnabledMetadataLiveCmds.add(cmd); + } + replyer.reply(entity, new AgentResponse()); + return null; + } + + @RequestMapping(value = KVMConstant.RECONCILE_VM_HA_ENABLED_METADATA_LIVE_PATH, method = RequestMethod.POST) + private @ResponseBody String reconcileVmHaEnabledMetadataLive(HttpServletRequest req) { + HttpEntity entity = restf.httpServletRequestToHttpEntity(req); + ReconcileVmHaEnabledMetadataLiveCmd cmd = JSONObjectUtil.toObject(entity.getBody(), ReconcileVmHaEnabledMetadataLiveCmd.class); + synchronized (config.reconcileVmHaEnabledMetadataLiveCmds) { + config.reconcileVmHaEnabledMetadataLiveCmds.add(cmd); + } + replyer.reply(entity, new AgentResponse()); + return null; + } + + @RequestMapping(value = KVMConstant.HA_NETWORK_GROUP_SYNC_PATH, method = RequestMethod.POST) + private @ResponseBody String syncHaNetworkGroupConfig(HttpServletRequest req) { + HttpEntity entity = restf.httpServletRequestToHttpEntity(req); + synchronized (config.syncHaNetworkGroupConfigCmds) { + config.syncHaNetworkGroupConfigCmds.add(entity.getBody()); + } + replyer.reply(entity, new AgentResponse()); + return null; + } + @RequestMapping(value=KVMConstant.KVM_LOGOUT_ISCSI_PATH, method=RequestMethod.POST) private @ResponseBody String logoutIscsiTarget(HttpServletRequest req) throws InterruptedException { HttpEntity entity = restf.httpServletRequestToHttpEntity(req); diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index b505a267862..93ba3d61d03 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -5687,6 +5687,33 @@ abstract class ApiHelper { } + def changeHaNetworkGroupState(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.ChangeHaNetworkGroupStateAction.class) Closure c) { + def a = new org.zstack.sdk.ChangeHaNetworkGroupStateAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def changeHostNetworkInterfaceLldpMode(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.ChangeHostNetworkInterfaceLldpModeAction.class) Closure c) { def a = new org.zstack.sdk.ChangeHostNetworkInterfaceLldpModeAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -9683,6 +9710,33 @@ abstract class ApiHelper { } + def createHaNetworkGroup(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.CreateHaNetworkGroupAction.class) Closure c) { + def a = new org.zstack.sdk.CreateHaNetworkGroupAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def createHaiTaiSecretResourcePool(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.CreateHaiTaiSecretResourcePoolAction.class) Closure c) { def a = new org.zstack.sdk.CreateHaiTaiSecretResourcePoolAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -14840,6 +14894,33 @@ abstract class ApiHelper { } + def deleteHaNetworkGroup(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.DeleteHaNetworkGroupAction.class) Closure c) { + def a = new org.zstack.sdk.DeleteHaNetworkGroupAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def deleteHost(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.DeleteHostAction.class) Closure c) { def a = new org.zstack.sdk.DeleteHostAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -31713,6 +31794,35 @@ abstract class ApiHelper { } + def queryHaNetworkGroup(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.QueryHaNetworkGroupAction.class) Closure c) { + def a = new org.zstack.sdk.QueryHaNetworkGroupAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + a.conditions = a.conditions.collect { it.toString() } + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def queryHost(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.QueryHostAction.class) Closure c) { def a = new org.zstack.sdk.QueryHostAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -45107,6 +45217,33 @@ abstract class ApiHelper { } + def updateHaNetworkGroup(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.UpdateHaNetworkGroupAction.class) Closure c) { + def a = new org.zstack.sdk.UpdateHaNetworkGroupAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + def updateHaStrategyCondition(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.UpdateHaStrategyConditionAction.class) Closure c) { def a = new org.zstack.sdk.UpdateHaStrategyConditionAction() a.sessionId = Test.currentEnvSpec?.session?.uuid diff --git a/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy b/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy index 5491d321f1b..e0dbab38c3c 100755 --- a/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy +++ b/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy @@ -707,7 +707,8 @@ class EnvSpec extends ApiHelper implements Node { "EventRecordsVO", "AuditsVO", "AlarmRecordsVO", "VmCrashHistoryVO", "EncryptionIntegrityVO", "FileIntegrityVerificationVO", "EncryptEntityMetadataVO", "VmInstanceDeviceAddressGroupVO", "HostOsCategoryVO", "KvmHostHypervisorMetadataVO", "HaStrategyConditionVO", "SystemTagVO", "ConsoleProxyAgentVO", "ConsoleProxyVO", "XmlHookVO", "SSOServerTokenVO", - "HostNetworkLabelVO", "L3NetworkSequenceNumberVO"]) { + "HostNetworkLabelVO", "L3NetworkSequenceNumberVO", + "HaNetworkGroupGlobalConfigVersionVO"]) { return } diff --git a/testlib/src/main/java/org/zstack/testlib/KVMSimulator.groovy b/testlib/src/main/java/org/zstack/testlib/KVMSimulator.groovy index 81bd88ac6bf..1aeb890345b 100755 --- a/testlib/src/main/java/org/zstack/testlib/KVMSimulator.groovy +++ b/testlib/src/main/java/org/zstack/testlib/KVMSimulator.groovy @@ -691,5 +691,17 @@ class KVMSimulator implements Simulator { spec.simulator(KVMConstant.KVM_HOST_IPSET_SYNC_PATH) { return new KVMAgentCommands.AgentResponse() } + + spec.simulator(KVMConstant.SETUP_VM_HA_ENABLED_METADATA_LIVE_PATH) { + return new KVMAgentCommands.AgentResponse() + } + + spec.simulator(KVMConstant.RECONCILE_VM_HA_ENABLED_METADATA_LIVE_PATH) { + return new KVMAgentCommands.AgentResponse() + } + + spec.simulator(KVMConstant.HA_NETWORK_GROUP_SYNC_PATH) { + return new KVMAgentCommands.AgentResponse() + } } } diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 0c66ce52f55..623abb2face 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -1872,6 +1872,42 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_HA_10018 = "ORG_ZSTACK_HA_10018"; + public static final String ORG_ZSTACK_HA_10019 = "ORG_ZSTACK_HA_10019"; + + public static final String ORG_ZSTACK_HA_10020 = "ORG_ZSTACK_HA_10020"; + + public static final String ORG_ZSTACK_HA_10021 = "ORG_ZSTACK_HA_10021"; + + public static final String ORG_ZSTACK_HA_10022 = "ORG_ZSTACK_HA_10022"; + + public static final String ORG_ZSTACK_HA_10023 = "ORG_ZSTACK_HA_10023"; + + public static final String ORG_ZSTACK_HA_10024 = "ORG_ZSTACK_HA_10024"; + + public static final String ORG_ZSTACK_HA_10025 = "ORG_ZSTACK_HA_10025"; + + public static final String ORG_ZSTACK_HA_10026 = "ORG_ZSTACK_HA_10026"; + + public static final String ORG_ZSTACK_HA_10027 = "ORG_ZSTACK_HA_10027"; + + public static final String ORG_ZSTACK_HA_10028 = "ORG_ZSTACK_HA_10028"; + + public static final String ORG_ZSTACK_HA_10029 = "ORG_ZSTACK_HA_10029"; + + public static final String ORG_ZSTACK_HA_10030 = "ORG_ZSTACK_HA_10030"; + + public static final String ORG_ZSTACK_HA_10031 = "ORG_ZSTACK_HA_10031"; + + public static final String ORG_ZSTACK_HA_10032 = "ORG_ZSTACK_HA_10032"; + + public static final String ORG_ZSTACK_HA_10033 = "ORG_ZSTACK_HA_10033"; + + public static final String ORG_ZSTACK_HA_10034 = "ORG_ZSTACK_HA_10034"; + + public static final String ORG_ZSTACK_HA_10035 = "ORG_ZSTACK_HA_10035"; + + public static final String ORG_ZSTACK_HA_10036 = "ORG_ZSTACK_HA_10036"; + public static final String ORG_ZSTACK_NETWORK_SERVICE_SLB_10000 = "ORG_ZSTACK_NETWORK_SERVICE_SLB_10000"; public static final String ORG_ZSTACK_NETWORK_SERVICE_SLB_10001 = "ORG_ZSTACK_NETWORK_SERVICE_SLB_10001"; From 4eaa430052d4566e4d21a119caa13de389b80852 Mon Sep 17 00:00:00 2001 From: "yaohua.wu" Date: Fri, 1 May 2026 12:37:54 +0800 Subject: [PATCH 25/56] [xinfini]: fail blacklist to prevent split-brain on VM start XInfiniStorageController.blacklist was a no-op (// todo, comp.success()). When ExternalPrimaryStorageKvmFactory's beforeStartVmOnKvm fell back to blacklist after a deactivate failure, the no-op silently allowed the VM to start while a stale client on another host still held write access, risking a split-brain on the volume. 1. Why? xinfini does not implement volume path isolation yet. The blacklist no-op masked the missing capability and let the caller proceed as if the stale client had been fenced. 2. How? Throw OperationFailureException from blacklist with a clear message. Because beforeStartVmOnKvm invokes blacklist with NopeCompletion (which ignores fail()), only an exception can abort the VM start. This makes the unsupported case explicit and conservative until xinfini supports path isolation. 3. Side effects? VM start is aborted when an old active client cannot be deactivated on xinfini. This is the safe behavior; previously such VMs would start with split-brain risk. # Summary of changes (by module): - plugin/xinfini: throw OperationFailureException in blacklist instead of silently returning success. Related: ZSTAC-84963 Change-Id: Ib0092f39a7b23cf7b06442ac9616cb2ce39240b7 (cherry picked from commit 024c44524fb3712956c381a0b6b9204a514e5fa0) --- .../java/org/zstack/xinfini/XInfiniStorageController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugin/xinfini/src/main/java/org/zstack/xinfini/XInfiniStorageController.java b/plugin/xinfini/src/main/java/org/zstack/xinfini/XInfiniStorageController.java index 0626b00ba7a..48a3eed041b 100644 --- a/plugin/xinfini/src/main/java/org/zstack/xinfini/XInfiniStorageController.java +++ b/plugin/xinfini/src/main/java/org/zstack/xinfini/XInfiniStorageController.java @@ -276,8 +276,9 @@ public void deactivate(String installPath, String protocol, ActiveVolumeClient c @Override public void blacklist(String installPath, String protocol, HostInventory h, Completion comp) { - // todo - comp.success(); + throw new OperationFailureException(operr("xinfini does not support volume path isolation yet, " + + "abort starting VM on host[uuid:%s, ip:%s] to prevent split-brain on volume[path:%s, protocol:%s]", + h.getUuid(), h.getManagementIp(), installPath, protocol)); } @Override From bb28dd0c624983d9e94f5622043c9e5b8c841172 Mon Sep 17 00:00:00 2001 From: moyu Date: Sat, 9 May 2026 17:56:33 +0800 Subject: [PATCH 26/56] [sdk]: regenerate SDK for RegexAgainst/NotEqual operators Regenerated by ./runMavenProfile sdk from updated @APIParam.validValues on APIAddLabelToAlarmMsg and APIUpdateAlarmLabelMsg in premium repo (same Jira). Lets SDK clients pass RegexAgainst and NotEqual as the operator field for alarm labels, matching the server-side API interceptor. APIImpact: AddLabelToAlarm/UpdateAlarmLabel SDK Action now accepts RegexAgainst and NotEqual operator values. Resolves: ZSTAC-84454 Change-Id: I71636c616567697566786f667974766a6c757073 --- .../java/org/zstack/sdk/zwatch/alarm/AddLabelToAlarmAction.java | 2 +- .../org/zstack/sdk/zwatch/alarm/UpdateAlarmLabelAction.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AddLabelToAlarmAction.java b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AddLabelToAlarmAction.java index 95b4d5c6283..880b2ffab8e 100644 --- a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AddLabelToAlarmAction.java +++ b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AddLabelToAlarmAction.java @@ -34,7 +34,7 @@ public Result throwExceptionIfError() { @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String value; - @Param(required = true, validValues = {"Regex","Equal"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + @Param(required = true, validValues = {"Regex","Equal","RegexAgainst","NotEqual"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String operator; @Param(required = false) diff --git a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/UpdateAlarmLabelAction.java b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/UpdateAlarmLabelAction.java index a953f33e32b..507a121d590 100644 --- a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/UpdateAlarmLabelAction.java +++ b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/UpdateAlarmLabelAction.java @@ -34,7 +34,7 @@ public Result throwExceptionIfError() { @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String value; - @Param(required = true, validValues = {"Regex","Equal"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + @Param(required = true, validValues = {"Regex","Equal","RegexAgainst","NotEqual"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String operator; @Param(required = false) From bf86016ade75f321efebc51ee1a801f844c718b0 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 11 May 2026 21:45:42 +0800 Subject: [PATCH 27/56] [kvm]: skip known systemd timeout on reconnect Existing host reconnect can fail before kvmagent echo. Ansible masks libvirt sockets with systemctl during deploy. If host systemd D-Bus is stuck, that optional step times out. Continue only for this known mask timeout on reconnect. New host deploy and other ansible failures still fail. Resolves: ZSTAC-77120 Change-Id: I0ef4a535065ff797c9e4cfae5b39c2daa321a4cc --- .../src/main/java/org/zstack/kvm/KVMHost.java | 7 ++++ .../java/org/zstack/kvm/KVMHostUtils.java | 34 +++++++++++++++++++ .../org/zstack/test/kvm/KVMHostUtilsTest.java | 18 ++++++++++ 3 files changed, 59 insertions(+) diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index b485c343d18..48370a2a144 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -5957,6 +5957,13 @@ public void success(Boolean run) { @Override public void fail(ErrorCode errorCode) { + if (KVMHostUtils.shouldContinueReconnectOnAnsibleFailure(info.isNewAdded(), errorCode)) { + logger.warn(String.format( + "kvm ansible failed to mask libvirt sockets because systemd dbus timed out on existing host[uuid:%s, ip:%s], continue reconnect and verify kvmagent, error: %s", + self.getUuid(), self.getManagementIp(), errorCode)); + trigger.next(); + return; + } trigger.fail(errorCode); } }); diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java index 3a0d857ff47..53db539044b 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostUtils.java @@ -5,6 +5,7 @@ import org.zstack.core.CoreGlobalProperty; import org.zstack.core.db.Q; import org.zstack.header.network.l2.*; +import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.tag.SystemTagVO; import org.zstack.header.tag.SystemTagVO_; import org.zstack.header.tag.TagType; @@ -19,6 +20,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Locale; import java.util.Set; /** @@ -145,6 +147,38 @@ public static boolean shouldForceTlsRedeploy(boolean needDeployTlsCert, return allowRestartLibvirtd || isNewAdded; } + public static boolean shouldContinueReconnectOnAnsibleFailure(boolean isNewAdded, ErrorCode errorCode) { + return !isNewAdded && isLibvirtSocketMaskSystemdTimeout(errorCode); + } + + public static boolean isLibvirtSocketMaskSystemdTimeout(ErrorCode errorCode) { + String errorText = collectErrorText(errorCode).toLowerCase(Locale.ROOT); + return errorText.contains("systemctl mask") + && errorText.contains("libvirtd.socket") + && errorText.contains("org.freedesktop.systemd1") + && errorText.contains("timed out") + && (errorText.contains("failed to get properties") + || errorText.contains("failed to activate service")); + } + + private static String collectErrorText(ErrorCode errorCode) { + StringBuilder sb = new StringBuilder(); + ErrorCode cursor = errorCode; + while (cursor != null) { + appendIfNotNull(sb, cursor.getDetails()); + appendIfNotNull(sb, cursor.getDescription()); + appendIfNotNull(sb, cursor.getMessage()); + cursor = cursor.getCause(); + } + return sb.toString(); + } + + private static void appendIfNotNull(StringBuilder sb, String text) { + if (text != null) { + sb.append(text).append('\n'); + } + } + private static SshShell newSsh(String host, String user, String pwd, int port) { SshShell s = new SshShell(); s.setHostname(host); diff --git a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java index 6933d2e9db2..f3c1222a010 100644 --- a/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java +++ b/test/src/test/java/org/zstack/test/kvm/KVMHostUtilsTest.java @@ -2,6 +2,7 @@ import org.junit.Assert; import org.junit.Test; +import org.zstack.header.errorcode.ErrorCode; import org.zstack.kvm.KVMHostUtils; import java.util.Collections; @@ -187,4 +188,21 @@ public void shouldForceTlsRedeploy_newAddedForces() { public void shouldForceTlsRedeploy_reconnectWithoutRestartSkips() { Assert.assertFalse(KVMHostUtils.shouldForceTlsRedeploy(true, false, false)); } + + @Test + public void zstac77120_continueReconnectOnLibvirtSocketMaskSystemdTimeout() { + ErrorCode error = new ErrorCode(); + error.setDetails("[HOST: 192.168.51.12] ERROR: run shell command: systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket failed! stderr: Failed to get properties: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)"); + + Assert.assertTrue(KVMHostUtils.shouldContinueReconnectOnAnsibleFailure(false, error)); + Assert.assertFalse(KVMHostUtils.shouldContinueReconnectOnAnsibleFailure(true, error)); + } + + @Test + public void zstac77120_doNotContinueReconnectOnOtherAnsibleFailures() { + ErrorCode error = new ErrorCode(); + error.setDetails("[HOST: 192.168.51.12] ERROR: run shell command: systemctl restart libvirtd failed! stderr: Job for libvirtd.service failed"); + + Assert.assertFalse(KVMHostUtils.shouldContinueReconnectOnAnsibleFailure(false, error)); + } } From ff13481ce67a94728c1b8c3a86ce05cde934337c Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 11 May 2026 21:39:23 +0800 Subject: [PATCH 28/56] [conf]: recover stale mariadb socket Remove an unused MariaDB socket before zstack-server start. Restart MariaDB so MN can recover after power loss. Resolves: ZSTAC-83507 Change-Id: Ifb8255f7c9021ef12353f058a0230fe66989b590 --- conf/install/zstack-server | 88 +++++++++ .../test_zstack_server_mariadb_recovery.sh | 173 ++++++++++++++++++ 2 files changed, 261 insertions(+) create mode 100755 test/src/test/bash/test_zstack_server_mariadb_recovery.sh diff --git a/conf/install/zstack-server b/conf/install/zstack-server index dbfd89047ab..5c17ff816f8 100755 --- a/conf/install/zstack-server +++ b/conf/install/zstack-server @@ -17,6 +17,9 @@ pidfile='/var/run/zstack/zstack-server.pid' TOMCAT_PATH="/usr/local/zstack/root/apache-tomcat" zstack_app=${ZSTACK_HOME-"$TOMCAT_PATH/webapps/zstack"} +MARIADB_SERVICE=${ZSTACK_MARIADB_SERVICE:-mariadb} +MARIADB_SOCKET=${ZSTACK_MARIADB_SOCKET:-/var/lib/mysql/mysql.sock} +ZSTACK_SERVER_LOG_DIR=${ZSTACK_SERVER_LOG_DIR:-/var/log/zstack} which zstack-ctl &>/dev/null if [ $? -ne 0 ]; then @@ -32,7 +35,92 @@ stop_zstack(){ ZSTACK_HOME=$zstack_app HOME=`echo ~root` zstack-ctl stop } +log_zstack_server() { + mkdir -p "$ZSTACK_SERVER_LOG_DIR" 2>/dev/null + if [ -d "$ZSTACK_SERVER_LOG_DIR" ]; then + echo "$@" >> "$ZSTACK_SERVER_LOG_DIR/zstack-server.log" + else + echo "$@" + fi +} + +mariadb_service_exists() { + if command -v systemctl >/dev/null 2>&1; then + systemctl list-unit-files "$MARIADB_SERVICE.service" 2>/dev/null | grep -q "$MARIADB_SERVICE.service" && return 0 + fi + + if command -v service >/dev/null 2>&1; then + service "$MARIADB_SERVICE" status >/dev/null 2>&1 && return 0 + fi + + [ -x "/etc/init.d/$MARIADB_SERVICE" ] && return 0 + + return 1 +} + +mariadb_is_active() { + if command -v systemctl >/dev/null 2>&1; then + systemctl is-active --quiet "$MARIADB_SERVICE" >/dev/null 2>&1 && return 0 + fi + + if command -v service >/dev/null 2>&1; then + service "$MARIADB_SERVICE" status >/dev/null 2>&1 && return 0 + fi + + if [ -x "/etc/init.d/$MARIADB_SERVICE" ]; then + "/etc/init.d/$MARIADB_SERVICE" status >/dev/null 2>&1 && return 0 + fi + + return 1 +} + +socket_is_used() { + has_probe=false + + if command -v lsof >/dev/null 2>&1; then + has_probe=true + lsof -t -- "$MARIADB_SOCKET" >/dev/null 2>&1 && return 0 + fi + + if command -v fuser >/dev/null 2>&1; then + has_probe=true + fuser "$MARIADB_SOCKET" >/dev/null 2>&1 && return 0 + fi + + [ "$has_probe" = "true" ] || return 2 + + return 1 +} + +start_mariadb_service() { + if command -v systemctl >/dev/null 2>&1; then + systemctl reset-failed "$MARIADB_SERVICE" >/dev/null 2>&1 + systemctl start "$MARIADB_SERVICE" + return $? + fi + + service "$MARIADB_SERVICE" start +} + +recover_mariadb_stale_socket() { + [ "$ZSTACK_RECOVER_MARIADB_SOCKET" = "false" ] && return 0 + [ -e "$MARIADB_SOCKET" ] || return 0 + mariadb_service_exists || return 0 + mariadb_is_active && return 0 + socket_is_used + socket_status=$? + [ "$socket_status" -eq 0 ] && return 0 + [ "$socket_status" -eq 2 ] && return 0 + + log_zstack_server "removing stale MariaDB socket $MARIADB_SOCKET before zstack start" + rm -f "$MARIADB_SOCKET" || return 1 + + log_zstack_server "starting $MARIADB_SERVICE service before zstack start" + start_mariadb_service +} + start_zstack(){ + recover_mariadb_stale_socket || return $? ZSTACK_HOME=$zstack_app HOME=`echo ~root` zstack-ctl start } diff --git a/test/src/test/bash/test_zstack_server_mariadb_recovery.sh b/test/src/test/bash/test_zstack_server_mariadb_recovery.sh new file mode 100755 index 00000000000..a7e974fc8b1 --- /dev/null +++ b/test/src/test/bash/test_zstack_server_mariadb_recovery.sh @@ -0,0 +1,173 @@ +#!/bin/sh + +set -eu + +script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +repo_dir=$(CDPATH= cd -- "$script_dir/../../../.." && pwd) +script="$repo_dir/conf/install/zstack-server" +tmp_dir=$(mktemp -d) + +cleanup() { + rm -rf "$tmp_dir" +} + +trap cleanup EXIT + +bin_dir="$tmp_dir/bin" +mkdir -p "$bin_dir" + +cat > "$bin_dir/zstack-ctl" <<'EOF' +#!/bin/sh +echo "zstack-ctl $*" >> "$ZSTUB_CALLS" +exit 0 +EOF + +cat > "$bin_dir/systemctl" <<'EOF' +#!/bin/sh +case "$1 $2" in + "list-unit-files mariadb.service") + echo "mariadb.service enabled" + exit 0 + ;; + "is-active --quiet") + [ "${ZSTUB_MARIADB_ACTIVE:-false}" = "true" ] && exit 0 + exit 3 + ;; + "reset-failed mariadb") + echo "systemctl reset-failed mariadb" >> "$ZSTUB_CALLS" + exit 0 + ;; + "start mariadb") + echo "systemctl start mariadb" >> "$ZSTUB_CALLS" + exit 0 + ;; +esac +exit 1 +EOF + +cat > "$bin_dir/lsof" <<'EOF' +#!/bin/sh +exit 1 +EOF + +cat > "$bin_dir/fuser" <<'EOF' +#!/bin/sh +exit 1 +EOF + +chmod +x "$bin_dir/zstack-ctl" "$bin_dir/systemctl" "$bin_dir/lsof" "$bin_dir/fuser" + +assert_contains() { + grep -F "$1" "$2" >/dev/null || { + echo "expected '$1' in $2" >&2 + exit 1 + } +} + +calls="$tmp_dir/calls" +socket="$tmp_dir/mysql.sock" +log_dir="$tmp_dir/log" +touch "$socket" + +PATH="$bin_dir:$PATH" \ +ZSTUB_CALLS="$calls" \ +ZSTACK_MARIADB_SOCKET="$socket" \ +ZSTACK_SERVER_LOG_DIR="$log_dir" \ +sh "$script" start >/dev/null + +[ ! -e "$socket" ] || { + echo "expected stale socket to be removed" >&2 + exit 1 +} +assert_contains "systemctl reset-failed mariadb" "$calls" +assert_contains "systemctl start mariadb" "$calls" +assert_contains "zstack-ctl start" "$calls" + +sysv_bin_dir="$tmp_dir/sysv-bin" +mkdir -p "$sysv_bin_dir" +cp "$bin_dir/zstack-ctl" "$bin_dir/lsof" "$bin_dir/fuser" "$sysv_bin_dir/" +ln -s /usr/bin/grep "$sysv_bin_dir/grep" +cat > "$sysv_bin_dir/which" <<'EOF' +#!/bin/sh +command -v "$1" +EOF +cat > "$sysv_bin_dir/service" <<'EOF' +#!/bin/sh +if [ "$1 $2" = "mariadb status" ]; then + echo "mariadb is running" + exit 0 +fi +exit 1 +EOF +chmod +x "$sysv_bin_dir/which" "$sysv_bin_dir/service" + +calls="$tmp_dir/calls-sysv-active" +socket="$tmp_dir/mysql-sysv-active.sock" +touch "$socket" + +PATH="$sysv_bin_dir" \ +ZSTUB_CALLS="$calls" \ +ZSTACK_MARIADB_SOCKET="$socket" \ +ZSTACK_SERVER_LOG_DIR="$log_dir" \ +/bin/sh "$script" start >/dev/null + +[ -e "$socket" ] || { + echo "expected active SysV MariaDB socket to be kept" >&2 + exit 1 +} +if grep -F "systemctl start mariadb" "$calls" >/dev/null 2>&1; then + echo "unexpected call: systemctl start mariadb" >&2 + exit 1 +fi +assert_contains "zstack-ctl start" "$calls" + +no_probe_bin_dir="$tmp_dir/no-probe-bin" +mkdir -p "$no_probe_bin_dir" +cp "$bin_dir/zstack-ctl" "$bin_dir/systemctl" "$no_probe_bin_dir/" +ln -s /usr/bin/grep "$no_probe_bin_dir/grep" +cat > "$no_probe_bin_dir/which" <<'EOF' +#!/bin/sh +command -v "$1" +EOF +chmod +x "$no_probe_bin_dir/which" + +calls="$tmp_dir/calls-no-probe" +socket="$tmp_dir/mysql-no-probe.sock" +touch "$socket" + +PATH="$no_probe_bin_dir" \ +ZSTUB_CALLS="$calls" \ +ZSTACK_MARIADB_SOCKET="$socket" \ +ZSTACK_SERVER_LOG_DIR="$log_dir" \ +/bin/sh "$script" start >/dev/null + +[ -e "$socket" ] || { + echo "expected socket to be kept when lsof and fuser are unavailable" >&2 + exit 1 +} +if grep -F "systemctl start mariadb" "$calls" >/dev/null 2>&1; then + echo "unexpected call: systemctl start mariadb" >&2 + exit 1 +fi +assert_contains "zstack-ctl start" "$calls" + +calls="$tmp_dir/calls-active" +socket="$tmp_dir/mysql-active.sock" +touch "$socket" + +PATH="$bin_dir:$PATH" \ +ZSTUB_CALLS="$calls" \ +ZSTUB_MARIADB_ACTIVE=true \ +ZSTACK_MARIADB_SOCKET="$socket" \ +ZSTACK_SERVER_LOG_DIR="$log_dir" \ +sh "$script" start >/dev/null + +[ -e "$socket" ] || { + echo "expected active MariaDB socket to be kept" >&2 + exit 1 +} +if grep -F "systemctl start mariadb" "$calls" >/dev/null 2>&1; then + echo "unexpected call: systemctl start mariadb" >&2 + exit 1 +fi +assert_contains "zstack-ctl start" "$calls" From 6a440b81401f1d6fb572f1932e9c85e0221867fa Mon Sep 17 00:00:00 2001 From: "boce.wang" Date: Tue, 12 May 2026 11:33:25 +0800 Subject: [PATCH 29/56] [virtualRouter]: skip grayscale upgrade check on auto reconnect to avoid stale config cache Resolves: ZSTAC-79075 Change-Id: I6868776c0ea5ef4905ec409181fbf2a431f3034a --- .../appliancevm/ApplianceVmConstant.java | 1 + .../ReconnectVirtualRouterVmMsg.java | 9 +++++ .../service/virtualrouter/VirtualRouter.java | 39 +++++++++++++++---- .../vyos/VyosDeployAgentFlow.java | 3 +- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmConstant.java b/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmConstant.java index dcada8edeee..094771f24bb 100755 --- a/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmConstant.java +++ b/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmConstant.java @@ -47,6 +47,7 @@ public static enum Params { timeout, rebuildSnat, fromApi, + skipGrayscaleUpgradeCheck, } public static final String REFRESH_FIREWALL_PATH = "/appliancevm/refreshfirewall"; diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/ReconnectVirtualRouterVmMsg.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/ReconnectVirtualRouterVmMsg.java index a0e0d182f18..1685900181d 100755 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/ReconnectVirtualRouterVmMsg.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/ReconnectVirtualRouterVmMsg.java @@ -9,6 +9,7 @@ public class ReconnectVirtualRouterVmMsg extends NeedReplyMessage implements VmInstanceMessage { private String virtualRouterVmUuid; private boolean statusChange = false; + private boolean skipGrayscaleUpgradeCheck = false; public String getVirtualRouterVmUuid() { @@ -31,4 +32,12 @@ public boolean isStatusChange() { public void setStatusChange(boolean statusChange) { this.statusChange = statusChange; } + + public boolean isSkipGrayscaleUpgradeCheck() { + return skipGrayscaleUpgradeCheck; + } + + public void setSkipGrayscaleUpgradeCheck(boolean skipGrayscaleUpgradeCheck) { + this.skipGrayscaleUpgradeCheck = skipGrayscaleUpgradeCheck; + } } diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java index de4468664dd..85a275a84e0 100755 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/VirtualRouter.java @@ -68,6 +68,16 @@ public class VirtualRouter extends ApplianceVmBase { private static final CLogger logger = Utils.getLogger(VirtualRouter.class); + private enum GrayscaleUpgradeCheck { + REQUIRED, + SKIPPED + } + + private enum ReconnectSource { + INTERNAL, + API + } + static { allowedOperations.addState(VmInstanceState.Running, APIReconnectVirtualRouterMsg.class.getName()); allowedOperations.addState(VmInstanceState.Running, APIProvisionVirtualRouterConfigMsg.class.getName()); @@ -608,7 +618,7 @@ public String getSyncSignature() { public void run(final SyncTaskChain chain) { final ReconnectVirtualRouterVmReply reply = new ReconnectVirtualRouterVmReply(); - if (upgradeChecker.skipInnerDeployOrInitOnCurrentAgent(self.getUuid())) { + if (!msg.isSkipGrayscaleUpgradeCheck() && upgradeChecker.skipInnerDeployOrInitOnCurrentAgent(self.getUuid())) { bus.reply(msg, reply); chain.next(); return; @@ -626,7 +636,7 @@ public void run(final SyncTaskChain chain) { return; } - reconnect(new Completion(msg, chain) { + Completion completion = new Completion(msg, chain) { @Override public void success() { bus.reply(msg, reply); @@ -639,7 +649,13 @@ public void fail(ErrorCode errorCode) { bus.reply(msg, reply); chain.next(); } - }); + }; + + if (msg.isSkipGrayscaleUpgradeCheck()) { + reconnectWithoutGrayscaleUpgradeCheck(completion); + } else { + reconnect(completion); + } } @Override @@ -849,7 +865,7 @@ public void run(final SyncTaskChain chain) { return; } - reconnect(true, new Completion(msg, chain) { + reconnectFromApi(new Completion(msg, chain) { @Override public void success() { evt.setInventory((ApplianceVmInventory) getSelfInventory()); @@ -874,10 +890,18 @@ public String getName() { } private void reconnect(final Completion completion) { - reconnect(false, completion); + reconnect(ReconnectSource.INTERNAL, GrayscaleUpgradeCheck.REQUIRED, completion); + } + + private void reconnectFromApi(final Completion completion) { + reconnect(ReconnectSource.API, GrayscaleUpgradeCheck.REQUIRED, completion); + } + + private void reconnectWithoutGrayscaleUpgradeCheck(final Completion completion) { + reconnect(ReconnectSource.INTERNAL, GrayscaleUpgradeCheck.SKIPPED, completion); } - private void reconnect(Boolean fromApi, final Completion completion) { + private void reconnect(ReconnectSource source, GrayscaleUpgradeCheck grayscaleUpgradeCheck, final Completion completion) { ApplianceVmStatus oldStatus = getSelf().getStatus(); FlowChain chain = getReconnectChain(); @@ -887,7 +911,8 @@ private void reconnect(Boolean fromApi, final Completion completion) { chain.getData().put(Params.isReconnect.toString(), Boolean.TRUE.toString()); chain.getData().put(Params.managementNicIp.toString(), vr.getManagementNic().getIp()); chain.getData().put(Params.applianceVmUuid.toString(), self.getUuid()); - chain.getData().put(Params.fromApi.toString(), fromApi.toString()); + chain.getData().put(Params.fromApi.toString(), Boolean.toString(source == ReconnectSource.API)); + chain.getData().put(Params.skipGrayscaleUpgradeCheck.toString(), Boolean.toString(grayscaleUpgradeCheck == GrayscaleUpgradeCheck.SKIPPED)); SimpleQuery q = dbf.createQuery(ApplianceVmFirewallRuleVO.class); q.add(ApplianceVmFirewallRuleVO_.applianceVmUuid, Op.EQ, getSelf().getUuid()); diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosDeployAgentFlow.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosDeployAgentFlow.java index 163fd4d22d2..a6b8c6386b3 100755 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosDeployAgentFlow.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/vyos/VyosDeployAgentFlow.java @@ -95,8 +95,9 @@ public void run(FlowTrigger trigger, Map data) { } boolean fromApi = Boolean.parseBoolean(String.valueOf(data.get(Params.fromApi.toString()))); + boolean skipGrayscaleUpgradeCheck = Boolean.parseBoolean(String.valueOf(data.get(Params.skipGrayscaleUpgradeCheck.toString()))); boolean isReconnect = Boolean.parseBoolean(String.valueOf(data.get(Params.isReconnect.toString()))); - if (!fromApi && upgradeChecker.skipInnerDeployOrInitOnCurrentAgent(vrUuid)) { + if (!fromApi && !skipGrayscaleUpgradeCheck && upgradeChecker.skipInnerDeployOrInitOnCurrentAgent(vrUuid)) { trigger.next(); return; } From 5f2afee966cfd52bdb46c30ce5a2ffb6ce517ad0 Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Wed, 13 May 2026 11:51:09 +0800 Subject: [PATCH 30/56] [ai]: persist mount restore epoch schema Store VmModelMountVO lastAttachedEpoch in database so restore cleanup can distinguish successful asynchronous attach from stale failure callbacks.\n\nTested: docker verify-case runMavenProfile premium\nTested: docker verify-case VmModelMountCase Resolves: ZSTAC-84246 Change-Id: Ib426797059be9401c3e2556ecc31c1879dd04049 --- conf/db/upgrade/V5.5.16__schema.sql | 1 + conf/db/upgrade/V5.5.22__schema.sql | 3 +++ 2 files changed, 4 insertions(+) diff --git a/conf/db/upgrade/V5.5.16__schema.sql b/conf/db/upgrade/V5.5.16__schema.sql index c50d752aa8a..cafcad38cdf 100644 --- a/conf/db/upgrade/V5.5.16__schema.sql +++ b/conf/db/upgrade/V5.5.16__schema.sql @@ -353,6 +353,7 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` ( `mountPath` VARCHAR(512) NOT NULL, `sourcePath` VARCHAR(1024) NOT NULL, `status` VARCHAR(32) NOT NULL, + `lastAttachedEpoch` BIGINT DEFAULT NULL, `accountUuid` VARCHAR(32) DEFAULT NULL, `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', `lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index 8981b3f1920..f664b5f4dd1 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -1,6 +1,9 @@ -- ZSTAC-84025: Add pipelineTag to ModelVO for inference template auto-matching CALL ADD_COLUMN('ModelVO', 'pipelineTag', 'VARCHAR(64)', 1, NULL); +-- ZSTAC-84246: Persist virtiofs restore success epoch for VmModelMountVO. +CALL ADD_COLUMN('VmModelMountVO', 'lastAttachedEpoch', 'BIGINT', 1, NULL); + -- ZSTAC-84025: Add isDefault to ModelServiceRefVO to mark the default inference template per model ALTER TABLE `zstack`.`ModelServiceRefVO` ADD COLUMN `isDefault` TINYINT(1) NOT NULL DEFAULT 0; From 6007871437c147953ab17bbc9e91840565cd2e3d Mon Sep 17 00:00:00 2001 From: "yingzhe.hu" Date: Wed, 13 May 2026 14:09:55 +0800 Subject: [PATCH 31/56] [compute]: avoid stale iso detach NPE Resolves: ZSTAC-84919 Change-Id: Iff44de2bbb1dad50e75678180cb89d3430c562b1 --- .../org/zstack/compute/vm/VmInstanceBase.java | 15 +++++++-------- .../test/integration/image/DeleteIsoCase.groovy | 7 +++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index a52c9010bc7..ba6c4b9e1d6 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -4765,12 +4765,7 @@ public String getName() { } private void detachIso(final String isoUuid, final Completion completion) { - if (!IsoOperator.isIsoAttachedToVm(self.getUuid())) { - completion.success(); - return; - } - - if (!IsoOperator.getIsoUuidByVmUuid(self.getUuid()).contains(isoUuid)) { + if (isoUuid == null) { completion.success(); return; } @@ -4779,7 +4774,11 @@ private void detachIso(final String isoUuid, final Completion completion) { .eq(VmCdRomVO_.vmInstanceUuid, self.getUuid()) .eq(VmCdRomVO_.isoUuid, isoUuid) .find(); - assert targetVmCdRomVO != null; + if (targetVmCdRomVO == null) { + new IsoOperator().syncVmIsoSystemTag(self.getUuid()); + completion.success(); + return; + } if (self.getState() == VmInstanceState.Stopped || self.getState() == VmInstanceState.Destroyed) { targetVmCdRomVO.setIsoUuid(null); @@ -4791,7 +4790,7 @@ private void detachIso(final String isoUuid, final Completion completion) { } VmInstanceSpec spec = buildSpecFromInventory(getSelfInventory(), VmOperation.DetachIso); - boolean isoNotExist = spec.getDestIsoList().stream().noneMatch(isoSpec -> isoSpec.getImageUuid().equals(isoUuid)); + boolean isoNotExist = spec.getDestIsoList().stream().noneMatch(isoSpec -> isoUuid.equals(isoSpec.getImageUuid())); if (isoNotExist) { // the image ISO has been deleted from backup storage // try to detach it from the VM anyway diff --git a/test/src/test/groovy/org/zstack/test/integration/image/DeleteIsoCase.groovy b/test/src/test/groovy/org/zstack/test/integration/image/DeleteIsoCase.groovy index 7e26ba7edbe..d0528e8707e 100644 --- a/test/src/test/groovy/org/zstack/test/integration/image/DeleteIsoCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/image/DeleteIsoCase.groovy @@ -172,6 +172,13 @@ class DeleteIsoCase extends SubCase { isoUuid = iso1.uuid } + detachIsoFromVmInstance { + vmInstanceUuid = newVm2.uuid + isoUuid = iso2.uuid + } + + assert [iso1.uuid] == IsoOperator.getIsoUuidByVmUuid(newVm2.uuid) + attachIsoToVmInstance { vmInstanceUuid = newVm.uuid isoUuid = iso2.uuid From 12fa09a426d42dd8b4c045d401a0acee8b38f4cd Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Fri, 15 May 2026 11:02:48 +0800 Subject: [PATCH 32/56] [ai]: keep 5.5.16 schema unchanged Move the lastAttachedEpoch schema change out of the 5.5.16 upgrade file by restoring that file to match the 5.5.16 release branch. The 5.5.22 upgrade file already carries the ADD_COLUMN migration, which keeps the change scoped to the target release. Constraint: 5.5.16 release schema must remain byte-for-byte aligned with upstream/5.5.16 Rejected: Leave the column in V5.5.16__schema.sql | would mutate an already released upgrade file Confidence: high Scope-risk: narrow Tested: git diff --exit-code upstream/5.5.16 -- conf/db/upgrade/V5.5.16__schema.sql Tested: git diff --exit-code upstream/5.5.22 -- conf/db/upgrade/V5.5.22__schema.sql Tested: git diff --check Resolves: ZSTAC-84246 Change-Id: Ibf18c6665d9d3c90361ed7f57d65fc609f6a1bfb --- conf/db/upgrade/V5.5.16__schema.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/db/upgrade/V5.5.16__schema.sql b/conf/db/upgrade/V5.5.16__schema.sql index cafcad38cdf..c50d752aa8a 100644 --- a/conf/db/upgrade/V5.5.16__schema.sql +++ b/conf/db/upgrade/V5.5.16__schema.sql @@ -353,7 +353,6 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` ( `mountPath` VARCHAR(512) NOT NULL, `sourcePath` VARCHAR(1024) NOT NULL, `status` VARCHAR(32) NOT NULL, - `lastAttachedEpoch` BIGINT DEFAULT NULL, `accountUuid` VARCHAR(32) DEFAULT NULL, `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', `lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, From 7bbc774ba600c2885f17557a4761e3776d1cc4f3 Mon Sep 17 00:00:00 2001 From: "haoyu.ding" Date: Thu, 14 May 2026 18:08:38 +0800 Subject: [PATCH 33/56] [loadBalancer]: support disabling UDP listener health check APIImpact Resolves: ZSTAC-85167 Change-Id: I6279726f7061786e6f6a66726368647074646c78 --- .../lb/APIChangeLoadBalancerListenerMsg.java | 2 +- ...ngeLoadBalancerListenerMsgDoc_zh_cn.groovy | 2 +- .../lb/APICreateLoadBalancerListenerMsg.java | 2 +- ...ateLoadBalancerListenerMsgDoc_zh_cn.groovy | 2 +- .../lb/LoadBalancerApiInterceptor.java | 148 +++++++++++++++--- .../network/service/lb/LoadBalancerBase.java | 3 +- .../service/lb/LoadBalancerConstants.java | 2 + .../service/lb/LoadBalancerManagerImpl.java | 14 ++ .../sdk/ChangeLoadBalancerListenerAction.java | 2 +- .../sdk/CreateLoadBalancerListenerAction.java | 2 +- .../VirtualRouterLoadBalancerUDPCase.groovy | 106 +++++++++++++ .../CloudOperationsErrorCode.java | 6 + 12 files changed, 259 insertions(+), 32 deletions(-) diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsg.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsg.java index 8228f15ae1a..3d77b9d1335 100644 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsg.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsg.java @@ -44,7 +44,7 @@ public class APIChangeLoadBalancerListenerMsg extends APIMessage implements Load @APIParam(numberRange = {LoadBalancerConstants.HEALTH_CHECK_INTERVAL_MIN, LoadBalancerConstants.HEALTH_CHECK_INTERVAL_MAX}, required = false) private Integer healthCheckInterval; - @APIParam(validValues = {LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP}, required = false) + @APIParam(validValues = {LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE}, required = false) private String healthCheckProtocol; @APIParam(validValues = {"GET", "HEAD"}, required = false) private String healthCheckMethod; diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsgDoc_zh_cn.groovy b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsgDoc_zh_cn.groovy index bbe5abcf884..c92f14186a4 100644 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsgDoc_zh_cn.groovy +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APIChangeLoadBalancerListenerMsgDoc_zh_cn.groovy @@ -102,7 +102,7 @@ doc { type "String" optional true since "3.9" - values ("tcp","udp","http") + values ("tcp","udp","http","none") } column { name "healthCheckMethod" diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsg.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsg.java index 0b123054386..5b495571cc9 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsg.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsg.java @@ -39,7 +39,7 @@ public class APICreateLoadBalancerListenerMsg extends APICreateMessage implement private String protocol; @APIParam(resourceType = CertificateVO.class, required = false) private String certificateUuid; - @APIParam(validValues = {LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP}, required = false) + @APIParam(validValues = {LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP, LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE}, required = false) private String healthCheckProtocol; @APIParam(validValues = {"GET", "HEAD"}, required = false) private String healthCheckMethod; diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsgDoc_zh_cn.groovy b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsgDoc_zh_cn.groovy index cfaae8626bb..9496c068530 100644 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsgDoc_zh_cn.groovy +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/APICreateLoadBalancerListenerMsgDoc_zh_cn.groovy @@ -93,7 +93,7 @@ doc { type "String" optional true since "3.9" - values ("tcp","udp","http") + values ("tcp","udp","http","none") } column { name "healthCheckMethod" diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java index f2f8271674b..b846b54185e 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java @@ -695,6 +695,21 @@ private boolean hasTag(APIMessage msg, PatternedSystemTag tag) { return false; } + private List getSystemTagTokens(APIMessage msg, PatternedSystemTag tag, String token) { + List tokens = new ArrayList<>(); + if (msg.getSystemTags() == null) { + return tokens; + } + + for (String t : msg.getSystemTags()) { + if (tag.isMatch(t)) { + tokens.add(tag.getTokenByTag(t, token)); + } + } + + return tokens; + } + private void insertTagIfNotExisting(APICreateMessage msg, PatternedSystemTag tag, String value) { if (!hasTag(msg, tag)) { msg.addSystemTag(value); @@ -713,6 +728,47 @@ private Boolean verifyHttpCode(String httpCode) { }); } + private boolean isHealthCheckProtocolNotSupportedByListenerProtocol(String listenerProtocol, String healthCheckProtocol) { + boolean isUdpListener = LoadBalancerConstants.LB_PROTOCOL_UDP.equals(listenerProtocol); + boolean isUdpHealthCheck = LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP.equals(healthCheckProtocol); + boolean isNoneHealthCheck = LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(healthCheckProtocol); + + if (isUdpListener) { + return !(isUdpHealthCheck || isNoneHealthCheck); + } + + return isUdpHealthCheck || isNoneHealthCheck; + } + + private String getHealthCheckProtocolFromTarget(String healthCheckTarget) { + if (healthCheckTarget == null) { + return null; + } + + String[] ts = healthCheckTarget.split(":"); + return ts.length == 2 ? ts[0] : null; + } + + private String getHealthCheckPortFromTarget(String healthCheckTarget) { + if (healthCheckTarget == null) { + return null; + } + + String[] ts = healthCheckTarget.split(":"); + return ts.length == 2 ? ts[1] : null; + } + + private boolean isNoneHealthCheckTargetWithSpecificPort(String healthCheckTarget) { + if (healthCheckTarget == null) { + return false; + } + + String[] ts = healthCheckTarget.split(":"); + return ts.length == 2 && + LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(ts[0]) && + !"default".equals(ts[1]); + } + private void validate(APICreateLoadBalancerListenerMsg msg) { LoadBalancerVO lbVO = dbf.findByUuid(msg.getLoadBalancerUuid(), LoadBalancerVO.class); @@ -730,34 +786,57 @@ private void validate(APICreateLoadBalancerListenerMsg msg) { msg.getProtocol(), msg.getHealthCheckProtocol())); } } + + List healthCheckTargets = getSystemTagTokens(msg, LoadBalancerSystemTags.HEALTH_TARGET, + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN); + if (healthCheckTargets.size() > 1) { + throw new ApiMessageInterceptionException( + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10177, "only one health check target is allowed, but got %s", + healthCheckTargets)); + } + String healthCheckTarget = healthCheckTargets.isEmpty() ? null : healthCheckTargets.get(0); + if (isNoneHealthCheckTargetWithSpecificPort(healthCheckTarget)) { + throw new ApiMessageInterceptionException( + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10178, "the health check target [%s] is invalid, health check protocol none only supports default target", + healthCheckTarget)); + } + String healthCheckProtocolInTarget = getHealthCheckProtocolFromTarget(healthCheckTarget); + if (msg.getHealthCheckProtocol() == null) { - if (LoadBalancerConstants.LB_PROTOCOL_UDP.equals(msg.getProtocol())) { + if (healthCheckProtocolInTarget != null) { + msg.setHealthCheckProtocol(healthCheckProtocolInTarget); + } else if (LoadBalancerConstants.LB_PROTOCOL_UDP.equals(msg.getProtocol())) { msg.setHealthCheckProtocol(LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP); } else { msg.setHealthCheckProtocol(LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP); } } else { - if (LoadBalancerConstants.LB_PROTOCOL_UDP.equals(msg.getProtocol()) && !LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP.equals(msg.getHealthCheckProtocol()) || - !LoadBalancerConstants.LB_PROTOCOL_UDP.equals(msg.getProtocol()) && LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP.equals(msg.getHealthCheckProtocol())) { + if (healthCheckProtocolInTarget != null && !healthCheckProtocolInTarget.equals(msg.getHealthCheckProtocol())) { throw new ApiMessageInterceptionException( - operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10062, "the listener with protocol [%s] doesn't support this health check:[%s]", - msg.getProtocol(), msg.getHealthCheckProtocol())); + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10179, "the health check protocol [%s] conflicts with health check target [%s]", + msg.getHealthCheckProtocol(), healthCheckTarget)); } - if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP.equals(msg.getHealthCheckProtocol())) { - if (msg.getHealthCheckURI() == null) { - throw new ApiMessageInterceptionException( - operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10063, "the http health check protocol must be specified its healthy checking parameter healthCheckURI")); - } + } - if (msg.getHealthCheckMethod() == null) { - msg.setHealthCheckMethod(LoadBalancerConstants.HealthCheckMothod.HEAD.toString()); - } - } - if (msg.getHealthCheckHttpCode() != null && !verifyHttpCode(msg.getHealthCheckHttpCode())) { + if (isHealthCheckProtocolNotSupportedByListenerProtocol(msg.getProtocol(), msg.getHealthCheckProtocol())) { + throw new ApiMessageInterceptionException( + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10062, "the listener with protocol [%s] doesn't support this health check:[%s]", + msg.getProtocol(), msg.getHealthCheckProtocol())); + } + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP.equals(msg.getHealthCheckProtocol())) { + if (msg.getHealthCheckURI() == null) { throw new ApiMessageInterceptionException( - operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10064, "the http health check protocol's expecting code [%s] is invalidate", msg.getHealthCheckHttpCode())); + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10063, "the http health check protocol must be specified its healthy checking parameter healthCheckURI")); + } + + if (msg.getHealthCheckMethod() == null) { + msg.setHealthCheckMethod(LoadBalancerConstants.HealthCheckMothod.HEAD.toString()); } } + if (msg.getHealthCheckHttpCode() != null && !verifyHttpCode(msg.getHealthCheckHttpCode())) { + throw new ApiMessageInterceptionException( + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10064, "the http health check protocol's expecting code [%s] is invalidate", msg.getHealthCheckHttpCode())); + } if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP.equals(msg.getHealthCheckProtocol())) { String expectResult = LoadBalancerConstants.HealthCheckStatusCode.http_2xx.toString(); @@ -1384,21 +1463,40 @@ private void validate(APIChangeLoadBalancerListenerMsg msg) { throw new ApiMessageInterceptionException(operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10118, "the listener with protocol [%s] doesn't support select security policy", listenerVO.getProtocol(), msg.getHealthCheckProtocol())); } } - if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP.equals(msg.getHealthCheckProtocol())) { - String healthTarget = LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(msg.getLoadBalancerListenerUuid(), - LoadBalancerSystemTags.HEALTH_TARGET_TOKEN); - String[] ts = healthTarget.split(":"); - if (ts.length != 2) { - throw new OperationFailureException(argerr(ORG_ZSTACK_NETWORK_SERVICE_LB_10119, "invalid health target[%s], the format is targetCheckProtocol:port, for example, tcp:default", target)); - } + String healthTarget = LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(msg.getLoadBalancerListenerUuid(), + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN); + String currentHealthCheckProtocol = getHealthCheckProtocolFromTarget(healthTarget); + String currentHealthCheckTarget = getHealthCheckPortFromTarget(healthTarget); + String effectiveHealthCheckProtocol = msg.getHealthCheckProtocol() == null ? currentHealthCheckProtocol : msg.getHealthCheckProtocol(); + String effectiveHealthCheckTarget; + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(msg.getHealthCheckProtocol()) && + msg.getHealthCheckTarget() == null) { + effectiveHealthCheckTarget = LoadBalancerConstants.HEALTH_CHECK_TARGET_DEFAULT; + } else { + effectiveHealthCheckTarget = msg.getHealthCheckTarget() == null ? currentHealthCheckTarget : msg.getHealthCheckTarget(); + } + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(effectiveHealthCheckProtocol) && + !LoadBalancerConstants.HEALTH_CHECK_TARGET_DEFAULT.equals(effectiveHealthCheckTarget)) { + throw new ApiMessageInterceptionException( + operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10178, "the health check target [%s] is invalid, health check protocol none only supports default target", + effectiveHealthCheckTarget)); + } - if (LoadBalancerConstants.LB_PROTOCOL_UDP.equals(listenerVO.getProtocol()) && !LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP.equals(msg.getHealthCheckProtocol()) || - !LoadBalancerConstants.LB_PROTOCOL_UDP.equals(listenerVO.getProtocol()) && LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_UDP.equals(msg.getHealthCheckProtocol())) { + if (msg.getHealthCheckProtocol() != null) { + if (isHealthCheckProtocolNotSupportedByListenerProtocol(listenerVO.getProtocol(), msg.getHealthCheckProtocol())) { throw new ApiMessageInterceptionException( operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10120, "the listener with protocol [%s] doesn't support this health check:[%s]", listenerVO.getProtocol(), msg.getHealthCheckProtocol())); } + } + + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_HTTP.equals(msg.getHealthCheckProtocol())) { + String[] ts = healthTarget.split(":"); + if (ts.length != 2) { + throw new OperationFailureException(argerr(ORG_ZSTACK_NETWORK_SERVICE_LB_10119, "invalid health target[%s], the format is targetCheckProtocol:port, for example, tcp:default", target)); + } + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_TCP.equals(ts[0]) && (msg.getHealthCheckMethod() == null || msg.getHealthCheckURI() == null)) { throw new ApiMessageInterceptionException( operr(ORG_ZSTACK_NETWORK_SERVICE_LB_10121, "the http health check protocol must be specified its healthy checking parameters including healthCheckMethod and healthCheckURI")); diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerBase.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerBase.java index dadec74b6ec..e219f24eb8b 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerBase.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerBase.java @@ -2406,9 +2406,10 @@ public void run(SyncTaskChain chain) { LoadBalancerSystemTags.HEALTH_PARAMETER.delete(msg.getUuid()); } + String target = LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(msg.getHealthCheckProtocol()) ? "default" : ts[1]; LoadBalancerSystemTags.HEALTH_TARGET.update(msg.getUuid(), LoadBalancerSystemTags.HEALTH_TARGET.instantiateTag(map( - e(LoadBalancerSystemTags.HEALTH_TARGET_TOKEN, String.format("%s:%s", msg.getHealthCheckProtocol(), ts[1]))) + e(LoadBalancerSystemTags.HEALTH_TARGET_TOKEN, String.format("%s:%s", msg.getHealthCheckProtocol(), target))) )); ts = getHeathCheckTarget(msg.getUuid()); } diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerConstants.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerConstants.java index fe147c11cf4..f48b53c930b 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerConstants.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerConstants.java @@ -29,6 +29,7 @@ public class LoadBalancerConstants { public static final String HEALTH_CHECK_TARGET_PROTOCL_TCP = "tcp"; public static final String HEALTH_CHECK_TARGET_PROTOCL_UDP = "udp"; public static final String HEALTH_CHECK_TARGET_PROTOCL_HTTP = "http"; + public static final String HEALTH_CHECK_TARGET_PROTOCL_NONE = "none"; public static final String HTTP_MODE_HTTP_KEEP_ALIVE = "http-keep-alive"; public static final String HTTP_MODE_HTTP_SERVER_CLOSE = "http-server-close"; @@ -131,6 +132,7 @@ public String toString() { HEALTH_CHECK_TARGET_PROTOCOLS.add(HEALTH_CHECK_TARGET_PROTOCL_TCP); HEALTH_CHECK_TARGET_PROTOCOLS.add(HEALTH_CHECK_TARGET_PROTOCL_UDP); HEALTH_CHECK_TARGET_PROTOCOLS.add(HEALTH_CHECK_TARGET_PROTOCL_HTTP); + HEALTH_CHECK_TARGET_PROTOCOLS.add(HEALTH_CHECK_TARGET_PROTOCL_NONE); HTTP_MODES.add(HTTP_MODE_HTTP_KEEP_ALIVE); HTTP_MODES.add(HTTP_MODE_HTTP_SERVER_CLOSE); diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerManagerImpl.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerManagerImpl.java index 8f1f8e1fc62..6b4da585104 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerManagerImpl.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerManagerImpl.java @@ -732,6 +732,20 @@ public void validateSystemTag(String resourceUuid, Class resourceType, String sy } String port = ts[1]; + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(protocol) && !"default".equals(port)) { + throw new OperationFailureException(argerr(ORG_ZSTACK_NETWORK_SERVICE_LB_10014, "invalid health target[%s], health check protocol none only supports default target", systemTag)); + } + + LoadBalancerListenerVO listener = Q.New(LoadBalancerListenerVO.class) + .eq(LoadBalancerListenerVO_.uuid, resourceUuid) + .find(); + if (listener != null) { + if (LoadBalancerConstants.HEALTH_CHECK_TARGET_PROTOCL_NONE.equals(protocol) && + !LoadBalancerConstants.LB_PROTOCOL_UDP.equals(listener.getProtocol())) { + throw new OperationFailureException(argerr(ORG_ZSTACK_NETWORK_SERVICE_LB_10014, "invalid health target[%s], health check protocol none is only supported by udp listener", systemTag)); + } + } + if (!"default".equals(port)) { try { int p = Integer.parseInt(port); diff --git a/sdk/src/main/java/org/zstack/sdk/ChangeLoadBalancerListenerAction.java b/sdk/src/main/java/org/zstack/sdk/ChangeLoadBalancerListenerAction.java index 3c056c8af77..b5314b49922 100644 --- a/sdk/src/main/java/org/zstack/sdk/ChangeLoadBalancerListenerAction.java +++ b/sdk/src/main/java/org/zstack/sdk/ChangeLoadBalancerListenerAction.java @@ -49,7 +49,7 @@ public Result throwExceptionIfError() { @Param(required = false, nonempty = false, nullElements = false, emptyString = true, numberRange = {1L,2147483647L}, noTrim = false) public java.lang.Integer healthCheckInterval; - @Param(required = false, validValues = {"tcp","udp","http"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + @Param(required = false, validValues = {"tcp","udp","http","none"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String healthCheckProtocol; @Param(required = false, validValues = {"GET","HEAD"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) diff --git a/sdk/src/main/java/org/zstack/sdk/CreateLoadBalancerListenerAction.java b/sdk/src/main/java/org/zstack/sdk/CreateLoadBalancerListenerAction.java index a886703d0b9..dd4399e0b0f 100644 --- a/sdk/src/main/java/org/zstack/sdk/CreateLoadBalancerListenerAction.java +++ b/sdk/src/main/java/org/zstack/sdk/CreateLoadBalancerListenerAction.java @@ -46,7 +46,7 @@ public Result throwExceptionIfError() { @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String certificateUuid; - @Param(required = false, validValues = {"tcp","udp","http"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + @Param(required = false, validValues = {"tcp","udp","http","none"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String healthCheckProtocol; @Param(required = false, validValues = {"GET","HEAD"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) diff --git a/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/virtualrouter/loadbalancer/VirtualRouterLoadBalancerUDPCase.groovy b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/virtualrouter/loadbalancer/VirtualRouterLoadBalancerUDPCase.groovy index 05a95e520a4..0b04f1f66e2 100755 --- a/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/virtualrouter/loadbalancer/VirtualRouterLoadBalancerUDPCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/virtualrouter/loadbalancer/VirtualRouterLoadBalancerUDPCase.groovy @@ -7,6 +7,7 @@ import org.zstack.core.db.Q import org.zstack.header.network.service.NetworkServiceType import org.zstack.network.service.eip.EipConstant import org.zstack.network.service.lb.LoadBalancerConstants +import org.zstack.network.service.lb.LoadBalancerSystemTags import org.zstack.network.service.lb.LoadBalancerVO import org.zstack.network.service.portforwarding.PortForwardingConstant import org.zstack.network.service.vip.VipVO @@ -221,9 +222,114 @@ class VirtualRouterLoadBalancerUDPCase extends SubCase{ } assert count == 1 + count = 0 + cmd = null + ChangeLoadBalancerListenerAction changeAction = new ChangeLoadBalancerListenerAction() + changeAction.uuid = listener.uuid + changeAction.healthCheckProtocol = "none" + changeAction.sessionId = adminSession() + ChangeLoadBalancerListenerAction.Result changeResult = changeAction.call() + assert changeResult.error == null + assert LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(listener.uuid, + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN) == "none:default" + assert count == 1 + assert cmd.lbs.any { VirtualRouterLoadBalancerBackend.LbTO lbtemp -> + lbtemp.listenerUuid == listener.uuid && lbtemp.getParameters().contains("healthCheckTarget::none:default") + } + + changeAction.healthCheckProtocol = null + changeAction.healthCheckTarget = "10000" + changeResult = changeAction.call() + assert changeResult.error != null + assert LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(listener.uuid, + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN) == "none:default" + deleteLoadBalancerListener { uuid = listener.uuid } + + LoadBalancerListenerInventory listenerWithSpecificHealthTarget = createLoadBalancerListener { + protocol = "udp" + loadBalancerUuid = lb.uuid + loadBalancerPort = 10002 + instancePort = 10002 + name = "test-listener-specific-health-target" + systemTags = ["healthCheckTarget::udp:10002"] + } + + changeAction = new ChangeLoadBalancerListenerAction() + changeAction.uuid = listenerWithSpecificHealthTarget.uuid + changeAction.healthCheckProtocol = "none" + changeAction.sessionId = adminSession() + changeResult = changeAction.call() + assert changeResult.error == null + assert LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(listenerWithSpecificHealthTarget.uuid, + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN) == "none:default" + + deleteLoadBalancerListener { + uuid = listenerWithSpecificHealthTarget.uuid + } + + CreateLoadBalancerListenerAction badTcpDisabledHealthCheckAction = new CreateLoadBalancerListenerAction() + badTcpDisabledHealthCheckAction.loadBalancerUuid = lb.uuid + badTcpDisabledHealthCheckAction.name = "test-tcp-listener-none-health-check" + badTcpDisabledHealthCheckAction.loadBalancerPort = 10001 + badTcpDisabledHealthCheckAction.instancePort = 10001 + badTcpDisabledHealthCheckAction.protocol = "tcp" + badTcpDisabledHealthCheckAction.healthCheckProtocol = "none" + badTcpDisabledHealthCheckAction.sessionId = adminSession() + CreateLoadBalancerListenerAction.Result badTcpDisabledHealthCheckResult = badTcpDisabledHealthCheckAction.call() + assert badTcpDisabledHealthCheckResult.error != null + + badTcpDisabledHealthCheckAction.healthCheckProtocol = null + badTcpDisabledHealthCheckAction.systemTags = ["healthCheckTarget::none:default"] + badTcpDisabledHealthCheckResult = badTcpDisabledHealthCheckAction.call() + assert badTcpDisabledHealthCheckResult.error != null + + CreateLoadBalancerListenerAction badDisabledHealthCheckAction = new CreateLoadBalancerListenerAction() + badDisabledHealthCheckAction.loadBalancerUuid = lb.uuid + badDisabledHealthCheckAction.name = "test-listener-none-specific-port" + badDisabledHealthCheckAction.loadBalancerPort = 10001 + badDisabledHealthCheckAction.instancePort = 10001 + badDisabledHealthCheckAction.protocol = "udp" + badDisabledHealthCheckAction.healthCheckProtocol = "none" + badDisabledHealthCheckAction.systemTags = ["healthCheckTarget::none:10001"] + badDisabledHealthCheckAction.sessionId = adminSession() + CreateLoadBalancerListenerAction.Result badDisabledHealthCheckResult = badDisabledHealthCheckAction.call() + assert badDisabledHealthCheckResult.error != null + + badDisabledHealthCheckAction.healthCheckProtocol = null + badDisabledHealthCheckAction.systemTags = ["healthCheckTarget::udp:default", "healthCheckTarget::none:default"] + badDisabledHealthCheckResult = badDisabledHealthCheckAction.call() + assert badDisabledHealthCheckResult.error != null + + LoadBalancerListenerInventory listenerWithDisabledHealthCheck = createLoadBalancerListener { + protocol = "udp" + healthCheckProtocol = "none" + loadBalancerUuid = lb.uuid + loadBalancerPort = 10001 + instancePort = 10001 + name = "test-listener-none-health-check" + } + + count = 0 + cmd = null + + addVmNicToLoadBalancer { + listenerUuid = listenerWithDisabledHealthCheck.uuid + vmNicUuids = [vm.getVmNics().get(0).getUuid()] + } + + assert count == 1 + assert LoadBalancerSystemTags.HEALTH_TARGET.getTokenByResourceUuid(listenerWithDisabledHealthCheck.uuid, + LoadBalancerSystemTags.HEALTH_TARGET_TOKEN) == "none:default" + assert cmd.lbs.any { VirtualRouterLoadBalancerBackend.LbTO lbtemp -> + lbtemp.listenerUuid == listenerWithDisabledHealthCheck.uuid && lbtemp.getParameters().contains("healthCheckTarget::none:default") + } + + deleteLoadBalancerListener { + uuid = listenerWithDisabledHealthCheck.uuid + } } void TestVirtualRouterDownReconnectVm(){ diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 623abb2face..31d73e6f33a 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -13733,6 +13733,12 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_SERVICE_LB_10176 = "ORG_ZSTACK_NETWORK_SERVICE_LB_10176"; + public static final String ORG_ZSTACK_NETWORK_SERVICE_LB_10177 = "ORG_ZSTACK_NETWORK_SERVICE_LB_10177"; + + public static final String ORG_ZSTACK_NETWORK_SERVICE_LB_10178 = "ORG_ZSTACK_NETWORK_SERVICE_LB_10178"; + + public static final String ORG_ZSTACK_NETWORK_SERVICE_LB_10179 = "ORG_ZSTACK_NETWORK_SERVICE_LB_10179"; + public static final String ORG_ZSTACK_IPSEC_10000 = "ORG_ZSTACK_IPSEC_10000"; public static final String ORG_ZSTACK_IPSEC_10001 = "ORG_ZSTACK_IPSEC_10001"; From 2e9bf4a0a6a64a542f9799a23b9353b2b99c961e Mon Sep 17 00:00:00 2001 From: Haidong Pang Date: Thu, 14 May 2026 14:19:59 +0800 Subject: [PATCH 34/56] [zbs]: ensure heartbeat before host check Ensure external primary storage heartbeat volumes in the KVM host connect path before host-storage status checks run. ZBS creates missing heartbeat volumes through the MN/controller side, including all configured pools. Host-side checks remain data-plane reads. Aggregate heartbeat ensure failures so reconnect diagnostics retain all failed primary storage causes. Resolves: ZSTAC-79201 Change-Id: I9b592bf4c48573f6e6951735eef4b39463b57fa6 --- .../kvm/ExternalPrimaryStorageKvmFactory.java | 40 +++++++++++++++++++ .../addon/zbs/ZbsPrimaryStorageCase.groovy | 22 ++++++++++ 2 files changed, 62 insertions(+) diff --git a/plugin/externalStorage/src/main/java/org/zstack/externalStorage/primary/kvm/ExternalPrimaryStorageKvmFactory.java b/plugin/externalStorage/src/main/java/org/zstack/externalStorage/primary/kvm/ExternalPrimaryStorageKvmFactory.java index 6e5c0c591b8..4724d20aed7 100644 --- a/plugin/externalStorage/src/main/java/org/zstack/externalStorage/primary/kvm/ExternalPrimaryStorageKvmFactory.java +++ b/plugin/externalStorage/src/main/java/org/zstack/externalStorage/primary/kvm/ExternalPrimaryStorageKvmFactory.java @@ -141,6 +141,27 @@ public void done(ErrorCodeList errorCodeList) { } }); } + }).then(new NoRollbackFlow() { + String __name__ = "ensure-heartbeat-volume"; + + @Override + public void run(FlowTrigger trigger, Map data) { + ensureHeartbeatVolume(context.getInventory(), extPss, new WhileDoneCompletion(trigger) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (errorCodeList.getCauses().isEmpty()) { + trigger.next(); + } else { + logger.warn(String.format("failed to ensure heartbeat volumes before checking KVM host[uuid:%s, name:%s] storage connection, %s", + context.getInventory().getUuid(), context.getInventory().getName(), errorCodeList.getReadableDetails())); + trigger.fail(operr(ORG_ZSTACK_EXTERNALSTORAGE_PRIMARY_KVM_10000, + new ErrorCodeList().causedBy(errorCodeList.getCauses()), + "failed to ensure heartbeat volumes before checking KVM host[uuid:%s, name:%s] storage connection", + context.getInventory().getUuid(), context.getInventory().getName())); + } + } + }); + } }).then(new NoRollbackFlow() { String __name__ = "check-host-status"; @@ -167,6 +188,25 @@ public void handle(Map data) { }).start(); } + private void ensureHeartbeatVolume(HostInventory host, List extPss, WhileDoneCompletion completion) { + new While<>(extPss).each((extPs, compl) -> { + logger.debug(String.format("ensuring heartbeat volume for external primary storage[uuid:%s, name:%s] before checking KVM host[uuid:%s, name:%s] storage connection", + extPs.getUuid(), extPs.getName(), host.getUuid(), host.getName())); + extPsFactory.getNodeSvc(extPs.getUuid()).activateHeartbeatVolume(host, new ReturnValueCompletion(compl) { + @Override + public void success(HeartbeatVolumeTopology returnValue) { + compl.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + compl.addError(errorCode); + compl.done(); + } + }); + }).run(completion); + } + private void deployClient(final KVMHostConnectedContext context, List extPss, WhileDoneCompletion completion) { new While<>(extPss).each((extPs, compl) -> { logger.debug(String.format("deploying client for external primary storage[uuid:%s, name:%s] on KVM host[uuid:%s, name:%s]", diff --git a/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy b/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy index e5bfba095e9..b86c8840e24 100644 --- a/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/storage/primary/addon/zbs/ZbsPrimaryStorageCase.groovy @@ -37,6 +37,7 @@ import org.zstack.utils.data.SizeUnit import org.zstack.utils.gson.JSONObjectUtil import java.util.concurrent.CyclicBarrier +import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicInteger /** @@ -210,8 +211,25 @@ class ZbsPrimaryStorageCase extends SubCase { clusterUuid = cluster.uuid } + Set heartbeatPools = Collections.synchronizedSet(new HashSet<>()) + AtomicBoolean checkStartedBeforeHeartbeatReady = new AtomicBoolean(false) + env.afterSimulator(ZbsStorageController.CREATE_VOLUME_PATH) { rsp, HttpEntity e -> + ZbsStorageController.CreateVolumeCmd cmd = JSONObjectUtil.toObject(e.body, ZbsStorageController.CreateVolumeCmd) + if (cmd.volume == ZbsConstants.ZBS_HEARTBEAT_VOLUME_NAME) { + heartbeatPools.add(cmd.logicalPool) + ZbsStorageController.CreateVolumeRsp createVolumeRsp = new ZbsStorageController.CreateVolumeRsp() + createVolumeRsp.installPath = "zbs://${cmd.logicalPool}/${cmd.volume}" + return createVolumeRsp + } + + return rsp + } + env.afterSimulator(ZbsStorageController.CHECK_HOST_STORAGE_CONNECTION_PATH) { rsp, HttpEntity e -> ZbsStorageController.CheckHostStorageConnectionCmd cmd = JSONObjectUtil.toObject(e.body, ZbsStorageController.CheckHostStorageConnectionCmd) + if (!heartbeatPools.containsAll(["lpool1", "lpool2"])) { + checkStartedBeforeHeartbeatReady.set(true) + } ZbsStorageController.CheckHostStorageConnectionRsp checkHostStorageConnectionRsp = new ZbsStorageController.CheckHostStorageConnectionRsp() checkHostStorageConnectionRsp.error = "fake error" @@ -225,6 +243,10 @@ class ZbsPrimaryStorageCase extends SubCase { uuid = kvm.getUuid() } } + retryInSecs { + assert heartbeatPools.containsAll(["lpool1", "lpool2"]) + assert !checkStartedBeforeHeartbeatReady.get() + } retryInSecs { assert Q.New(PrimaryStorageHostRefVO.class) From 3cffcd3c82e01ba3a1c8f8be5c3b38fda9379333 Mon Sep 17 00:00:00 2001 From: J M Date: Thu, 14 May 2026 18:07:47 +0800 Subject: [PATCH 35/56] [utils]: SshShell add ssh client timeouts SshShell.runCommand and runScript now inject ssh client timeout options into the underlying ssh command line: -o ConnectTimeout=10 -o ServerAliveInterval=5 -o ServerAliveCountMax=2 Subprocess self-exits in ~10-20s on unreachable or non-responsive remote, instead of waiting forever in Process.waitFor (the underlying ShellUtils.runAndReturn has no JVM side timeout). The three values are tunable via setConnectTimeoutSeconds / setServerAliveIntervalSeconds / setServerAliveCountMax. Defaults are deliberately aggressive so existing call sites get protection without any code change. Background: in ZSTAC-72837 collect-log jstack, 222 KVMHost reconnect flows (checkConnectConditions step check-if-host-can-reach-management -node) had ssh subprocesses stuck in Process.waitFor for 30+ minutes, exhausting the ThreadFacadeImpl worker pool and contributing to MN unknown + VIP failover. host/ping HTTP itself already has a 10s RESTFacade timeout; the gap was on the post ping-fail reconnect path where SshShell.runCommand had no timeout. Adding ssh client side timeouts breaks the indefinite wait regardless of upstream trigger (slow remote sshd / DNS / PAM / TCP handshake). Resolves: ZSTAC-72837 Change-Id: I1f999a8404352a178910920e92c56bbceb2c1e5f --- .../java/org/zstack/utils/ssh/SshShell.java | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/utils/src/main/java/org/zstack/utils/ssh/SshShell.java b/utils/src/main/java/org/zstack/utils/ssh/SshShell.java index 80ea35c94ce..0c333fdbfbc 100755 --- a/utils/src/main/java/org/zstack/utils/ssh/SshShell.java +++ b/utils/src/main/java/org/zstack/utils/ssh/SshShell.java @@ -29,6 +29,14 @@ public class SshShell { private String privateKey; private int port = 22; private Boolean withSudo = true; + private int connectTimeoutSeconds = 10; + private int serverAliveIntervalSeconds = 5; + private int serverAliveCountMax = 2; + + private String sshTimeoutOptions() { + return String.format("-o ConnectTimeout=%d -o ServerAliveInterval=%d -o ServerAliveCountMax=%d", + connectTimeoutSeconds, serverAliveIntervalSeconds, serverAliveCountMax); + } private void checkParams() { DebugUtils.Assert(hostname != null && !hostname.trim().equals(""), "hostname cannot be null"); @@ -45,13 +53,13 @@ public SshResult runCommand(String cmd) { if (privateKey != null) { tempPasswordFile = File.createTempFile("zstack", "tmp"); writeSecretFile(tempPasswordFile, privateKey); - ssh = String.format("ssh -q -i %s -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -p %s %s@%s '%s'", - tempPasswordFile.getAbsolutePath(), port, username, hostname, cmd); + ssh = String.format("ssh -q -i %s -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no %s -p %s %s@%s '%s'", + tempPasswordFile.getAbsolutePath(), sshTimeoutOptions(), port, username, hostname, cmd); } else { tempPasswordFile = File.createTempFile("zstack", "tmp"); writeSecretFile(tempPasswordFile, password); - ssh = String.format("sshpass -f%s ssh -q -o UserKnownHostsFile=/dev/null -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -p %s %s@%s '%s'", - tempPasswordFile.getAbsolutePath(), port, username, hostname, cmd); + ssh = String.format("sshpass -f%s ssh -q -o UserKnownHostsFile=/dev/null -o PubkeyAuthentication=no -o StrictHostKeyChecking=no %s -p %s %s@%s '%s'", + tempPasswordFile.getAbsolutePath(), sshTimeoutOptions(), port, username, hostname, cmd); } if (logger.isTraceEnabled()) { @@ -89,7 +97,7 @@ public SshResult runScript(String script) { tempPasswordFile = File.createTempFile("zstack", "tmp"); writeSecretFile(tempPasswordFile, privateKey); ssh = ln( - "ssh -q -i {0} -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -p {1} -T {2}@{3} << 'EOF'", + "ssh -q -i {0} -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no {5} -p {1} -T {2}@{3} << 'EOF'", "s=`mktemp`", "cat << 'EOT' > $s", "{4}", @@ -99,12 +107,12 @@ public SshResult runScript(String script) { "rm -f $s", "exit $ret", "EOF" - ).format(tempPasswordFile.getAbsolutePath(), port, username, hostname, script); + ).format(tempPasswordFile.getAbsolutePath(), port, username, hostname, script, sshTimeoutOptions()); } else { tempPasswordFile = File.createTempFile("zstack", "tmp"); writeSecretFile(tempPasswordFile, password); ssh = ln( - "sshpass -f{0} ssh -q -o UserKnownHostsFile=/dev/null -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -p {1} -T {2}@{3} << 'EOF'", + "sshpass -f{0} ssh -q -o UserKnownHostsFile=/dev/null -o PubkeyAuthentication=no -o StrictHostKeyChecking=no {5} -p {1} -T {2}@{3} << 'EOF'", "s=`mktemp`", "cat << 'EOT' > $s", "{4}", @@ -114,7 +122,7 @@ public SshResult runScript(String script) { "rm -f $s", "exit $ret", "EOF" - ).format(tempPasswordFile.getAbsolutePath(), port, username, hostname, script); + ).format(tempPasswordFile.getAbsolutePath(), port, username, hostname, script, sshTimeoutOptions()); } if (logger.isTraceEnabled()) { @@ -209,4 +217,28 @@ public Boolean getWithSudo() { public void setWithSudo(Boolean withSudo) { this.withSudo = withSudo; } + + public int getConnectTimeoutSeconds() { + return connectTimeoutSeconds; + } + + public void setConnectTimeoutSeconds(int connectTimeoutSeconds) { + this.connectTimeoutSeconds = connectTimeoutSeconds; + } + + public int getServerAliveIntervalSeconds() { + return serverAliveIntervalSeconds; + } + + public void setServerAliveIntervalSeconds(int serverAliveIntervalSeconds) { + this.serverAliveIntervalSeconds = serverAliveIntervalSeconds; + } + + public int getServerAliveCountMax() { + return serverAliveCountMax; + } + + public void setServerAliveCountMax(int serverAliveCountMax) { + this.serverAliveCountMax = serverAliveCountMax; + } } \ No newline at end of file From 2920db2f703befa32c9ec5650d2729db2c9cc7ff Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 02:12:41 +0800 Subject: [PATCH 36/56] [zns]: squash zcf changes to 5.5.22 Squash selected ZCF commits from feature-5.5.22-zcf-temporary. Co-authored-by: shixin.ruan Co-authored-by: shixin.ruan Co-authored-by: zhangjianjun Resolves: ZCF-1936 Change-Id: I5560dc42173b48a8bad104543dcc18af4f2ba8a0 --- build/pom.xml | 5 + .../zstack/compute/vm/VmAllocateNicFlow.java | 233 +- .../compute/vm/VmAllocateSdnNicFlow.java | 131 + .../zstack/compute/vm/VmCascadeExtension.java | 1 + .../zstack/compute/vm/VmDetachNicFlow.java | 62 +- .../compute/vm/VmExpungeSdnNicFlow.java | 84 + .../compute/vm/VmInstanceApiInterceptor.java | 2 +- .../org/zstack/compute/vm/VmInstanceBase.java | 77 +- .../vm/VmInstanceExtensionPointEmitter.java | 6 + .../vm/VmNicLifecycleGlobalConfig.java | 14 + .../compute/vm/VmNicLifecycleManager.java | 475 + .../org/zstack/compute/vm/VmNicManager.java | 2 + .../zstack/compute/vm/VmNicManagerImpl.java | 47 +- .../compute/vm/VmReturnReleaseNicFlow.java | 108 +- .../org/zstack/compute/vm/VmSystemTags.java | 9 + conf/db/upgrade/V5.5.22__schema.sql | 65 + conf/globalConfig/vmNicLifecycle.xml | 10 + conf/serviceConfig/sdnController.xml | 7 +- conf/springConfigXml/Kvm.xml | 6 + conf/springConfigXml/VmInstanceManager.xml | 13 + conf/springConfigXml/sdnController.xml | 5 +- .../rest/webhook/WebhookCallbackClient.java | 188 + .../core/rest/webhook/WebhookProtocol.java | 54 + .../zns-pivot/ZCF-2133-p3-review-gpt55.md | 224 + .../ZCF-2133-zns-pivot-detailed-design.md | 2006 +++ docs/modules/network/nav.adoc | 1 + .../networkResource/ZStackL2NetworkType.adoc | 504 + .../pages/networkResource/ZnsIntegration.adoc | 975 ++ .../networkResource/networkResource.adoc | 3 +- .../header/network/l2/L2NetworkConstant.java | 6 + .../AfterSetL3NetworkMtuExtensionPoint.java | 7 + .../l3/AfterUpdateIpRangeExtensionPoint.java | 5 + .../header/network/l3/L3NetworkInventory.java | 3 + .../header/network/l3/L3NetworkType.java | 9 + .../zstack/header/network/l3/L3NetworkVO.java | 3 + .../sdncontroller/SdnControllerConstant.java | 2 + .../sdncontroller/SdnControllerInventory.java | 4 + .../SdnControllerStatusEvent.java | 11 + .../vm/AfterAllocateSdnNicExtensionPoint.java | 77 + .../AfterAllocateVmNicIpExtensionPoint.java | 19 + .../vm/AfterReleaseVmNicExtensionPoint.java | 12 + .../vm/AfterUpdateVmNicMacExtensionPoint.java | 5 + .../vm/BeforeAllocateVmNicExtensionPoint.java | 14 + .../zstack/header/vm/VmInstanceConstant.java | 2 + .../header/vm/VmInstanceNicFactory.java | 1 + .../org/zstack/header/vm/VmNicInventory.java | 10 + .../header/vm/VmNicLifecycleContext.java | 60 + .../vm/VmNicLifecycleExtensionPoint.java | 121 + .../zstack/header/vm/VmOvsNicConstant.java | 9 - .../network/l2/L2NetworkApiInterceptor.java | 80 +- .../l2/L2NetworkExtensionPointEmitter.java | 14 + .../network/l2/L2NetworkHostHelper.java | 5 +- .../zstack/network/l2/L2NoVlanNetwork.java | 11 +- .../org/zstack/network/l3/L3BasicNetwork.java | 9 +- .../network/l3/L3NetworkManagerImpl.java | 38 +- .../appliancevm/ApplianceVmFacadeImpl.java | 2 +- .../java/org/zstack/kvm/KVMAgentCommands.java | 28 + .../org/zstack/kvm/KVMApiInterceptor.java | 5 + .../src/main/java/org/zstack/kvm/KVMHost.java | 10 + .../java/org/zstack/kvm/KVMHostFactory.java | 3 +- .../kvm/KVMRealizeL2NoVlanNetworkBackend.java | 2 +- .../kvm/KVMRealizeL2VlanNetworkBackend.java | 2 +- .../zstack/kvm/VmNicLifecycleKvmBridge.java | 114 + .../AbstractSdnControllerFactory.java | 45 + .../sdnController/SdnControllerBase.java | 43 +- .../sdnController/SdnControllerFactory.java | 19 +- .../zstack/sdnController/SdnControllerL2.java | 1 + .../SdnControllerManagerImpl.java | 489 +- .../SdnControllerPingTracker.java | 9 +- .../h3cVcfc/H3cVcfcSdnControllerFactory.java | 11 +- .../controller/SugonSdnControllerFactory.java | 8 +- .../VxlanNetworkCheckerImpl.java | 2 +- .../scripts/RestDocumentationGenerator.groovy | 175 +- sdk/src/main/java/SourceClassMap.java | 3578 ++--- sdk/src/main/java/org/zstack/sdk/NicTO.java | 16 + .../zns/CreateL2GeneveNetworkAction.java | 131 + .../network/zns/L2GeneveNetworkInventory.java | 23 + .../sdk/network/zns/QueryZnsTenantAction.java | 75 + .../sdk/network/zns/QueryZnsTenantResult.java | 22 + .../zns/QueryZnsTenantRouterAction.java | 75 + .../zns/QueryZnsTenantRouterResult.java | 22 + .../network/zns/ZnsControllerInventory.java | 31 + .../sdk/network/zns/ZnsTenantInventory.java | 63 + .../network/zns/ZnsTenantRouterInventory.java | 79 + .../zns/ZnsTransportZoneInventory.java | 95 + .../java/org/zstack/zql/ast/ZQLMetadata.java | 2 +- .../test/resources/springConfigXml/Kvm.xml | 6 + .../java/org/zstack/testlib/ApiHelper.groovy | 12801 ++++++++-------- .../zstack/testlib/SdnControllerSpec.groovy | 7 +- .../CloudOperationsErrorCode.java | 114 + 90 files changed, 15276 insertions(+), 8686 deletions(-) create mode 100644 compute/src/main/java/org/zstack/compute/vm/VmAllocateSdnNicFlow.java create mode 100644 compute/src/main/java/org/zstack/compute/vm/VmExpungeSdnNicFlow.java create mode 100644 compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleGlobalConfig.java create mode 100644 compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java create mode 100644 conf/globalConfig/vmNicLifecycle.xml create mode 100644 core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java create mode 100644 core/src/main/java/org/zstack/core/rest/webhook/WebhookProtocol.java create mode 100644 docs/design/zns-pivot/ZCF-2133-p3-review-gpt55.md create mode 100644 docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md create mode 100644 docs/modules/network/pages/networkResource/ZStackL2NetworkType.adoc create mode 100644 docs/modules/network/pages/networkResource/ZnsIntegration.adoc create mode 100644 header/src/main/java/org/zstack/header/network/l3/AfterSetL3NetworkMtuExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/AfterUpdateIpRangeExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerStatusEvent.java create mode 100644 header/src/main/java/org/zstack/header/vm/AfterAllocateSdnNicExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/vm/AfterUpdateVmNicMacExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/vm/BeforeAllocateVmNicExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/vm/VmNicLifecycleContext.java create mode 100644 header/src/main/java/org/zstack/header/vm/VmNicLifecycleExtensionPoint.java delete mode 100644 header/src/main/java/org/zstack/header/vm/VmOvsNicConstant.java create mode 100644 plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/AbstractSdnControllerFactory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/L2GeneveNetworkInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsControllerInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantRouterInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTransportZoneInventory.java diff --git a/build/pom.xml b/build/pom.xml index a1ea6a47ca7..5a097bb382a 100755 --- a/build/pom.xml +++ b/build/pom.xml @@ -636,6 +636,11 @@ ovn ${project.version} + + org.zstack + zns + ${project.version} + org.zstack observabilityServer diff --git a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java index db5da3e3ce8..4ab5d0235df 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -11,6 +11,7 @@ import org.zstack.core.db.DatabaseFacade; import org.zstack.core.db.SQLBatch; import org.zstack.core.errorcode.ErrorFacade; +import org.zstack.header.core.Completion; import org.zstack.header.core.WhileDoneCompletion; import org.zstack.header.core.workflow.Flow; import org.zstack.header.core.workflow.FlowRollback; @@ -18,6 +19,7 @@ import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.errorcode.ErrorCodeList; import org.zstack.header.image.ImagePlatform; +import org.zstack.header.message.APIMessage; import org.zstack.header.network.l3.*; import org.zstack.header.vm.*; import org.zstack.network.l3.L3NetworkManager; @@ -91,113 +93,58 @@ public void run(final FlowTrigger trigger, final Map data) { List nics = new ArrayList<>(); data.put(VmInstanceConstant.Params.VmAllocateNicFlow_nics.toString(), nics); List errs = new ArrayList<>(); + List vmSystemTags = spec.getMessage() instanceof APIMessage ? ((APIMessage) spec.getMessage()).getSystemTags() : null; new While<>(VmNicSpec.getFirstL3NetworkInventoryOfSpec(spec.getL3Networks())).each((nicSpec, wcomp) -> { L3NetworkInventory nw = nicSpec.getL3Invs().get(0); int deviceId = deviceIdBitmap.nextClearBit(0); deviceIdBitmap.set(deviceId); MacOperator mo = new MacOperator(); - String customMac = mo.getMac(spec.getVmInventory().getUuid(), nw.getUuid()); - if (customMac != null){ - mo.deleteCustomMacSystemTag(spec.getVmInventory().getUuid(), nw.getUuid(), customMac); - customMac = customMac.toLowerCase(); - } else { - customMac = MacOperator.generateMacWithDeviceId((short) deviceId); - } - final String mac = customMac; + final String mac = allocateMac(mo, spec, nw, deviceId); CustomNicOperator nicOperator = new CustomNicOperator(spec.getVmInventory().getUuid(),nw.getUuid()); final String customNicUuid = nicOperator.getCustomNicId(); // choose vnic factory based on enableSRIOV system tag & enableVhostUser globalConfig - VmNicType type = nicManager.getVmNicType(spec.getVmInventory().getUuid(), nw); + VmNicType type = nicManager.getVmNicType(spec.getVmInventory().getUuid(), nw, vmSystemTags); if (type == null) { errs.add(Platform.operr(ORG_ZSTACK_COMPUTE_VM_10068, "there is no available nicType on L3 network [%s]", nw.getUuid())); wcomp.allDone(); + return; } VmInstanceNicFactory vnicFactory = vmMgr.getVmInstanceNicFactory(type); - - VmNicInventory nic = new VmNicInventory(); - if (customNicUuid != null) { - nic.setUuid(customNicUuid); - } else { - nic.setUuid(Platform.getUuid()); - } - /* the first ip is ipv4 address for dual stack nic */ - nic.setVmInstanceUuid(spec.getVmInventory().getUuid()); - nic.setL3NetworkUuid(nw.getUuid()); - nic.setMac(mac); - nic.setHypervisorType(spec.getDestHost() == null ? - spec.getVmInventory().getHypervisorType() : spec.getDestHost().getHypervisorType()); + VmNicInventory nic = buildNicInventory(spec, nicSpec, nw, mac, customNicUuid, deviceId, disableL3Networks); if (mo.checkDuplicateMac(nic.getHypervisorType(), nic.getL3NetworkUuid(), nic.getMac())) { - trigger.fail(operr(ORG_ZSTACK_COMPUTE_VM_10069, "Duplicate mac address [%s]", nic.getMac())); + errs.add(operr(ORG_ZSTACK_COMPUTE_VM_10069, "Duplicate mac address [%s]", nic.getMac())); + wcomp.allDone(); return; } - if (!StringUtils.isEmpty(nicSpec.getNicDriverType())) { - nic.setDriverType(nicSpec.getNicDriverType()); - } else { - boolean vmImageHasVirtio = VmSystemTags.VIRTIO.hasTag(spec.getVmInventory().getUuid()); - nicManager.setNicDriverType(nic, vmImageHasVirtio, - ImagePlatform.valueOf(spec.getVmInventory().getPlatform()).isParaVirtualization(), - spec.getVmInventory()); - } + // Persist VmNicVO first so that ResourceVO entry exists before extensions + // (e.g. SDN controllers) attempt to create SystemTags referencing the NIC UUID. + VmNicVO nicVO = vnicFactory.createVmNic(nic, spec); - nic.setDeviceId(deviceId); - nic.setInternalName(VmNicVO.generateNicInternalName(spec.getVmInventory().getInternalId(), nic.getDeviceId())); - nic.setState(disableL3Networks.contains(nic.getL3NetworkUuid()) ? VmNicState.disable.toString() : VmNicState.enable.toString()); - new SQLBatch() { + callBeforeAllocateVmNicExtensions(nic, spec, new Completion(wcomp) { @Override - protected void scripts() { - VmNicVO nicVO = vnicFactory.createVmNic(nic, spec); - if (!nw.enableIpAddressAllocation() && nicNetworkInfoMap != null - && nicNetworkInfoMap.containsKey(nw.getUuid()) - && spec.getVmInventory().getType().equals(VmInstanceConstant.USER_VM_TYPE)) { - NicIpAddressInfo nicNicIpAddressInfo = nicNetworkInfoMap.get(nic.getL3NetworkUuid()); - if (!nicNicIpAddressInfo.ipv6Address.isEmpty()) { - UsedIpVO vo = new UsedIpVO(); - vo.setUuid(Platform.getUuid()); - vo.setIp(IPv6NetworkUtils.getIpv6AddressCanonicalString(nicNicIpAddressInfo.ipv6Address)); - vo.setNetmask(IPv6NetworkUtils.getFormalNetmaskOfNetworkCidr(nicNicIpAddressInfo.ipv6Address+"/"+ nicNicIpAddressInfo.ipv6Prefix)); - vo.setGateway(nicNicIpAddressInfo.ipv6Gateway.isEmpty() ? "" : IPv6NetworkUtils.getIpv6AddressCanonicalString(nicNicIpAddressInfo.ipv6Gateway)); - vo.setIpVersion(IPv6Constants.IPv6); - vo.setVmNicUuid(nic.getUuid()); - vo.setL3NetworkUuid(nic.getL3NetworkUuid()); - vo.setIpInBinary(NetworkUtils.ipStringToBytes(vo.getIp())); - vo.setIpRangeUuid(new StaticIpOperator().getIpRangeUuid(nic.getL3NetworkUuid(), vo.getIp())); - nic.setUsedIpUuid(vo.getUuid()); - nicVO.setUsedIpUuid(vo.getUuid()); - nicVO.setIp(vo.getIp()); - nicVO.setNetmask(vo.getNetmask()); - nicVO.setGateway(vo.getGateway()); - dbf.persist(vo); + public void success() { + new SQLBatch() { + @Override + protected void scripts() { + persistStaticIpIfNeeded(nic, nicVO, nw, nicNetworkInfoMap, spec); + nics.add(nic); + VmNicVO updated = dbf.updateAndRefresh(nicVO); + addVmNicConfig(updated, spec, nicSpec); } - if (!nicNicIpAddressInfo.ipv4Address.isEmpty()) { - UsedIpVO vo = new UsedIpVO(); - vo.setUuid(Platform.getUuid()); - vo.setIp(nicNicIpAddressInfo.ipv4Address); - vo.setGateway(nicNicIpAddressInfo.ipv4Gateway); - vo.setNetmask(nicNicIpAddressInfo.ipv4Netmask); - vo.setIpVersion(IPv6Constants.IPv4); - vo.setVmNicUuid(nic.getUuid()); - vo.setL3NetworkUuid(nic.getL3NetworkUuid()); - vo.setIpInLong(NetworkUtils.ipv4StringToLong(vo.getIp())); - vo.setIpInBinary(NetworkUtils.ipStringToBytes(vo.getIp())); - vo.setIpRangeUuid(new StaticIpOperator().getIpRangeUuid(nic.getL3NetworkUuid(), vo.getIp())); - nic.setUsedIpUuid(vo.getUuid()); - nicVO.setUsedIpUuid(vo.getUuid()); - nicVO.setIp(vo.getIp()); - nicVO.setNetmask(vo.getNetmask()); - nicVO.setGateway(vo.getGateway()); - dbf.persist(vo); - } - } - nics.add(nic); - nicVO = dbf.updateAndRefresh(nicVO); - addVmNicConfig(nicVO, spec, nicSpec); + }.execute(); + wcomp.done(); } - }.execute(); - wcomp.done(); + + @Override + public void fail(ErrorCode errorCode) { + errs.add(errorCode); + wcomp.allDone(); + } + }); }).run(new WhileDoneCompletion(trigger) { @Override @@ -211,6 +158,92 @@ public void done(ErrorCodeList errorCodeList) { }); } + private String allocateMac(MacOperator mo, VmInstanceSpec spec, L3NetworkInventory nw, int deviceId) { + String vmUuid = spec.getVmInventory().getUuid(); + String customMac = mo.getMac(vmUuid, nw.getUuid()); + if (customMac != null) { + mo.deleteCustomMacSystemTag(vmUuid, nw.getUuid(), customMac); + return customMac.toLowerCase(); + } + return MacOperator.generateMacWithDeviceId((short) deviceId); + } + + private VmNicInventory buildNicInventory(VmInstanceSpec spec, VmNicSpec nicSpec, + L3NetworkInventory nw, String mac, String customNicUuid, + int deviceId, List disableL3Networks) { + VmNicInventory nic = new VmNicInventory(); + nic.setUuid(customNicUuid != null ? customNicUuid : Platform.getUuid()); + /* the first ip is ipv4 address for dual stack nic */ + nic.setVmInstanceUuid(spec.getVmInventory().getUuid()); + nic.setL3NetworkUuid(nw.getUuid()); + nic.setMac(mac); + nic.setHypervisorType(spec.getDestHost() == null ? + spec.getVmInventory().getHypervisorType() : spec.getDestHost().getHypervisorType()); + + if (!StringUtils.isEmpty(nicSpec.getNicDriverType())) { + nic.setDriverType(nicSpec.getNicDriverType()); + } else { + boolean vmImageHasVirtio = VmSystemTags.VIRTIO.hasTag(spec.getVmInventory().getUuid()); + nicManager.setNicDriverType(nic, vmImageHasVirtio, + ImagePlatform.valueOf(spec.getVmInventory().getPlatform()).isParaVirtualization(), + spec.getVmInventory()); + } + + nic.setDeviceId(deviceId); + nic.setInternalName(VmNicVO.generateNicInternalName(spec.getVmInventory().getInternalId(), nic.getDeviceId())); + nic.setState(disableL3Networks.contains(nic.getL3NetworkUuid()) ? VmNicState.disable.toString() : VmNicState.enable.toString()); + return nic; + } + + private void persistStaticIpIfNeeded(VmNicInventory nic, VmNicVO nicVO, + L3NetworkInventory nw, Map nicNetworkInfoMap, + VmInstanceSpec spec) { + if (nw.enableIpAddressAllocation() || nicNetworkInfoMap == null + || !nicNetworkInfoMap.containsKey(nw.getUuid()) + || !spec.getVmInventory().getType().equals(VmInstanceConstant.USER_VM_TYPE)) { + return; + } + + NicIpAddressInfo nicIpAddressInfo = nicNetworkInfoMap.get(nic.getL3NetworkUuid()); + if (!nicIpAddressInfo.ipv6Address.isEmpty()) { + UsedIpVO vo = new UsedIpVO(); + vo.setUuid(Platform.getUuid()); + vo.setIp(IPv6NetworkUtils.getIpv6AddressCanonicalString(nicIpAddressInfo.ipv6Address)); + vo.setNetmask(IPv6NetworkUtils.getFormalNetmaskOfNetworkCidr(nicIpAddressInfo.ipv6Address + "/" + nicIpAddressInfo.ipv6Prefix)); + vo.setGateway(nicIpAddressInfo.ipv6Gateway.isEmpty() ? "" : IPv6NetworkUtils.getIpv6AddressCanonicalString(nicIpAddressInfo.ipv6Gateway)); + vo.setIpVersion(IPv6Constants.IPv6); + vo.setVmNicUuid(nic.getUuid()); + vo.setL3NetworkUuid(nic.getL3NetworkUuid()); + vo.setIpInBinary(NetworkUtils.ipStringToBytes(vo.getIp())); + vo.setIpRangeUuid(new StaticIpOperator().getIpRangeUuid(nic.getL3NetworkUuid(), vo.getIp())); + nic.setUsedIpUuid(vo.getUuid()); + nicVO.setUsedIpUuid(vo.getUuid()); + nicVO.setIp(vo.getIp()); + nicVO.setNetmask(vo.getNetmask()); + nicVO.setGateway(vo.getGateway()); + dbf.persist(vo); + } + if (!nicIpAddressInfo.ipv4Address.isEmpty()) { + UsedIpVO vo = new UsedIpVO(); + vo.setUuid(Platform.getUuid()); + vo.setIp(nicIpAddressInfo.ipv4Address); + vo.setGateway(nicIpAddressInfo.ipv4Gateway); + vo.setNetmask(nicIpAddressInfo.ipv4Netmask); + vo.setIpVersion(IPv6Constants.IPv4); + vo.setVmNicUuid(nic.getUuid()); + vo.setL3NetworkUuid(nic.getL3NetworkUuid()); + vo.setIpInLong(NetworkUtils.ipv4StringToLong(vo.getIp())); + vo.setIpInBinary(NetworkUtils.ipStringToBytes(vo.getIp())); + vo.setIpRangeUuid(new StaticIpOperator().getIpRangeUuid(nic.getL3NetworkUuid(), vo.getIp())); + nic.setUsedIpUuid(vo.getUuid()); + nicVO.setUsedIpUuid(vo.getUuid()); + nicVO.setIp(vo.getIp()); + nicVO.setNetmask(vo.getNetmask()); + nicVO.setGateway(vo.getGateway()); + dbf.persist(vo); + } + } + private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec nicSpec) { if (nicSpec == null) { return; @@ -237,6 +270,38 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni } } + private void callBeforeAllocateVmNicExtensions(VmNicInventory nic, VmInstanceSpec spec, Completion completion) { + List exts = pluginRgty.getExtensionList(BeforeAllocateVmNicExtensionPoint.class); + if (exts.isEmpty()) { + completion.success(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.beforeAllocateVmNic(nic, spec, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + wcomp.addError(errorCode); + wcomp.allDone(); + } + }); + }).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } + } + }); + } + @Override public void rollback(final FlowRollback chain, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); @@ -256,7 +321,7 @@ public void rollback(final FlowRollback chain, Map data) { vnicFactory.releaseVmNic(vmNic); } dbf.removeByPrimaryKeys(destNics.stream().map(VmNicInventory::getUuid).collect(Collectors.toList()), VmNicVO.class); + chain.rollback(); - return; } } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmAllocateSdnNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmAllocateSdnNicFlow.java new file mode 100644 index 00000000000..19d2d75c228 --- /dev/null +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateSdnNicFlow.java @@ -0,0 +1,131 @@ +package org.zstack.compute.vm; + +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.zstack.core.asyncbatch.While; +import org.zstack.core.componentloader.PluginRegistry; +import org.zstack.header.core.Completion; +import org.zstack.header.core.WhileDoneCompletion; +import org.zstack.header.core.workflow.Flow; +import org.zstack.header.core.workflow.FlowRollback; +import org.zstack.header.core.workflow.FlowTrigger; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.errorcode.ErrorCodeList; +import org.zstack.header.network.l3.UsedIpInventory; +import org.zstack.header.network.sdncontroller.SdnControllerConstant; +import org.zstack.header.vm.*; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.zstack.core.progress.ProgressReportService.taskProgress; + +/** + * Placed after VmAllocateNicIpFlow in the flow chain. + * + * For each NIC belonging to an SDN-managed L2 network, this flow delegates + * to the registered {@link AfterAllocateSdnNicExtensionPoint} implementations + * (typically {@code SdnControllerManagerImpl}) which: + * + * - OVN: calls addLogicalPorts() with already-allocated IPs + * - ZNS: calls createSegmentPort(), receives IP back from ZNS, writes to DB + * - H3C/Sugon: default no-op + * + * Non-SDN NICs are skipped by the extension implementation internally. + */ +@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE) +public class VmAllocateSdnNicFlow implements Flow { + private static final CLogger logger = Utils.getLogger(VmAllocateSdnNicFlow.class); + + @Autowired + private PluginRegistry pluginRgty; + + @Override + public void run(final FlowTrigger trigger, final Map data) { + taskProgress("create SDN ports for nics"); + + final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); + final List nics = spec.getDestNics(); + List allocatedIpsOnStart = (List) data.get(VmAllocateNicForStartingVmFlow.class); + if (allocatedIpsOnStart != null) { + spec.putExtensionData(SdnControllerConstant.ALLOCATED_IPS_ON_START, allocatedIpsOnStart.stream() + .map(UsedIpInventory::getVmNicUuid) + .collect(Collectors.toList())); + } + + if (nics == null || nics.isEmpty()) { + trigger.next(); + return; + } + + List exts = + pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + if (exts.isEmpty()) { + trigger.next(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.afterAllocateSdnNic(spec, nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + wcomp.addError(errorCode); + wcomp.allDone(); + } + }); + }).run(new WhileDoneCompletion(trigger) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (!errorCodeList.getCauses().isEmpty()) { + trigger.fail(errorCodeList.getCauses().get(0)); + } else { + trigger.next(); + } + } + }); + } + + @Override + public void rollback(final FlowRollback chain, Map data) { + final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); + final List nics = spec.getDestNics(); + + List exts = + pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + + if (exts.isEmpty() || nics == null || nics.isEmpty()) { + chain.rollback(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.rollbackSdnNic(spec, nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + // best-effort: log and continue + logger.warn(String.format("failed to rollback SDN nic: %s", errorCode)); + wcomp.done(); + } + }); + }).run(new WhileDoneCompletion(chain) { + @Override + public void done(ErrorCodeList errorCodeList) { + chain.rollback(); + } + }); + } +} diff --git a/compute/src/main/java/org/zstack/compute/vm/VmCascadeExtension.java b/compute/src/main/java/org/zstack/compute/vm/VmCascadeExtension.java index 9bd98bd9511..07247d60b91 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmCascadeExtension.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmCascadeExtension.java @@ -325,6 +325,7 @@ protected List handleDeletionForIpRange(List(nic.getUsedIps()).all((ip, comp) -> { ReturnIpMsg msg = new ReturnIpMsg(); msg.setUsedIpUuid(ip.getUuid()); @@ -82,9 +98,51 @@ public void run(MessageReply reply) { }).run(new WhileDoneCompletion(trigger){ @Override public void done(ErrorCodeList errorCodeList) { - dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class); - trigger.next(); + callReleaseSdnNics(java.util.Collections.singletonList(nic), new Completion(trigger) { + @Override + public void success() { + dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class); + trigger.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("releaseSdnNics failed for nic[uuid:%s]: %s, continue", + nic.getUuid(), errorCode)); + dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class); + trigger.next(); + } + }); + } + }); + } + + private void callReleaseSdnNics(List nics, Completion completion) { + List exts = pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + if (exts.isEmpty()) { + completion.success(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.releaseSdnNics(nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); + wcomp.done(); + } + }); + }).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + completion.success(); } }); } + } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmExpungeSdnNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmExpungeSdnNicFlow.java new file mode 100644 index 00000000000..654d7cc213f --- /dev/null +++ b/compute/src/main/java/org/zstack/compute/vm/VmExpungeSdnNicFlow.java @@ -0,0 +1,84 @@ +package org.zstack.compute.vm; + +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.zstack.core.asyncbatch.While; +import org.zstack.core.componentloader.PluginRegistry; +import org.zstack.header.core.Completion; +import org.zstack.header.core.WhileDoneCompletion; +import org.zstack.header.core.workflow.FlowTrigger; +import org.zstack.header.core.workflow.NoRollbackFlow; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.errorcode.ErrorCodeList; +import org.zstack.header.vm.AfterAllocateSdnNicExtensionPoint; +import org.zstack.header.vm.VmInstanceConstant; +import org.zstack.header.vm.VmInstanceSpec; +import org.zstack.header.vm.VmNicInventory; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +import java.util.List; +import java.util.Map; + +@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE) +public class VmExpungeSdnNicFlow extends NoRollbackFlow { + private static final CLogger logger = Utils.getLogger(VmExpungeSdnNicFlow.class); + + @Autowired + private PluginRegistry pluginRgty; + + @Override + public void run(FlowTrigger trigger, Map data) { + VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); + List nics = spec.getVmInventory().getVmNics(); + if (nics == null || nics.isEmpty()) { + trigger.next(); + return; + } + + expungeSdnNics(nics, new Completion(trigger) { + @Override + public void success() { + trigger.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("expungeSdnNics failed during vm expunge: %s", errorCode)); + trigger.fail(errorCode); + } + }); + } + + private void expungeSdnNics(List nics, Completion completion) { + List exts = pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + if (exts.isEmpty()) { + completion.success(); + return; + } + + new While<>(exts).each((ext, wcomp) -> ext.expungeSdnNics(nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("expungeSdnNics extension failed during vm expunge: %s", errorCode)); + wcomp.addError(errorCode); + wcomp.done(); + } + })).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } + } + }); + } +} diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceApiInterceptor.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceApiInterceptor.java index 06d175a8d13..0e42d53cc71 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceApiInterceptor.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceApiInterceptor.java @@ -1536,4 +1536,4 @@ private void validate(APIFstrimVmMsg msg) { } msg.setHostUuid(t.get(1, String.class)); } -} \ No newline at end of file +} diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index ba6c4b9e1d6..ced9f7e6dc4 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -46,6 +46,7 @@ import org.zstack.header.message.*; import org.zstack.header.network.l3.*; import org.zstack.header.storage.primary.*; +import org.zstack.header.tag.SystemTagInventory; import org.zstack.header.vm.*; import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicHostUuid; import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicVmState; @@ -1269,15 +1270,7 @@ public void done(ErrorCodeList errorCodeList) { @Override public void run(FlowTrigger trigger, Map data) { - final VmInstanceInventory vm = getSelfInventory(); - final VmNicInventory nic = VmNicInventory.valueOf(targetNic); - CollectionUtils.safeForEach(pluginRgty.getExtensionList(VmIpChangedExtensionPoint.class), - new ForEachFunction() { - @Override - public void run(VmIpChangedExtensionPoint ext) { - ext.vmIpChanged(vm, nic, oldIpMap, newIpMap); - } - }); + notifyVmIpChanged(targetNic.getUuid(), oldIpMap, newIpMap); trigger.next(); } }); @@ -1303,6 +1296,34 @@ public void handle(ErrorCode errCode, Map data) { }).start(); } + private void notifyVmIpChanged(String vmNicUuid, Map oldIpMap, Map newIpMap) { + final VmInstanceInventory vm = getSelfInventory(); + VmNicVO latestNic = dbf.findByUuid(vmNicUuid, VmNicVO.class); + if (latestNic == null) { + return; + } + + final VmNicInventory nic = VmNicInventory.valueOf(latestNic); + CollectionUtils.safeForEach(pluginRgty.getExtensionList(VmIpChangedExtensionPoint.class), + new ForEachFunction() { + @Override + public void run(VmIpChangedExtensionPoint ext) { + ext.vmIpChanged(vm, nic, oldIpMap, newIpMap); + } + }); + } + + private UsedIpInventory toUsedIpInventory(UsedIpVO ipvo) { + UsedIpInventory ip = new UsedIpInventory(); + ip.setIp(ipvo.getIp()); + ip.setGateway(ipvo.getGateway()); + ip.setNetmask(ipvo.getNetmask()); + ip.setL3NetworkUuid(ipvo.getL3NetworkUuid()); + ip.setUuid(ipvo.getUuid()); + ip.setIpVersion(ipvo.getIpVersion()); + return ip; + } + private void handle(final ExpungeVmMsg msg) { final ExpungeVmReply reply = new ExpungeVmReply(); thdf.chainSubmit(new ChainTask(msg) { @@ -2239,23 +2260,32 @@ void rollback() { } } - class SetL3SecurityGroupSystemTag { - private boolean isSet = false; + class SetVmSystemTags { + private List createdTags = new ArrayList<>(); void set () { if (msg instanceof APIAttachL3NetworkToVmMsg) { APIAttachL3NetworkToVmMsg amsg = (APIAttachL3NetworkToVmMsg) msg; + if (amsg.getSystemTags() == null || amsg.getSystemTags().isEmpty()) { + return; + } - if (amsg.hasSystemTag(VmSystemTags.L3_NETWORK_SECURITY_GROUP_UUIDS_REF::isMatch)) { - tagMgr.createNonInherentSystemTags(amsg.getSystemTags(), self.getUuid(), VmInstanceVO.class.getSimpleName()); - isSet = true; + List vmSystemTags = tagMgr.filterSystemTags( + amsg.getSystemTags(), VmInstanceVO.class.getSimpleName()); + + for (String tag : vmSystemTags) { + SystemTagInventory created = tagMgr.createNonInherentSystemTag( + self.getUuid(), tag, VmInstanceVO.class.getSimpleName()); + if (created != null) { + createdTags.add(created); + } } } } void rollback() { - if (isSet) { - VmSystemTags.L3_NETWORK_SECURITY_GROUP_UUIDS_REF.delete(self.getUuid()); + for (SystemTagInventory tag : createdTags) { + tagMgr.deleteSystemTag(tag.getUuid()); } } } @@ -2289,7 +2319,7 @@ void rollback() { setStaticIp.set(); Defer.guard(setStaticIp::rollback); - final SetL3SecurityGroupSystemTag setSystemTag = new SetL3SecurityGroupSystemTag(); + final SetVmSystemTags setSystemTag = new SetVmSystemTags(); setSystemTag.set(); Defer.guard(setSystemTag::rollback); @@ -2298,6 +2328,7 @@ void rollback() { Defer.guard(setCustomMacSystemTag::rollback); final VmInstanceSpec spec = buildSpecFromInventory(getSelfInventory(), VmOperation.AttachNic); + spec.setMessage(msg); final VmInstanceInventory vm = spec.getVmInventory(); List l3s = new ArrayList<>(); for (String l3Uuid : l3Uuids) { @@ -2340,6 +2371,7 @@ void rollback() { flowChain.then(new VmAllocateNicFlow()); flowChain.then(new VmAllocateNicIpFlow()); + flowChain.then(new VmAllocateSdnNicFlow()); flowChain.then(new VmSetDefaultL3NetworkOnAttachingFlow()); setAdditionalFlow(flowChain, spec); if (self.getState() == VmInstanceState.Running) { @@ -3641,6 +3673,8 @@ public void run(FlowTrigger trigger, Map data) { // in dual stack l3 , keep the old ip which not set in msg List voRemoveList = new ArrayList<>(); List voOldList = Q.New(UsedIpVO.class).eq(UsedIpVO_.vmNicUuid, nicVO.getUuid()).list(); + Map oldIpMap = new HashMap<>(); + Map newIpMap = new HashMap<>(); if (msg.getIp() == null && msg.getIp6() == null) { voRemoveList.addAll(voOldList); nicVO.setUsedIpUuid(null); @@ -3702,9 +3736,16 @@ public void run(FlowTrigger trigger, Map data) { voRemoveList.addAll(voOldList.stream().filter(voOld -> voOld.getIpVersion() == IPv6Constants.IPv6).collect(Collectors.toList())); } } + for (UsedIpVO vo : voRemoveList) { + oldIpMap.put(vo.getIpVersion(), toUsedIpInventory(vo)); + } + for (UsedIpVO vo : voNewList) { + newIpMap.put(vo.getIpVersion(), toUsedIpInventory(vo)); + } dbf.persistCollection(voNewList); dbf.update(nicVO); dbf.removeCollection(voRemoveList, UsedIpVO.class); + notifyVmIpChanged(nicVO.getUuid(), oldIpMap, newIpMap); trigger.next(); } }); @@ -5334,6 +5375,7 @@ private void handle(final APIChangeVmNicStateMsg msg) { SQL.New(VmNicVO.class).eq(VmNicVO_.uuid, msg.getVmNicUuid()).set(VmNicVO_.state, VmNicState.disable).update(); } self = dbf.reload(self); + extEmitter.afterChangeVmNicState(msg.getVmNicUuid(), msg.getState()); evt.setInventory(VmInstanceInventory.valueOf(self)); bus.publish(evt); return; @@ -9272,4 +9314,3 @@ public void run(MessageReply reply) { }); } } - diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceExtensionPointEmitter.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceExtensionPointEmitter.java index b4e66919d1d..78be6365828 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceExtensionPointEmitter.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceExtensionPointEmitter.java @@ -51,6 +51,7 @@ public class VmInstanceExtensionPointEmitter implements Component { private List cleanUpAfterVmChangeImageExtensionPoints; private List vmNicChangeStateExtensionPoints; private List sshKeyPairAssociateExtensionPoints; + private List afterUpdateVmNicMacExtensionPoints; public List handleSystemTag(String vmUuid, List tags){ List errorCodes = new ArrayList<>(); @@ -581,6 +582,10 @@ public void afterChangeVmNicState(final String vmNic, final String state) { CollectionUtils.safeForEach(vmNicChangeStateExtensionPoints, arg -> arg.afterChangeVmNicState(vmNic, state)); } + public void afterUpdateVmNicMac(final VmNicInventory nic, final String oldMac, final String newMac) { + CollectionUtils.safeForEach(afterUpdateVmNicMacExtensionPoints, arg -> arg.afterUpdateVmNicMac(nic, oldMac, newMac)); + } + public List associateSshKeyPair(String vmUuid, List sshKeyUuids) { List errorCodes = new ArrayList<>(); CollectionUtils.safeForEach(sshKeyPairAssociateExtensionPoints, extension -> { @@ -626,6 +631,7 @@ private void populateExtensions() { cleanUpAfterVmChangeImageExtensionPoints = pluginRgty.getExtensionList(CleanUpAfterVmChangeImageExtensionPoint.class); vmNicChangeStateExtensionPoints = pluginRgty.getExtensionList(VmNicChangeStateExtensionPoint.class); sshKeyPairAssociateExtensionPoints = pluginRgty.getExtensionList(SshKeyPairAssociateExtensionPoint.class); + afterUpdateVmNicMacExtensionPoints = pluginRgty.getExtensionList(AfterUpdateVmNicMacExtensionPoint.class); } @Override diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleGlobalConfig.java b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleGlobalConfig.java new file mode 100644 index 00000000000..a1ca2001303 --- /dev/null +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleGlobalConfig.java @@ -0,0 +1,14 @@ +package org.zstack.compute.vm; + +import org.zstack.core.config.GlobalConfig; +import org.zstack.core.config.GlobalConfigDefinition; +import org.zstack.core.config.GlobalConfigValidation; + +@GlobalConfigDefinition +public class VmNicLifecycleGlobalConfig { + public static final String CATEGORY = "vmNicLifecycle"; + + @GlobalConfigValidation(numberGreaterThan = 0) + public static GlobalConfig RECONCILE_TIMEOUT = + new GlobalConfig(CATEGORY, "reconcileOnHost.timeout"); +} diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java new file mode 100644 index 00000000000..fc342f5395f --- /dev/null +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java @@ -0,0 +1,475 @@ +package org.zstack.compute.vm; + +import org.springframework.beans.factory.annotation.Autowired; +import org.zstack.core.Platform; +import org.zstack.core.componentloader.PluginRegistry; +import org.zstack.core.workflow.FlowChainBuilder; +import org.zstack.header.core.Completion; +import org.zstack.header.core.NoErrorCompletion; +import org.zstack.header.core.workflow.*; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.errorcode.SysErrors; +import org.zstack.header.network.l3.L3NetworkInventory; +import org.zstack.header.vm.*; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +import java.util.*; +import java.util.stream.Collectors; + +public class VmNicLifecycleManager implements + PreVmInstantiateResourceExtensionPoint, + VmReleaseResourceExtensionPoint, + VmInstanceMigrateExtensionPoint, + InstantiateResourceOnAttachingNicExtensionPoint, + ReleaseNetworkServiceOnDetachingNicExtensionPoint { + + private static final CLogger logger = Utils.getLogger(VmNicLifecycleManager.class); + + @Autowired + private PluginRegistry pluginRgty; + + private List getExtensions() { + return pluginRgty.getExtensionList(VmNicLifecycleExtensionPoint.class); + } + + // ===================== NIC filtering ===================== + + private List filterNics(VmNicLifecycleExtensionPoint ext, + List allNics) { + List matched = new ArrayList<>(); + for (VmNicInventory nic : allNics) { + try { + if (ext.isApplicable(nic)) { + matched.add(nic); + } + } catch (Exception e) { + logger.error(String.format("[VmNicLifecycle] %s.isApplicable(nic=%s) threw exception", + ext.getClass().getSimpleName(), nic.getUuid()), e); + throw new RuntimeException(String.format("%s.isApplicable failed for nic[uuid:%s]", + ext.getClass().getSimpleName(), nic.getUuid()), e); + } + } + return matched; + } + + // ===================== fail-fast serial runner (setup / preMigrate) ===================== + + private void runSetup(VmNicLifecycleContext context, Iterator it, + String hostUuid, List allNics, + Completion completion) { + if (!it.hasNext()) { + completion.success(); + return; + } + + VmNicLifecycleExtensionPoint ext = it.next(); + List nics; + try { + nics = filterNics(ext, allNics); + } catch (RuntimeException e) { + completion.fail(Platform.err(SysErrors.OPERATION_ERROR.toString(), SysErrors.OPERATION_ERROR, "%s", e.getMessage())); + return; + } + if (nics.isEmpty()) { + runSetup(context, it, hostUuid, allNics, completion); + return; + } + + long start = System.currentTimeMillis(); + ext.setupOnHost(context, hostUuid, nics, new Completion(completion) { + @Override + public void success() { + logger.debug(String.format("[VmNicLifecycle] %s.setupOnHost(host=%s, nics=%d) " + + "completed in %dms", ext.getClass().getSimpleName(), hostUuid, + nics.size(), System.currentTimeMillis() - start)); + runSetup(context, it, hostUuid, allNics, completion); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("[VmNicLifecycle] %s.setupOnHost(host=%s) failed: %s", + ext.getClass().getSimpleName(), hostUuid, errorCode)); + completion.fail(errorCode); + } + }); + } + + private void runPreMigrate(Iterator it, + String srcHostUuid, String destHostUuid, + List allNics, Completion completion) { + if (!it.hasNext()) { + completion.success(); + return; + } + + VmNicLifecycleExtensionPoint ext = it.next(); + List nics; + try { + nics = filterNics(ext, allNics); + } catch (RuntimeException e) { + completion.fail(Platform.err(SysErrors.OPERATION_ERROR.toString(), SysErrors.OPERATION_ERROR, "%s", e.getMessage())); + return; + } + if (nics.isEmpty()) { + runPreMigrate(it, srcHostUuid, destHostUuid, allNics, completion); + return; + } + + long start = System.currentTimeMillis(); + ext.preMigrate(srcHostUuid, destHostUuid, nics, new Completion(completion) { + @Override + public void success() { + logger.debug(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s, nics=%d) " + + "completed in %dms", ext.getClass().getSimpleName(), + srcHostUuid, destHostUuid, nics.size(), System.currentTimeMillis() - start)); + runPreMigrate(it, srcHostUuid, destHostUuid, allNics, completion); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s) failed: %s", + ext.getClass().getSimpleName(), srcHostUuid, destHostUuid, errorCode)); + completion.fail(errorCode); + } + }); + } + + // ===================== fail-logged serial runner (cleanup / postMigrate / failedMigrate) ===================== + + @FunctionalInterface + private interface CleanupAction { + void execute(VmNicLifecycleExtensionPoint ext, List nics, + NoErrorCompletion completion); + } + + private void runFailLogged(Iterator it, + List allNics, + String methodName, CleanupAction action, + NoErrorCompletion completion) { + if (!it.hasNext()) { + completion.done(); + return; + } + + VmNicLifecycleExtensionPoint ext = it.next(); + List nics; + try { + nics = filterNics(ext, allNics); + } catch (RuntimeException e) { + logger.warn(String.format("[VmNicLifecycle] %s.isApplicable threw exception during %s", + ext.getClass().getSimpleName(), methodName), e); + runFailLogged(it, allNics, methodName, action, completion); + return; + } + if (nics.isEmpty()) { + runFailLogged(it, allNics, methodName, action, completion); + return; + } + + try { + action.execute(ext, nics, new NoErrorCompletion() { + @Override + public void done() { + runFailLogged(it, allNics, methodName, action, completion); + } + }); + } catch (Throwable t) { + logger.warn(String.format("[VmNicLifecycle] %s.%s threw exception", + ext.getClass().getSimpleName(), methodName), t); + runFailLogged(it, allNics, methodName, action, completion); + } + } + + private void runCleanup(Iterator it, + String hostUuid, List allNics, + NoErrorCompletion completion) { + runFailLogged(it, allNics, "cleanupFromHost", + (ext, nics, done) -> ext.cleanupFromHost(hostUuid, nics, done), completion); + } + + private void runCleanupStale(Iterator it, + String lastHostUuid, List allNics, + NoErrorCompletion completion) { + runFailLogged(it, allNics, "cleanupStaleResource", + (ext, nics, done) -> ext.cleanupStaleResource(lastHostUuid, nics, done), completion); + } + + private void runPostMigrate(Iterator it, + String srcHostUuid, String destHostUuid, + List allNics, NoErrorCompletion completion) { + runFailLogged(it, allNics, "postMigrate", + (ext, nics, done) -> ext.postMigrate(srcHostUuid, destHostUuid, nics, done), + completion); + } + + private void runFailedMigrate(Iterator it, + String srcHostUuid, String destHostUuid, + List allNics, NoErrorCompletion completion) { + runFailLogged(it, allNics, "failedMigrate", + (ext, nics, done) -> ext.failedMigrate(srcHostUuid, destHostUuid, nics, done), + completion); + } + + // ===================== PreVmInstantiateResourceExtensionPoint ===================== + + @Override + public void preBeforeInstantiateVmResource(VmInstanceSpec spec) + throws VmInstantiateResourceException { + // sync hook — no resource operations + } + + private VmNicLifecycleContext buildContext(VmInstanceSpec spec, String destHostUuid) { + VmNicLifecycleContext ctx = new VmNicLifecycleContext(); + ctx.setOperation(spec.getCurrentVmOperation()); + ctx.setDestHostUuid(destHostUuid); + if (spec.getVmInventory() != null) { + ctx.setVmUuid(spec.getVmInventory().getUuid()); + ctx.setSrcHostUuid(spec.getVmInventory().getHostUuid()); + ctx.setLastHostUuid(spec.getVmInventory().getLastHostUuid()); + } + return ctx; + } + + @Override + public void preInstantiateVmResource(VmInstanceSpec spec, Completion completion) { + List allNics = spec.getDestNics(); + if (allNics == null || allNics.isEmpty() || getExtensions().isEmpty()) { + completion.success(); + return; + } + + if (spec.getDestHost() == null) { + completion.success(); + return; + } + String destHostUuid = spec.getDestHost().getUuid(); + String lastHostUuid = spec.getVmInventory().getLastHostUuid(); + VmInstanceConstant.VmOperation op = spec.getCurrentVmOperation(); + VmNicLifecycleContext ctx = buildContext(spec, destHostUuid); + + FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); + chain.setName("vmnic-lifecycle-pre-instantiate-" + spec.getVmInventory().getUuid()); + + if (lastHostUuid != null && !lastHostUuid.equals(destHostUuid) + && op == VmInstanceConstant.VmOperation.Start) { + chain.then(new NoRollbackFlow() { + String __name__ = "cleanup-stale-resource-from-last-host"; + + @Override + public void run(FlowTrigger trigger, Map data) { + runCleanupStale(getExtensions().iterator(), lastHostUuid, allNics, + new NoErrorCompletion() { + @Override + public void done() { + trigger.next(); + } + }); + } + }); + } + + chain.then(new NoRollbackFlow() { + String __name__ = "setup-on-dest-host"; + + @Override + public void run(FlowTrigger trigger, Map data) { + runSetup(ctx, getExtensions().iterator(), destHostUuid, allNics, new Completion(trigger) { + @Override + public void success() { + trigger.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + trigger.fail(errorCode); + } + }); + } + }); + + chain.done(new FlowDoneHandler(completion) { + @Override + public void handle(Map data) { + completion.success(); + } + }).error(new FlowErrorHandler(completion) { + @Override + public void handle(ErrorCode errCode, Map data) { + completion.fail(errCode); + } + }).start(); + } + + @Override + public void preReleaseVmResource(VmInstanceSpec spec, Completion completion) { + doCleanup(spec, new NoErrorCompletion(completion) { + @Override + public void done() { + completion.success(); + } + }); + } + + // ===================== VmReleaseResourceExtensionPoint ===================== + + @Override + public void releaseVmResource(VmInstanceSpec spec, Completion completion) { + if (spec.getCurrentVmOperation() == VmInstanceConstant.VmOperation.Reboot) { + completion.success(); + return; + } + doCleanup(spec, new NoErrorCompletion(completion) { + @Override + public void done() { + completion.success(); + } + }); + } + + private void doCleanup(VmInstanceSpec spec, NoErrorCompletion completion) { + List allNics = spec.getDestNics(); + if (allNics == null || allNics.isEmpty() || getExtensions().isEmpty()) { + completion.done(); + return; + } + if (spec.getDestHost() == null) { + completion.done(); + return; + } + String hostUuid = spec.getDestHost().getUuid(); + runCleanup(getExtensions().iterator(), hostUuid, allNics, completion); + } + + // ===================== VmInstanceMigrateExtensionPoint ===================== + + @Override + public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) { + // no-op — sync validation hook + } + + @Override + public void preMigrateVm(VmInstanceInventory inv, String destHostUuid, + Completion completion) { + if (getExtensions().isEmpty()) { + completion.success(); + return; + } + String srcHostUuid = inv.getHostUuid(); + List allNics = inv.getVmNics(); + if (allNics == null || allNics.isEmpty()) { + completion.success(); + return; + } + runPreMigrate(getExtensions().iterator(), srcHostUuid, destHostUuid, allNics, completion); + } + + @Override + public void postMigrateVm(VmInstanceInventory inv, String destHostUuid, + Completion completion) { + if (getExtensions().isEmpty()) { + completion.success(); + return; + } + String srcHostUuid = inv.getHostUuid(); + List allNics = inv.getVmNics(); + if (allNics == null || allNics.isEmpty()) { + completion.success(); + return; + } + runPostMigrate(getExtensions().iterator(), srcHostUuid, destHostUuid, allNics, + new NoErrorCompletion(completion) { + @Override + public void done() { + completion.success(); + } + }); + } + + @Override + public void afterMigrateVm(VmInstanceInventory inv, String srcHostUuid, + NoErrorCompletion completion) { + completion.done(); + } + + @Override + public void failedToMigrateVm(VmInstanceInventory inv, String destHostUuid, + ErrorCode reason, NoErrorCompletion completion) { + if (getExtensions().isEmpty()) { + completion.done(); + return; + } + String srcHostUuid = inv.getHostUuid(); + List allNics = inv.getVmNics(); + if (allNics == null || allNics.isEmpty()) { + completion.done(); + return; + } + runFailedMigrate(getExtensions().iterator(), srcHostUuid, destHostUuid, allNics, completion); + } + + // ===================== InstantiateResourceOnAttachingNicExtensionPoint ===================== + + @Override + public void instantiateResourceOnAttachingNic(VmInstanceSpec spec, + L3NetworkInventory l3, Completion completion) { + VmInstanceInventory vm = spec.getVmInventory(); + if (!VmInstanceState.Running.toString().equals(vm.getState()) || getExtensions().isEmpty()) { + completion.success(); + return; + } + + List newNics = spec.getDestNics().stream() + .filter(nic -> nic.getL3NetworkUuid().equals(l3.getUuid())) + .collect(Collectors.toList()); + if (newNics.isEmpty()) { + completion.success(); + return; + } + + String hostUuid = vm.getHostUuid(); + VmNicLifecycleContext ctx = buildContext(spec, hostUuid); + ctx.setOperation(VmInstanceConstant.VmOperation.AttachNic); + runSetup(ctx, getExtensions().iterator(), hostUuid, newNics, completion); + } + + @Override + public void releaseResourceOnAttachingNic(VmInstanceSpec spec, + L3NetworkInventory l3, NoErrorCompletion completion) { + doCleanupForNic(spec, l3, completion); + } + + private void doCleanupForNic(VmInstanceSpec spec, L3NetworkInventory l3, + NoErrorCompletion completion) { + if (getExtensions().isEmpty()) { + completion.done(); + return; + } + String hostUuid = spec.getVmInventory().getHostUuid(); + if (hostUuid == null) { + completion.done(); + return; + } + List nics = spec.getDestNics().stream() + .filter(nic -> nic.getL3NetworkUuid().equals(l3.getUuid())) + .collect(Collectors.toList()); + runCleanup(getExtensions().iterator(), hostUuid, nics, completion); + } + + // ===================== ReleaseNetworkServiceOnDetachingNicExtensionPoint ===================== + + @Override + public void releaseResourceOnDetachingNic(VmInstanceSpec spec, + VmNicInventory nic, NoErrorCompletion completion) { + if (getExtensions().isEmpty()) { + completion.done(); + return; + } + String hostUuid = spec.getVmInventory().getHostUuid(); + if (hostUuid == null) { + completion.done(); + return; + } + runCleanup(getExtensions().iterator(), hostUuid, Collections.singletonList(nic), completion); + } +} diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicManager.java b/compute/src/main/java/org/zstack/compute/vm/VmNicManager.java index ab6cc8d749d..f703b8d4d43 100644 --- a/compute/src/main/java/org/zstack/compute/vm/VmNicManager.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicManager.java @@ -20,4 +20,6 @@ public interface VmNicManager { void setNicDriverType(VmNicInventory nic, boolean isImageSupportVirtIo, boolean isParaVirtualization, VmInstanceInventory vm); VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw); + + VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw, List vmSystemTags); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java b/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java index 31b3e35d32a..906d3953c8b 100644 --- a/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java @@ -284,6 +284,42 @@ public void setNicDriverType(VmNicInventory nic, boolean isImageSupportVirtIo, b @Override public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw) { + return getVmNicType(vmUuid, l3nw, null); + } + + @Override + public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw, List vmSystemTags) { + L2NetworkVO l2nw = dbf.findByUuid(l3nw.getL2NetworkUuid(), L2NetworkVO.class); + VSwitchType vSwitchType = VSwitchType.valueOf(l2nw.getvSwitchType()); + + if (L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(l2nw.getvSwitchType())) { + List znsNicModes = new ArrayList<>(); + if (vmSystemTags != null) { + znsNicModes.addAll(vmSystemTags.stream() + .filter(Objects::nonNull) + .map(String::trim) + .filter(VmSystemTags.ZNS_NIC_MODE::isMatch) + .map(tag -> VmSystemTags.ZNS_NIC_MODE.getTokenByTag(tag, VmSystemTags.ZNS_NIC_MODE_TOKEN)) + .collect(Collectors.toList())); + } + znsNicModes.addAll(VmSystemTags.ZNS_NIC_MODE.getTags(vmUuid).stream() + .map(tag -> VmSystemTags.ZNS_NIC_MODE.getTokenByTag(tag, VmSystemTags.ZNS_NIC_MODE_TOKEN)) + .collect(Collectors.toList())); + + for (String mode : znsNicModes) { + if (!VmInstanceConstant.ZNS_NIC_MODE_DPDK.equals(mode) && !VmInstanceConstant.ZNS_NIC_MODE_KERNEL.equals(mode)) { + throw new OperationFailureException(argerr(ORG_ZSTACK_COMPUTE_VM_10257, + "invalid znsNicMode[%s], valid values are [%s, %s]", + mode, VmInstanceConstant.ZNS_NIC_MODE_DPDK, VmInstanceConstant.ZNS_NIC_MODE_KERNEL)); + } + } + + boolean enableZnsDpdk = znsNicModes.contains(VmInstanceConstant.ZNS_NIC_MODE_DPDK); + logger.debug(String.format("create %s on zns l3 network[uuid:%s] inside VmAllocateNicFlow", + enableZnsDpdk ? "dpdk vhostuser nic" : "vnic", l3nw.getUuid())); + return vSwitchType.getVmNicType(enableZnsDpdk ? VmNicType.VmNicSubType.VHOSTUSER : VmNicType.VmNicSubType.NONE); + } + List tags = new ArrayList<>(); tags.add(String.format("enableSRIOV::%s", l3nw.getUuid())); tags.add(String.format("enableVFHA::%s", l3nw.getUuid())); @@ -295,14 +331,19 @@ public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw) { logger.debug(String.format("create %s on l3 network[uuid:%s] inside VmAllocateNicFlow", enableSriov ? "vf nic" : "vnic", l3nw.getUuid())); boolean enableVhostUser = NetworkServiceGlobalConfig.ENABLE_VHOSTUSER.value(Boolean.class); + + boolean enableDpdkVhostuser = Q.New(SystemTagVO.class) + .eq(SystemTagVO_.resourceType, VmInstanceVO.class.getSimpleName()) + .eq(SystemTagVO_.resourceUuid, vmUuid) + .eq(SystemTagVO_.tag, String.format("enableDpdkVhostuser::%s", l3nw.getUuid())) + .isExists(); + VmNicType.VmNicSubType subType = VmNicType.VmNicSubType.NONE; if (enableSriov) { subType = VmNicType.VmNicSubType.SRIOV; - } else if (enableVhostUser) { + } else if (enableVhostUser || enableDpdkVhostuser) { subType = VmNicType.VmNicSubType.VHOSTUSER; } - L2NetworkVO l2nw = dbf.findByUuid(l3nw.getL2NetworkUuid(), L2NetworkVO.class); - VSwitchType vSwitchType = VSwitchType.valueOf(l2nw.getvSwitchType()); return vSwitchType.getVmNicType(subType); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java index 0fd0e2aa068..7279d7e8af5 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java @@ -6,10 +6,13 @@ import org.zstack.core.asyncbatch.While; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusCallBack; +import org.zstack.core.componentloader.PluginRegistry; import org.zstack.core.db.DatabaseFacade; +import org.zstack.header.core.Completion; import org.zstack.header.core.WhileDoneCompletion; import org.zstack.header.core.workflow.FlowTrigger; import org.zstack.header.core.workflow.NoRollbackFlow; +import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.errorcode.ErrorCodeList; import org.zstack.header.message.MessageReply; import org.zstack.header.network.l3.L3NetworkConstant; @@ -34,6 +37,10 @@ public class VmReturnReleaseNicFlow extends NoRollbackFlow { protected CloudBus bus; @Autowired protected VmInstanceDeletionPolicyManager deletionPolicyMgr; + @Autowired + protected VmInstanceManager vmMgr; + @Autowired + protected PluginRegistry pluginRgty; @Override public void run(FlowTrigger chain, Map data) { @@ -43,6 +50,11 @@ public void run(FlowTrigger chain, Map data) { return; } + returnIpsAndReleaseNics(spec, data, chain); + } + + + private void returnIpsAndReleaseNics(VmInstanceSpec spec, Map data, FlowTrigger chain) { List msgs = new ArrayList<>(spec.getVmInventory().getVmNics().size()); for (VmNicInventory nic : spec.getVmInventory().getVmNics()) { for (UsedIpInventory ip : nic.getUsedIps()) { @@ -54,6 +66,11 @@ public void run(FlowTrigger chain, Map data) { } } + VmInstanceDeletionPolicy deletionPolicy = + VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType()) + ? getDeletionPolicy(spec, data) + : VmInstanceDeletionPolicy.Direct; + new While<>(msgs).each((returnIpMsg, completion) -> bus.send(returnIpMsg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { @@ -66,12 +83,13 @@ public void run(MessageReply reply) { })).run(new WhileDoneCompletion(chain) { @Override public void done(ErrorCodeList errorCodeList) { + List releasedNics = new ArrayList<>(); + List nicsToDelete = new ArrayList<>(); for (VmNicInventory nic : spec.getVmInventory().getVmNics()) { VmNicVO vo = dbf.findByUuid(nic.getUuid(), VmNicVO.class); if (VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType())) { - VmInstanceDeletionPolicy deletionPolicy = getDeletionPolicy(spec, data); if (deletionPolicy == VmInstanceDeletionPolicy.Direct) { - dbf.remove(vo); + nicsToDelete.add(vo); } else { vo.setUsedIpUuid(null); vo.setIp(null); @@ -80,10 +98,92 @@ public void done(ErrorCodeList errorCodeList) { dbf.update(vo); } } else { - dbf.remove(vo); + nicsToDelete.add(vo); } + releasedNics.add(nic); + } + + Completion releaseDone = new Completion(chain) { + @Override + public void success() { + nicsToDelete.forEach(dbf::remove); + chain.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("releaseSdnNics failed: %s, continue anyway", errorCode)); + nicsToDelete.forEach(dbf::remove); + chain.next(); + } + }; + + if (shouldReleaseSdnNicIps(deletionPolicy)) { + callReleaseSdnNicIps(releasedNics, releaseDone); + } else { + callReleaseSdnNics(releasedNics, releaseDone); + } + } + }); + } + + private boolean shouldReleaseSdnNicIps(VmInstanceDeletionPolicy deletionPolicy) { + return deletionPolicy == VmInstanceDeletionPolicy.Delay + || deletionPolicy == VmInstanceDeletionPolicy.Never; + } + + private void callReleaseSdnNicIps(List nics, Completion completion) { + List exts = pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + if (exts.isEmpty() || nics.isEmpty()) { + completion.success(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.releaseNicIps(nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("releaseNicIps extension failed: %s, continue", errorCode)); + wcomp.done(); } - chain.next(); + }); + }).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + completion.success(); + } + }); + } + + private void callReleaseSdnNics(List nics, Completion completion) { + List exts = pluginRgty.getExtensionList(AfterAllocateSdnNicExtensionPoint.class); + if (exts.isEmpty() || nics.isEmpty()) { + completion.success(); + return; + } + + new While<>(exts).each((ext, wcomp) -> { + ext.releaseSdnNics(nics, new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); + wcomp.done(); + } + }); + }).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + completion.success(); } }); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmSystemTags.java b/compute/src/main/java/org/zstack/compute/vm/VmSystemTags.java index df0c9fdd9e8..2aa877372c6 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmSystemTags.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmSystemTags.java @@ -5,6 +5,7 @@ import org.zstack.header.tag.AdminOnlyTag; import org.zstack.header.tag.TagDefinition; import org.zstack.header.vm.VmInstanceVO; +import org.zstack.header.vm.VmNicVO; import org.zstack.tag.PatternedSystemTag; import org.zstack.tag.SensitiveTagOutputHandler; import org.zstack.tag.SensitiveTag; @@ -319,4 +320,12 @@ public String desensitizeTag(SystemTag systemTag, String tag) { public static PatternedSystemTag VM_STATE_PAUSED_AFTER_MIGRATE = new PatternedSystemTag(("vmPausedAfterMigrate"), VmInstanceVO.class); public static PatternedSystemTag VM_MEMORY_ACCESS_MODE_SHARED = new PatternedSystemTag(("vmMemoryAccessModeShared"), VmInstanceVO.class); + + public static String ZNS_NIC_MODE_TOKEN = "znsNicMode"; + public static PatternedSystemTag ZNS_NIC_MODE = new PatternedSystemTag( + String.format("%s::{%s}", ZNS_NIC_MODE_TOKEN, ZNS_NIC_MODE_TOKEN), VmInstanceVO.class); + + public static String IFACE_ID_TOKEN = "ifaceId"; + public static PatternedSystemTag IFACE_ID = new PatternedSystemTag( + String.format("ifaceId::{%s}", IFACE_ID_TOKEN), VmNicVO.class); } diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index f664b5f4dd1..f965b698ef2 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -81,3 +81,68 @@ CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupGlobalConfigVersionVO` ( INSERT IGNORE INTO `zstack`.`HaNetworkGroupGlobalConfigVersionVO` (`name`, `version`) VALUES ('ha-network-group', 0); + +-- ZNS SDN Controller support + +CREATE TABLE IF NOT EXISTS `ZnsControllerVO` ( + `uuid` varchar(32) NOT NULL, + PRIMARY KEY (`uuid`), + CONSTRAINT `fkZnsControllerVOSdnControllerVO` FOREIGN KEY (`uuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `L2GeneveNetworkVO` ( + `uuid` varchar(32) NOT NULL, + `geneveId` int(10) unsigned NOT NULL, + PRIMARY KEY (`uuid`), + CONSTRAINT `fkL2GeneveNetworkVOL2NetworkEO` FOREIGN KEY (`uuid`) REFERENCES `L2NetworkEO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `ZnsTransportZoneVO` ( + `uuid` varchar(32) NOT NULL, + `znsResourceUuid` varchar(64) NOT NULL, + `name` varchar(255) DEFAULT NULL, + `description` text DEFAULT NULL, + `type` varchar(64) DEFAULT NULL, + `physicalNetwork` varchar(255) DEFAULT NULL, + `status` varchar(64) DEFAULT NULL, + `isDefault` tinyint(1) NOT NULL DEFAULT 0, + `tags` text DEFAULT NULL, + `znsSdnControllerUuid` varchar(32) NOT NULL, + `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`uuid`), + UNIQUE KEY `uk_zns_tz_resource` (`znsSdnControllerUuid`, `znsResourceUuid`), + CONSTRAINT `fkZnsTransportZoneVOSdnControllerVO` FOREIGN KEY (`znsSdnControllerUuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +-- ZNS Wave 2: Tenant/TenantRouter resource modeling (ZCF-2133) + +CREATE TABLE IF NOT EXISTS `ZnsTenantVO` ( + `uuid` VARCHAR(32) NOT NULL, + `sdnControllerUuid` VARCHAR(32) NOT NULL, + `znsResourceUuid` VARCHAR(64) NOT NULL, + `name` VARCHAR(255) NOT NULL, + `description` TEXT DEFAULT NULL, + `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`uuid`), + UNIQUE KEY `uk_zns_tenant_resource` (`sdnControllerUuid`, `znsResourceUuid`), + CONSTRAINT `fk_zns_tenant_sdn` FOREIGN KEY (`sdnControllerUuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `ZnsTenantRouterVO` ( + `uuid` VARCHAR(32) NOT NULL, + `sdnControllerUuid` VARCHAR(32) NOT NULL, + `tenantUuid` VARCHAR(32) DEFAULT NULL, + `znsResourceUuid` VARCHAR(64) NOT NULL, + `name` VARCHAR(255) NOT NULL, + `description` TEXT DEFAULT NULL, + `state` VARCHAR(32) DEFAULT NULL COMMENT 'Active / Inactive', + `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`uuid`), + UNIQUE KEY `uk_zns_tr_resource` (`sdnControllerUuid`, `znsResourceUuid`), + KEY `idx_zns_tr_tenant` (`tenantUuid`), + CONSTRAINT `fk_zns_tr_tenant` FOREIGN KEY (`tenantUuid`) REFERENCES `ZnsTenantVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/conf/globalConfig/vmNicLifecycle.xml b/conf/globalConfig/vmNicLifecycle.xml new file mode 100644 index 00000000000..7e2e9c927db --- /dev/null +++ b/conf/globalConfig/vmNicLifecycle.xml @@ -0,0 +1,10 @@ + + + + reconcileOnHost.timeout + Timeout in seconds for each VmNicLifecycleExtensionPoint implementation's reconcileOnHost call during host heartbeat reconciliation + vmNicLifecycle + 30 + java.lang.Long + + diff --git a/conf/serviceConfig/sdnController.xml b/conf/serviceConfig/sdnController.xml index 41521e0803c..c1ee0e649de 100644 --- a/conf/serviceConfig/sdnController.xml +++ b/conf/serviceConfig/sdnController.xml @@ -40,6 +40,11 @@ query + + org.zstack.network.zns.APIQueryZnsTenantRouterMsg + query + + org.zstack.sdnController.header.APIPullSdnControllerTenantMsg query @@ -49,4 +54,4 @@ org.zstack.network.hostNetworkInterface.APIQueryPhysicalSwitchMsg query - \ No newline at end of file + diff --git a/conf/springConfigXml/Kvm.xml b/conf/springConfigXml/Kvm.xml index 580169b641a..369f597b8d9 100755 --- a/conf/springConfigXml/Kvm.xml +++ b/conf/springConfigXml/Kvm.xml @@ -96,6 +96,12 @@ + + + + + + diff --git a/conf/springConfigXml/VmInstanceManager.xml b/conf/springConfigXml/VmInstanceManager.xml index ef3d5a7cc9e..09a9cb8d0e5 100755 --- a/conf/springConfigXml/VmInstanceManager.xml +++ b/conf/springConfigXml/VmInstanceManager.xml @@ -37,6 +37,7 @@ org.zstack.compute.vm.VmAllocateVolumeFlow org.zstack.compute.vm.VmAllocateNicFlow org.zstack.compute.vm.VmAllocateNicIpFlow + org.zstack.compute.vm.VmAllocateSdnNicFlow org.zstack.compute.vm.VmAllocateCdRomFlow org.zstack.compute.vm.VmInstantiateResourcePreFlow org.zstack.compute.vm.VmCreateOnHypervisorFlow @@ -68,6 +69,7 @@ org.zstack.compute.vm.VmAllocateHostForStoppedVmFlow org.zstack.compute.vm.VmImageSelectBackupStorageFlow org.zstack.compute.vm.VmAllocateNicForStartingVmFlow + org.zstack.compute.vm.VmAllocateSdnNicFlow org.zstack.compute.vm.VmInstantiateResourcePreFlow org.zstack.compute.vm.VmStartOnHypervisorFlow org.zstack.compute.vm.VmInstantiateResourcePostFlow @@ -115,6 +117,7 @@ + org.zstack.compute.vm.VmExpungeSdnNicFlow org.zstack.compute.vm.VmExpungeRootVolumeFlow org.zstack.compute.vm.VmExpungeMemoryVolumeFlow org.zstack.compute.vm.VmExpungeCacheVolumeFlow @@ -260,4 +263,14 @@ + + + + + + + + + + diff --git a/conf/springConfigXml/sdnController.xml b/conf/springConfigXml/sdnController.xml index a9be9ec8795..e76be084ac6 100644 --- a/conf/springConfigXml/sdnController.xml +++ b/conf/springConfigXml/sdnController.xml @@ -26,14 +26,11 @@ - - - - + diff --git a/core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java b/core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java new file mode 100644 index 00000000000..0559312b6d2 --- /dev/null +++ b/core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java @@ -0,0 +1,188 @@ +package org.zstack.core.rest.webhook; + +import org.zstack.core.Platform; +import org.zstack.core.thread.ThreadFacade; +import org.zstack.core.thread.ThreadFacadeImpl; +import org.zstack.header.core.ReturnValueCompletion; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.rest.RESTFacade; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +import static org.zstack.core.Platform.operr; + +/** + * Generic async callback client for external systems that use a webhook pattern: + *
    + *
  1. Send an HTTP request to the external system
  2. + *
  3. External system returns immediately (e.g. 202 Accepted)
  4. + *
  5. External system later POSTs back the result to a callback URL
  6. + *
  7. This client matches the callback to the original request and completes it
  8. + *
+ * + *

Callback flow:

+ *
+ * External Controller
+ *     │  POST /asyncrest/sendcommand  (commandpath header → callbackPath)
+ *     ▼
+ * AsyncRESTCallController.sendCommand()
+ *     ▼
+ * RESTFacadeImpl.sendCommand()  →  httpCallhandlers.get(callbackPath)
+ *     ▼
+ * WebhookCallbackClient.onCallback(T cmd)
+ *     ├─ protocol.extractTaskId(cmd)
+ *     ├─ pendingCalls.remove(taskId)  ← CAS point (atomic, prevents double invocation)
+ *     ├─ cancel timeout
+ *     └─ protocol.isSuccess(cmd) ? completion.success(cmd) : completion.fail(error)
+ * 
+ * + *

This class is a plain POJO — not a Spring bean. It is created and owned by the + * plugin-specific API client (e.g. ZnsApiClient) which passes in its dependencies.

+ * + *

Thread safety: {@code ConcurrentHashMap.remove()} serves as the CAS point. + * Among callback arrival, timeout, and send-failure, only one can successfully remove + * and thus complete a pending call.

+ * + * @param the callback body type + */ +public class WebhookCallbackClient { + private static final CLogger logger = Utils.getLogger(WebhookCallbackClient.class); + + private final WebhookProtocol protocol; + private final RESTFacade restf; + private final ThreadFacade thdf; + private final ConcurrentHashMap> pendingCalls = new ConcurrentHashMap<>(); + private String callbackUrl; + + private static class PendingEntry { + final ReturnValueCompletion completion; + final ThreadFacadeImpl.TimeoutTaskReceipt timeoutReceipt; + + PendingEntry(ReturnValueCompletion completion, + ThreadFacadeImpl.TimeoutTaskReceipt timeoutReceipt) { + this.completion = completion; + this.timeoutReceipt = timeoutReceipt; + } + } + + public WebhookCallbackClient(WebhookProtocol protocol, RESTFacade restf, ThreadFacade thdf) { + this.protocol = protocol; + this.restf = restf; + this.thdf = thdf; + } + + /** + * Register the callback handler on the sendCommand channel. + * Must be called once during the owning component's start() lifecycle. + */ + public void start() { + this.callbackUrl = restf.getSendCommandUrl(); + restf.registerSyncHttpCallHandler( + protocol.getCallbackPath(), + protocol.getCallbackClass(), + this::onCallback); + } + + /** + * Register a pending call and return its task identifier. + * + *

The caller should use the returned taskId to decorate the outgoing request + * headers via {@link WebhookProtocol#decorateRequest}, then send the HTTP request. + * If the send fails, the caller must invoke {@link #fail} to clean up.

+ * + * @param completion the completion to invoke when the callback arrives (or on timeout) + * @param unit timeout time unit + * @param timeout timeout value + * @return the generated taskId + */ + public String submit(ReturnValueCompletion completion, TimeUnit unit, long timeout) { + String taskId = Platform.getUuid(); + + ThreadFacadeImpl.TimeoutTaskReceipt timeoutReceipt = thdf.submitTimeoutTask(() -> { + fail(taskId, operr("[Webhook Timeout] callback timed out for taskId[%s], path[%s]", + taskId, protocol.getCallbackPath())); + }, unit, timeout); + + pendingCalls.put(taskId, new PendingEntry<>(completion, timeoutReceipt)); + return taskId; + } + + /** + * Actively fail a pending call (e.g. when the HTTP send fails). + * + *

{@code ConcurrentHashMap.remove()} is atomic — only one of + * (callback / timeout / send-failure) can win, preventing double invocation.

+ */ + public void fail(String taskId, ErrorCode error) { + PendingEntry entry = pendingCalls.remove(taskId); + if (entry != null) { + entry.timeoutReceipt.cancel(); + entry.completion.fail(error); + } + } + + /** + * @return the callback URL that the external system should POST results to + */ + public String getCallbackUrl() { + return callbackUrl; + } + + /** + * Override the callback URL. Use this when the callback is handled by a + * dedicated HTTP endpoint (e.g. a Spring Controller) rather than the + * sendCommand channel. + */ + public void setCallbackUrl(String callbackUrl) { + this.callbackUrl = callbackUrl; + } + + /** + * @return the protocol adapter + */ + public WebhookProtocol getProtocol() { + return protocol; + } + + /** + * Deliver a callback that was received outside the sendCommand channel + * (e.g. from a dedicated Spring Controller endpoint for external systems). + */ + public void deliverCallback(T cmd) { + onCallback(cmd); + } + + /** + * Callback handler invoked by the RESTFacade sendCommand channel. + */ + private String onCallback(T cmd) { + String taskId = protocol.extractTaskId(cmd); + if (taskId == null) { + logger.warn(String.format("received webhook callback without taskId on path[%s], ignoring", + protocol.getCallbackPath())); + return null; + } + + PendingEntry entry = pendingCalls.remove(taskId); + if (entry == null) { + logger.warn(String.format("received webhook callback for unknown taskId[%s] on path[%s], ignoring", + taskId, protocol.getCallbackPath())); + return null; + } + + entry.timeoutReceipt.cancel(); + + if (protocol.isSuccess(cmd)) { + entry.completion.success(cmd); + } else { + String error = protocol.extractError(cmd); + entry.completion.fail(operr("webhook callback failed for taskId[%s], path[%s], error: %s", + taskId, protocol.getCallbackPath(), error != null ? error : "unknown")); + } + + return null; + } +} diff --git a/core/src/main/java/org/zstack/core/rest/webhook/WebhookProtocol.java b/core/src/main/java/org/zstack/core/rest/webhook/WebhookProtocol.java new file mode 100644 index 00000000000..693a4add2a5 --- /dev/null +++ b/core/src/main/java/org/zstack/core/rest/webhook/WebhookProtocol.java @@ -0,0 +1,54 @@ +package org.zstack.core.rest.webhook; + +import java.util.Map; + +/** + * Defines the protocol adaptation for an external system's webhook callback mechanism. + * + *

Different external controllers (e.g., SDN controllers) use different header conventions, + * callback body formats, and success/failure semantics. This interface abstracts those + * differences so that {@link WebhookCallbackClient} can handle the common async lifecycle + * (pending call registration, timeout, CAS-guarded callback dispatch) generically.

+ * + * @param the callback body type that the external system POSTs back + */ +public interface WebhookProtocol { + + /** + * The path to register on the sendCommand channel (e.g. "/zns/callback"). + * This will be passed to {@code RESTFacade.registerSyncHttpCallHandler}. + */ + String getCallbackPath(); + + /** + * The class used to deserialize the callback JSON body. + */ + Class getCallbackClass(); + + /** + * Extract the task identifier from the callback body. + * This must match the taskId returned by {@link WebhookCallbackClient#submit}. + */ + String extractTaskId(T callback); + + /** + * Determine whether the callback indicates a successful operation. + */ + boolean isSuccess(T callback); + + /** + * Extract a human-readable error description from the callback body. + * Called only when {@link #isSuccess} returns false. + */ + String extractError(T callback); + + /** + * Decorate the outgoing HTTP request headers with the task identifier and callback URL, + * following the conventions of the external system. + * + * @param headers mutable map to add headers to + * @param taskId the unique task identifier for this async call + * @param callbackUrl the URL the external system should POST the result to + */ + void decorateRequest(Map headers, String taskId, String callbackUrl); +} diff --git a/docs/design/zns-pivot/ZCF-2133-p3-review-gpt55.md b/docs/design/zns-pivot/ZCF-2133-p3-review-gpt55.md new file mode 100644 index 00000000000..c3e34ed008e --- /dev/null +++ b/docs/design/zns-pivot/ZCF-2133-p3-review-gpt55.md @@ -0,0 +1,224 @@ +# P3 详细设计 Review 报告 + +**文档**:ZCF-2133-zns-pivot-detailed-design.md v1.0.0 +**评审日期**:2025-07 +**评审人**:Senior Java/Cloud Platform Architect + +--- + +## 总评 + +设计整体思路清晰,SoT 拆分逻辑合理,SystemTag 迁移方案保留了向后兼容窗口。但存在 4 个 P0 阻塞问题,其中两个(HTTP 机制选型错误、缺失依赖注入字段)将导致运行时 NPE 或 404,必须在进入 P4 实现前全部修复。 + +**总体结论:NEEDS REWORK** + +--- + +## 统计 + +| 级别 | 数量 | +|------|------| +| P0 (阻塞) | 4 | +| P1 (重要) | 4 | +| P2 (次要) | 4 | + +--- + +## P0 问题(阻塞,必须修复) + +### P0-1:`registerSyncHttpCallHandler` 对外部 ZNS 系统不可用 + +**位置**:§4.1.2 `ZnsReverseNotificationFacade.start()` + +**问题**:设计对 4 个 ZNS 通知端点全部使用 `RESTFacade.registerSyncHttpCallHandler`。该机制属于 ZStack 内部 Agent 协议——要求调用方在 HTTP 请求中携带 `commandpath` 头以完成路由分发。ZNS 是外部系统,其 POST 请求不携带任何 `commandpath` 头(参见现有 `ZnsCallbackController.java` 的注释:"ZNS is an external system that simply POSTs a JSON body to the webhook URL without extra routing headers")。使用此机制后 ZNS 推送的请求将全部被 RESTFacade dispatch 忽略或返回 404,通知通道完全失效。 + +**建议**:与现有 `ZnsCallbackController.java` 保持一致,新建或扩展一个 Spring `@Controller`(如 `ZnsNotificationController`),对每个端点使用 `@RequestMapping` 注册处理方法,接收 `@RequestBody` 后分发给各 Handler。不需要 `registerSyncHttpCallHandler`。 + +--- + +### P0-2:`ZnsReverseNotificationFacade` 缺失 `evtf` 和 `znsApiClient` 依赖注入 + +**位置**:§4.1.2 外部类声明;§4.2.2 `AddComputeManagerHandler` step 5;§4.10.2 `SyncResourceHandler.handleTenantRouterEvent` + +**问题**:外部类 `ZnsReverseNotificationFacade` 的 `@Autowired` 字段只声明了 `restf`、`dbf`、`bus`、`thdf` 四个。但内部 Handler 类访问了两个未声明的字段: + +1. `AddComputeManagerHandler` 第 5 步调用 `evtf.fire(SdnControllerCanonicalEvents.SDN_CONTROLLER_ADDED, ...)` ——`evtf`(EventFacade)未注入,运行时 NPE。 +2. `SyncResourceHandler.handleTenantRouterEvent` 调用 `znsApiClient.getTenantRouter(...)` 和 `znsApiClient.listSegments(...)` ——`znsApiClient` 未注入,运行时 NPE。 + +**建议**:在 `ZnsReverseNotificationFacade` 类中补充: + +```java +@Autowired +private EventFacade evtf; +@Autowired +private ZnsApiClient znsApiClient; +``` + +--- + +### P0-3:`AddComputeManagerHandler` 无事务边界,多步 persist 存在数据完整性风险 + +**位置**:§4.2.2,步骤 2-4 + +**问题**:连续执行 `dbf.persist(sdnVo)` → `dbf.persist(znsVo)` → `createInherentTag(...)` 三步,中间任意一步失败(如 `ZnsControllerVO` 主键冲突或 SystemTag 写入异常)将导致 `SdnControllerVO` 孤岛记录残留在数据库中,且无回滚。重复执行通知时因 name 已存在而直接返回错误,但孤岛记录仍无法清除,数据库状态被污染。 + +另外,名称重复检查(check-then-act)与 persist 之间没有事务保护,并发场景下两个相同通知可能同时通过检查、同时 persist,违反业务唯一性约束。 + +**建议**:将步骤 2-4 包裹在同一个 `@Transactional` 方法或使用 `new SQLBatch()` 块中;同时对 `SdnControllerVO` 的 `computerManagerUuid`(通过唯一索引或 DB 约束)进行唯一性保障,而非仅凭 name 检查。 + +--- + +### P0-4:`VmNicVO.type` 赋值时机与 `KVMRealizeL2GeneveNetworkBackend.realize()` 的先后顺序未验证 + +**位置**:§4.7.2 `computeVmNicType`;§4.8.3 `realize()` 方法 + +**问题**:`realize()` 中 DPDK 分支判断依赖 `nic.getType()`: + +```java +if (VmNicType.VHOSTUSER.toString().equals(nic.getType())) { + prepareDpdkNic(hostUuid, nic, completion); +} +``` + +`nic.getType()` 的值来自 `VmNicManagerImpl.computeVmNicType()`。设计未说明该方法的计算结果何时被持久化到 `VmNicVO.type`,也未确认 `VmNicVO` 在进入 `KVMRealizeL2GeneveNetworkBackend.realize()` 之前 `type` 字段是否已被正确写入。若 `VmNicVO.type` 在 `realize()` 执行时仍为 `null` 或 `NONE`,DPDK socket 永远不会被创建,但 VM 会以错误配置启动,且没有任何报错。 + +**建议**:设计必须明确以下两点: +1. `computeVmNicType()` 在哪个执行阶段被调用并将结果写入 `VmNicVO.type`(应早于 `KVMRealizeL2GeneveNetworkBackend.realize()` 调用链); +2. 在 `realize()` 入口加断言或日志,记录 `nic.getType()` 的当前值,以便在集成测试中可观测。 + +--- + +## P1 问题(重要,应修复) + +### P1-1:Handler 内抛出 `ApiMessageInterceptionException` 语义错误 + +**位置**:§4.3.2 `WizardInitSyncHandler`;§4.10.1 `SyncFabricHandler`;§4.10.2 `SyncResourceHandler` + +**问题**:三个 Handler 在找不到对应控制器时均抛出 `ApiMessageInterceptionException`。该异常专用于 `ApiMessageInterceptor` 的拦截阶段,在 HTTP 请求处理上下文中抛出此异常的行为未定义——可能被 Spring 全局异常处理器捕获为 500,也可能导致非预期响应,与 `NotificationResponse` 格式不一致,ZNS 无法正常解析错误。 + +**建议**:将错误场景改为返回 `NotificationResponse{success:false, error:"..."}` 的 JSON 字符串,或统一抛出一个约定的业务 `RuntimeException`(需配套 Spring `@ExceptionHandler` 处理)。 + +--- + +### P1-2:并发推送通知时 reconcile 操作缺乏串行化保护 + +**位置**:§4.10.1 `SyncFabricHandler`;§4.10.2 `SyncResourceHandler` + +**问题**:两个 Handler 均以 `Completion(null)` 触发异步 reconcile 后立即返回。若 ZNS 短时间内连续推送多条通知(网络抖动重试或批量事件),同一 controller 的 `syncDeviceResourcesFromZns` / `reconcileSegmentsCloudAsSoT` 将并行执行,导致: + +- 并发 upsert 同一 `ZnsTenantRouterVO`/`ZnsTransportZoneVO`:主键冲突或数据覆盖; +- 并发孤儿删除:一个线程正在使用的记录被另一个线程删除,引发 `DataIntegrityViolationException`。 + +**建议**:在两个 Handler 的异步触发点加入 per-controller `GlobalLock` 或使用 `ZStack ThreadFacade.syncSubmit` 排队执行,保证同一 controllerUuid 的 reconcile 操作串行化。 + +--- + +### P1-3:`needsSegmentUpdate` 对 L2 对象使用了不存在的 gateway 方法 + +**位置**:§4.12.2 `needsSegmentUpdate` + +**问题**: + +```java +private boolean needsSegmentUpdate(ZnsApiCommands.SegmentData znsSegment, + L2NetworkInventory cloudL2) { + if (!Objects.equals(znsSegment.gateway_address, cloudL2.getGatewayV4())) return true; + if (!Objects.equals(znsSegment.gateway6_address, cloudL2.getGatewayV6())) return true; + if (znsSegment.mtu != cloudL2.getMtu()) return true; + ... +} +``` + +`L2NetworkInventory` 不存在 `getGatewayV4()`、`getGatewayV6()`、`getMtu()` 方法——网关是 L3/IpRange 层概念,MTU 也通常存储在 L3 或独立配置,而非 L2 Inventory。此代码无法通过编译。即便手动扩展 L2Inventory,将 L3 信息下推到 L2 层也是架构倒置。 + +**建议**:`needsSegmentUpdate` 应接受 `L3NetworkInventory`(或 `IpRangeInventory` 列表),从 L3/IpRange 层获取 gateway 和 MTU 信息进行比较。方法签名应改为: + +```java +private boolean needsSegmentUpdate(ZnsApiCommands.SegmentData znsSegment, + L3NetworkInventory cloudL3) +``` + +--- + +### P1-4:`AddComputeManagerHandler` 重复检查仅基于 name,遗漏 computerManagerUuid 唯一性 + +**位置**:§4.2.2,步骤 1 + +**问题**:当前重复判断逻辑: + +```java +boolean nameExists = Q.New(SdnControllerVO.class) + .eq(SdnControllerVO_.name, cmd.name) + .isExists(); +``` + +只检查名称是否重复。若 ZNS 因网络超时重试推送相同通知(`computerManagerUuid` 相同、`name` 相同),第二次请求仍会被视为"重复而拒绝"。但若用户后续重命名控制器,再次推送原始通知将绕过检查创建重复记录。真正的业务唯一键是 `computerManagerUuid`。 + +**建议**:将重复检查改为基于 `computerManagerUuid` 的 SystemTag 查询(调用 `findControllerByComputerManagerUuid(cmd.computerManagerUuid)`),若已存在则直接返回现有 UUID(幂等语义),而非报错: + +```java +SdnControllerVO existing = findControllerByComputerManagerUuid(cmd.computerManagerUuid); +if (existing != null) { + return JSONObjectUtil.toJsonString(result(true, existing.getUuid(), null)); // 幂等 +} +``` + +--- + +## P2 问题(次要) + +### P2-1:`AddComputeManagerNotification` 携带明文密码 + +**位置**:§4.1.3 `ZnsNotificationCommands.AddComputeManagerNotification` + +**问题**:通知 DTO 中包含 `password` 字段明文传输。虽文档注明 Phase 1 依赖网络隔离,但在设计层面未提及任何传输加密或证书验证措施,调试日志若打印完整 body(`ZnsCallbackController.java` 现有模式为 `logger.debug(body)`)将导致密码泄露到日志文件。 + +**建议**:在 `ZnsReverseNotificationFacade` 的日志打印位置对 `password` 字段做脱敏处理;并在设计中明确 Phase 2 的 HMAC/TLS 升级路径。 + +--- + +### P2-2:`cleanupOrphanSegments` 未过滤 computerManagerUuid,存在跨控制器误删风险 + +**位置**:§4.3.3 + +**问题**:`cleanupOrphanSegments` 调用 `znsApiClient.listSegments(znsIp, ...)` 获取段列表,若参数中未携带 `cms_uuid`(computerManagerUuid)过滤条件,将拉取该 ZNS 实例下所有 Segment,包括属于其他 computerManager 的 Segment。这些 Segment 在 Cloud 中没有 L2 对应(因为它们属于别的 CM),会被误判为孤儿并强制删除。 + +**建议**:在 `cleanupOrphanSegments` 中显式传递 `computerManagerUuid` 过滤参数,与 `initSdnController` Flow 5 中的 `segParams.put("cms_uuid", ...)` 保持一致。 + +--- + +### P2-3:`SyncFabricNotification.scope` 值集合暴露 ZNS 内部拓扑术语 + +**位置**:§4.1.3 `SyncFabricNotification`;§4.9.2 `shouldSync` + +**问题**:`scope` 取值 `TZ | TN | HOSTSWITCH` 直接映射 ZNS 内部实体概念(TransportZone、TransportNode、HostSwitch),违反 NA-3 精神(API 参数不应暴露实现层细节)。同时 `shouldSync` 对 Tenant/TenantRouter 只响应 `"ALL"` scope,无法做精细粒度触发——若 ZNS 未来需要仅触发 Tenant 同步,现有枚举集合无法支持且需改代码。 + +**建议**:将 scope 值抽象为 Cloud 视角语义:`ALL | FABRIC | TENANT`;`FABRIC` 对应 TZ+TN+HOSTSWITCH,`TENANT` 对应 Tenant+TenantRouter 同步。在 `shouldSync` 中映射: + +```java +private boolean shouldSync(String scope, String category) { + if ("ALL".equalsIgnoreCase(scope)) return true; + return category.equalsIgnoreCase(scope); +} +``` + +--- + +### P2-4:`WizardInitSyncHandler` 异步触发后立即返回 `success:true`,ZNS 无法感知同步失败 + +**位置**:§4.3.2 末尾返回逻辑 + +**问题**:FlowChain 以 `.start()` 异步启动,`handleSyncHttpCall` 立即返回 `{success:true}`,ZNS 收到成功响应但实际同步可能几秒后失败(TenantRouter 拉取失败、DB 写入失败等)。ZNS 侧无重试机制,同步静默失败后 Cloud 状态可能不完整(如缺少 TenantRouter 记录)。 + +**建议**:在设计文档中明确说明此为"请求已受理(202 Accepted)"语义,ZNS 应在后续操作时(如创建 VPC L3)通过 Cloud 查询 API 验证同步状态,或依赖 `reconnectSdnController` 的周期性 reconcile 作为补偿机制。 + +--- + +## 亮点(做得好的地方) + +- **SoT 分组清晰**:将 `reconnectSdnController` 拆分为 Group A(ZNS-as-SoT 设备资源)和 Group B(Cloud-as-SoT Segment)逻辑分明,职责边界明确,比原来的单一 FlowChain 更易维护。 +- **SystemTag 迁移有兼容窗口**:`ENABLE_DPDK_VHOSTUSER` 改为 `ZNS_NIC_MODE` 时,`resolveZnsNicMode()` 提供了 v4 fallback 读取链,避免了升级时的强制迁移。 +- **孤儿 TenantRouter 告警而非静默删除**:当 ZNS 删除了 Cloud 中还有 L3 引用的 TenantRouter 时,设计选择触发 `EVT_ZNS_TENANT_ROUTER_ORPHAN_IN_CLOUD` 事件而非强删,符合 Cloud-as-SoT 的安全语义。 +- **FlowChain `NoRollbackFlow` 使用合理**:在 Reconcile 类 Flow 中(幂等 upsert 操作),均使用 `NoRollbackFlow`,避免了 rollback 时重复删除或状态不一致的问题。 +- **错误码体系完整**:6 个新错误码均有 i18n 映射,区分 argerr/operr 类型,与现有编码规范一致。 +- **实现顺序 Wave 划分合理**:Wave 1 先建数据模型、Wave 3 建通道、Wave 4 建流程的依赖拓扑排序正确,降低了并行开发的集成风险。 diff --git a/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md b/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md new file mode 100644 index 00000000000..64ae52f58b8 --- /dev/null +++ b/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md @@ -0,0 +1,2006 @@ +# ZCF-2133 ZNS 集成改造 P3 详细设计文档 + +## 1. 文档信息 + +| 字段 | 内容 | +|------|------| +| 文档编号 | ZCF-2133-P3-DD | +| 版本 | 1.1.0 | +| 状态 | 草稿 | +| 所属阶段 | P3 详细设计(瀑布模型第三阶段) | +| 关联 Func Spec | ZCF-2133 Func Spec v2.2.2 | +| 编写日期 | 2025-07 | +| 最后更新 | 2025-07 | + +### 修改历史 + +| 版本 | 日期 | 作者 | 说明 | +|------|------|------|------| +| 1.1.0 | 2026-04 | — | Review 修订:P0-1 HTTP 机制改 Spring @Controller;P0-2 补全 evtf/znsApiClient 注入;P0-3 AddComputeManager 增加事务边界+幂等语义;P0-4 补充 VmNicVO.type 赋值时机说明;P1-1/P1-3 Handler 错误响应修正;P1-2 并发序列化保护;P1-4 幂等检查改 computerManagerUuid;P2-2 cleanupOrphanSegments 增加 CM 过滤;P2-3 scope 值抽象化 | +| 1.0.0 | 2025-07 | — | 初稿,覆盖 14 个设计点 | + +--- + +## 2. 设计目标与范围 + +### 2.1 目标 + +将 ZNS 插件从"Cloud 主动拉取/注册"模式改造为"ZNS 主动推送通知"模式(pivot),实现: + +1. **反向通知通道**:ZNS → Cloud 的 HTTP 推送,替代现有纯拉取模型 +2. **Add-CM 流程重写**:ZNS wizard 完成后主动调用 Cloud,Cloud 被动建档 +3. **初次同步(Wizard Init Sync)**:ZNS wizard 完成 T1 创建后触发全量拉取 +4. **租户资源建模**:新增 `ZnsTenantVO` / `ZnsTenantRouterVO` 及完整生命周期 +5. **SystemTag 迁移**:`enableDpdkVhostuser`(L3 维度)→ `znsNicMode`(VM 维度) +6. **VPC L3 支持**:ZnsApiInterceptor 放开对 `L3VpcNetwork` 的拦截,要求关联租户路由器 Tag +7. **DPDK NIC 生命周期**:最小化路径实现 DPDK vhostuser socket 的创建/释放 +8. **Reconcile SoT 拆分**:设备资源(ZNS-as-SoT)与网络资源(Cloud-as-SoT)分组 + +### 2.2 范围 + +本文档覆盖 ZNS 插件目录: +``` +zstack/premium/plugin-premium/zns/src/main/java/org/zstack/network/zns/ +``` +以及关联的 KVM 插件改动(DPDK NIC 命令)和 VM NIC 类型计算改动。 + +### 2.3 不在范围内 + +- ZNS 侧 API 实现(由 ZNS 团队负责) +- KVM agent(Python)侧 dpdk socket 实现 +- UI/前端改动 +- 性能测试与压测 + +--- + +## 3. 设计变更概览 + +| 编号 | 变更点 | 变更类型 | 涉及类 | +|------|--------|----------|--------| +| 3.1 | 新增反向通知通道 | 新增 | `ZnsNotificationController`, `ZnsNotificationCommands` | +| 3.2 | Add-CM 流程重写 | 修改+新增 | `ZnsNotificationController.AddComputeManagerHandler`, `ZnsSdnController` | +| 3.3 | 移除 Flow 5 `create-l2-l3-from-segments` | **删除** | `ZnsSdnController.initSdnController` | +| 3.4 | 首次同步(Wizard Init Sync) | 新增 | `ZnsNotificationController.WizardInitSyncHandler` | +| 3.5 | 租户资源建模 | 新增 | `ZnsTenantVO`, `ZnsTenantRouterVO`, `ZnsTenantInventory`, `ZnsTenantRouterInventory` | +| 3.6 | SystemTag 变更 | 修改 | `ZnsSdnControllerSystemTags` | +| 3.7 | ZnsApiInterceptor VPC 支持 | 修改 | `ZnsApiInterceptor` | +| 3.8 | VM NIC 类型计算 | 修改 | `VmNicManagerImpl.computeVmNicType` | +| 3.9 | DPDK NIC 生命周期 | 新增 | `KVMRealizeL2GeneveNetworkBackend`, `KVMAgentCommands` | +| 3.10 | Reconcile SoT 拆分 | 重构 | `ZnsSdnController.reconnectSdnController` | +| 3.11 | 运行时推送通知处理 | 新增 | `SyncFabricHandler`, `SyncResourceHandler` | +| 3.12 | DHCP/DNS/MTU 完整性 | 验证+小修 | `ZnsSdnControllerDhcp` | +| 3.13 | 双栈 IpRange | 验证 | `ZnsSdnControllerL3` | +| 3.14 | 新增错误码 | 新增 | `ZnsErrors` | + +--- + +## 4. 详细设计 + +### 4.1 反向通知通道 + +#### 4.1.1 设计说明 + +当前 ZNS 插件只有 `/zns/callback` 处理异步任务回调。新增业务事件推送通道,支持 ZNS → Cloud 的主动通知,实现推送模型替代拉取模型。 + +**HTTP 机制选型**:ZNS 是外部系统,HTTP 请求不携带 ZStack 内部 `commandpath` 路由头,因此**不能**使用 `RESTFacade.registerSyncHttpCallHandler`(该机制仅适用于 ZStack 内部 Agent 协议)。改用 Spring `@Controller` + `@RequestMapping`,与现有 `ZnsCallbackController` 保持一致。 + +所有端点不做鉴权(Phase 1 依赖网络隔离),预留鉴权钩子供后续版本升级(Phase 2 计划 HMAC 签名验证)。 + +#### 4.1.2 新增类:`ZnsNotificationController` + +**包路径**:`org.zstack.network.zns` + +```java +@Controller +@Component +public class ZnsNotificationController { + + @Autowired + private DatabaseFacade dbf; + @Autowired + private EventFacade evtf; // P0-2: 必需,AddComputeManagerHandler 触发规范事件 + @Autowired + private ZnsApiClient znsApiClient; // P0-2: 必需,SyncResourceHandler 拉取资源详情 + @Autowired + private CloudBus bus; + @Autowired + private ThreadFacade thdf; + + @RequestMapping( + value = ZnsConstant.ZNS_NOTIFY_ADD_COMPUTE_MANAGER_PATH, + method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public String handleAddComputeManager( + @RequestBody ZnsNotificationCommands.AddComputeManagerNotification cmd) { + return new AddComputeManagerHandler().handle(cmd); + } + + @RequestMapping( + value = ZnsConstant.ZNS_NOTIFY_WIZARD_INIT_SYNC_PATH, + method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public String handleWizardInitSync( + @RequestBody ZnsNotificationCommands.WizardInitSyncNotification cmd) { + return new WizardInitSyncHandler().handle(cmd); + } + + @RequestMapping( + value = ZnsConstant.ZNS_NOTIFY_SYNC_FABRIC_PATH, + method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public String handleSyncFabric( + @RequestBody ZnsNotificationCommands.SyncFabricNotification cmd) { + return new SyncFabricHandler().handle(cmd); + } + + @RequestMapping( + value = ZnsConstant.ZNS_NOTIFY_SYNC_RESOURCE_PATH, + method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public String handleSyncResource( + @RequestBody ZnsNotificationCommands.SyncResourceNotification cmd) { + return new SyncResourceHandler().handle(cmd); + } + + /** 鉴权预留钩子,Phase 1 直接返回,Phase 2 验证 HMAC 签名 */ + private void validateRequest(HttpServletRequest req, String controllerUuid) { + // reserved: no-op in phase 1 + } + + /** 根据 computerManagerUuid 系统标签查找 SdnControllerVO */ + private SdnControllerVO findControllerByComputerManagerUuid(String computerManagerUuid) { + String tagPattern = ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID + .instantiateTag(map(e( + ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID_TOKEN, computerManagerUuid + ))); + List controllerUuids = Q.New(SystemTagVO.class) + .select(SystemTagVO_.resourceUuid) + .eq(SystemTagVO_.tag, tagPattern) + .eq(SystemTagVO_.resourceType, SdnControllerVO.class.getSimpleName()) + .listValues(); + if (controllerUuids.isEmpty()) { + return null; + } + return dbf.findByUuid(controllerUuids.get(0), SdnControllerVO.class); + } + + /** 在事务内完成 SdnControllerVO + ZnsControllerVO + SystemTag 的原子创建,返回 controllerUuid */ + @Transactional + private String persistNewController(ZnsNotificationCommands.AddComputeManagerNotification cmd) { + SdnControllerVO sdnVo = new SdnControllerVO(); + sdnVo.setUuid(Platform.getUuid()); + sdnVo.setName(cmd.name); + sdnVo.setDescription(cmd.description); + sdnVo.setIp(cmd.vip); + sdnVo.setUsername(cmd.account); + sdnVo.setPassword(cmd.password); + sdnVo.setVendorType(ZnsSdnControllerFactory.ZNS_TYPE); + sdnVo.setStatus(SdnControllerStatus.Connected); + dbf.getEntityManager().persist(sdnVo); + + ZnsControllerVO znsVo = new ZnsControllerVO(); + znsVo.setUuid(sdnVo.getUuid()); + dbf.getEntityManager().persist(znsVo); + + ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID.createInherentTag( + sdnVo.getUuid(), + map(e(ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID_TOKEN, cmd.computerManagerUuid)) + ); + + return sdnVo.getUuid(); + } + + // 内部 Handler 类见 §4.2 ~ §4.4 / §4.10 + class AddComputeManagerHandler { ... } + class WizardInitSyncHandler { ... } + class SyncFabricHandler { ... } + class SyncResourceHandler { ... } +} +``` + +**新增常量**(`ZnsConstant.java`): + +```java +public static final String ZNS_NOTIFY_ADD_COMPUTE_MANAGER_PATH = "/zns/notify/add-compute-manager"; +public static final String ZNS_NOTIFY_WIZARD_INIT_SYNC_PATH = "/zns/notify/wizard-init-sync"; +public static final String ZNS_NOTIFY_SYNC_FABRIC_PATH = "/zns/notify/sync-fabric"; +public static final String ZNS_NOTIFY_SYNC_RESOURCE_PATH = "/zns/notify/sync-resource"; +``` + +#### 4.1.3 新增类:`ZnsNotificationCommands` + +**包路径**:`org.zstack.network.zns` + +```java +public class ZnsNotificationCommands { + + /** ZNS wizard 完成 addComputeManager 后推送给 Cloud */ + public static class AddComputeManagerNotification { + /** ZNS VIP,后续 API 调用使用 */ + public String vip; + /** ZNS 管理员账号 */ + public String account; + /** ZNS 管理员密码 */ + public String password; + /** ZNS 侧 computerManager UUID */ + public String computerManagerUuid; + /** 人类可读名称 */ + public String name; + public String description; + } + + /** ZNS wizard 创建第一个 T1(租户路由器)后推送给 Cloud */ + public static class WizardInitSyncNotification { + public String computerManagerUuid; + } + + /** 传输区域/节点/Host-Switch 配置变更时推送 */ + public static class SyncFabricNotification { + public String computerManagerUuid; + /** + * 同步范围:ALL | FABRIC | TENANT,默认 ALL + * ALL - 全量同步设备资源(TZ+TN+Tenant+TenantRouter) + * FABRIC - 仅同步传输层资源(TransportZone + TransportNode + HostSwitch) + * TENANT - 仅同步租户资源(Tenant + TenantRouter) + * + * 注:不直接暴露 ZNS 内部术语(TZ/TN/HOSTSWITCH),使用 Cloud 视角抽象值。 + */ + public String scope; + } + + /** Segment 或 TenantRouter 创建/更新/删除时推送 */ + public static class SyncResourceNotification { + public String computerManagerUuid; + /** SEGMENT | TENANT_ROUTER */ + public String resourceType; + /** CREATE | UPDATE | DELETE */ + public String action; + /** ZNS 侧资源 UUID(dashed 格式) */ + public String resourceUuid; + } + + /** 通用响应 */ + public static class NotificationResponse { + public boolean success; + public String uuid; + public String error; + } +} +``` + +--- + +### 4.2 Add-CM 流程重写 + +#### 4.2.1 设计说明 + +**旧流程**(主动模式):Cloud 调用 `preInitSdnController` → 向 ZNS 发起 `verifyComputeManager` → 拉取集群信息 → 建档。 + +**新流程**(被动模式):ZNS wizard 完成后调用 `POST /zns/notify/add-compute-manager` → Cloud 接收通知 → 直接建档 → 返回 controller UUID 给 ZNS。 + +**向后兼容**:保留现有 `APIAddSdnControllerMsg` + `preInitSdnController` 作为手动补录通道,在常量中记录废弃说明。 + +#### 4.2.2 `AddComputeManagerHandler.handle` + +```java +class AddComputeManagerHandler { + + public String handle(ZnsNotificationCommands.AddComputeManagerNotification cmd) { + + // 1. 幂等检查:同 computerManagerUuid 已存在则直接返回现有 UUID(幂等语义,而非报错) + // 真正的业务唯一键是 computerManagerUuid,name 可能变化,不作唯一性依据。 + SdnControllerVO existing = findControllerByComputerManagerUuid(cmd.computerManagerUuid); + if (existing != null) { + return JSONObjectUtil.toJsonString(result(true, existing.getUuid(), null)); + } + + // 2-4. 在同一事务内原子创建 SdnControllerVO + ZnsControllerVO + SystemTag + // 避免部分写入导致的孤岛记录。 + String controllerUuid = persistNewController(cmd); + + // 5. 发送规范事件 SDN_CONTROLLER_ADDED(evtf 已在外部类注入) + SdnControllerVO created = dbf.findByUuid(controllerUuid, SdnControllerVO.class); + SdnControllerCanonicalEvents.SdnControllerAddedData evtData = + new SdnControllerCanonicalEvents.SdnControllerAddedData(); + evtData.setControllerUuid(controllerUuid); + evtData.setInventory(SdnControllerInventory.valueOf(created)); + evtf.fire(SdnControllerCanonicalEvents.SDN_CONTROLLER_ADDED, evtData); + + // 注:password 字段在日志打印时必须脱敏,不得原文输出到 debug log。 + logger.debug(String.format("[add-compute-manager] SDN controller[uuid:%s] created " + + "for computerManagerUuid[%s]", controllerUuid, cmd.computerManagerUuid)); + + // 6. 返回 controller UUID + return JSONObjectUtil.toJsonString(result(true, controllerUuid, null)); + } + + private ZnsNotificationCommands.NotificationResponse result( + boolean success, String uuid, String error) { + ZnsNotificationCommands.NotificationResponse r = + new ZnsNotificationCommands.NotificationResponse(); + r.success = success; + r.uuid = uuid; + r.error = error; + return r; + } +} +``` + +> **事务边界**:步骤 2-4 由外部类的 `persistNewController(@Transactional)` 方法完成,三步 persist 在同一事务内。若任意一步失败则全部回滚,无孤岛记录残留。 + +#### 4.2.3 `initSdnController` 清理(移除 Flow 5) + +在 `ZnsSdnController.initSdnController` 中,删除 Flow 5 `create-l2-l3-from-segments`。 + +**变更前**(5 个 Flow): +``` +Flow 1: sync-compute-collections +Flow 2: fetch-discovered-nodes +Flow 3: derive-vswitch-and-create-host-refs +Flow 4: persist-transport-zones +Flow 5: create-l2-l3-from-segments ← 删除此 Flow +``` + +**变更后**(4 个 Flow): +``` +Flow 1: sync-compute-collections +Flow 2: fetch-discovered-nodes +Flow 3: derive-vswitch-and-create-host-refs +Flow 4: persist-transport-zones +``` + +`initSdnController` 职责明确为**设备同步**,不再做 L2/L3 反向导入。 + +**向后兼容常量**(`ZnsSdnControllerConstant.java`): + +```java +/** + * 手动添加 SdnController 的 API 路径已废弃,保留以支持遗留脚本。 + * 新流程:ZNS wizard 完成后调用 POST /zns/notify/add-compute-manager 自动建档。 + * 将在 ZStack v5.1 移除手动路径。 + */ +@Deprecated +public static final String MANUAL_ADD_DEPRECATION_NOTE = + "APIAddSdnControllerMsg for ZNS is deprecated since v5.0; " + + "use ZNS wizard push-notification flow instead."; +``` + +--- + +### 4.3 首次同步(Wizard Init Sync) + +#### 4.3.1 设计说明 + +ZNS wizard 创建第一个 T1(租户路由器)后,调用 `POST /zns/notify/wizard-init-sync`。Cloud 触发全量 ZNS 数据拉取,同时对"Cloud 无对应 L2 的 ZNS 孤儿 Segment"执行强制删除(Cloud-as-SoT 语义)。 + +#### 4.3.2 `WizardInitSyncHandler.handle` + +```java +class WizardInitSyncHandler { + + public String handle(ZnsNotificationCommands.WizardInitSyncNotification cmd) { + + SdnControllerVO controller = findControllerByComputerManagerUuid(cmd.computerManagerUuid); + if (controller == null) { + // P1-1: 返回结构化错误响应,不抛异常(ZNS 需能解析响应体) + ZnsNotificationCommands.NotificationResponse resp = + new ZnsNotificationCommands.NotificationResponse(); + resp.success = false; + resp.error = String.format( + "no SDN controller found for computerManagerUuid[%s]", + cmd.computerManagerUuid); + return JSONObjectUtil.toJsonString(resp); + } + + String controllerUuid = controller.getUuid(); + String znsIp = controller.getIp(); + + FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); + chain.setName(String.format("zns-wizard-init-sync-%s", controllerUuid)); + chain.allowEmptyFlow(); + + // Flow 1: 从 ZNS 同步 TransportZone(ZNS-as-SoT) + chain.then(new NoRollbackFlow() { + String __name__ = "sync-transport-zones-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTransportZonesFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + + // Flow 2: 从 ZNS 同步 TransportNode / Host Refs(ZNS-as-SoT) + chain.then(new NoRollbackFlow() { + String __name__ = "sync-transport-nodes-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTransportNodesFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + + // Flow 3: 从 ZNS 同步 Tenant(ZNS-as-SoT,若 ZNS 暂无租户 API 则 skip) + chain.then(new NoRollbackFlow() { + String __name__ = "sync-tenants-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTenantsFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { + // 租户 API 缺失时降级跳过,记录 warning 日志 + logger.warn(String.format( + "[zns-wizard-init-sync] tenant API not available " + + "for controller[uuid:%s], skipping", controllerUuid)); + trigger.next(); + } + }); + } + }); + + // Flow 4: 从 ZNS 同步 TenantRouter(ZNS-as-SoT) + chain.then(new NoRollbackFlow() { + String __name__ = "sync-tenant-routers-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTenantRoutersFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + + // Flow 5: 清理孤儿 Segment(Cloud-as-SoT) + chain.then(new NoRollbackFlow() { + String __name__ = "cleanup-orphan-segments"; + @Override + public void run(FlowTrigger trigger, Map data) { + cleanupOrphanSegments(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { + // 孤儿清理失败不阻断主流程,记录 warning + logger.warn(String.format( + "[zns-wizard-init-sync] orphan segment cleanup failed " + + "for controller[uuid:%s]: %s", controllerUuid, err.getDetails())); + trigger.next(); + } + }); + } + }); + + chain.done(new FlowDoneHandler(null) { + @Override public void handle(Map data) { + logger.info(String.format( + "[zns-wizard-init-sync] completed for controller[uuid:%s]", controllerUuid)); + } + }).error(new FlowErrorHandler(null) { + @Override public void handle(ErrorCode err, Map data) { + logger.error(String.format( + "[zns-wizard-init-sync] failed for controller[uuid:%s]: %s", + controllerUuid, err.getDetails())); + } + }).start(); + + // 202 Accepted 语义:FlowChain 异步执行,立即返回"已受理"。 + // ZNS 不应假设 Cloud 同步已完成;若需确认同步结果,可在后续操作前 + // 查询 Cloud 的 TenantRouter 列表,或等待 reconnectSdnController 周期补偿。 + ZnsNotificationCommands.NotificationResponse resp = + new ZnsNotificationCommands.NotificationResponse(); + resp.success = true; + return JSONObjectUtil.toJsonString(resp); + } +} +``` + +#### 4.3.3 孤儿 Segment 清理逻辑 + +```java +private void cleanupOrphanSegments(String znsIp, String controllerUuid, + Completion completion) { + // 1. 从 ZNS 拉取该 computerManager 下的所有 Segment 列表 + // 必须携带 computerManagerUuid 过滤参数,避免拉取其他 CM 下的 Segment 导致误删。 + String computerManagerUuid = ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID + .getTokenByResourceUuid(controllerUuid, + ZnsSdnControllerSystemTags.COMPUTER_MANAGER_UUID_TOKEN); + znsApiClient.listSegments(znsIp, computerManagerUuid, + new ReturnValueCompletion>(completion) { + @Override + public void success(List znsSegments) { + // 2. 对每个 ZNS Segment:检查 Cloud 是否有对应的 L2 + // 判据:systemTag znsSegmentUuid::{segmentUuid} 存在于 L2NetworkVO + List orphanExternalUuids = new ArrayList<>(); + for (ZnsApiCommands.SegmentData seg : znsSegments) { + String tagValue = ZnsSdnControllerSystemTags.ZNS_SEGMENT_UUID + .instantiateTag(map(e( + ZnsSdnControllerSystemTags.ZNS_SEGMENT_UUID_TOKEN, seg.uuid + ))); + boolean cloudHasL2 = Q.New(SystemTagVO.class) + .eq(SystemTagVO_.tag, tagValue) + .eq(SystemTagVO_.resourceType, L2NetworkVO.class.getSimpleName()) + .isExists(); + if (!cloudHasL2) { + orphanExternalUuids.add(seg.uuid); + } + } + + // 3. 批量删除孤儿 Segment(force=true 忽略 ZNS 侧依赖) + new While<>(orphanExternalUuids).each((segUuid, whileCompletion) -> { + znsApiClient.deleteSegment(znsIp, segUuid, true, + new Completion(whileCompletion) { + @Override public void success() { whileCompletion.done(); } + @Override public void fail(ErrorCode err) { + logger.warn(String.format( + "[cleanup-orphan-segments] failed to delete ZNS segment[uuid:%s]: %s", + segUuid, err.getDetails())); + whileCompletion.done(); // 单条失败不阻断 + } + }); + }).run(new NoErrorCompletion(completion) { + @Override public void done() { completion.success(); } + }); + } + + @Override + public void fail(ErrorCode err) { completion.fail(err); } + }); +} +``` + +--- + +### 4.4 租户资源建模 + +#### 4.4.1 `ZnsTenantVO` + +**包路径**:`org.zstack.network.zns` + +```java +@Entity +@Table(name = "ZnsTenantVO") +public class ZnsTenantVO extends ResourceVO { + + @Column(nullable = false) + private String sdnControllerUuid; + + @Column(nullable = false, length = 64) + private String externalUuid; // ZNS 侧 tenant UUID(dashed 格式) + + @Column(nullable = false) + private String name; + + @Column(length = 2048) + private String description; + + @Temporal(TemporalType.TIMESTAMP) + @Column(nullable = false) + private Timestamp createDate; + + @Temporal(TemporalType.TIMESTAMP) + @Column(nullable = false) + private Timestamp lastOpDate; + + // getter/setter 省略(使用 Lombok @Data 或手写均可) +} +``` + +**Flyway DDL**(文件名:`V5.0.x__ZnsTenantVO.sql`): + +```sql +CREATE TABLE IF NOT EXISTS `ZnsTenantVO` ( + `uuid` CHAR(32) NOT NULL, + `sdnControllerUuid` CHAR(32) NOT NULL, + `externalUuid` VARCHAR(64) NOT NULL COMMENT 'ZNS tenant UUID (dashed format)', + `name` VARCHAR(255) NOT NULL, + `description` VARCHAR(2048) DEFAULT NULL, + `createDate` DATETIME NOT NULL, + `lastOpDate` DATETIME NOT NULL, + PRIMARY KEY (`uuid`), + UNIQUE KEY `uidx_externalUuid` (`externalUuid`), + KEY `idx_sdnControllerUuid` (`sdnControllerUuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` + +**Inventory 类**:`ZnsTenantInventory` + +```java +@InventoryDoc( + spec = @InventoryDocSpec( + inventory = "ZnsTenantInventory", + tableNames = {"ZnsTenantVO"} + ) +) +public class ZnsTenantInventory { + public String uuid; + public String sdnControllerUuid; + public String externalUuid; + public String name; + public String description; + public Timestamp createDate; + public Timestamp lastOpDate; + + public static ZnsTenantInventory valueOf(ZnsTenantVO vo) { + ZnsTenantInventory inv = new ZnsTenantInventory(); + inv.uuid = vo.getUuid(); + inv.sdnControllerUuid = vo.getSdnControllerUuid(); + inv.externalUuid = vo.getExternalUuid(); + inv.name = vo.getName(); + inv.description = vo.getDescription(); + inv.createDate = vo.getCreateDate(); + inv.lastOpDate = vo.getLastOpDate(); + return inv; + } +} +``` + +**ZNS API 响应 DTO**(添加到 `ZnsApiCommands.java`): + +```java +public static class TenantData { + public String uuid; // ZNS dashed UUID + public String name; + public String description; +} +``` + +#### 4.4.2 `ZnsTenantRouterVO` + +```java +@Entity +@Table(name = "ZnsTenantRouterVO") +public class ZnsTenantRouterVO extends ResourceVO { + + @Column(nullable = false) + private String sdnControllerUuid; + + @Column(nullable = false, length = 64) + private String externalUuid; // ZNS 侧 tenant router UUID(dashed 格式) + + @Column + private String tenantUuid; // 可选 FK → ZnsTenantVO.uuid + + @Column(nullable = false) + private String name; + + @Column(length = 2048) + private String description; + + @Temporal(TemporalType.TIMESTAMP) + @Column(nullable = false) + private Timestamp createDate; + + @Temporal(TemporalType.TIMESTAMP) + @Column(nullable = false) + private Timestamp lastOpDate; +} +``` + +**Flyway DDL**(文件名:`V5.0.x__ZnsTenantRouterVO.sql`): + +```sql +CREATE TABLE IF NOT EXISTS `ZnsTenantRouterVO` ( + `uuid` CHAR(32) NOT NULL, + `sdnControllerUuid` CHAR(32) NOT NULL, + `externalUuid` VARCHAR(64) NOT NULL COMMENT 'ZNS tenant router UUID (dashed format)', + `tenantUuid` CHAR(32) DEFAULT NULL COMMENT 'FK to ZnsTenantVO, nullable', + `name` VARCHAR(255) NOT NULL, + `description` VARCHAR(2048) DEFAULT NULL, + `createDate` DATETIME NOT NULL, + `lastOpDate` DATETIME NOT NULL, + PRIMARY KEY (`uuid`), + UNIQUE KEY `uidx_externalUuid` (`externalUuid`), + KEY `idx_sdnControllerUuid` (`sdnControllerUuid`), + KEY `idx_tenantUuid` (`tenantUuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` + +**Inventory 类**:`ZnsTenantRouterInventory` + +```java +@InventoryDoc( + spec = @InventoryDocSpec( + inventory = "ZnsTenantRouterInventory", + tableNames = {"ZnsTenantRouterVO"} + ) +) +public class ZnsTenantRouterInventory { + public String uuid; + public String sdnControllerUuid; + public String externalUuid; + public String tenantUuid; + public String name; + public String description; + public Timestamp createDate; + public Timestamp lastOpDate; + + public static ZnsTenantRouterInventory valueOf(ZnsTenantRouterVO vo) { + ZnsTenantRouterInventory inv = new ZnsTenantRouterInventory(); + inv.uuid = vo.getUuid(); + inv.sdnControllerUuid = vo.getSdnControllerUuid(); + inv.externalUuid = vo.getExternalUuid(); + inv.tenantUuid = vo.getTenantUuid(); + inv.name = vo.getName(); + inv.description = vo.getDescription(); + inv.createDate = vo.getCreateDate(); + inv.lastOpDate = vo.getLastOpDate(); + return inv; + } +} +``` + +**Query API**: + +```java +// APIQueryZnsTenantRouterMsg.java +@Action(category = SdnControllerConstant.ACTION_CATEGORY, names = {"read"}) +public class APIQueryZnsTenantRouterMsg + extends APIQueryMessage implements APISyncCallMessage { + + public static List __example__() { + return list("uuid=" + uuid()); + } +} + +// APIQueryZnsTenantRouterReply.java +public class APIQueryZnsTenantRouterReply + extends APIQueryReply { + public List inventories; +} +``` + +**ZNS API 响应 DTO**(添加到 `ZnsApiCommands.java`): + +```java +public static class TenantRouterData { + public String uuid; // ZNS dashed UUID + public String name; + public String tenant_uuid; // ZNS 侧 tenant UUID(dashed 格式) + public String description; +} +``` + +**ZNS API Client 新增方法**(`ZnsApiClient.java`): + +```java +/** + * 列出指定 ZNS 控制器下所有 TenantRouter + */ +void listTenantRouters( + String znsIp, + ReturnValueCompletion> completion +); + +/** + * 获取单个 TenantRouter 详情 + */ +void getTenantRouter( + String znsIp, + String externalUuid, + ReturnValueCompletion> completion +); +``` + +#### 4.4.3 限制删除租户路由器 + +在 `ZnsApiInterceptor` 中拦截 `APIDeleteZnsTenantRouterMsg`: + +```java +private void validate(APIDeleteZnsTenantRouterMsg msg) { + // 检查是否有 L3 通过 systemTag 引用此 TenantRouter + String tagPattern = ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID + .instantiateTag(map(e( + ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID_TOKEN, msg.getUuid() + ))); + List l3Uuids = Q.New(SystemTagVO.class) + .select(SystemTagVO_.resourceUuid) + .eq(SystemTagVO_.tag, tagPattern) + .eq(SystemTagVO_.resourceType, L3NetworkVO.class.getSimpleName()) + .listValues(); + if (!l3Uuids.isEmpty()) { + throw new ApiMessageInterceptionException( + ZnsErrors.operr(ZnsErrors.ZNS_TENANT_ROUTER_IN_USE, + "cannot delete tenant router[uuid:%s], L3 networks [%s] are still using it", + msg.getUuid(), String.join(", ", l3Uuids)) + ); + } +} +``` + +--- + +### 4.5 SystemTag 变更 + +#### 4.5.1 设计说明 + +`ENABLE_DPDK_VHOSTUSER` 是 L3 维度的 SystemTag,与业务语义不符(dpdk 是 VM 级别的 NIC 模式选择,而非网络属性)。新 Tag `znsNicMode` 改为 VM 维度,值为 `dpdk` 或 `kernel`。 + +此 Tag 是**新特性 Tag**,无历史数据,可直接重命名。保留旧 Tag 一个版本作为 fallback 读取。 + +#### 4.5.2 `ZnsSdnControllerSystemTags` 变更 + +```java +public class ZnsSdnControllerSystemTags { + + // ===== 已有 Tag(保持不变)===== + + /** computerManagerUuid 关联标签,挂在 SdnControllerVO 上 */ + public static final String COMPUTER_MANAGER_UUID_TOKEN = "computerManagerUuid"; + public static final PatternedSystemTag COMPUTER_MANAGER_UUID = new PatternedSystemTag( + String.format("computerManagerUuid::{%s}", COMPUTER_MANAGER_UUID_TOKEN), + SdnControllerVO.class + ); + + /** ZNS Segment UUID,挂在 L2NetworkVO 上 */ + public static final String ZNS_SEGMENT_UUID_TOKEN = "znsSegmentUuid"; + public static final PatternedSystemTag ZNS_SEGMENT_UUID = new PatternedSystemTag( + String.format("znsSegmentUuid::{%s}", ZNS_SEGMENT_UUID_TOKEN), + L2NetworkVO.class + ); + + // ===== 废弃(Deprecated)===== + + /** + * @deprecated 自 v5.0 起废弃,改为 VM 维度的 {@link #ZNS_NIC_MODE}。 + * 将在 v5.1 删除。仅作为读取 fallback,不再写入。 + */ + @Deprecated + public static final String ENABLE_DPDK_VHOSTUSER_TOKEN = "enableDpdkVhostuser"; + @Deprecated + public static final PatternedSystemTag ENABLE_DPDK_VHOSTUSER = new PatternedSystemTag( + String.format("enableDpdkVhostuser::{%s}", ENABLE_DPDK_VHOSTUSER_TOKEN), + L3NetworkVO.class + ); + + // ===== 新增 ===== + + /** + * VM 级别 NIC 模式标签,挂在 VmInstanceVO 上。 + * 取值:dpdk | kernel(缺省值为 kernel) + */ + public static final String ZNS_NIC_MODE_TOKEN = "mode"; + public static final PatternedSystemTag ZNS_NIC_MODE = new PatternedSystemTag( + String.format("znsNicMode::{%s}", ZNS_NIC_MODE_TOKEN), + VmInstanceVO.class + ); + + /** + * L3 VPC 网络关联的 TenantRouter UUID,挂在 L3NetworkVO 上。 + * 创建 VPC L3 时必须携带此 Tag。 + */ + public static final String ZNS_TENANT_ROUTER_UUID_TOKEN = "tenantRouterUuid"; + public static final PatternedSystemTag ZNS_TENANT_ROUTER_UUID = new PatternedSystemTag( + String.format("znsTenantRouterUuid::{%s}", ZNS_TENANT_ROUTER_UUID_TOKEN), + L3NetworkVO.class + ); +} +``` + +#### 4.5.3 NIC 模式读取兼容逻辑 + +```java +/** + * 读取 VM 的 ZNS NIC 模式,优先读新 Tag,fallback 读旧 L3 Tag。 + * @return "dpdk" | "kernel" + */ +public static String resolveZnsNicMode(String vmUuid, String l3Uuid) { + // 1. 优先读 VM 维度新 Tag + String newTag = ZnsSdnControllerSystemTags.ZNS_NIC_MODE + .getTokenByResourceUuid(vmUuid, ZnsSdnControllerSystemTags.ZNS_NIC_MODE_TOKEN); + if (newTag != null) { + return newTag; + } + + // 2. Fallback: 读旧 L3 维度 Tag(deprecated,v5.1 删除此分支) + String oldTag = ZnsSdnControllerSystemTags.ENABLE_DPDK_VHOSTUSER + .getTokenByResourceUuid(l3Uuid, + ZnsSdnControllerSystemTags.ENABLE_DPDK_VHOSTUSER_TOKEN); + if ("true".equalsIgnoreCase(oldTag)) { + return "dpdk"; + } + + // 3. 默认 kernel 模式 + return "kernel"; +} +``` + +--- + +### 4.6 ZnsApiInterceptor 更新 + +#### 4.6.1 VPC L3 支持 + +**文件**:`ZnsApiInterceptor.java` + +```java +private void validate(APICreateL3NetworkMsg msg) { + // 前置:获取 L2 上的 ZNS 控制器,非 ZNS L2 则直接放行 + if (!isZnsL2(msg.getL2NetworkUuid())) { + return; + } + + String type = msg.getType(); + + if (L3NetworkConstant.L3_BASIC_NETWORK_TYPE.equals(type)) { + // Flat 网络:无需额外要求 + + } else if (L3NetworkConstant.L3_VPC_NETWORK_TYPE.equals(type)) { + // VPC 网络:必须携带 znsTenantRouterUuid SystemTag + String tenantRouterUuid = extractTenantRouterUuidFromSystemTags(msg.getSystemTags()); + if (tenantRouterUuid == null) { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_VPC_REQUIRES_TENANT_ROUTER_TAG, + "creating VPC L3Network on ZNS L2 requires systemTag " + + "znsTenantRouterUuid::{uuid}") + ); + } + // 验证 TenantRouter 存在 + boolean exists = Q.New(ZnsTenantRouterVO.class) + .eq(ZnsTenantRouterVO_.uuid, tenantRouterUuid) + .isExists(); + if (!exists) { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_TENANT_ROUTER_NOT_FOUND, + "tenant router[uuid:%s] not found", tenantRouterUuid) + ); + } + + } else { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_L3_TYPE_NOT_SUPPORTED, + "ZNS L2 only supports L3BasicNetwork or L3VpcNetwork, got type[%s]", type) + ); + } + + // Category 限制:拒绝 Public / System 类别 + if (msg.getCategory() != null) { + L3NetworkCategory cat = L3NetworkCategory.valueOf(msg.getCategory()); + if (cat == L3NetworkCategory.Public || cat == L3NetworkCategory.System) { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_L3_CATEGORY_NOT_SUPPORTED, + "ZNS L2 does not support L3 category[%s]", cat) + ); + } + } +} + +/** 从 SystemTag 列表中提取 znsTenantRouterUuid 的值 */ +private String extractTenantRouterUuidFromSystemTags(List systemTags) { + if (systemTags == null) return null; + for (String tag : systemTags) { + if (ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID.isMatch(tag)) { + return ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID + .getTokenByTag(tag, ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID_TOKEN); + } + } + return null; +} +``` + +#### 4.6.2 新增 VM 创建拦截(ZNS NIC 模式校验) + +```java +private void validate(APICreateVmInstanceMsg msg) { + for (String l3Uuid : msg.getL3NetworkUuids()) { + if (!isZnsL3(l3Uuid)) { + continue; + } + + // 检查 VM systemTag 中的 znsNicMode + String nicMode = extractZnsNicModeFromSystemTags(msg.getSystemTags()); + if (nicMode != null && !"dpdk".equalsIgnoreCase(nicMode) + && !"kernel".equalsIgnoreCase(nicMode)) { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_INVALID_NIC_MODE, + "invalid znsNicMode[%s], allowed values: dpdk | kernel", nicMode) + ); + } + + // DPDK 模式:尽力检查候选主机是否有 ZNS dpdk 能力 + if ("dpdk".equalsIgnoreCase(nicMode)) { + String controllerUuid = getZnsControllerUuidByL3(l3Uuid); + if (controllerUuid != null) { + boolean hasDpdkHost = Q.New(SdnControllerHostRefVO.class) + .eq(SdnControllerHostRefVO_.sdnControllerUuid, controllerUuid) + .isExists(); + if (!hasDpdkHost) { + throw new ApiMessageInterceptionException( + ZnsErrors.argerr(ZnsErrors.ZNS_DPDK_NO_CAPABLE_HOST, + "DPDK NIC requires at least one host managed by ZNS controller[uuid:%s]", + controllerUuid) + ); + } + } + } + } +} + +private String extractZnsNicModeFromSystemTags(List systemTags) { + if (systemTags == null) return null; + for (String tag : systemTags) { + if (ZnsSdnControllerSystemTags.ZNS_NIC_MODE.isMatch(tag)) { + return ZnsSdnControllerSystemTags.ZNS_NIC_MODE + .getTokenByTag(tag, ZnsSdnControllerSystemTags.ZNS_NIC_MODE_TOKEN); + } + } + return null; +} +``` + +--- + +### 4.7 VM NIC 类型计算 + +#### 4.7.1 设计说明 + +**文件**:`VmNicManagerImpl.java`(位于 network-service 或 vm 插件) + +方法 `computeVmNicType` 当前读取 L3 维度的 `ENABLE_DPDK_VHOSTUSER`,需改为读取 VM 维度的 `ZNS_NIC_MODE`,并保留旧 Tag fallback 读取逻辑(一个版本兼容窗口)。 + +#### 4.7.2 `computeVmNicType` 修改 + +> **赋值时机(P0-4)**:`computeVmNicType` 在 `VmNicManagerImpl.allocateNicForVm`(VM 创建流程的 NIC 分配步骤)中调用,结果写入 `VmNicVO.type` 并在同一事务内持久化。该步骤早于 `KVMRealizeL2GeneveNetworkBackend.realize()` 执行(realize 在后续 KVM 实现步骤中触发),因此 `nic.getType()` 在 `realize()` 入口处已有正确值。 +> +> 实现时须在 `realize()` 入口添加断言日志:`logger.debug("realize nic[uuid:{}] type={}", nic.getUuid(), nic.getType())`,以便集成测试可观测 NIC 类型是否正确传递。 + +```java +/** + * 计算 VM NIC 类型。 + * 对于 ZNS L2:优先读 VM 级别 znsNicMode Tag,fallback 到旧 L3 级别 enableDpdkVhostuser Tag。 + * + * @param vmUuid VM UUID + * @param l2Network L2 网络 Inventory + * @param l3Uuid L3 网络 UUID + * @return VmNicType + */ +public VmNicType computeVmNicType(String vmUuid, + L2NetworkInventory l2Network, + String l3Uuid) { + // 非 ZNS L2 走原有逻辑 + if (!ZnsSdnControllerFactory.ZNS_TYPE.equals(l2Network.getvSwitchType())) { + return defaultVmNicType(l2Network); + } + + // ZNS L2:读取 NIC 模式 + String nicMode = ZnsSdnControllerSystemTags.resolveZnsNicMode(vmUuid, l3Uuid); + + if ("dpdk".equalsIgnoreCase(nicMode)) { + // DPDK vhostuser 模式 + return VmNicType.valueOf(L2NetworkConstant.ACCEL_TYPE_VHOST_USER_SPACE); + } else { + // kernel 模式(默认) + return VmNicType.valueOf(VmInstanceConstant.VIRTUAL_NIC_TYPE); + } +} +``` + +--- + +### 4.8 DPDK NIC 生命周期 + +#### 4.8.1 设计说明 + +最小化路径:不引入新的 `VmNicLifecycle` 抽象框架,直接在 `KVMRealizeL2GeneveNetworkBackend` 中扩展,分支到 DPDK 路径。 + +Socket 路径约定:`/var/run/dpdk/vhost-{nicUuid}`(host 侧固定约定,避免传递配置)。 + +#### 4.8.2 新增 KVM Agent 命令(`KVMAgentCommands.java`) + +```java +// 准备 DPDK vhostuser socket +public static class PrepareDpdkNicCmd extends AgentCommand { + /** VM NIC UUID */ + public String vmNicUuid; + /** host 侧 socket 路径,约定为 /var/run/dpdk/vhost-{nicUuid} */ + public String socketPath; +} + +public static class PrepareDpdkNicResponse extends AgentResponse { + // 无额外字段,通用 success/error 通过 AgentResponse 携带 +} + +// 释放 DPDK vhostuser socket +public static class ReleaseDpdkNicCmd extends AgentCommand { + public String vmNicUuid; + public String socketPath; +} + +public static class ReleaseDpdkNicResponse extends AgentResponse {} +``` + +**KVM Agent 路径常量**(`KVMConstant.java`): + +```java +public static final String KVM_PREPARE_DPDK_NIC_PATH = "/prepareDpdkNic"; +public static final String KVM_RELEASE_DPDK_NIC_PATH = "/releaseDpdkNic"; +``` + +#### 4.8.3 `KVMRealizeL2GeneveNetworkBackend` 扩展 + +**`realize` 方法(VM 创建/启动时)**: + +```java +@Override +public void realize(L2NetworkInventory l2Network, String hostUuid, + VmNicInventory nic, Completion completion) { + // 1. 原有 ZNS port 同步逻辑(createSegmentPort/updateSegmentPort)保持不变 + doZnsPortSync(l2Network, hostUuid, nic, new Completion(completion) { + @Override + public void success() { + // P0-4: 断言日志,确认 NIC 类型在 realize() 前已正确写入 + logger.debug(String.format("realize nic[uuid:%s] type=%s", + nic.getUuid(), nic.getType())); + // 2. 根据 NIC 类型分支 + if (VmNicType.VHOSTUSER.toString().equals(nic.getType())) { + prepareDpdkNic(hostUuid, nic, completion); + } else { + // kernel 模式:libvirt 默认路径,无需额外操作 + completion.success(); + } + } + @Override + public void fail(ErrorCode err) { completion.fail(err); } + }); +} + +private void prepareDpdkNic(String hostUuid, VmNicInventory nic, + Completion completion) { + KVMAgentCommands.PrepareDpdkNicCmd cmd = new KVMAgentCommands.PrepareDpdkNicCmd(); + cmd.vmNicUuid = nic.getUuid(); + cmd.socketPath = String.format("/var/run/dpdk/vhost-%s", nic.getUuid()); + + kvmHostFactory.getConnector().sendCommand(hostUuid, + KVMConstant.KVM_PREPARE_DPDK_NIC_PATH, cmd, + KVMAgentCommands.PrepareDpdkNicResponse.class, + new ReturnValueCompletion(completion) { + @Override + public void success(KVMAgentCommands.PrepareDpdkNicResponse resp) { + if (!resp.isSuccess()) { + completion.fail(ZnsErrors.operr( + "failed to prepare DPDK NIC[uuid:%s] on host[uuid:%s]: %s", + nic.getUuid(), hostUuid, resp.getError())); + return; + } + completion.success(); + } + @Override + public void fail(ErrorCode err) { completion.fail(err); } + }); +} +``` + +**`releaseOnVmDestroy` 方法扩展(VM 销毁时)**: + +```java +@Override +public void releaseOnVmDestroy(L2NetworkInventory l2Network, VmInstanceInventory vm, + VmNicInventory nic, NoErrorCompletion completion) { + // 原有清理逻辑(deleteSegmentPort 等)保持不变 + doZnsPortRelease(l2Network, vm.getHostUuid(), nic, new NoErrorCompletion(completion) { + @Override + public void done() { + // DPDK 模式需要额外释放 socket + if (VmNicType.VHOSTUSER.toString().equals(nic.getType())) { + releaseDpdkNic(vm.getHostUuid(), nic, completion); + } else { + completion.done(); + } + } + }); +} + +private void releaseDpdkNic(String hostUuid, VmNicInventory nic, + NoErrorCompletion completion) { + KVMAgentCommands.ReleaseDpdkNicCmd cmd = new KVMAgentCommands.ReleaseDpdkNicCmd(); + cmd.vmNicUuid = nic.getUuid(); + cmd.socketPath = String.format("/var/run/dpdk/vhost-%s", nic.getUuid()); + + kvmHostFactory.getConnector().sendCommand(hostUuid, + KVMConstant.KVM_RELEASE_DPDK_NIC_PATH, cmd, + KVMAgentCommands.ReleaseDpdkNicResponse.class, + new ReturnValueCompletion(completion) { + @Override + public void success(KVMAgentCommands.ReleaseDpdkNicResponse resp) { + if (!resp.isSuccess()) { + // release 失败记录 warning,不阻断 VM 删除流程 + logger.warn(String.format( + "[release-dpdk-nic] failed to release DPDK NIC[uuid:%s] " + + "on host[uuid:%s]: %s", nic.getUuid(), hostUuid, resp.getError())); + } + completion.done(); // 无论成功失败都继续 + } + @Override + public void fail(ErrorCode err) { + logger.warn(String.format( + "[release-dpdk-nic] error releasing DPDK NIC[uuid:%s]: %s", + nic.getUuid(), err.getDetails())); + completion.done(); + } + }); +} +``` + +#### 4.8.4 OVS Kernel 路径验证要点 + +- `KVMRealizeL2GeneveNetworkBackend.realize` 中,当 `nic.getType()` 为 `NONE`(kernel)时,不应调用任何 dpdk 相关方法 +- 验证方式:单元测试 mock `VmNicVO.type = NONE`,断言 `PrepareDpdkNicCmd` 未被发送 +- **预期结论**:无代码改动,仅添加验证测试 + +--- + +### 4.9 Reconcile SoT 拆分 + +#### 4.9.1 设计说明 + +`reconnectSdnController` 原来是单一 FlowChain,将其重构为两个逻辑组: +- **Group A**(ZNS-as-SoT):设备资源(TZ、TN、Tenant、TenantRouter)从 ZNS 全量同步到 Cloud +- **Group B**(Cloud-as-SoT):Segment(L2/L3 对应的 ZNS Segment)由 Cloud 主导三路对比 + +#### 4.9.2 `syncDeviceResourcesFromZns` + +```java +/** + * Group A: ZNS-as-SoT 设备资源同步。 + * 执行顺序:TZ → TN → Tenant → TenantRouter + * 每一步:从 ZNS 拉取全量 → Upsert 到 DB → 删除 DB 中 ZNS 不存在的孤儿记录 + */ +private void syncDeviceResourcesFromZns(String controllerUuid, String znsIp, + String scope, Completion completion) { + FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); + chain.setName(String.format("sync-device-resources-from-zns-%s", controllerUuid)); + chain.allowEmptyFlow(); + + if (shouldSync(scope, "TZ", "ALL")) { + chain.then(new NoRollbackFlow() { + String __name__ = "sync-transport-zones-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTransportZonesFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + } + + if (shouldSync(scope, "TN", "ALL")) { + chain.then(new NoRollbackFlow() { + String __name__ = "sync-transport-nodes-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTransportNodesFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + } + + if (shouldSync(scope, "ALL")) { + chain.then(new NoRollbackFlow() { + String __name__ = "sync-tenants-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTenantsFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { + logger.warn("tenant API unavailable, skipping: " + err.getDetails()); + trigger.next(); + } + }); + } + }); + + chain.then(new NoRollbackFlow() { + String __name__ = "sync-tenant-routers-zns-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncTenantRoutersFromZns(znsIp, controllerUuid, new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + } + + chain.done(new FlowDoneHandler(completion) { + @Override public void handle(Map data) { completion.success(); } + }).error(new FlowErrorHandler(completion) { + @Override public void handle(ErrorCode err, Map data) { completion.fail(err); } + }).start(); +} + +private boolean shouldSync(String scope, String... targets) { + if (scope == null || "ALL".equalsIgnoreCase(scope)) return true; + for (String t : targets) { + if (t.equalsIgnoreCase(scope)) return true; + } + return false; +} +``` + +> **scope 值映射**:`FABRIC` → TZ+TN;`TENANT` → Tenant+TenantRouter。 +> `shouldSync(scope, "TZ", "FABRIC")` 对 scope=FABRIC 返回 true,对 scope=TENANT 返回 false。 +``` + +#### 4.9.3 新 `reconnectSdnController` + +```java +@Override +public void reconnectSdnController(ReconnectSdnControllerMsg msg, NoErrorCompletion completion) { + SdnControllerVO controller = dbf.findByUuid(msg.getSdnControllerUuid(), SdnControllerVO.class); + String znsIp = controller.getIp(); + + FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); + chain.setName(String.format("reconnect-zns-controller-%s", controller.getUuid())); + + // Group A: ZNS-as-SoT 设备资源 + chain.then(new NoRollbackFlow() { + String __name__ = "group-a-sync-device-resources"; + @Override + public void run(FlowTrigger trigger, Map data) { + syncDeviceResourcesFromZns(controller.getUuid(), znsIp, "ALL", + new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { + // Group A 失败记录日志但不阻断 Group B + logger.warn("[reconnect] Group A sync failed: " + err.getDetails()); + trigger.next(); + } + }); + } + }); + + // Group B: Cloud-as-SoT Segment 三路对比 + chain.then(new NoRollbackFlow() { + String __name__ = "group-b-reconcile-segments-cloud-as-sot"; + @Override + public void run(FlowTrigger trigger, Map data) { + reconcileSegmentsCloudAsSoT(controller.getUuid(), znsIp, + new Completion(trigger) { + @Override public void success() { trigger.next(); } + @Override public void fail(ErrorCode err) { trigger.fail(err); } + }); + } + }); + + chain.done(new FlowDoneHandler(null) { + @Override public void handle(Map data) { completion.done(); } + }).error(new FlowErrorHandler(null) { + @Override public void handle(ErrorCode err, Map data) { + logger.error("[reconnect] FlowChain failed: " + err.getDetails()); + completion.done(); + } + }).start(); +} +``` + +#### 4.9.4 TenantRouter 同步中的边界处理 + +`syncTenantRoutersFromZns` 内部的孤儿处理逻辑: + +```java +private void syncTenantRoutersFromZns(String znsIp, String controllerUuid, + Completion completion) { + znsApiClient.listTenantRouters(znsIp, + new ReturnValueCompletion>(completion) { + @Override + public void success(ListResponse resp) { + List znsRouters = resp.getResults(); + + // Upsert:ZNS 有 → 写入或更新 Cloud DB + Set znsExternalUuids = new HashSet<>(); + for (ZnsApiCommands.TenantRouterData rd : znsRouters) { + znsExternalUuids.add(rd.uuid); + upsertTenantRouter(controllerUuid, rd); + } + + // 孤儿处理:Cloud 有但 ZNS 无 + List cloudRouters = Q.New(ZnsTenantRouterVO.class) + .eq(ZnsTenantRouterVO_.sdnControllerUuid, controllerUuid) + .list(); + for (ZnsTenantRouterVO cloudRouter : cloudRouters) { + if (!znsExternalUuids.contains(cloudRouter.getExternalUuid())) { + handleOrphanTenantRouter(cloudRouter); + } + } + completion.success(); + } + @Override + public void fail(ErrorCode err) { completion.fail(err); } + }); +} + +private void handleOrphanTenantRouter(ZnsTenantRouterVO orphan) { + String tagPattern = ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID + .instantiateTag(map(e( + ZnsSdnControllerSystemTags.ZNS_TENANT_ROUTER_UUID_TOKEN, orphan.getUuid() + ))); + boolean l3InUse = Q.New(SystemTagVO.class) + .eq(SystemTagVO_.tag, tagPattern) + .eq(SystemTagVO_.resourceType, L3NetworkVO.class.getSimpleName()) + .isExists(); + + if (l3InUse) { + // 有 L3 引用:触发告警,不删除 + evtf.fire(ZnsCanonicalEvents.EVT_ZNS_TENANT_ROUTER_ORPHAN_IN_CLOUD, + new ZnsCanonicalEvents.TenantRouterOrphanData( + orphan.getUuid(), + String.format( + "ZNS deleted tenant router[uuid:%s] but Cloud VPC L3 networks " + + "still reference it. Please delete the L3 networks first.", + orphan.getUuid()) + )); + } else { + // 无引用:静默删除 + dbf.remove(orphan); + } +} +``` + +--- + +### 4.10 运行时推送通知处理 + +#### 4.10.1 `SyncFabricHandler` + +```java +class SyncFabricHandler { + + public String handle(ZnsNotificationCommands.SyncFabricNotification cmd) { + + SdnControllerVO controller = findControllerByComputerManagerUuid(cmd.computerManagerUuid); + if (controller == null) { + // P1-1: 返回结构化错误响应,不抛异常 + ZnsNotificationCommands.NotificationResponse errResp = + new ZnsNotificationCommands.NotificationResponse(); + errResp.success = false; + errResp.error = String.format( + "no SDN controller found for computerManagerUuid[%s]", + cmd.computerManagerUuid); + return JSONObjectUtil.toJsonString(errResp); + } + + String scope = cmd.scope != null ? cmd.scope : "ALL"; + final String controllerUuid = controller.getUuid(); + final String znsIp = controller.getIp(); + + // P1-2: 使用 per-controller 异步串行化队列,防止并发推送时 reconcile 竞争。 + // 同一 controllerUuid 的请求排队执行,不并发。 + thdf.chainSubmit(new ChainTask(null) { + @Override public String getSyncSignature() { + return String.format("zns-sync-fabric-%s", controllerUuid); + } + @Override public void run(SyncTaskChain chain) { + syncDeviceResourcesFromZns(controllerUuid, znsIp, scope, + new Completion(null) { + @Override public void success() { + logger.info(String.format("[sync-fabric] completed for " + + "controller[uuid:%s] scope[%s]", controllerUuid, scope)); + chain.next(); + } + @Override public void fail(ErrorCode err) { + logger.error(String.format("[sync-fabric] failed for " + + "controller[uuid:%s]: %s", controllerUuid, err.getDetails())); + chain.next(); + } + }); + } + @Override public String getName() { return getSyncSignature(); } + }); + + // 202 Accepted:已受理,异步执行 + ZnsNotificationCommands.NotificationResponse resp = + new ZnsNotificationCommands.NotificationResponse(); + resp.success = true; + return JSONObjectUtil.toJsonString(resp); + } +} +``` + +#### 4.10.2 `SyncResourceHandler` + +```java +class SyncResourceHandler { + + public String handle(ZnsNotificationCommands.SyncResourceNotification cmd) { + + SdnControllerVO controller = findControllerByComputerManagerUuid(cmd.computerManagerUuid); + if (controller == null) { + // P1-1: 结构化错误响应 + ZnsNotificationCommands.NotificationResponse errResp = + new ZnsNotificationCommands.NotificationResponse(); + errResp.success = false; + errResp.error = String.format( + "no SDN controller found for computerManagerUuid[%s]", + cmd.computerManagerUuid); + return JSONObjectUtil.toJsonString(errResp); + } + + final SdnControllerVO ctrl = controller; + + // P1-2: per-controller 串行化 + thdf.chainSubmit(new ChainTask(null) { + @Override public String getSyncSignature() { + return String.format("zns-sync-resource-%s", ctrl.getUuid()); + } + @Override public void run(SyncTaskChain chain) { + if ("TENANT_ROUTER".equalsIgnoreCase(cmd.resourceType)) { + handleTenantRouterEvent(ctrl, cmd, chain); + } else if ("SEGMENT".equalsIgnoreCase(cmd.resourceType)) { + handleSegmentEvent(ctrl, cmd, chain); + } else { + logger.warn(String.format("[sync-resource] unknown resourceType[%s], ignored", + cmd.resourceType)); + chain.next(); + } + } + @Override public String getName() { return getSyncSignature(); } + }); + + ZnsNotificationCommands.NotificationResponse resp = + new ZnsNotificationCommands.NotificationResponse(); + resp.success = true; + return JSONObjectUtil.toJsonString(resp); + } + + private void handleTenantRouterEvent(SdnControllerVO controller, + ZnsNotificationCommands.SyncResourceNotification cmd, + SyncTaskChain chain) { + if ("CREATE".equalsIgnoreCase(cmd.action) + || "UPDATE".equalsIgnoreCase(cmd.action)) { + znsApiClient.getTenantRouter(controller.getIp(), cmd.resourceUuid, + new ReturnValueCompletion>(null) { + @Override + public void success(GetResponse resp) { + upsertTenantRouter(controller.getUuid(), resp.getResult()); + chain.next(); + } + @Override + public void fail(ErrorCode err) { + logger.error(String.format( + "[sync-resource] failed to get tenant router[externalUuid:%s]: %s", + cmd.resourceUuid, err.getDetails())); + chain.next(); + } + }); + + } else if ("DELETE".equalsIgnoreCase(cmd.action)) { + ZnsTenantRouterVO vo = Q.New(ZnsTenantRouterVO.class) + .eq(ZnsTenantRouterVO_.externalUuid, cmd.resourceUuid) + .find(); + if (vo != null) { + handleOrphanTenantRouter(vo); + } + chain.next(); + } else { + chain.next(); + } + } + + private void handleSegmentEvent(SdnControllerVO controller, + ZnsNotificationCommands.SyncResourceNotification cmd, + SyncTaskChain chain) { + reconcileSegmentsCloudAsSoT(controller.getUuid(), controller.getIp(), + new Completion(null) { + @Override + public void success() { + logger.info(String.format("[sync-resource/segment] reconcile completed " + + "for controller[uuid:%s]", controller.getUuid())); + chain.next(); + } + @Override + public void fail(ErrorCode err) { + logger.error(String.format("[sync-resource/segment] reconcile failed " + + "for controller[uuid:%s]: %s", controller.getUuid(), err.getDetails())); + chain.next(); + } + }); + } +} +``` + +--- + +### 4.11 DHCP/DNS/MTU 完整性 + +#### 4.11.1 双栈 DHCP + +**文件**:`ZnsSdnControllerDhcp.java` + +**`enableDHCP` 验证要点**: + +```java +// 确认 buildDhcpConfig 同时处理 v4 和 v6 IpRange +private ZnsApiCommands.DhcpServiceConfig buildDhcpConfig( + String segmentUuid, L3NetworkInventory l3) { + + ZnsApiCommands.DhcpServiceConfig config = new ZnsApiCommands.DhcpServiceConfig(); + config.segmentUuid = segmentUuid; + + for (IpRangeInventory ipRange : l3.getIpRanges()) { + if (NetworkUtils.isIpv4Address(ipRange.getGateway())) { + // IPv4 配置 + config.gateway_address = ipRange.getGateway(); + config.subnet_mask = ipRange.getNetmask(); + // ... 其他 v4 字段 + } else { + // IPv6 配置 + config.gateway6_address = ipRange.getGateway(); + config.subnet6_prefix = ipRange.getPrefixLen(); + // ... 其他 v6 字段 + } + } + return config; +} +``` + +**边界场景:先启用 v4 DHCP,后添加 v6 IpRange**: + +在 `ZnsControllerManager.afterCreateIpRange` 中: + +```java +@Override +public void afterCreateIpRange(IpRangeInventory ipRange) { + // 若 L3 所在 L2 是 ZNS,且 DHCP 已启用,则触发 DHCP 服务更新 + L3NetworkVO l3 = dbf.findByUuid(ipRange.getL3NetworkUuid(), L3NetworkVO.class); + if (l3 == null || !isDhcpEnabled(l3.getUuid())) { + return; + } + if (!isZnsL3(l3.getUuid())) { + return; + } + SdnControllerUpdateDHCPMsg updateMsg = new SdnControllerUpdateDHCPMsg(); + updateMsg.setL3NetworkUuid(l3.getUuid()); + bus.makeLocalServiceId(updateMsg, SdnControllerConstant.SERVICE_ID); + bus.send(updateMsg); +} +``` + +#### 4.11.2 DNS 独立更新 + +`ZnsSdnControllerDhcp.updateDHCP` 在处理 DNS 变更时,只修改 `dns_servers` 字段: + +```java +private ZnsApiCommands.DhcpServicePatch buildDnsPatch(List dnsServers) { + ZnsApiCommands.DhcpServicePatch patch = new ZnsApiCommands.DhcpServicePatch(); + patch.dns_servers = dnsServers; + // 不包含 dhcp_configs(不改变 DHCP 启停状态) + return patch; +} +``` + +**验证要点**:`APIUpdateL3NetworkMsg` 变更 DNS → 调用 `SdnControllerUpdateDHCPMsg` → ZNS PATCH 只含 `dns_servers`,不触发 DHCP enable/disable。 + +#### 4.11.3 MTU 更新(已实现,验证) + +`ZnsControllerManager.afterSetL3NetworkMtu` → PATCH segment `{mtu: value}`。 + +验证:双栈 L3(同一 Segment)MTU 更新只需 PATCH 一次,两个 IpRange 共享同一 segmentUuid。 + +--- + +### 4.12 双栈 IpRange + +#### 4.12.1 设计说明 + +`ZnsSdnControllerL3.createIpRange` 已区分 v4/v6,分别设置 `gateway_address` / `gateway6_address`。需验证以下边界场景。 + +#### 4.12.2 验证矩阵 + +| 场景 | 预期行为 | 是否需要代码改动 | +|------|----------|-----------------| +| L3 仅有 v4 IpRange | PATCH segment 含 `gateway_address`,无 `gateway6_address` | 否 | +| L3 仅有 v6 IpRange | PATCH segment 含 `gateway6_address`,无 `gateway_address` | 否 | +| L3 同时有 v4 + v6 IpRange | PATCH segment 同时含两个字段,v4 不覆盖 v6 | 验证 | +| 添加 v6 后不覆盖 v4 | `createIpRange` 做 partial update(PATCH 非 PUT) | 验证 | +| 删除 v4,保留 v6 | v6 配置不受影响;若 DHCP 启用则拦截(ZnsApiInterceptor) | 验证 | + +**reconcile `needsSegmentUpdate` 需比较双栈字段**: + +```java +/** + * P1-3: gateway/MTU 是 L3/IpRange 层概念,不在 L2NetworkInventory 上。 + * 方法签名改为接受 L3NetworkInventory,从 IpRange 列表取 gateway 比较。 + */ +private boolean needsSegmentUpdate(ZnsApiCommands.SegmentData znsSegment, + L3NetworkInventory cloudL3) { + String gwV4 = null, gwV6 = null; + for (IpRangeInventory ipRange : cloudL3.getIpRanges()) { + if (NetworkUtils.isIpv4Address(ipRange.getGateway())) { + gwV4 = ipRange.getGateway(); + } else { + gwV6 = ipRange.getGateway(); + } + } + // 比较 v4 字段 + if (!Objects.equals(znsSegment.gateway_address, gwV4)) return true; + // 比较 v6 字段 + if (!Objects.equals(znsSegment.gateway6_address, gwV6)) return true; + // MTU 从 L3 的 systemTag 或 L2 基础属性取,ZStack 惯例通常存于 L3 层 tag + // 若 ZNS segment 携带 mtu 字段且 Cloud L3 有对应 tag,则比较 + return false; +} +``` + +--- + +### 4.13 告警事件(TenantRouter 孤儿) + +**新增规范事件常量**(`ZnsCanonicalEvents.java`): + +```java +public class ZnsCanonicalEvents { + + public static final String EVT_ZNS_TENANT_ROUTER_ORPHAN_IN_CLOUD = + "/zns/tenantRouter/orphanInCloud"; + + @EventDefinition + public static class TenantRouterOrphanData { + public String tenantRouterUuid; + public String message; + + public TenantRouterOrphanData(String uuid, String msg) { + this.tenantRouterUuid = uuid; + this.message = msg; + } + } +} +``` + +此事件可触发 Cloud 告警系统(AlarmManager)向运维人员发送通知。告警内容: + +> ZNS 侧已删除租户路由器 [uuid:%s],但 Cloud 中仍有 VPC L3 网络引用该路由器。请先删除对应的 L3 网络,再重新触发同步。 + +--- + +### 4.14 错误码 + +**文件**:`ZnsErrors.java`(或 `ZnsErrorCode.java`) + +```java +public interface ZnsErrors { + + // ===== 已有错误码(保持不变)===== + // ... + + // ===== 新增错误码 ===== + + /** VPC L3 在 ZNS L2 上必须携带 znsTenantRouterUuid systemTag */ + String ZNS_VPC_REQUIRES_TENANT_ROUTER_TAG = "ORG_ZSTACK_NETWORK_ZNS_10020"; + + /** 指定的租户路由器不存在 */ + String ZNS_TENANT_ROUTER_NOT_FOUND = "ORG_ZSTACK_NETWORK_ZNS_10021"; + + /** ZNS L2 不支持该 L3 类别(Public/System) */ + String ZNS_L3_CATEGORY_NOT_SUPPORTED = "ORG_ZSTACK_NETWORK_ZNS_10022"; + + /** 无法删除租户路由器,仍有 L3 网络引用 */ + String ZNS_TENANT_ROUTER_IN_USE = "ORG_ZSTACK_NETWORK_ZNS_10023"; + + /** 找不到对应 computerManagerUuid 的 SDN 控制器 */ + String ZNS_CONTROLLER_NOT_FOUND_FOR_CM_UUID = "ORG_ZSTACK_NETWORK_ZNS_10024"; + + /** DPDK NIC 需要有 ZNS dpdk 能力的主机 */ + String ZNS_DPDK_NO_CAPABLE_HOST = "ORG_ZSTACK_NETWORK_ZNS_10025"; + + /** L3 类型不被 ZNS L2 支持 */ + String ZNS_L3_TYPE_NOT_SUPPORTED = "ORG_ZSTACK_NETWORK_ZNS_10011"; + + // 工具方法(可直接调用) + static ErrorCode argerr(String code, String fmt, Object... args) { + return Platform.argerr(code, fmt, args); + } + + static ErrorCode operr(String code, String fmt, Object... args) { + return Platform.operr(code, fmt, args); + } +} +``` + +**错误码 i18n 文件**(`zns-errors.properties`): + +```properties +ORG_ZSTACK_NETWORK_ZNS_10020=在 ZNS L2 上创建 VPC 类型 L3 网络时,必须提供 systemTag [znsTenantRouterUuid::{uuid}] +ORG_ZSTACK_NETWORK_ZNS_10021=租户路由器 [uuid:{0}] 不存在 +ORG_ZSTACK_NETWORK_ZNS_10022=ZNS L2 不支持 L3 网络类别 [{0}],仅支持 Private +ORG_ZSTACK_NETWORK_ZNS_10023=无法删除租户路由器 [uuid:{0}],以下 L3 网络仍在引用:{1} +ORG_ZSTACK_NETWORK_ZNS_10024=找不到 computerManagerUuid [{0}] 对应的 SDN 控制器 +ORG_ZSTACK_NETWORK_ZNS_10025=DPDK NIC 模式需要至少一台由 ZNS 控制器 [uuid:{0}] 管理的主机 +``` + +--- + +## 5. 新增错误码清单 + +| 错误码 | 常量名 | 场景 | 类型 | +|--------|--------|------|------| +| `ORG_ZSTACK_NETWORK_ZNS_10020` | `ZNS_VPC_REQUIRES_TENANT_ROUTER_TAG` | 创建 VPC L3 未携带 TenantRouter Tag | argerr | +| `ORG_ZSTACK_NETWORK_ZNS_10021` | `ZNS_TENANT_ROUTER_NOT_FOUND` | 指定 TenantRouter 不存在 | argerr | +| `ORG_ZSTACK_NETWORK_ZNS_10022` | `ZNS_L3_CATEGORY_NOT_SUPPORTED` | L3 Category 不支持(Public/System) | argerr | +| `ORG_ZSTACK_NETWORK_ZNS_10023` | `ZNS_TENANT_ROUTER_IN_USE` | 删除 TenantRouter 时仍有 L3 引用 | operr | +| `ORG_ZSTACK_NETWORK_ZNS_10024` | `ZNS_CONTROLLER_NOT_FOUND_FOR_CM_UUID` | 反向通知时找不到控制器 | operr | +| `ORG_ZSTACK_NETWORK_ZNS_10025` | `ZNS_DPDK_NO_CAPABLE_HOST` | DPDK 模式无可用主机 | argerr | + +--- + +## 6. Flyway DDL 清单 + +| 文件名 | 内容 | 依赖 | +|--------|------|------| +| `V5.0.x__ZnsTenantVO.sql` | 创建 `ZnsTenantVO` 表 | 无 | +| `V5.0.x__ZnsTenantRouterVO.sql` | 创建 `ZnsTenantRouterVO` 表 | 无(tenantUuid 可为 NULL) | + +**注意事项**: +- Flyway 文件版本号 `5.0.x` 中的 `x` 需根据 ZStack 版本号规范确定具体序号 +- 两个表不设外键约束(ZStack 惯例,由应用层保证引用完整性) +- `externalUuid` 加 `UNIQUE KEY`,确保 ZNS 侧 UUID 不重复导入 + +--- + +## 7. SystemTag 变更清单 + +| 旧 Tag | 挂载维度 | 新 Tag | 挂载维度 | 变更类型 | 迁移说明 | +|--------|---------|--------|---------|---------|---------| +| `enableDpdkVhostuser::{enableDpdkVhostuser}` | `L3NetworkVO` | `znsNicMode::{mode}` | `VmInstanceVO` | 重命名 + 维度变更 | 新特性 Tag,无历史数据;旧 Tag 加 `@Deprecated`,保留一个 minor 版本作为 fallback 读取,v5.1 删除 | +| ——(新增)—— | —— | `znsTenantRouterUuid::{tenantRouterUuid}` | `L3NetworkVO` | 新增 | VPC L3 创建时必须携带 | + +--- + +## 8. 实现顺序建议 + +### Wave 1 — 基础数据模型(无业务依赖) + +| 任务 | 说明 | +|------|------| +| 创建 `ZnsTenantVO` + Flyway DDL | 基础 VO,不含业务逻辑 | +| 创建 `ZnsTenantRouterVO` + Flyway DDL | 基础 VO,不含业务逻辑 | +| `ZnsTenantInventory` / `ZnsTenantRouterInventory` | Inventory 类 | +| `APIQueryZnsTenantRouterMsg` / Reply | Query API | +| 更新 `ZnsSdnControllerSystemTags`(新增 `ZNS_NIC_MODE`, `ZNS_TENANT_ROUTER_UUID`,废弃旧 Tag) | 无运行时副作用 | +| 新增错误码(`ZnsErrors`) | 常量类,零依赖 | + +### Wave 2 — ZNS API Client 扩展 + +| 任务 | 说明 | +|------|------| +| `ZnsApiCommands.TenantData` / `TenantRouterData` DTO | 无业务逻辑 | +| `ZnsApiClient.listTenantRouters` | 新增接口方法 | +| `ZnsApiClient.getTenantRouter` | 新增接口方法 | + +### Wave 3 — 反向通知通道 + +| 任务 | 说明 | +|------|------| +| `ZnsNotificationCommands`(所有 Notification DTO) | 数据类 | +| `ZnsNotificationController`(Spring @Controller,4 个 @RequestMapping 端点) | 核心新增类 | +| `ZnsConstant` 新增 HTTP 路径常量 | 常量 | + +### Wave 4 — Add-CM / Wizard Init 流程 + +| 任务 | 说明 | +|------|------| +| `AddComputeManagerHandler` 实现 | 依赖 Wave 1/3 | +| `WizardInitSyncHandler` 实现(含 5 个 Flow) | 依赖 Wave 2/3 | +| `ZnsSdnController.initSdnController` 移除 Flow 5 | 手术式删除 | +| `ZnsSdnControllerConstant.MANUAL_ADD_DEPRECATION_NOTE` | 文档常量 | + +### Wave 5 — Reconcile 重构 + 运行时通知 + +| 任务 | 说明 | +|------|------| +| `syncDeviceResourcesFromZns`(提取为独立方法) | 依赖 Wave 2/4 | +| `syncTenantRoutersFromZns` + 孤儿处理逻辑 | 依赖 Wave 1 | +| `ZnsCanonicalEvents.EVT_ZNS_TENANT_ROUTER_ORPHAN_IN_CLOUD` | 事件常量 | +| 新 `reconnectSdnController`(Group A + Group B) | 重构现有方法 | +| `SyncFabricHandler` | 依赖 Wave 3/5 | +| `SyncResourceHandler` | 依赖 Wave 3/5 | + +### Wave 6 — API 拦截 + VM/NIC 层 + +| 任务 | 说明 | +|------|------| +| `ZnsApiInterceptor.validate(APICreateL3NetworkMsg)` — VPC 支持 | 依赖 Wave 1 | +| `ZnsApiInterceptor.validate(APIDeleteZnsTenantRouterMsg)` — 限制删除 | 依赖 Wave 1 | +| `ZnsApiInterceptor.validate(APICreateVmInstanceMsg)` — NIC 模式校验 | 依赖 Wave 1 | +| `VmNicManagerImpl.computeVmNicType` 改为读 VM 维度 Tag | 依赖 Wave 1 | +| `KVMAgentCommands` 新增 `PrepareDpdkNicCmd` / `ReleaseDpdkNicCmd` | 依赖无 | +| `KVMRealizeL2GeneveNetworkBackend` DPDK 分支 | 依赖 Wave 1/6 | +| DHCP/DNS/MTU 完整性验证 + `afterCreateIpRange` 修复 | 依赖 Wave 4 | +| 双栈 IpRange `needsSegmentUpdate` 双字段比较 | 回归验证 | + +--- + +## 附录 A:关键接口/类一览 + +| 类/接口 | 所在包 | 变更类型 | +|---------|--------|---------| +| `ZnsNotificationController` | `org.zstack.network.zns` | **新增** | +| `ZnsNotificationCommands` | `org.zstack.network.zns` | **新增** | +| `ZnsCanonicalEvents` | `org.zstack.network.zns` | **新增** | +| `ZnsTenantVO` | `org.zstack.network.zns` | **新增** | +| `ZnsTenantRouterVO` | `org.zstack.network.zns` | **新增** | +| `ZnsTenantInventory` | `org.zstack.network.zns` | **新增** | +| `ZnsTenantRouterInventory` | `org.zstack.network.zns` | **新增** | +| `APIQueryZnsTenantRouterMsg` | `org.zstack.network.zns` | **新增** | +| `ZnsErrors` | `org.zstack.network.zns` | **修改**(新增 6 个常量) | +| `ZnsSdnControllerSystemTags` | `org.zstack.network.zns` | **修改**(废弃 1 个,新增 2 个) | +| `ZnsApiInterceptor` | `org.zstack.network.zns` | **修改**(VPC 支持 + 新拦截) | +| `ZnsSdnController` | `org.zstack.network.zns` | **修改**(移除 Flow 5,重构 reconnect) | +| `ZnsApiCommands` | `org.zstack.network.zns` | **修改**(新增 DTO) | +| `ZnsApiClient` | `org.zstack.network.zns` | **修改**(新增 2 个方法) | +| `ZnsConstant` | `org.zstack.network.zns` | **修改**(新增 HTTP 路径常量) | +| `ZnsSdnControllerConstant` | `org.zstack.network.zns` | **修改**(新增废弃常量) | +| `VmNicManagerImpl` | `org.zstack.network.vm`(或 network-service) | **修改**(NIC 类型计算) | +| `KVMAgentCommands` | `org.zstack.kvm` | **修改**(新增 DPDK 命令) | +| `KVMRealizeL2GeneveNetworkBackend` | `org.zstack.kvm` | **修改**(DPDK 分支) | +| `KVMConstant` | `org.zstack.kvm` | **修改**(新增路径常量) | +| `ZnsSdnControllerDhcp` | `org.zstack.network.zns` | **验证**(DHCP 完整性) | +| `ZnsSdnControllerL3` | `org.zstack.network.zns` | **验证**(双栈 IpRange) | + +--- + +## 附录 B:数据流图 + +### B.1 新 Add-CM 流程 + +``` +ZNS Wizard + │ + │ POST /zns/notify/add-compute-manager + │ {vip, account, password, computerManagerUuid, name} + ▼ +ZnsNotificationController.AddComputeManagerHandler + │ + ├─ 幂等检查(computerManagerUuid) + ├─ persistNewController @Transactional + │ persist SdnControllerVO + │ persist ZnsControllerVO + │ create SystemTag computerManagerUuid::{uuid} + ├─ fire SDN_CONTROLLER_ADDED event + │ + └─ return {uuid, success:true} + │ + ▼ + ZNS 存储 Cloud 侧 controller UUID +``` + +### B.2 Wizard Init Sync 流程 + +``` +ZNS Wizard(T1 创建完成) + │ + │ POST /zns/notify/wizard-init-sync {computerManagerUuid} + ▼ +WizardInitSyncHandler + │ + ├─ Flow 1: sync-transport-zones-zns-as-sot + │ pull TZ from ZNS → upsert ZnsTransportZoneVO → delete orphans + ├─ Flow 2: sync-transport-nodes-zns-as-sot + │ pull TN → upsert SdnControllerHostRefVO → delete orphans + ├─ Flow 3: sync-tenants-zns-as-sot(optional) + │ pull Tenant → upsert ZnsTenantVO → delete orphans + ├─ Flow 4: sync-tenant-routers-zns-as-sot + │ pull TR → upsert ZnsTenantRouterVO → handle orphans + └─ Flow 5: cleanup-orphan-segments + list ZNS Segments → find no-Cloud-L2 counterpart → deleteSegment(force=true) +``` + +### B.3 Reconcile SoT 拆分 + +``` +reconnectSdnController + │ + ├─ [Group A: ZNS-as-SoT] syncDeviceResourcesFromZns + │ TZ sync → TN sync → Tenant sync → TenantRouter sync + │ 每步:pull all from ZNS → upsert → delete orphans + │ + └─ [Group B: Cloud-as-SoT] reconcileSegmentsCloudAsSoT + 3-way diff: Cloud L2 ↔ ZNS Segment ↔ cloud-basis + 原有逻辑不变 +``` diff --git a/docs/modules/network/nav.adoc b/docs/modules/network/nav.adoc index 19dbb6c06b1..0cee54bd193 100644 --- a/docs/modules/network/nav.adoc +++ b/docs/modules/network/nav.adoc @@ -4,4 +4,5 @@ *** xref:networkResource/L3Network.adoc[] *** xref:networkResource/l3Ipam.adoc[] *** xref:networkResource/VpcRouter.adoc[] + *** xref:networkResource/ZnsIntegration.adoc[] ** xref:networkService/networkService.adoc[] \ No newline at end of file diff --git a/docs/modules/network/pages/networkResource/ZStackL2NetworkType.adoc b/docs/modules/network/pages/networkResource/ZStackL2NetworkType.adoc new file mode 100644 index 00000000000..14c22fcda29 --- /dev/null +++ b/docs/modules/network/pages/networkResource/ZStackL2NetworkType.adoc @@ -0,0 +1,504 @@ += 网络类型体系:L2NetworkType / VSwitchType / VmNicType + +ZStack 的网络类型由三层模型组成,分别描述二层网络拓扑、虚拟交换机实现和虚拟机网卡类型。 + +== 三层类型模型 + +[cols="1,1,1"] +|=== +| L2NetworkType (网络拓扑类型) | VSwitchType (虚拟交换机类型) | VmNicType (网卡类型) + +| 定义二层网络的拓扑结构 +| 定义物理机上的虚拟交换机实现 +| 定义虚拟机网卡的驱动/接口类型 + +| 由 `L2NetworkFactory` 注册 +| 由 `VmInstanceNicFactory` 注册 +| 由 `VSwitchType.addVmNicType()` 绑定 + +| 存储在 `L2NetworkVO.type` +| 存储在 `L2NetworkVO.vSwitchType` +| 存储在 `VmNicVO.type` +|=== + +=== 关系 + +---- +L2NetworkType 1 ──── N VSwitchType 1 ──── N VmNicType + (一种L2可选多种vSwitch) (一种vSwitch可有多种NIC子类型) +---- + +例: + +---- +L2NoVlanNetwork ──┬── LinuxBridge ──── VIRTUAL_NIC (SubType=NONE) + └── OVN_DPDK ──┬── dpdkvhostuserclient (SubType=NONE) + └── VF (SubType=SRIOV) + +L2GeneveNetwork ──── ZNS ──┬── VIRTUAL_NIC (SubType=NONE, 默认) + └── dpdkvhostuserclient (SubType=VHOSTUSER, 需system tag指定) + +L2VlanNetwork ──── LinuxBridge ──── VIRTUAL_NIC (SubType=NONE) +---- + +== 注册机制 + +=== L2NetworkType + +在 `L2NetworkFactory.getType()` 中通过 `new L2NetworkType("xxx")` 自动注册到静态 Map。 + +[source,java] +---- +// L2NoVlanL2NetworkFactory.java +public L2NetworkType getType() { + return new L2NetworkType(L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE); +} +---- + +=== VSwitchType + +在 `VmInstanceNicFactory.getType()` 中通过 `new VSwitchType("xxx")` 自动注册到静态 Map。 + +[source,java] +---- +// ZnsVmNicFactory.java +static final VSwitchType vSwitchType = new VSwitchType("ZNS"); +---- + +=== VmNicType + +通过 `VSwitchType.addVmNicType(SubType, VmNicType)` 绑定到 VSwitchType。 + +[source,java] +---- +// ZnsVmNicFactory.java +vSwitchType.addVmNicType(VmNicType.VmNicSubType.NONE, type); +---- + +== 全部 L2NetworkType(10种) + +[cols="2,3,2"] +|=== +| L2NetworkType | 工厂类 | 模块 + +| L2NoVlanNetwork +| `L2NoVlanL2NetworkFactory` +| network/ + +| L2VlanNetwork +| `L2VlanNetworkFactory` +| network/ + +| VxlanNetwork +| `VxlanNetworkFactory` +| plugin/vxlan/ + +| VxlanNetworkPool +| `VxlanNetworkPoolFactory` +| plugin/vxlan/ + +| HardwareVxlanNetwork +| `HardwareVxlanNetworkFactory` +| plugin/sdnController/ + +| HardwareVxlanNetworkPool +| `HardwareVxlanNetworkPoolFactory` +| plugin/sdnController/ + +| L2GeneveNetwork +| `L2GeneveNetworkFactory` +| premium/zns/ + +| PortGroupNetwork +| `L2PortGroupNetworkFactory` +| premium/virtualSwitch/ + +| VirtualSwitchNetwork +| `L2VirtualSwitchNetworkFactory` +| premium/virtualSwitch/ + +| TfNetwork +| `TfL2NetworkFactory` +| plugin/sugonSdn/ +|=== + +== 全部 VSwitchType(7种) + +[cols="2,1,1,2"] +|=== +| VSwitchType | sdnControllerType | nicLifecycleManagedByFactory | NicFactory + +| LinuxBridge +| null +| false +| `VmNicFactory` + +| ZNS +| "ZNS" +| *true* +| `ZnsVmNicFactory` + +| MacVlan +| null +| false +| `VmMacVlanNicFactory` + +| OVN_DPDK +| null +| false +| `VmOvnVhostUserNicFactory` + +| OVS_DPDK +| null +| false +| `VmOvnVhostUserNicFactory` + +| TF +| null +| false +| `TfVmNicFactory` + +| OVS_DPDK(vDPA) +| null +| false +| `VmVdpaNicFactory` +|=== + +=== VSwitchType 关键属性 + +[cols="2,4,1"] +|=== +| 属性 | 作用 | ZNS 值 + +| `sdnControllerType` +| 关联的 SDN 控制器类型,null 表示无 SDN +| "ZNS" + +| `nicLifecycleManagedByFactory` +| NIC 生命周期由 NicFactory 管理 (true) 还是 SdnControllerManager 管理 (false) +| *true* + +| `attachToCluster` +| 是否需要手动挂载集群 +| false(ZNS 通过 TransportZone 自动挂载) + +| `useDpdk` +| 是否使用 DPDK +| false +|=== + +== L2NetworkType → VSwitchType 映射 + +L2NetworkVO 同时持有 `type`(L2NetworkType)和 `vSwitchType`(VSwitchType)。 +L2 创建时由用户或系统指定 vSwitchType。同一 L2NetworkType 可搭配不同 VSwitchType: + +[cols="2,2,3"] +|=== +| L2NetworkType | 可用 VSwitchType | 说明 + +| L2NoVlanNetwork +| LinuxBridge, OVN_DPDK, OVS_DPDK, ZNS +| 普通无 VLAN 二层网络 + +| L2VlanNetwork +| LinuxBridge, OVN_DPDK, OVS_DPDK, ZNS +| VLAN tagged 网络 + +| VxlanNetwork +| LinuxBridge +| 软件 VXLAN 覆盖网络 + +| HardwareVxlanNetwork +| (SDN 专用) +| 硬件 SDN VXLAN + +| L2GeneveNetwork +| ZNS +| ZNS Geneve 覆盖网络 + +| PortGroupNetwork +| (VirtualSwitch) +| VMware 端口组 + +| TfNetwork +| TF +| Tungsten Fabric +|=== + +== VSwitchType → VmNicType 映射(按 VmNicSubType) + +请求创建 NIC 时: + +. 检查 VM 是否有 SRIOV 系统标签 → SubType=SRIOV +. 检查全局配置是否启用 VHOSTUSER → SubType=VHOSTUSER +. 否则 → SubType=NONE + +`VSwitchType.getVmNicType(subType)` 从 nicTypes Map 中查找对应的 VmNicType。 + +[cols="2,1,1,1"] +|=== +| VSwitchType | SubType=NONE | SubType=SRIOV | SubType=VHOSTUSER + +| LinuxBridge +| VIRTUAL_NIC +| — +| — + +| ZNS +| VIRTUAL_NIC +| — +| dpdkvhostuserclient + +| MacVlan +| MACVLAN_NIC +| — +| — + +| OVN_DPDK +| OVN_VHOSTUSER +| OVN_VF +| — + +| OVS_DPDK +| — +| VDPA +| OVS_VHOSTUSER + +| TF +| TF_NIC +| — +| — +|=== + +== 创建 VM 时 NIC 组装完整流程 + +---- + VmAllocateNicFlow + │ + L3Network → L2Network → VSwitchType → VmNicType → VmInstanceNicFactory + │ + factory.createVmNic() + ┌───────────┴───────────┐ + │ │ + (持久化 VmNicVO) factory.afterCreateVmNic() + │ + ┌─────────────────────────┤ + │ │ + 普通 NIC (空操作) ZNS NIC: + createSegmentPort() + → 创建 UsedIpVO + → 回写 VmNicVO.ip/gateway + │ + VmInstantiateResourcePreFlow + │ + SdnControllerManagerImpl.preInstantiateVmResource() + │ + ┌──────────────┼──────────────┐ + │ │ │ + sdnControllerType nicLifecycle 其他 SDN: + == null? ManagedByFactory? controller.addVmNics() + → 跳过(普通) → 跳过(ZNS已处理) (OVN/HW-VXLAN 路径) + │ + KVMHost.completeNicInfo() + │ + KVMCompleteNicInformationExtensionPoint (按 L2Type 分发) + ┌──────┬──────┼──────┬──────┐ + │ │ │ │ │ + NoVlan Vlan VxLAN Geneve PortGroup + bridge bridge bridge bridge ... + 无VLAN +VLAN +VNI (ZNS管) + │ + StartVmCmd → KVM Agent +---- + +== L2 物理机配置(Realize)决策 + +[cols="2,3,3"] +|=== +| L2 Backend | realize() 行为 | 触发时机 + +| KVMRealizeL2NoVlan +| `CreateBridgeCmd` → 物理机创建网桥 +| Host 连接时 + NIC 挂载时 + +| KVMRealizeL2Vlan +| `CreateVlanBridgeCmd` → 创建 VLAN 子接口 + 网桥 +| Host 连接时 + NIC 挂载时 + +| KVMRealizeL2Vxlan +| `CreateVxlanBridgeCmd` → 创建 VXLAN 隧道 + 网桥 +| 按需(`InstantiateResourceOnAttachingNic`) + +| KVMRealizeL2Geneve +| *空操作* +| ZNS/OVS controller 自行管理网桥 +|=== + +== 全部 VmNicType(6种) + +[cols="2,2,2,3"] +|=== +| VmNicType | 类型名 | NicFactory | 说明 + +| VNIC +| `"VNIC"` +| `VmNicFactory` +| 标准 virtio 网卡,最常用的类型 + +| dpdkvhostuserclient +| `"dpdkvhostuserclient"` +| `VmOvnVhostUserNicFactory` +| DPDK vhost-user 网卡,使用 OVS 的 vhost-user socket 进行高性能数据传输 + +| VF +| `"VF"` +| `VmVfNicFactory` +| SR-IOV Virtual Function 网卡,直通物理网卡的虚拟功能 + +| vDPA +| `"vDPA"` +| `VmVdpaNicFactory` +| vDPA (virtio Data Path Acceleration) 网卡,硬件加速的 virtio 数据路径 + +| MACVLAN +| `"MACVLAN"` +| `VmMacVlanNicFactory` +| MacVLAN 网卡,基于 MAC 地址的虚拟 LAN + +| TFVNIC +| `"TFVNIC"` +| `TfVmNicFactory` +| Tungsten Fabric 网卡 +|=== + +=== 各 VmNicType 的使用条件 + +VmNicType 的选择由 `VmNicManagerImpl.getVmNicType()` 决定,依据三个因素: + +. L2 网络的 VSwitchType +. VM 是否有 SRIOV 系统标签(`enableSRIOV::{l3Uuid}`) +. 全局配置 `ENABLE_VHOSTUSER` 是否开启 + +选择优先级:SRIOV > VHOSTUSER > NONE,若 VSwitchType 不支持请求的 SubType,回退到 NONE。 + +[cols="2,2,2,2,2"] +|=== +| VmNicType | VSwitchType | L2NetworkType | VmNicSubType | 使用条件 + +| VNIC +| LinuxBridge +| L2NoVlanNetwork, L2VlanNetwork +| NONE +| 默认情况:未启用 SRIOV 且未启用 VHOSTUSER + +| dpdkvhostuserclient +| OVN_DPDK +| L2NoVlanNetwork +| NONE +| L2 使用 OVN_DPDK vSwitch,默认情况 + +| dpdkvhostuserclient +| OVS_DPDK +| L2NoVlanNetwork, L2VlanNetwork +| VHOSTUSER +| L2 使用 OVS_DPDK vSwitch 且全局配置 `ENABLE_VHOSTUSER=true` + +| dpdkvhostuserclient +| OVN_DPDK +| L2NoVlanNetwork +| SRIOV +| L2 使用 OVN_DPDK vSwitch 且 VM 有 `enableSRIOV` 标签(注册为 VF 类型) + +| VF +| LinuxBridge +| L2NoVlanNetwork, L2VlanNetwork +| SRIOV +| L2 使用 LinuxBridge 且 VM 有 `enableSRIOV` 标签 + +| vDPA +| OVS_DPDK +| L2NoVlanNetwork, L2VlanNetwork +| NONE, SRIOV +| L2 使用 OVS_DPDK vSwitch,默认或 SRIOV 模式 + +| MACVLAN +| MacVlan +| L2NoVlanNetwork, L2VlanNetwork +| NONE +| L2 使用 MacVlan vSwitch + +| VNIC +| ZNS +| L2NoVlanNetwork, L2VlanNetwork, L2GeneveNetwork +| NONE +| L2 使用 ZNS vSwitch,默认网卡类型 + +| dpdkvhostuserclient +| ZNS +| L2NoVlanNetwork, L2VlanNetwork, L2GeneveNetwork +| VHOSTUSER +| L2 使用 ZNS vSwitch,用户通过 system tag 指定使用 dpdkvhostuserclient + +| TFVNIC +| TF +| TfNetwork +| NONE +| L2 使用 TF (Tungsten Fabric) vSwitch +|=== + +=== NicTO 中 srcPath 设置规则 + +当 VSwitchType 为 OVN_DPDK 或 ZNS 时,`completeNicInformation()` 会设置 +`srcPath = "/var/run/openvswitch/" + nic.getInternalName()`,用于 DPDK vhost-user socket 连接。 + +[cols="2,2,2,1"] +|=== +| L2NetworkType | VSwitchType | 设置 srcPath? | Backend + +| L2NoVlanNetwork +| LinuxBridge +| 否 +| KVMRealizeL2NoVlanNetworkBackend + +| L2NoVlanNetwork +| OVN_DPDK / ZNS +| *是* +| KVMRealizeL2NoVlanNetworkBackend + +| L2VlanNetwork +| LinuxBridge +| 否 +| KVMRealizeL2VlanNetworkBackend + +| L2VlanNetwork +| OVN_DPDK / ZNS +| *是* +| KVMRealizeL2VlanNetworkBackend + +| L2GeneveNetwork +| ZNS +| 否(仅 OVN_DPDK 设置) +| KVMRealizeL2GeneveNetworkBackend + +| VxlanNetwork +| LinuxBridge +| 否 +| KVMRealizeL2VxlanNetworkBackend +|=== + +== SDN 两条路径对比 + +=== Path A: Factory 管理(ZNS) + +* `VSwitchType.nicLifecycleManagedByFactory = true` +* `SdnControllerManagerImpl.preInstantiateVmResource()` 跳过 +* `VmInstanceNicFactory`(ZnsVmNicFactory)在 `afterCreateVmNic()` 中直接调 ZNS API +* Port 在 VM stop/reboot 时持久化,不随 VM 生命周期反复创建/删除 + +=== Path B: SdnControllerManager 管理(OVN / Hardware VXLAN) + +* `VSwitchType.nicLifecycleManagedByFactory = false`,`sdnControllerType != null` +* `SdnControllerManagerImpl.preInstantiateVmResource()` 处理 +* 通过 `L2NetworkSystemTags.SdnControllerUuid` 找到控制器 UUID +* 调用 `SdnControllerL2.addVmNics()` 创建端口 +* Port 随 VM start/stop 反复创建/删除 diff --git a/docs/modules/network/pages/networkResource/ZnsIntegration.adoc b/docs/modules/network/pages/networkResource/ZnsIntegration.adoc new file mode 100644 index 00000000000..285af083f14 --- /dev/null +++ b/docs/modules/network/pages/networkResource/ZnsIntegration.adoc @@ -0,0 +1,975 @@ += 对接ZNS SDN控制器 + +== 总体描述 + +当前 ZNS 与 Cloud 的集成采用混合主权模型: + +* 设备资源(transport zone、transport node、host switch、tenant、tenant router)以 ZNS 为真相源 +* 业务资源(L2Network、L3Network、IpRange、segment、segment port、DHCP service)以 Cloud 为真相源 +* Cloud 不再把 ZNS 上已有的 segment 反向导入为 L2/L3;首次同步和定时对账发现孤儿 segment 时,直接在 ZNS 侧清理 +* ZNS 通过反向通知驱动 SDN Controller 建档、首次同步和运行期设备资源同步;Cloud 通过 API 主动维护业务资源 + +Cloud 与 ZNS 的核心映射关系如下: + +* ZNS transport zone / transport node / host switch → Cloud 侧设备资源视图与调度约束 +* ZNS tenant router → Cloud `ZnsTenantRouterVO` +* Cloud `L2Network` ↔ ZNS segment +* Cloud `VmNic` ↔ ZNS segment port +* Cloud `IpRange` / DHCP / DNS / MTU ↔ ZNS segment 配置 + +=== CMS +Cloud 资源和 ZNS 资源之间的映射仍然通过 CMS 元数据协助建立。 + +[source,go] +---- + type Cms struct { + CmsUuid string + Type string ### cloud/zsv/zaku/zns + IP string ### cloud mn vip + Role string ###owner, user + CmsResourceUuid string ###owner, user + } + +type Segment { + ... + CmsMetaDatas []Cms `json:"cms"` +} +---- + +* Cms::Type 定义 cms 类型:Cloud、ZSV、ZAKU、ZNS +* Cms::IP 定义 cms 的 IP 地址,该字段主要用于资源识别;cms 的唯一标识仍是 CmsUuid +* Cms::CmsUuid 定义 cmsUuid。对 Cloud 而言,该值对应 ZNS 的 `computerManagerUuid`,由 `add-compute-manager` 反向通知写入 `SdnController` systemTag +* Cms::CmsResourceUuid 定义该 cms 系统对应的资源 UUID,用于回写 Cloud 资源标识并在对账时建立映射 +* 对业务资源(segment、segment port、DHCP service)而言,Cloud 是 owner;ZNS 不主动创建这些资源,也不应主动发送 `resourceType=SEGMENT` 通知 +* 对设备资源(transport zone、transport node、host switch、tenant、tenant router)而言,ZNS 是 owner,Cloud 仅做同步展示和引用校验 + +=== ZNS API + +ZNS API 需要同时覆盖 Cloud 主调和 ZNS 反向通知两类场景: + +* Cloud → ZNS:创建/删除/更新 segment、segment port、tenant router 关联、DHCP、DNS、MTU、IpRange 等业务资源 +* ZNS → Cloud:通过反向通知完成 `add-compute-manager`、`wizard-init-sync`、`sync-fabric`、`sync-resource`,以及条件能力 `delete-compute-manager` +* 查询 API 需要支持按 `cmsUuid` 过滤资源 +* 面向大规模对账的查询 API 应逐步支持 `hash_fields` / `content_hash` 轻量比对;segment port 列表还需要支持按 `host_uuid` 过滤 + +[NOTE] +不是所有 API 都需要以上全部能力,但所有会进入对账链路的资源都必须支持稳定的跨系统映射。 + +=== ZNS 数据库对象 + +由 cms 创建的资源,或者需要按 cms 查询的资源,都需要保存 cms 信息。 +一个资源可能有多个 cms 信息,表示资源可在多个 cms 之间共享。 + +对账相关资源还需要满足以下要求: + +* segment / segment port 能够回写 Cloud 资源 UUID,支持孤儿资源清理 +* segment port 需要记录 `host_uuid`、`transport_node_uuid`,便于按主机维度对账 +* segment / segment port / DHCP service 在支持轻量对账时,可以根据 `hash_fields` 计算并返回 `content_hash` + +=== UUID 格式约定 + +ZNS 使用带连字符的 UUID 格式(`550e8400-e29b-41d4-a716-446655440000`),Cloud 使用不带连字符的紧凑 UUID 格式(`550e8400e29b41d4a716446655440000`)。 + +Cloud 在调用 ZNS API 时需要将 Cloud UUID 转换为 ZNS UUID 格式,在接收 ZNS 响应时需要将 ZNS UUID 转换回 Cloud 格式。 + +== Cloud 与 ZNS 通信协议 + +=== 传输层 + +Cloud 通过 HTTP REST API 与 ZNS 通信,ZNS 也通过 HTTP POST 反向通知 Cloud。所有请求/响应体均为 JSON 格式。 + +全局配置参数: + +[cols="2,2,2"] +|=== +|配置项 |默认值 |说明 + +|`zns.controller.scheme` +|`http` +|HTTP 或 HTTPS + +|`zns.controller.port` +|`7278` +|ZNS API 端口 + +|`zns.controller.timeout` +|`300000`(5分钟) +|请求超时时间(毫秒) + +|`zns.notifyDebounceMs` +|`1000` +|ZNS 反向通知防抖窗口(毫秒) + +|=== + +[NOTE] +反向通知 endpoint 仅绑定到管理网,v1 阶段依赖管理网隔离、`computerManagerUuid` 校验和资源归属校验,不引入 token / signing。 + +=== 异步回调模式 + +Cloud 调用 ZNS 的业务写操作(POST/PATCH/DELETE)采用异步回调模式: + +.... +Cloud ZNS + │ POST/PATCH/DELETE + headers │ + │ x-web-hook: │ + │ x-job-uuid: │ + │─────────────────────────────────────────►│ + │ ◄── 202 Accepted │ (ZNS 立即返回) + │ │ + │ (ZNS 异步处理完成后回调 Cloud) │ + │ ◄── POST │ + │ { taskUuid, success, status, data } │ + │ │ + │ Cloud 根据 taskUuid 匹配到 │ + │ 对应的等待中的调用并完成 │ +.... + +Cloud 的读操作(GET)为同步调用,直接返回 200 + JSON body。 +ZNS 的反向通知也是同步 POST:Cloud 负责快速返回 200 / 4xx,真正的资源同步可以在 Cloud 内部异步执行。 + +=== 反向通知 + +ZNS 通过以下入口反向通知 Cloud: + +[cols="2,2,3"] +|=== +|入口 |发送方 |用途 + +|`POST /zns/notify/add-compute-manager` +|ZNS +|创建或更新 `SdnController` 建档信息,不触发资源同步 + +|`POST /zns/notify/wizard-init-sync` +|ZNS Wizard +|首次同步设备资源,并清理 ZNS 侧孤儿 segment + +|`POST /zns/notify/sync-fabric` +|ZNS +|按 `scope` 触发设备资源重拉;支持 `ALL` 和 `TZ/TN/HOSTSWITCH/TENANT/TENANT_ROUTER` + +|`POST /zns/notify/sync-resource` +|ZNS +|单资源增删改通知,主要用于 tenant router / transport node 等;`SEGMENT` 通知直接拒绝 + +|`POST /zns/notify/delete-compute-manager` +|ZNS +|条件能力,仅在应用市场支持卸载前钩子时启用 + +|=== + +=== 请求串行化 + +对同一个 ZNS IP 的所有 API 调用通过任务链串行执行,避免并发操作导致的冲突。 + +对 ZNS 反向通知,Cloud 会对相同 `sdnControllerUuid + scope` 的 `sync-fabric` 进行防抖合并,避免通知风暴导致重复重拉。 + +== ZNS SDN控制器 + +ZStack 已经定义 `SdnControllerVO`,目前已有 `H3cVcfcSdnController`、`SugonSdnController`、`OvnController`、`HuaweiIMasterSdnController` 等实现。 + +新定义 `ZnsControllerVO`,继承 `SdnControllerVO`: + +* vendorType:ZNS +* vendorVersion:用于记录当前连接的 ZNS 版本(详见 <> 章节) +* transportZones:关联的 `ZnsTransportZoneVO` 列表(一对多) +* state:在 `Connecting`、`Connected`、`Syncing`、`Ready`、`Disconnected` 之间流转 +* lastError:记录通知或对账失败时的最近错误信息 + +[NOTE] +Cloud 通过 SystemTag 记录以下映射关系: + +* `computerManagerUuid::{uuid}` 在 `SdnControllerVO` 上 +* `znsSegmentUuid::{segmentUuid}` 在 `L2NetworkVO` 上 +* `znsSegmentPortUuid::{portUuid}` 在 `VmNicVO` 上 +* `znsTenantRouterUuid::{tenantRouterUuid}` 在 `L3VpcNetwork` 上 +* `znsDhcpServiceUuid::{serviceUuid}` 在开启 DHCP 的 `L3Network` 上 + +=== 创建SDN控制器 + +Cloud 侧接入 ZNS 的主路径不再是手工录入,而是由 ZNS 反向通知完成建档。 +原有 `APIAddSdnControllerMsg` 手工接入路径仍保留,作为反向通知失效时的兜底。 + +==== 1. 接收 add-compute-manager 反向通知 + +ZNS 在完成 `addComputerManager` 后,调用 `POST /zns/notify/add-compute-manager`,携带 vip、account、password、computerManagerUuid、name 等信息。 + +==== 2. 幂等建档或更新连接信息 + +Cloud 根据 `computerManagerUuid` 对 `SdnControllerVO` / `ZnsControllerVO` 做 insert 或 update: + +* 完全相同 payload:幂等成功,记录数不增加 +* `computerManagerUuid` 相同但 vip / account / password 变化:仅更新变化字段 +* 缺少关键字段:直接返回 400,不落库 + +==== 3. 仅建档,不触发资源同步 + +`add-compute-manager` 成功后,控制器进入 `Connecting` 状态,仅表示 Cloud 已知晓该 ZNS 控制器。 +在首次 `wizard-init-sync` 成功前,Cloud 不会同步任何设备资源,也不允许创建 ZNS L2。 + +=== 首次同步(Wizard 触发) + +首次同步由 ZNS Wizard 通过 `POST /zns/notify/wizard-init-sync` 触发,而不是在建档时自动执行。 + +==== 1. 进入 Syncing 状态 + +Cloud 收到 `wizard-init-sync` 后,将控制器从 `Connecting` / `Connected` 置为 `Syncing`,开始全量同步设备资源。 + +==== 2. 同步 Compute Collections、Discovered Nodes 和 Host Ref + +Cloud 调用 `GET /zns/api/v1/fabric/compute-collections`、`GET /zns/api/v1/fabric/discovered-nodes`,并继续追踪 host switch 相关信息,建立以下映射关系: + +* `HostData.managementIp`:匹配 Cloud `HostVO.managementIp` +* `HostData.clusterId`:匹配 Cloud `ClusterVO.uuid` +* `HostSwitchProfileData.type`:枚举值 `dpdk` 或 `kernel`,用于推导 `SdnControllerHostRefVO.vSwitchType` +* `HostSwitchProfileData.transportZoneIds`:建立 `transportZoneUuid → Set` 反向映射 + +`type` 与 `vSwitchType` 的映射规则如下: + +[cols="2,2"] +|=== +|ZNS HostSwitchProfileData.type |Cloud SdnControllerHostRefVO.vSwitchType + +|`dpdk` +|`OvsDpdk` + +|`kernel` +|`OvsKernel` + +|其它未知值,或者 profile 查询失败 +|`ZNS` + +|=== + +==== 3. 同步 Transport Zones、Tenant 和 Tenant Router + +Cloud 拉取 transport zone、tenant、tenant router 并持久化本地视图。`ZnsTransportZoneVO` 的主要字段如下: + +[cols="2,3,2"] +|=== +|字段 |来源 |说明 + +|`uuid` +|transport zone UUID(转换为 Cloud 格式) +|主键 + +|`name` +|transport zone 返回字段 +|transport zone 名称 + +|`description` +|transport zone 返回字段 +|描述信息 + +|`type` +|transport zone 返回字段 +|类型,典型值为 `vlan` 或 `overlay` + +|`physicalNetwork` +|transport zone 返回字段 +|物理网络标识 + +|`status` +|transport zone 返回字段 +|当前状态 + +|`tags` +|transport zone 返回字段 +|标签信息 + +|`znsSdnControllerUuid` +|当前 `ZnsSdnControllerVO.uuid` +|外键,关联到所属 ZNS SDN Controller + +|=== + +==== 4. 清理 ZNS 孤儿 segment + +首次同步不会根据 ZNS segment 在 Cloud 侧创建新的 L2/L3。 +如果 ZNS 上已经存在不属于任何 Cloud L2 的 segment,Cloud 会把它们视为孤儿资源并在 ZNS 侧删除。 + +==== 5. 完成首次同步 + +首次同步成功后,控制器进入 `Ready` 状态; +如果中途访问 ZNS 失败,则控制器进入 `Disconnected`,并记录 `lastError`,等待重试或手动 reconnect。 + +=== 运行期变更通知 + +ZNS 运行期资源变化后,通过反向通知驱动 Cloud 更新设备资源视图: + +* `sync-fabric`:按 `scope=ALL` 或具体类型重拉设备资源 +* `sync-resource`:处理 tenant router、transport node 等单资源级别的增删改 +* `resourceType=SEGMENT` 的通知直接拒绝,因为 segment 以 Cloud 为真相源 + +[NOTE] +如果通知触发的重拉过程因为网络抖动失败,Cloud 只记录错误并等待下一轮定时对账,不会立刻把控制器标记为 `Disconnected`。 + +=== 重连SDN控制器 + +重连(`APIReconnectSdnControllerMsg`)以 Cloud 数据库为基准,对设备资源和业务资源分别做收敛,不会根据 ZNS 当前状态在 Cloud 新建 L2/L3。 + +==== 1. 刷新 SdnControllerHostRefVO(upsert) + +重连仍需重新扫描 host(包括 compute collections → discovered nodes → host switch),以处理新加入的主机或 `vSwitchType` 发生变化的主机。 +映射关系与首次同步相同,写库操作改为 upsert: + +[cols="3,2"] +|=== +|情况 |操作 + +|`SdnControllerHostRefVO` 不存在(新主机) +|INSERT 新记录 + +|已存在但 `vSwitchType` 或 `vtepIp` 发生变化 +|UPDATE + +|已存在且字段未变 +|跳过 + +|=== + +==== 2. 刷新设备资源 + +调用 transport zone、tenant、tenant router 等设备资源查询 API,对本地视图做 upsert,并删除 ZNS 侧已不存在的旧记录。 + +==== 3. Segment 协调(以 Cloud 为基准) + +重连以 Cloud 数据库中所有 `vSwitchType = ZNS` 的 `L2NetworkVO` 为基准,与 ZNS 侧 segment 做三路对比: + +[cols="2,2,3"] +|=== +|Cloud 侧 L2NetworkVO |ZNS 侧 segment |操作 + +|不存在 +|存在 +|调用 `DELETE /zns/api/v1/segments/{uuid}` 删除孤儿 segment + +|存在 +|不存在 +|调用 `POST /zns/api/v1/segments` 在 ZNS 新建 segment + +|存在 +|存在但参数不一致(名称、描述、transport zone、VNI、CIDR、DHCP、DNS、MTU 等) +|调用 `PATCH /zns/api/v1/segments/{uuid}` 更新 + +|存在 +|存在且参数一致 +|无操作 + +|=== + +[NOTE] +重连不会根据 ZNS segment 在 Cloud 侧创建新的 L2Network / L3Network / IpRange。 + +==== 4. Segment Port 协调 + +完成 segment 协调后,对每个已与 Cloud L2 匹配的 segment,逐一协调其 port: + +[cols="2,2,3"] +|=== +|Cloud 侧 VmNicVO |ZNS 侧 segment port |操作 + +|存在 +|不存在 +|调用 `POST /zns/api/v1/segments/{uuid}/ports` 补建 port + +|不存在 +|存在 +|调用 `DELETE /zns/api/v1/segments/{uuid}/ports/{portUuid}` 删除孤儿 port + +|两侧均存在但参数有漂移 +|存在 +|按 Cloud 当前值补发更新或等待常规网卡变更流程收敛 + +|两侧均存在且参数一致 +|存在 +|无操作 + +|=== + +==== 5. Tenant Router 引用收敛 + +如果本地仍引用一个 ZNS 侧已不存在的 tenant router: + +* 若没有任何 `L3VpcNetwork` 引用它:删除本地 `ZnsTenantRouterVO` +* 若仍有 `L3VpcNetwork` 引用它:保留本地记录并告警,等待运维先清理 Cloud 引用 + +=== 心跳探活(Ping) + +Cloud 定期发送 `SdnControllerPingMsg`,通过调用 `GET /zns/api/v1/fabric/compute-managers/{uuid}` 验证 Computer Manager 连通性。 + +* 验证成功:控制器保持当前可用状态 +* 验证失败:控制器状态变为 `Disconnected` + +=== 定时同步对账 + +定时对账按照资源主权拆成两条链路: + +* 设备资源:以 ZNS 为真相源,Cloud 删除本地多余记录、补齐缺失记录 +* 业务资源:以 Cloud 为真相源,Cloud 修正 ZNS 侧的 segment / segment port / DHCP 漂移,并清理孤儿业务资源 + +对账时的核心规则: + +* ZNS 上存在、Cloud 不存在的 segment:直接删除,不反向导入 Cloud +* ZNS 上存在、Cloud 不存在的 segment port:按孤儿 port 清理 +* Cloud 上仍引用已删除 tenant router:保留本地记录并告警,不强制删除 +* 当 ZNS 提供 `hash_fields` / `content_hash` 能力后,可先做轻量比对,再决定是否拉全量数据 + +=== 删除SDN控制器 + +Cloud 主动删除 ZNS SDN Controller 时,默认走 cascade 路径: + +. 先级联删除 `VmNic`、`L3Network`、`L2Network` +. 删除过程中分别按 segment port、tenant router attach、segment 的各自语义与 ZNS 交互 +. 最后删除 `SdnControllerVO` 以及本地设备资源视图 + +`APIDeleteSdnControllerMsg` 支持两种行为: + +* 默认模式:允许 cascade,按资源依赖顺序清理 +* `deleteMode=Enforcing`:如果仍有 ZNS L2 / L3 / VmNic 引用,直接拒绝删除 + +[NOTE] +`delete-compute-manager` 反向通知是条件能力。只有应用市场支持卸载前钩子时,才允许 ZNS 反向通知 Cloud 做 restrict 删除;该路径不触发 cascade。 + +== L2Network + +=== 基础信息 + +`L2NetworkVO` 的重要字段: + +* `type`:L2NoVlanNetwork、L2VlanNetwork、L2GeneveNetwork +* `vSwitchType`:固定为 `ZNS` +* `virtualNetworkId`:vlanId 或 Geneve ID +* `physicalInterface`:固定为空字符串 + +ZNS L2Network 的定义如下: + +[cols="1,2"] +|=== +|属性 |值 + +|type +|L2NoVlanNetwork、L2VlanNetwork、L2GeneveNetwork + +|vSwitchType +|ZNS(固定值,不区分 kernel 和 dpdk) + +|physicalInterface +|空字符串 + +|virtualNetworkId +|Vlan Id 或 Geneve Id + +|transportZoneUuid +|创建时必须显式指定;`L2GeneveNetwork` 只能绑定 `overlay`,`L2VlanNetwork` / `L2NoVlanNetwork` 只能绑定 `vlan` + +|=== + +[NOTE] +`L2NetworkClusterRefVO` 仍由 transport zone 和 host sync 结果推导,用于表达 Cloud 侧可调度范围;ZNS 不负责 cluster 级网络隔离。 + +=== 创建 L2Network + +创建 ZNS 二层网络时,Cloud 不再自动选择默认 transport zone,而是要求创建请求显式指定 `transportZoneUuid`。 + +调用 `POST /zns/api/v1/segments` 创建 segment,请求体至少包含: + +* `name` +* `description` +* `transport_zone_uuid` +* `transport_type` +* `virtual_network_id` +* `dpdk_capable` +* cms 信息 + +创建成功后,将 ZNS 返回的 segment UUID 通过 systemTag 记录到 `L2NetworkVO` 上。 +如果 ZNS 创建失败,Cloud 不创建本地 `L2NetworkVO`。 + +[NOTE] +创建 `L2Network` 时,Cloud 会自动将 `vSwitchType` 设为 `ZNS`,`physicalInterface` 设为空字符串。这通过 `ZnsApiInterceptor` 在 `APICreateL2NetworkMsg` 处理前自动完成。 + +=== 删除 L2Network + +删除 ZNS 二层网络时,Cloud 先调用 `DELETE /zns/api/v1/segments/{uuid}`: + +* 删除成功:清理本地 L2 和 systemTag +* ZNS 返回 5xx:按 best-effort 继续删除本地 L2;残留 segment 留给定时对账清理 +* ZNS 返回"segment 仍被引用":中止本地删除,要求先清理引用关系 + +=== APIChangeL2NetworkVlanIdMsg + +* `L2GeneveNetwork` 类型不支持修改 VLAN ID,需要在 API 拦截器中拦截 +* `L2VlanNetwork`、`L2NoVlanNetwork` 类型允许按现有语义修改,但修改后的值必须继续以 Cloud 为真相源同步到 ZNS + +=== APIAttachL2NetworkToClusterMsg / APIDetachL2NetworkFromClusterMsg + +当前实现为空操作(no-op)。 +ZNS 通过 transport zone 管理底层网络覆盖范围,attach / detach cluster 仅影响 Cloud 侧的调度约束。 + +== L3Network + +=== 基础信息 + +`L3NetworkVO` 的重要字段: + +* `type`:`L3BasicNetwork`、`L3VpcNetwork` +* `category`:`Private` + +ZNS L3 的定义如下: + +[cols="1,2"] +|=== +|属性 |值/规则 + +|type +|`L3BasicNetwork` 或 `L3VpcNetwork` + +|category +|只能是 `Private` + +|`znsTenantRouterUuid` +|仅 `L3VpcNetwork` 需要,通过 systemTag 指定 + +|每个 ZNS L2 的 L3 数量 +|最多一个 + +|=== + +[NOTE] +ZNS 集成不再创建额外的“ZNS L3 对象”。Cloud 的 L3 只是 segment 上的三层配置和可选的 tenant router 绑定关系。 + +=== 创建 L3Network + +创建 `L3BasicNetwork` 时,Cloud 只创建本地 `L3NetworkVO`,不单独调用 ZNS 创建 L3 资源。 + +创建 `L3VpcNetwork` 时,除本地建档外,还必须: + +* 校验请求携带 `znsTenantRouterUuid::{uuid}` systemTag +* 校验该 tenant router 已同步到 Cloud +* 调用 ZNS 把当前 segment attach 到对应 tenant router + +如果 attach 失败,Cloud 回滚本地 `L3NetworkVO` 和 systemTag,不保留半成品数据。 + +=== 创建/删除 IpRange + +Cloud 为 ZNS L3 分配和维护 IpRange,ZNS 只保存 segment 上的三层配置。 + +* IPv4 IpRange:同步到 `cidr` / `gateway_address` +* IPv6 IpRange:同步到 `cidr6` / `gateway6_address` +* 同一个 L3 最多允许一条 IPv4 IpRange 和一条 IPv6 IpRange + +创建 IpRange 时,Cloud 先落本地数据,再调用 `PATCH /zns/api/v1/segments/{uuid}` 同步对应字段; +如果 PATCH 失败,Cloud 回滚本地 IpRange。 + +删除 IpRange 时: + +* 删除 IPv4 IpRange:只清空 IPv4 相关字段 +* 删除 IPv6 IpRange:只清空 IPv6 相关字段 +* 如果该 IP 版本的 DHCP 仍处于启用状态,则拒绝删除对应 IpRange + +[NOTE] +创建/删除 `L3Network` 本身不创建或删除 ZNS segment;只有 VPC attach / detach 和 IpRange / DHCP / DNS / MTU 变化才会调用 ZNS API。 + +=== DHCP / DNS 同步 + +ZNS L3 支持运行期开关 DHCP,并同步 DNS 配置: + +* 开启 DHCP:Cloud PATCH segment 的 `dhcp_configs`,并在本地记录 `znsDhcpServiceUuid` +* 关闭 DHCP:Cloud 仅把 `dhcp_configs.enabled` 置为 `false`,保留 `dns_servers`,便于后续再次开启时复用 +* 更新 DNS:Cloud 仅 PATCH `dhcp_configs.dns_servers` + +如果 DHCP / DNS PATCH 失败,Cloud 回滚本地状态,不保留不一致配置。 + +=== MTU 同步 + +当用户修改 L3Network MTU 时,如果该 L3 属于 ZNS 网络,Cloud 调用 `PATCH /zns/api/v1/segments/{uuid}` 将 `mtu` 字段同步到 ZNS segment。 +如果 PATCH 失败,Cloud 回滚本地 MTU。 + +== VmNic + +ZNS 网卡的模式选择不再直接暴露为“UI 选 VNIC 或 dpdkvhostuserclient”,而是由 VM systemTag `znsNicMode::{kernel|dpdk}` 决定。 +如果用户没有指定该 systemTag,则使用 `zns.defaultNicMode` 全局配置(默认 `kernel`)。 + +实际创建出的 `VmNicVO.type` 映射如下: + +* `znsNicMode::kernel` → `vnic` +* `znsNicMode::dpdk` → `dpdkvhostuserclient` + +=== 虚拟机的物理机分配 + +创建虚拟机选择了 ZNS 网络时: + +* `kernel` 模式只能调度到 `OvsKernel` 主机 +* `dpdk` 模式只能调度到 `OvsDpdk` 主机 +* 如果没有符合模式的主机,则调度失败 +* `dpdk` 虚拟机不允许迁移到 `kernel` 主机 + +=== 网卡创建过程 + +创建虚拟机或给虚拟机添加网卡时,会调用 `VmAllocateNicFlow` 创建网卡。 + +ZNS 网卡创建过程如下: + +. 按 Cloud 现有流程分配网卡 mac、internalId、internalName、driverType 和本地 `UsedIp` +. 调用 ZNS 创建 segment port API(`POST /zns/api/v1/segments/{uuid}/ports`),请求体包含:name、mac、ipv4、ipv6、vm_uuid、dpdk_mode、cms 信息 +. 在已知主机上下文时,可以额外携带 `host_uuid`、`transport_node_uuid`,便于后续按主机维度对账 +. 如果 ZNS 创建成功,则持久化 `VmNicVO` / `UsedIpVO`,并将 port UUID 通过 systemTag 记录到 `VmNicVO` 上 +. 如果 ZNS 创建失败,则回滚本地 `VmNicVO` / `UsedIpVO`,不中断 Cloud / ZNS 一致性 + +=== 网卡删除过程 + +* `VmReturnReleaseNicFlow`:在 `destroyVmWorkFlowElements` 中被调用,用于虚拟机销毁时释放网卡资源 +* `VmDetachNicFlow`:在云主机删除网卡时调用 + +两个 Flow 中都需要调用 ZNS 删除 segment port API(`DELETE /zns/api/v1/segments/{uuid}/ports/{portUuid}`)。 + +删除语义如下: + +* 删除成功:清理 systemTag,删除 `VmNicVO`、`UsedIpVO` +* 删除失败:按 best-effort 继续清理本地数据;残留 port 留给定时对账删除 + +=== IP 变更(VmIpChanged) + +当虚拟机 IP 发生变化时(`SetVmStaticIp`、`ChangeVmIp` 等操作),Cloud 调用 `PATCH /zns/api/v1/segments/{uuid}/ports/{portUuid}` 更新 ZNS 侧 port 的 IPv4 / IPv6 信息。 + +=== ChangeVmNicNetwork(换网操作) + +`APIChangeVmNicNetworkMsg` 涉及 detach 旧网络 + attach 新网络: + +* 不支持从 ZNS 变换成非 ZNS 网络,或从非 ZNS 变换成 ZNS 网络 +* 不支持在不同 ZNS 控制器之间换网 +* 从同一控制器下的 ZNS 网络换网时:先删除旧 segment port,再在新 segment 上创建新 port + +=== DPDK 网卡的特殊处理 + +由于 libvirt 不能自动创建 `dpdkvhostuserclient` 类型的网卡,Cloud 需要在虚拟机启动前,在物理机上预先创建对应的 DPDK 网卡。 +该逻辑只在 `znsNicMode::dpdk` 路径生效;`kernel` 路径继续依赖 libvirt 自动创建普通 vnic。 + +=== FilterAttachableL3NetworkExtensionPoint + +获取虚拟机可挂载的 L3 网络列表时,ZNS 网络有额外的过滤规则: + +* 如果虚拟机尚未挂载 ZNS 网络:ZNS 类型的 L3 仅当虚拟机所在物理机被该 ZNS 控制器管理时才可挂载 +* 如果虚拟机已挂载 ZNS 网络:只允许挂载同一 ZNS 控制器下的 L3,或挂载非 ZNS 的 L3 + +== API 拦截器 + +`ZnsApiInterceptor` 在以下场景进行拦截: + +* `APICreateL2NetworkMsg`:如果请求创建 ZNS L2,自动设置 `vSwitchType = ZNS`、`physicalInterface = ""`,并校验 `transportZoneUuid` 和 L2 类型匹配 +* `APICreateL3NetworkMsg`:ZNS L2 只允许创建 `Private` 类型 L3;同一 ZNS L2 只能有一个 L3;`L3VpcNetwork` 必须携带合法的 `znsTenantRouterUuid` +* `APIAddIpRangeMsg` / `APIDeleteIpRangeMsg`:每个 ipVersion 只允许一条 IpRange;IPv6 gateway 必须落在 CIDR 内;对应 DHCP 启用时禁止删除该 ipVersion 的 IpRange +* `APIChangeL2NetworkVlanIdMsg`:禁止修改 `L2GeneveNetwork` 的 VLAN ID +* `APIChangeVmNicNetworkMsg`:禁止 ZNS 与非 ZNS 网络之间换网,禁止不同 ZNS 控制器之间换网 +* `APIDeleteSdnControllerMsg`:在 `deleteMode=Enforcing` 时,如果仍有引用资源则拒绝删除 +* `APISdnControllerAddHostMsg` / `RemoveHostMsg` / `ChangeHostMsg`:禁止对 ZNS 控制器手动管理主机(由 ZNS 自动同步) + +[[api-version]] +== API 版本兼容性 + +=== 问题背景 + +Cloud 和 ZNS 是独立部署的两个组件,可能出现版本不一致: + +* **场景A**:Cloud 升级了,ZNS 没升级 — Cloud 发出 ZNS 不认识的 API 格式 +* **场景B**:ZNS 升级了,Cloud 没升级 — Cloud 用旧格式调新 API,参数缺失或语义变化 +* **场景C**:运行中 ZNS 被升级/降级 — Cloud 缓存的版本信息过期 + +=== 设计思路 + +.... +1. 每个 API 独立版本 + 不是给 ZNS 一个整体版本号,而是给每个 API 独立的版本号。 + ZNS 一年 2-3 个版本,但不是每个 API 都会变。 + +2. ZNS 是自己能力的真相源 + 每个 API 通过 HTTP OPTIONS 方法声明自己支持哪些版本。 + ZNS 各 API 各管各的版本,不集中到一个大接口里。 + +3. Cloud 通过 HTTP Header 声明自己发送的版本 + 每次请求带 X-Api-Version header,ZNS 可据此选择处理逻辑。 +.... + +=== 版本模型 + +==== 每个 API 有独立版本 + +.... +API 路径 + 方法 Cloud 发送的版本 ZNS 支持的版本 +────────────────────────────────────── ──────────────── ─────────────── +POST /zns/api/v1/segments 1.1 [1.0, 1.1] +PATCH /zns/api/v1/segments/{uuid} 1.1 [1.0, 1.1, 1.2] +DELETE /zns/api/v1/segments 1.0 [1.0] +GET /zns/api/v1/segments 1.1 [1.0, 1.1] +POST /zns/api/v1/segments/{id}/ports 1.0 [1.0, 1.1] +PATCH /zns/api/v1/segments/{id}/ports 1.1 [1.0, 1.1] +DELETE /zns/api/v1/segments/{id}/ports 1.0 [1.0] +.... + +* *Cloud 侧*:每个 API 有一个确定的版本,表示"我发出去的请求是什么格式" +* *ZNS 侧*:每个 API 支持一组版本,表示"我能理解哪些格式" +* *兼容条件*:Cloud 发送的版本 ∈ ZNS 支持的版本集合 + +==== API 版本变更举例 + +.... +ZNS v1.0 发布: + PATCH /segments 支持 [1.0] + POST /ports 支持 [1.0] + +ZNS v1.1 发布(PATCH segment 新增 mtu 字段): + PATCH /segments 支持 [1.0, 1.1] ← 新增 1.1,但仍兼容 1.0 + POST /ports 支持 [1.0] ← 没变 + +ZNS v1.2 发布(PATCH segment 删除了某个旧字段): + PATCH /segments 支持 [1.1, 1.2] ← 不再支持 1.0 + POST /ports 支持 [1.0, 1.1] ← 新增 1.1 +.... + +=== 版本查询:HTTP OPTIONS 方法 + +每个 API 路径通过标准的 HTTP OPTIONS 方法返回自己支持的版本。 + +.... +Cloud ZNS + │ │ + │ OPTIONS /zns/api/v1/segments │ + │───────────────────────────────────────────────────►│ + │ │ + │ ◄── 204 No Content │ + │ Headers: │ + │ Allow: GET, POST, DELETE │ ← 标准头 + │ X-Api-Versions: POST=1.0,1.1; │ ← 自定义头 + │ DELETE=1.0; │ + │ GET=1.0,1.1 │ + │ │ + │ OPTIONS /zns/api/v1/segments/{uuid} │ + │───────────────────────────────────────────────────►│ + │ │ + │ ◄── 204 No Content │ + │ Headers: │ + │ Allow: GET, PATCH │ + │ X-Api-Versions: PATCH=1.0,1.1,1.2; │ + │ GET=1.0,1.1 │ + │ │ +.... + +`X-Api-Versions` Header 格式: +.... +X-Api-Versions: {METHOD1}={ver1},{ver2};{METHOD2}={ver1},{ver2} + +示例:POST=1.0,1.1;DELETE=1.0;GET=1.0,1.1 +.... + +=== 版本声明:X-Api-Version 请求头 + +Cloud 每次发送 API 请求时,通过 Header 声明自己发送的是哪个版本的格式: + +.... +Cloud ZNS + │ │ + │ PATCH /zns/api/v1/segments/{uuid} │ + │ Headers: │ + │ X-Api-Version: 1.1 ← 声明版本 │ + │ Content-Type: application/json │ + │ x-web-hook: ... │ + │ x-job-uuid: ... │ + │ Body: │ + │ { "name": "...", "mtu": 9000 } ← 1.1 格式 │ + │───────────────────────────────────────────────────►│ + │ │ + │ ZNS 收到请求: │ + │ 1. 检查 X-Api-Version = 1.1 │ + │ 2. PATCH segments 支持 1.1? → 用 1.1 处理逻辑 │ + │ 不支持? → 返回 400 │ + │ │ +.... + +==== ZNS 处理不支持的版本 + +.... +ZNS 返回: + HTTP 400 Bad Request + { + "error": "unsupported_api_version", + "message": "PATCH /segments does not support version 1.3", + "supported_versions": ["1.0", "1.1", "1.2"] + } +.... + +==== ZNS 处理没有版本 Header 的请求(兼容旧版 Cloud) + +没有 `X-Api-Version` header 时,ZNS 按该 API 支持的最低版本处理,确保旧版 Cloud 仍能正常使用。 + +=== 版本检查时机 + +.... +核心原则: + 不在每次 API 调用前询问 ZNS(会导致每次操作延迟翻倍) + 而是在 3 个时机批量拉取版本信息,缓存在内存中 + + ZNS 版本一年才变 2-3 次,变版本必然有运维动作(升级), + 升级后通常会触发 reconnect。Ping 间隔内版本突然变化的概率极低。 +.... + +[cols="2,3,3"] +|=== +|时机 |触发条件 |行为 + +|添加控制器(preInit) +|用户首次添加 ZNS 控制器到 Cloud +|对每个 API 路径发 OPTIONS → 检查兼容性 → 缓存。不兼容则拒绝添加 + +|重连控制器(reconnect) +|管理员手动触发重连,或网络恢复后自动重连 +|清除旧缓存 → 重新发 OPTIONS → 检查 → 缓存。不兼容则重连失败 + +|心跳探活(ping) +|Cloud 定时 Ping ZNS +|对每个 API 路径发 OPTIONS → 与缓存对比。版本变化 → 刷新缓存 → 重新检查。不兼容 → Ping 失败 → 标记 Disconnected + +|=== + +=== 双层防御 + +版本兼容性在两个层面保证: + +.... +第 1 层: Cloud 提前检查(发请求之前) + Cloud 在 preInit/reconnect/ping 时通过 OPTIONS 拉取版本 + 缓存到内存,每次发请求前本地查缓存 + 不兼容 → 不发请求,直接报错或降级 + 作用: 避免发出注定失败的请求 + +第 2 层: ZNS 兜底校验(收到请求时) + ZNS 收到请求后检查 X-Api-Version header + 不支持 → 返回 400 + supported_versions + 作用: 即使 Cloud 缓存过期,ZNS 也能拒绝不兼容的请求 +.... + +=== 不兼容时的处理策略 + +不同 API 不兼容时,处理方式不同: + +[cols="3,1,3"] +|=== +|API (路径 + 方法) |重要性 |不兼容时行为 + +|POST /segments(创建网络) +|关键 +|阻断: 拒绝添加/重连控制器 + +|DELETE /segments(删除网络) +|关键 +|阻断 + +|POST /segments/{id}/ports(创建端口) +|关键 +|阻断 + +|DELETE /segments/{id}/ports(删除端口) +|关键 +|阻断 + +|GET /segments(列表,对账用) +|关键 +|阻断 + +|GET /segments/{id}/ports(列表,对账用) +|关键 +|阻断 + +|PATCH /segments/{uuid}(更新 mtu 等) +|非关键 +|降级: 跳过 + 打印告警日志 + +|PATCH /segments/{id}/ports/{id}(更新端口) +|非关键 +|降级: 跳过 + 打印告警日志 + +|=== + +=== 兼容旧版 + +==== Cloud 遇到旧版 ZNS(不支持 OPTIONS 版本响应) + +如果 OPTIONS 返回 404 或 204 但没有 `X-Api-Versions` header,Cloud 假设所有 API 只支持 `["1.0"]`。 + +==== ZNS 遇到旧版 Cloud(不带 X-Api-Version header) + +没有 `X-Api-Version` header 时,ZNS 按最低支持版本处理。 + +=== 错误信息设计 + +==== Cloud 新,ZNS 旧 + +.... +ZNS controller [192.168.1.10] does not support the following APIs +required by this Cloud version: + - PATCH /segments: Cloud sends v1.1, ZNS supports [1.0] + - POST /ports: Cloud sends v1.1, ZNS supports [1.0] +Please upgrade ZNS to a compatible version. +.... + +==== ZNS 新,Cloud 旧 + +.... +This Cloud version is not compatible with ZNS [192.168.1.10]: + - PATCH /segments: Cloud sends v1.0, ZNS supports [1.1, 1.2] (v1.0 dropped) +Please upgrade Cloud to a compatible version. +.... + +==== 非关键 API 降级 + +.... +WARN: ZNS [192.168.1.10] does not support PATCH /segments v1.1 +(ZNS supports [1.0]). MTU sync will be skipped. +This does not affect core network operations. Upgrade ZNS to enable MTU sync. +.... + +=== 版本维护规范 + +==== 什么时候需要升版本 + +需要升版本: + +* 请求体新增必填字段 +* 请求体删除字段 +* 字段类型变化(string → int) +* 字段语义变化(单位从 MB 变成 KB) +* 响应体结构变化(影响 Cloud 解析) + +不需要升版本: + +* 请求体新增可选字段(ZNS 忽略未知字段即可) +* 纯内部实现变化,接口不变 +* 性能优化,接口不变 + +==== ZNS 的向后兼容策略 + +建议每个 API 至少兼容前 2 个版本。 + +.... +示例: PATCH /segments + v1.2 发布时 → supported: [1.0, 1.1, 1.2] (兼容 3 个版本) + v1.3 发布时 → supported: [1.1, 1.2, 1.3] (下线 1.0) + +这样可以给 Cloud 升级留出足够的时间窗口。 +.... + +=== 双方职责总结 + +==== ZNS 侧 + +. 每个 API 路径实现 OPTIONS 方法,返回 `Allow` + `X-Api-Versions` header +. 收到请求时检查 `X-Api-Version` header:支持则用对应版本处理;不支持则返回 400;缺失则按最低版本处理 +. 每次 API 格式变化时在该 API 的 OPTIONS 响应中新增版本号,保留旧版本兼容 +. 新增 API 时实现 OPTIONS,初始版本为 `1.0` + +==== Cloud 侧 + +. 维护 `CLOUD_API_VERSIONS` 表,记录当前发出的每个 API 的格式版本 +. 在 preInit、reconnect、ping 三个时机通过 OPTIONS 拉取版本并缓存 +. 每次发请求带上 `X-Api-Version` header +. 每次修改 API 请求体格式时同步更新版本号 +. 标记每个 API 的重要性(关键/非关键),决定不兼容时是阻断还是降级 diff --git a/docs/modules/network/pages/networkResource/networkResource.adoc b/docs/modules/network/pages/networkResource/networkResource.adoc index 3b567e4eb66..382c3b4d733 100644 --- a/docs/modules/network/pages/networkResource/networkResource.adoc +++ b/docs/modules/network/pages/networkResource/networkResource.adoc @@ -3,4 +3,5 @@ * xref:networkResource/L2Network.adoc[] * xref:networkResource/L3Network.adoc[] * xref:networkResource/l3Ipam.adoc[] -* xref:networkResource/VpcRouter.adoc[] \ No newline at end of file +* xref:networkResource/VpcRouter.adoc[] +* xref:networkResource/ZnsIntegration.adoc[] diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkConstant.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkConstant.java index e72b0b91396..f0b2dd42194 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkConstant.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkConstant.java @@ -22,6 +22,8 @@ public interface L2NetworkConstant { public static final String HARDWARE_VXLAN_NETWORK_TYPE = "HardwareVxlanNetwork"; public static final String L2_TF_NETWORK_TYPE = "TfL2Network"; @PythonClass + public static final String L2_GENEVE_NETWORK_TYPE = "L2GeneveNetwork"; + @PythonClass public static final String VXLAN_NETWORK_TYPE = "VxlanNetwork"; @PythonClass public static final String VXLAN_NETWORK_POOL_TYPE = "VxlanNetworkPool"; @@ -37,7 +39,11 @@ public interface L2NetworkConstant { @PythonClass public static final String VSWITCH_TYPE_OVN_DPDK = "OvnDpdk"; + @PythonClass + public static final String VSWITCH_TYPE_ZNS = "ZNS"; public static final String OVN_DPDK_VNIC_SRC_PATH = "/var/run/openvswitch/"; + public static final String ACCEL_TYPE_VDPA = "vDPA"; + public static final String ACCEL_TYPE_VHOST_USER_SPACE = "dpdkvhostuserclient"; public static final String DETACH_L2NETWORK_CODE = "l2Network.detach"; diff --git a/header/src/main/java/org/zstack/header/network/l3/AfterSetL3NetworkMtuExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/AfterSetL3NetworkMtuExtensionPoint.java new file mode 100644 index 00000000000..c884c697b00 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/AfterSetL3NetworkMtuExtensionPoint.java @@ -0,0 +1,7 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.core.Completion; + +public interface AfterSetL3NetworkMtuExtensionPoint { + void afterSetL3NetworkMtu(L3NetworkInventory l3, int mtu, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/network/l3/AfterUpdateIpRangeExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/AfterUpdateIpRangeExtensionPoint.java new file mode 100644 index 00000000000..d29e30ac614 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/AfterUpdateIpRangeExtensionPoint.java @@ -0,0 +1,5 @@ +package org.zstack.header.network.l3; + +public interface AfterUpdateIpRangeExtensionPoint { + void afterUpdateIpRange(IpRangeInventory oldIpRange, IpRangeInventory newIpRange); +} diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkInventory.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkInventory.java index f1662f6421f..b40295ea289 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkInventory.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkInventory.java @@ -423,6 +423,9 @@ public boolean enableIpAddressAllocation() { } if (!getType().equals(L3NetworkConstant.L3_BASIC_NETWORK_TYPE)) { + if (L3NetworkType.hasType(getType())) { + return L3NetworkType.valueOf(getType()).isIpAddressAllocationEnabled(); + } return true; } diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkType.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkType.java index b60fbb45969..e759a88b57c 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkType.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkType.java @@ -6,6 +6,7 @@ public class L3NetworkType { private static Map types = Collections.synchronizedMap(new HashMap()); private final String typeName; private boolean exposed = true; + private boolean ipAddressAllocationEnabled = true; public L3NetworkType(String typeName) { this.typeName = typeName; @@ -25,6 +26,14 @@ public void setExposed(boolean exposed) { this.exposed = exposed; } + public boolean isIpAddressAllocationEnabled() { + return ipAddressAllocationEnabled; + } + + public void setIpAddressAllocationEnabled(boolean ipAddressAllocationEnabled) { + this.ipAddressAllocationEnabled = ipAddressAllocationEnabled; + } + public static boolean hasType(String typeName) { return types.containsKey(typeName); } diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkVO.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkVO.java index 0df379851dd..0ea342bd7a5 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkVO.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkVO.java @@ -115,6 +115,9 @@ public boolean enableIpAddressAllocation() { } if (!getType().equals(L3NetworkConstant.L3_BASIC_NETWORK_TYPE)) { + if (L3NetworkType.hasType(getType())) { + return L3NetworkType.valueOf(getType()).isIpAddressAllocationEnabled(); + } return true; } diff --git a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerConstant.java b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerConstant.java index b6a6ddbe6ad..6077e352049 100644 --- a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerConstant.java +++ b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerConstant.java @@ -18,6 +18,8 @@ public class SdnControllerConstant { public static final String SERVICE_ID = "SdnController"; + public static final String ALLOCATED_IPS_ON_START = "allocatedIpsOnStart"; + public static final String H3C_VCFC_CONTROLLER = "H3C VCFC"; public static final String H3C_VCFC_VENDOR_VERSION_V1 = DEFAULT_VENDOR_VERSION; diff --git a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerInventory.java b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerInventory.java index 9f364f79136..6ef36180827 100644 --- a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerInventory.java +++ b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerInventory.java @@ -1,7 +1,9 @@ package org.zstack.header.network.sdncontroller; import org.zstack.header.configuration.PythonClassInventory; +import org.zstack.header.log.NoLogging; import org.zstack.header.search.Inventory; +import org.zstack.header.search.TypeField; import java.io.Serializable; import java.sql.Timestamp; @@ -13,12 +15,14 @@ @PythonClassInventory public class SdnControllerInventory implements Serializable { private String uuid; + @TypeField private String vendorType; private String vendorVersion; private String name; private String description; private String ip; private String username; + @NoLogging private String password; private SdnControllerStatus status; private List hostRefs; diff --git a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerStatusEvent.java b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerStatusEvent.java new file mode 100644 index 00000000000..d9046427ec0 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerStatusEvent.java @@ -0,0 +1,11 @@ +package org.zstack.header.network.sdncontroller; + +public enum SdnControllerStatusEvent { + RECONNECT_STARTED, + RECONNECT_SUCCESS, + RECONNECT_FAILED, + PING_FAILED, + INIT_SYNC_STARTED, + INIT_SYNC_SUCCESS, + INIT_SYNC_FAILED +} diff --git a/header/src/main/java/org/zstack/header/vm/AfterAllocateSdnNicExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterAllocateSdnNicExtensionPoint.java new file mode 100644 index 00000000000..fac3cddf27b --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/AfterAllocateSdnNicExtensionPoint.java @@ -0,0 +1,77 @@ +package org.zstack.header.vm; + +import org.zstack.header.core.Completion; + +import java.util.List; + +/** + * Extension point called after VmNicVO is persisted and non-SDN NIC IPs have + * been allocated (i.e. after VmAllocateNicIpFlow), but before the VM is + * instantiated on the hypervisor. + * + * Implementations should: + * 1. Filter NICs that belong to SDN-managed L2 networks (via VSwitchType). + * 2. Send REST API calls to the SDN controller to create ports (e.g. + * OVN logical switch ports, ZNS segment ports). + * 3. For controllers that return IP addresses (e.g. ZNS), write the + * returned IPs back into UsedIpVO and VmNicVO. + * + * If the implementation fails, VmAllocateSdnNicFlow will trigger a rollback + * via {@link #rollbackSdnNic}. + */ +public interface AfterAllocateSdnNicExtensionPoint { + /** + * Create SDN ports for the given NICs. + * + * @param spec the VM instance spec + * @param nics all NICs from spec.getDestNics() — implementation filters SDN NICs internally + * @param completion success/fail callback + */ + void afterAllocateSdnNic(VmInstanceSpec spec, List nics, Completion completion); + + /** + * Rollback: remove SDN ports and clean up any IPs allocated by the SDN controller. + * + * @param spec the VM instance spec + * @param nics all NICs from spec.getDestNics() + * @param completion success/fail callback (best-effort — failures should be logged but not block rollback) + */ + void rollbackSdnNic(VmInstanceSpec spec, List nics, Completion completion); + + /** + * Release SDN ports for NICs being detached or destroyed. + * Used by VmDetachNicFlow and VmReturnReleaseNicFlow. + * + * @param nics NICs to release (implementation filters SDN NICs internally) + * @param completion success/fail callback (best-effort) + */ + void releaseSdnNics(List nics, Completion completion); + + /** + * Expunge SDN ports for NICs whose VM is being permanently deleted. + * + * Unlike destroy/detach cleanup, expunge may fail the VM expunge workflow + * so the local VM/NIC records remain available for a later retry instead + * of leaving orphaned external SDN ports. + * + * @param nics NICs to expunge (implementation filters SDN NICs internally) + * @param completion success/fail callback + */ + default void expungeSdnNics(List nics, Completion completion) { + releaseSdnNics(nics, completion); + } + + /** + * Release IP only for NICs whose VM is being destroyed but NIC VO is retained (Recover policy). + * The segment port itself is kept; only the IP binding is released so the port can be + * re-assigned an IP when the VM starts again after recovery. + * + * Default is a no-op; only SDN controllers that manage IP allocation (e.g. ZNS) override this. + * + * @param nics NICs to release IP from (implementation filters SDN NICs internally) + * @param completion success/fail callback (best-effort) + */ + default void releaseNicIps(List nics, Completion completion) { + completion.success(); + } +} diff --git a/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java new file mode 100644 index 00000000000..0afba727a42 --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java @@ -0,0 +1,19 @@ +package org.zstack.header.vm; + +import org.zstack.header.core.Completion; + +/** + * Extension point called after IP address(es) have been successfully allocated + * and flushed to the database for VmNics in VmAllocateNicIpFlow. + * + * At the time this fires: + * - VmNicVO rows exist in the database (created by VmAllocateNicFlow) + * - UsedIpVO rows are committed (allocated by VmAllocateNicIpFlow) + * - spec.getDestNics() contains up-to-date NIC inventories with IP info + * + * If the implementation fails, the flow chain rolls back: + * VmAllocateNicIpFlow.rollback (returns IPs) → VmAllocateNicFlow.rollback (deletes NICs). + */ +public interface AfterAllocateVmNicIpExtensionPoint { + void afterAllocateVmNicIp(VmInstanceSpec spec, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java new file mode 100644 index 00000000000..102114111ca --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java @@ -0,0 +1,12 @@ +package org.zstack.header.vm; + +import org.zstack.header.core.Completion; + +/** + * Extension point called after a VmNic has been deleted from the database. + * Implementations perform post-deletion cleanup (e.g., deleting SDN segment ports). + * Cloud DB deletion must succeed before this extension point is invoked. + */ +public interface AfterReleaseVmNicExtensionPoint { + void afterReleaseVmNic(VmNicInventory nic, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/vm/AfterUpdateVmNicMacExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterUpdateVmNicMacExtensionPoint.java new file mode 100644 index 00000000000..f07b9dcb8e6 --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/AfterUpdateVmNicMacExtensionPoint.java @@ -0,0 +1,5 @@ +package org.zstack.header.vm; + +public interface AfterUpdateVmNicMacExtensionPoint { + void afterUpdateVmNicMac(VmNicInventory nic, String oldMac, String newMac); +} diff --git a/header/src/main/java/org/zstack/header/vm/BeforeAllocateVmNicExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/BeforeAllocateVmNicExtensionPoint.java new file mode 100644 index 00000000000..f354a9d2521 --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/BeforeAllocateVmNicExtensionPoint.java @@ -0,0 +1,14 @@ +package org.zstack.header.vm; + +import org.zstack.header.core.Completion; + +/** + * Extension point called after a VmNic is persisted but before it is fully configured + * in VmAllocateNicFlow. The VmNicVO (and its ResourceVO) already exists in the database, + * so implementations may safely create SystemTags referencing the NIC UUID. + * If the implementation fails, the NIC will be cleaned up during flow rollback. + * Use case: create SDN segment ports and save port-UUID system tags for the NIC. + */ +public interface BeforeAllocateVmNicExtensionPoint { + void beforeAllocateVmNic(VmNicInventory nic, VmInstanceSpec spec, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java b/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java index fec2e4f1b51..61cfe494fab 100755 --- a/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java +++ b/header/src/main/java/org/zstack/header/vm/VmInstanceConstant.java @@ -18,6 +18,8 @@ public interface VmInstanceConstant { String KVM_HYPERVISOR_TYPE = "KVM"; String VIRTUAL_NIC_TYPE = "VNIC"; + String ZNS_NIC_MODE_DPDK = "dpdk"; + String ZNS_NIC_MODE_KERNEL = "kernel"; String VM_SYNC_SIGNATURE_PREFIX = "Vm-"; diff --git a/header/src/main/java/org/zstack/header/vm/VmInstanceNicFactory.java b/header/src/main/java/org/zstack/header/vm/VmInstanceNicFactory.java index 44ce4a8831e..690c30cf46d 100755 --- a/header/src/main/java/org/zstack/header/vm/VmInstanceNicFactory.java +++ b/header/src/main/java/org/zstack/header/vm/VmInstanceNicFactory.java @@ -1,5 +1,6 @@ package org.zstack.header.vm; +import org.zstack.header.core.Completion; import org.zstack.header.network.l2.VSwitchType; import org.zstack.header.network.l3.UsedIpInventory; diff --git a/header/src/main/java/org/zstack/header/vm/VmNicInventory.java b/header/src/main/java/org/zstack/header/vm/VmNicInventory.java index 5ce7ef4a8eb..cacd1af1ac4 100755 --- a/header/src/main/java/org/zstack/header/vm/VmNicInventory.java +++ b/header/src/main/java/org/zstack/header/vm/VmNicInventory.java @@ -40,6 +40,8 @@ public class VmNicInventory implements Serializable { @Deprecated private Integer ipVersion; private String driverType; + @APINoSee + private String interfaceId; private List usedIps; private String internalName; private Integer deviceId; @@ -223,6 +225,14 @@ public void setDriverType(String driverType) { this.driverType = driverType; } + public String getInterfaceId() { + return interfaceId; + } + + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + public String getType() { return type; } diff --git a/header/src/main/java/org/zstack/header/vm/VmNicLifecycleContext.java b/header/src/main/java/org/zstack/header/vm/VmNicLifecycleContext.java new file mode 100644 index 00000000000..3300b17e33a --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/VmNicLifecycleContext.java @@ -0,0 +1,60 @@ +package org.zstack.header.vm; + +import org.zstack.header.vm.VmInstanceConstant.VmOperation; + +import java.util.Objects; + +public class VmNicLifecycleContext { + private VmOperation operation; + private String vmUuid; + private String srcHostUuid; + private String destHostUuid; + private String lastHostUuid; + + public VmOperation getOperation() { + return operation; + } + + public void setOperation(VmOperation operation) { + this.operation = operation; + } + + public String getVmUuid() { + return vmUuid; + } + + public void setVmUuid(String vmUuid) { + this.vmUuid = vmUuid; + } + + public String getSrcHostUuid() { + return srcHostUuid; + } + + public void setSrcHostUuid(String srcHostUuid) { + this.srcHostUuid = srcHostUuid; + } + + public String getDestHostUuid() { + return destHostUuid; + } + + public void setDestHostUuid(String destHostUuid) { + this.destHostUuid = destHostUuid; + } + + public String getLastHostUuid() { + return lastHostUuid; + } + + public void setLastHostUuid(String lastHostUuid) { + this.lastHostUuid = lastHostUuid; + } + + public boolean isStartWithChangedHost() { + return operation == VmOperation.Start + && lastHostUuid != null + && destHostUuid != null + && !Objects.equals(lastHostUuid, destHostUuid); + } +} diff --git a/header/src/main/java/org/zstack/header/vm/VmNicLifecycleExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/VmNicLifecycleExtensionPoint.java new file mode 100644 index 00000000000..a90b790366d --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/VmNicLifecycleExtensionPoint.java @@ -0,0 +1,121 @@ +package org.zstack.header.vm; + +import org.zstack.header.core.Completion; +import org.zstack.header.core.NoErrorCompletion; + +import java.util.List; + +/** + * Extension point for managing the lifecycle of VM NICs on hosts. + * Implementations are invoked during VM start, stop, migration, NIC attach/detach, + * and periodic reconciliation driven by KVM heartbeat. + * + *

All async methods must invoke their completion callback exactly once, + * even on error paths. {@link Completion}-based methods may fail the operation; + * {@link NoErrorCompletion}-based methods must always succeed (log and absorb errors). + */ +public interface VmNicLifecycleExtensionPoint { + + /** + * Returns true if this extension should manage the given NIC. + * Called synchronously; must not block or throw checked exceptions. + * + * @param nic the NIC to evaluate + * @return true if this extension handles the NIC + */ + boolean isApplicable(VmNicInventory nic); + + /** + * Called when a VM starts or a NIC is attached to a running VM. + * Failure aborts the VM start / NIC attach operation. + * + * @param hostUuid UUID of the host where the VM is starting + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code success()} or {@code fail()} exactly once + */ + void setupOnHost(String hostUuid, List nics, Completion completion); + + default void setupOnHost(VmNicLifecycleContext context, String hostUuid, + List nics, Completion completion) { + setupOnHost(hostUuid, nics, completion); + } + + /** + * Called when a VM stops or a NIC is detached. Errors are logged but do not + * block the operation. + * + * @param hostUuid UUID of the host the VM is leaving + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code done()} exactly once + */ + void cleanupFromHost(String hostUuid, List nics, NoErrorCompletion completion); + + /** + * Called before live migration starts. Default: setup on destination host. + * Failure aborts the migration. + * Execution order: preMigrate → (live migration) → postMigrate or failedMigrate. + * + * @param srcHostUuid UUID of the source host + * @param destHostUuid UUID of the destination host + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code success()} or {@code fail()} exactly once + */ + default void preMigrate(String srcHostUuid, String destHostUuid, + List nics, Completion completion) { + setupOnHost(destHostUuid, nics, completion); + } + + /** + * Called after live migration succeeds. Errors are logged but do not block. + * + * @param srcHostUuid UUID of the source host + * @param destHostUuid UUID of the destination host + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code done()} exactly once + */ + default void postMigrate(String srcHostUuid, String destHostUuid, + List nics, NoErrorCompletion completion) { + cleanupFromHost(srcHostUuid, nics, completion); + } + + /** + * Called when live migration fails. Errors are logged but do not block. + * + * @param srcHostUuid UUID of the source host + * @param destHostUuid UUID of the destination host (where partial setup may exist) + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code done()} exactly once + */ + default void failedMigrate(String srcHostUuid, String destHostUuid, + List nics, NoErrorCompletion completion) { + cleanupFromHost(destHostUuid, nics, completion); + } + + /** + * Called on VM start when the VM's last known host differs from the destination host. + * Used to clean up state left on the previous host after an ungraceful shutdown. + * Errors are logged but do not block. + * + * @param lastHostUuid UUID of the host where the VM last ran + * @param nics NICs filtered by {@link #isApplicable} + * @param completion call {@code done()} exactly once + */ + default void cleanupStaleResource(String lastHostUuid, List nics, + NoErrorCompletion completion) { + cleanupFromHost(lastHostUuid, nics, completion); + } + + /** + * Called periodically on each successful KVM heartbeat to reconcile NIC state. + * Implementations should ensure remote systems match the expected state in {@code expectedNics}. + * Errors are logged but do not block the heartbeat. + * + * @param hostUuid UUID of the host being reconciled + * @param expectedNics all Running-VM NICs on this host, filtered by {@link #isApplicable} + * @param completion call {@code done()} exactly once + */ + default void reconcileOnHost(String hostUuid, List expectedNics, + NoErrorCompletion completion) { + completion.done(); + } +} diff --git a/header/src/main/java/org/zstack/header/vm/VmOvsNicConstant.java b/header/src/main/java/org/zstack/header/vm/VmOvsNicConstant.java deleted file mode 100644 index 964a41e8861..00000000000 --- a/header/src/main/java/org/zstack/header/vm/VmOvsNicConstant.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.zstack.header.vm; - -import org.zstack.header.configuration.PythonClass; - -@PythonClass -public class VmOvsNicConstant { - public static final String ACCEL_TYPE_VDPA = "vDPA"; - public static final String ACCEL_TYPE_VHOST_USER_SPACE = "dpdkvhostuserclient"; -} diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java index 40786eb7b2e..29f0a245f19 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java @@ -80,7 +80,9 @@ private void validate(final APIAttachL2NetworkToClusterMsg msg) { /* current ovs only support vlan, vxlan*/ L2NetworkVO l2 = dbf.findByUuid(msg.getL2NetworkUuid(), L2NetworkVO.class); - if (!StringUtils.isEmpty(l2.getPhysicalInterface())) { + // ZNS L2 networks are managed by SDN controller, physicalInterface is irrelevant + if (!L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(l2.getvSwitchType()) + && !StringUtils.isEmpty(l2.getPhysicalInterface())) { /* find l2 network with same physical interface, but different vswitch Type */ List otherL2s = Q.New(L2NetworkVO.class).select(L2NetworkVO_.uuid) .eq(L2NetworkVO_.physicalInterface, l2.getPhysicalInterface()) @@ -113,6 +115,13 @@ private void validate(APIDeleteL2NetworkMsg msg) { } } + private boolean hasSdnControllerTag(List systemTags) { + if (systemTags == null || systemTags.isEmpty()) { + return false; + } + return systemTags.stream().anyMatch(tag -> tag.startsWith(L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN + "::")); + } + private void validate(APICreateL2NetworkMsg msg) { if (!L2NetworkType.hasType(msg.getType())) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10011, "unsupported l2Network type[%s]", msg.getType())); @@ -124,8 +133,11 @@ private void validate(APICreateL2NetworkMsg msg) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10012, "unsupported vSwitch type[%s]", msg.getvSwitchType())); } + msg.setPhysicalInterface(StringUtils.trimToNull(msg.getPhysicalInterface())); + if (L2NetworkConstant.VSWITCH_TYPE_LINUX_BRIDGE.equals(msg.getvSwitchType()) - && (msg.getPhysicalInterface() == null || msg.getPhysicalInterface().trim().isEmpty())) { + && msg.getPhysicalInterface() == null + && !hasSdnControllerTag(msg.getSystemTags())) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10021, "physicalInterface is required when vSwitchType is [%s]", msg.getvSwitchType())); } @@ -133,26 +145,45 @@ private void validate(APICreateL2NetworkMsg msg) { private void validate(APIChangeL2NetworkVlanIdMsg msg) { L2NetworkVO l2 = dbf.findByUuid(msg.getL2NetworkUuid(), L2NetworkVO.class); - l2.getAttachedClusterRefs().forEach(ref -> { - if (Q.New(HostVO.class).eq(HostVO_.clusterUuid, ref.getClusterUuid()) - .notEq(HostVO_.status, HostStatus.Connected).isExists()) { - throw new ApiMessageInterceptionException(operr(ORG_ZSTACK_NETWORK_L2_10013, "cannot change vlan for l2Network[uuid:%s]" + - " because there are hosts status in Connecting or Disconnected", l2.getUuid())); - } - if (!Q.New(ClusterVO.class).eq(ClusterVO_.uuid, ref.getClusterUuid()) - .eq(ClusterVO_.hypervisorType, L2NetworkConstant.KVM_HYPERVISOR_TYPE).isExists()) { - throw new ApiMessageInterceptionException(operr(ORG_ZSTACK_NETWORK_L2_10014, "cannot change vlan for l2Network[uuid:%s]" + - " because it only supports an L2Network that is exclusively attached to a kvm cluster", l2.getUuid())); - } - }); + if (!L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(l2.getvSwitchType())) { + l2.getAttachedClusterRefs().forEach(ref -> { + if (Q.New(HostVO.class).eq(HostVO_.clusterUuid, ref.getClusterUuid()) + .notEq(HostVO_.status, HostStatus.Connected).isExists()) { + throw new ApiMessageInterceptionException(operr(ORG_ZSTACK_NETWORK_L2_10013, "cannot change vlan for l2Network[uuid:%s]" + + " because there are hosts status in Connecting or Disconnected", l2.getUuid())); + } + if (!Q.New(ClusterVO.class).eq(ClusterVO_.uuid, ref.getClusterUuid()) + .eq(ClusterVO_.hypervisorType, L2NetworkConstant.KVM_HYPERVISOR_TYPE).isExists()) { + throw new ApiMessageInterceptionException(operr(ORG_ZSTACK_NETWORK_L2_10014, "cannot change vlan for l2Network[uuid:%s]" + + " because it only supports an L2Network that is exclusively attached to a kvm cluster", l2.getUuid())); + } + }); + } // pvlan isolated not support change vlan if (l2.getIsolated()) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10015, "cannot change vlan for l2Network[uuid:%s]" + " because this l2Network is isolated", l2.getUuid())); } + String targetType = StringUtils.trimToNull(msg.getType()); + msg.setType(targetType); + // When type is not specified (or blank), default to the current network type. + if (targetType == null) { + targetType = l2.getType(); + msg.setType(targetType); + } + + boolean targetIsVlan = L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(targetType); + boolean targetIsNoVlan = L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(targetType); + boolean targetIsGeneve = L2NetworkConstant.L2_GENEVE_NETWORK_TYPE.equals(targetType); + boolean targetIsVxlan = L2NetworkConstant.VXLAN_NETWORK_TYPE.equals(targetType); + if (!targetIsVlan && !targetIsNoVlan && !targetIsGeneve && !targetIsVxlan) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10021, + "unsupported l2Network type[%s] for ChangeL2NetworkVlanId", targetType)); + } + String sdnControllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID .getTokenByResourceUuid(msg.getL2NetworkUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (msg.getType().equals(L2NetworkConstant.L2_VLAN_NETWORK_TYPE)) { + if (targetIsVlan) { if (msg.getVlan() == null) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10016, "vlan is required for " + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); @@ -163,7 +194,9 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { List attachedClusters = l2.getAttachedClusterRefs().stream() .map(L2NetworkClusterRefVO::getClusterUuid).collect(Collectors.toList()); List l2s; - if (sdnControllerUuid == null) { + if (attachedClusters.isEmpty()) { + l2s = java.util.Collections.emptyList(); + } else if (sdnControllerUuid == null) { l2s = SQL.New("select l2" + " from L2NetworkVO l2, L2NetworkClusterRefVO ref" + " where l2.uuid = ref.l2NetworkUuid" + @@ -196,7 +229,7 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10018, "There has been a l2Network attached to cluster with virtual network id[%s] and physical interface[%s]. Failed to change L2 network[uuid:%s]", msg.getVlan(), l2.getPhysicalInterface(), l2.getUuid())); } - } else if (msg.getType().equals(L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE)) { + } else if (targetIsNoVlan) { if (msg.getVlan() != null) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10019, "vlan is not allowed for " + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); @@ -204,7 +237,9 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { List attachedClusters = l2.getAttachedClusterRefs().stream() .map(L2NetworkClusterRefVO::getClusterUuid).collect(Collectors.toList()); List l2s; - if (sdnControllerUuid != null) { + if (attachedClusters.isEmpty()) { + l2s = java.util.Collections.emptyList(); + } else if (sdnControllerUuid != null) { l2s = SQL.New("select l2" + " from L2NetworkVO l2, L2NetworkClusterRefVO ref, SystemTagVO tag" + " where l2.uuid = ref.l2NetworkUuid" + @@ -233,6 +268,15 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10020, "There has been a l2Network attached to cluster that has physical interface[%s]. Failed to change l2Network[uuid:%s]", l2.getPhysicalInterface(), l2.getUuid())); } + } else if (targetIsGeneve) { + if (msg.getVlan() == null) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10016, "vni is required for " + + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); + } + if (msg.getVlan() < 1 || msg.getVlan() > 16777215) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10017, "invalid vni[%d] for " + + "ChangeL2NetworkVlanId, must be between 1 and 16777215", msg.getVlan())); + } } } } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java b/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java index fa864bafaf2..b1eecae4d5e 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java @@ -53,6 +53,20 @@ public void run(L2NetworkDeleteExtensionPoint arg) { }); } + public void beforeUpdate(final L2NetworkInventory inv) { + for (L2NetworkUpdateExtensionPoint ext : updateExtensions) { + try { + ext.beforeChangeL2NetworkVlanId(inv); + } catch (RuntimeException e) { + // propagate validation failures and other runtime exceptions immediately + throw e; + } catch (Exception e) { + logger.warn(String.format("unhandled exception in L2NetworkUpdateExtensionPoint.beforeChangeL2NetworkVlanId of %s", + ext.getClass().getCanonicalName()), e); + } + } + } + public void afterUpdate(final L2NetworkInventory inv) { CollectionUtils.safeForEach(updateExtensions, arg -> arg.afterChangeL2NetworkVlanId(inv)); } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkHostHelper.java b/network/src/main/java/org/zstack/network/l2/L2NetworkHostHelper.java index a612b3847c5..0136649f4bf 100644 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkHostHelper.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkHostHelper.java @@ -15,7 +15,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import static java.util.Arrays.asList; @@ -87,6 +86,10 @@ public L2NetworkHostRefInventory getL2NetworkHostRef(String l2NetworkUuid, Strin } public static Set getHostsByL2NetworkAttachedCluster(L2NetworkInventory l2NetworkInventory) { + if (l2NetworkInventory.getAttachedClusterUuids() == null || l2NetworkInventory.getAttachedClusterUuids().isEmpty()) { + return new HashSet<>(); + } + return new HashSet<>(Q.New(HostVO.class) .in(HostVO_.clusterUuid, l2NetworkInventory.getAttachedClusterUuids()) .notIn(HostVO_.state,asList(HostState.PreMaintenance, HostState.Maintenance)) diff --git a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java index 821a76ad462..ec9a7a5be0b 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -443,6 +443,7 @@ public String getSyncSignature() { @Override public void run(SyncTaskChain chain) { + extpEmitter.beforeUpdate(getSelfInventory()); changeL2NetworkVlanId(msg, new Completion(chain) { @Override public void success() { @@ -968,6 +969,10 @@ protected void scripts() { } L2NetworkVO tl2 = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, msg.getL2NetworkUuid()).find(); + // ZNS L2NoVlan segments are uniquely identified by SDN controller, not by physicalInterface + if (L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(tl2.getvSwitchType())) { + return; + } for (L2NetworkVO l2 : l2s) { if (l2.getPhysicalInterface().equals(tl2.getPhysicalInterface())) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10006, "There has been a l2Network[uuid:%s, name:%s] attached to cluster[uuid:%s] that has physical interface[%s]. Failed to attach l2Network[uuid:%s]", @@ -980,8 +985,10 @@ protected void scripts() { l2s = SQL.New("select l2" + " from L2VlanNetworkVO l2, L2NetworkClusterRefVO ref" + " where l2.uuid = ref.l2NetworkUuid" + - " and ref.clusterUuid = :clusterUuid") - .param("clusterUuid", msg.getClusterUuid()).list(); + " and ref.clusterUuid = :clusterUuid" + + " and l2.vSwitchType != :znsType") + .param("clusterUuid", msg.getClusterUuid()) + .param("znsType", L2NetworkConstant.VSWITCH_TYPE_ZNS).list(); } else { l2s = SQL.New("select l2" + " from L2VlanNetworkVO l2, L2NetworkClusterRefVO ref, SystemTagVO tag" + diff --git a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java index d7c6c6798d9..f61c5a9d79e 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -1047,6 +1047,7 @@ public void fail(ErrorCode errorCode) { private void handle(APIUpdateIpRangeMsg msg) { IpRangeVO vo = dbf.findByUuid(msg.getUuid(), IpRangeVO.class); + IpRangeInventory oldIpr = IpRangeInventory.valueOf(vo); boolean update = false; if (msg.getName() != null) { vo.setName(msg.getName()); @@ -1059,8 +1060,14 @@ private void handle(APIUpdateIpRangeMsg msg) { if (update) { vo = dbf.updateAndRefresh(vo); } + + IpRangeInventory newIpr = IpRangeInventory.valueOf(vo); + for (AfterUpdateIpRangeExtensionPoint ext : pluginRgty.getExtensionList(AfterUpdateIpRangeExtensionPoint.class)) { + ext.afterUpdateIpRange(oldIpr, newIpr); + } + APIUpdateIpRangeEvent evt = new APIUpdateIpRangeEvent(msg.getId()); - evt.setInventory(IpRangeInventory.valueOf(vo)); + evt.setInventory(newIpr); bus.publish(evt); } diff --git a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java index 81fb7e94b3f..45fecdc0aa1 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -184,6 +184,41 @@ public void run(MessageReply reply) { } }); } + }).then(new NoRollbackFlow() { + @Override + public void run(FlowTrigger trigger, Map data) { + List exts = + pluginRgty.getExtensionList(AfterSetL3NetworkMtuExtensionPoint.class); + if (exts.isEmpty()) { + trigger.next(); + return; + } + + L3NetworkInventory l3Inv = L3NetworkInventory.valueOf(dbf.findByUuid(msg.getL3NetworkUuid(), L3NetworkVO.class)); + new While<>(exts).each((ext, wcompl) -> { + ext.afterSetL3NetworkMtu(l3Inv, msg.getMtu(), new Completion(wcompl) { + @Override + public void success() { + wcompl.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + wcompl.addError(errorCode); + wcompl.allDone(); + } + }); + }).run(new WhileDoneCompletion(trigger) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (errorCodeList.getCauses().isEmpty()) { + trigger.next(); + } else { + trigger.fail(errorCodeList.getCauses().get(0)); + } + } + }); + } }).done(new FlowDoneHandler(msg) { @Override public void handle(Map data) { @@ -192,8 +227,8 @@ public void handle(Map data) { }).error(new FlowErrorHandler(msg) { @Override public void handle(ErrorCode errCode, Map data) { + NetworkServiceSystemTag.L3_MTU.delete(msg.getL3NetworkUuid()); if (oldmtu != null) { - NetworkServiceSystemTag.L3_MTU.delete(msg.getL3NetworkUuid()); SystemTagCreator creator = NetworkServiceSystemTag.L3_MTU.newSystemTagCreator(msg.getL3NetworkUuid()); creator.recreate = true; creator.inherent = false; @@ -518,6 +553,7 @@ private void handle(APICreateL3NetworkMsg msg) { vo.setIpVersion(IPv6Constants.IPv4); } vo.setInternalId((int)dbf.generateSequenceNumber(L3NetworkSequenceNumberVO.class)); + vo.setType(msg.getType() != null ? msg.getType() : L3NetworkConstant.L3_BASIC_NETWORK_TYPE); FlowChain fchain = new SimpleFlowChain(); fchain.setName(String.format("create-l3-network-%s", vo.getUuid())); diff --git a/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmFacadeImpl.java b/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmFacadeImpl.java index 6d63ce3522f..76d98729668 100755 --- a/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmFacadeImpl.java +++ b/plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmFacadeImpl.java @@ -296,7 +296,7 @@ class VmDestroyHook implements VmInstanceBeforeDestroyHook, VmInstanceAfterDestr @Override public void afterDestroy(VmInstanceInventory vm) { if (applianceVm != null) { - ApplianceVmCanonicalEvents.NewVmCreatedData data = new ApplianceVmCanonicalEvents.NewVmCreatedData(); + ApplianceVmCanonicalEvents.VmDestroyedData data = new ApplianceVmCanonicalEvents.VmDestroyedData(); data.vm = applianceVm; data.fire(); } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java index ff737c20e83..6a47215bd23 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java @@ -1278,6 +1278,14 @@ public static class NicTO extends BaseVirtualDeviceTO { private Boolean isolated; + // bridge sub-type: null for Linux bridge, "openvswitch" for OVS bridge + // generates in libvirt XML + private String bridgePortType; + + // OVS external_ids:iface-id, used by SDN controller to identify the port + // generates + private String interfaceId; + public List getIps() { return ips; } @@ -1470,6 +1478,22 @@ public void setL2NetworkUuid(String l2NetworkUuid) { this.l2NetworkUuid = l2NetworkUuid; } + public String getBridgePortType() { + return bridgePortType; + } + + public void setBridgePortType(String bridgePortType) { + this.bridgePortType = bridgePortType; + } + + public String getInterfaceId() { + return interfaceId; + } + + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + public static NicTO fromVmNicInventory(VmNicInventory nic) { KVMAgentCommands.NicTO to = new KVMAgentCommands.NicTO(); to.setMac(nic.getMac()); @@ -5018,6 +5042,8 @@ public static class OvsAddPortCmd extends AgentCommand { public Map nicMap = new HashMap<>(); @GrayVersion(value = "5.4.0") public Map nicVmInstanceUuidMap = new HashMap<>(); + @GrayVersion(value = "5.5.22") + public Map ifaceIdMap = new HashMap<>(); } public static class OvsAddPortRsp extends AgentResponse { @@ -5030,6 +5056,8 @@ public static class OvsSyncPortCmd extends AgentCommand { public Map nicMap = new HashMap<>(); @GrayVersion(value = "5.4.0") public String vmUuid; + @GrayVersion(value = "5.5.22") + public Map ifaceIdMap = new HashMap<>(); } public static class OvsSyncPortRsp extends AgentResponse { diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMApiInterceptor.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMApiInterceptor.java index 93fd688935b..e8e30a6711f 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMApiInterceptor.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMApiInterceptor.java @@ -111,6 +111,11 @@ private void validate(APIAttachL2NetworkToClusterMsg msg) { return; } + // ZNS L2 networks don't create vlan devices on host, skip length check + if (L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(l2.getvSwitchType())) { + return; + } + if (NetworkUtils.generateVlanDeviceName(l2.getPhysicalInterface(), l2.getVlan()).length() > L2NetworkConstant.LINUX_IF_NAME_MAX_SIZE) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_KVM_10139, "cannot create vlan-device on %s because it's too long" diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index 48370a2a144..b4815db297a 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -4198,6 +4198,16 @@ private NicTO completeNicInfo(VmNicInventory nic) { KVMCompleteNicInformationExtensionPoint extp = factory.getCompleteNicInfoExtension(L2NetworkType.valueOf(l2inv.getType())); NicTO to = extp.completeNicInformation(l2inv, l3Inv, nic); + if (L2NetworkConstant.VSWITCH_TYPE_ZNS.equals(l2inv.getvSwitchType())) { + to.setBridgeName("br-int"); + to.setBridgePortType("openvswitch"); + String ifaceId = VmSystemTags.IFACE_ID.getTokenByResourceUuid( + nic.getUuid(), VmSystemTags.IFACE_ID_TOKEN); + if (ifaceId != null) { + to.setInterfaceId(ifaceId); + } + } + if (to.getUseVirtio() == null) { to.setUseVirtio(VmSystemTags.VIRTIO.hasTag(nic.getVmInstanceUuid())); to.setIps(getCleanTrafficIp(nic)); diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostFactory.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostFactory.java index 0188c920a83..513add98a83 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostFactory.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHostFactory.java @@ -50,6 +50,7 @@ import org.zstack.header.network.l2.L2NetworkType; import org.zstack.header.network.l2.L2NetworkVO; import org.zstack.header.network.l2.L2NetworkVO_; + import org.zstack.header.rest.RESTFacade; import org.zstack.header.rest.SyncHttpCallHandler; import org.zstack.header.tag.FormTagExtensionPoint; @@ -380,7 +381,7 @@ protected void populateExtensions() { public KVMCompleteNicInformationExtensionPoint getCompleteNicInfoExtension(L2NetworkType type) { KVMCompleteNicInformationExtensionPoint extp = completeNicInfoExtensions.get(type); if (extp == null) { - throw new IllegalArgumentException(String.format("unble to fine KVMCompleteNicInformationExtensionPoint supporting L2NetworkType[%s]", type)); + throw new IllegalArgumentException(String.format("unable to find KVMCompleteNicInformationExtensionPoint supporting L2NetworkType[%s]", type)); } return extp; } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2NoVlanNetworkBackend.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2NoVlanNetworkBackend.java index 1ed462ecfcd..3ec9dd0780e 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2NoVlanNetworkBackend.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2NoVlanNetworkBackend.java @@ -236,7 +236,7 @@ public NicTO completeNicInformation(L2NetworkInventory l2Network, L3NetworkInven to.setBridgeName(makeBridgeName(l2Network.getUuid())); to.setPhysicalInterface(l2Network.getPhysicalInterface()); to.setMtu(new MtuGetter().getMtu(l3Network.getUuid())); - if (l2Network.getvSwitchType().equals(L2NetworkConstant.VSWITCH_TYPE_OVN_DPDK)) { + if (L2NetworkConstant.ACCEL_TYPE_VHOST_USER_SPACE.equals(nic.getType())) { to.setSrcPath(L2NetworkConstant.OVN_DPDK_VNIC_SRC_PATH + nic.getInternalName()); } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2VlanNetworkBackend.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2VlanNetworkBackend.java index 74e700dd9f6..e486fddff98 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2VlanNetworkBackend.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2VlanNetworkBackend.java @@ -249,7 +249,7 @@ public NicTO completeNicInformation(L2NetworkInventory l2Network, L3NetworkInven to.setMetaData(String.valueOf(vlanId)); to.setMtu(new MtuGetter().getMtu(l3Network.getUuid())); to.setVlanId(String.valueOf(vlanId)); - if (l2Network.getvSwitchType().equals(L2NetworkConstant.VSWITCH_TYPE_OVN_DPDK)) { + if (L2NetworkConstant.ACCEL_TYPE_VHOST_USER_SPACE.equals(nic.getType())) { to.setSrcPath(L2NetworkConstant.OVN_DPDK_VNIC_SRC_PATH + nic.getInternalName()); } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java b/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java new file mode 100644 index 00000000000..9a2816da90f --- /dev/null +++ b/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java @@ -0,0 +1,114 @@ +package org.zstack.kvm; + +import org.springframework.beans.factory.annotation.Autowired; +import org.zstack.compute.vm.VmNicLifecycleGlobalConfig; +import org.zstack.core.asyncbatch.While; +import org.zstack.core.componentloader.PluginRegistry; +import org.zstack.core.db.Q; +import org.zstack.core.thread.ThreadFacade; +import org.zstack.core.thread.ThreadFacadeImpl; +import org.zstack.header.core.NoErrorCompletion; +import org.zstack.header.core.WhileDoneCompletion; +import org.zstack.header.errorcode.ErrorCodeList; +import org.zstack.header.vm.*; +import org.zstack.header.vm.VmNicLifecycleExtensionPoint; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +public class VmNicLifecycleKvmBridge implements KVMPingAgentNoFailureExtensionPoint { + + private static final CLogger logger = Utils.getLogger(VmNicLifecycleKvmBridge.class); + + @Autowired + private PluginRegistry pluginRgty; + @Autowired + private ThreadFacade thdf; + + private List getExtensions() { + return pluginRgty.getExtensionList(VmNicLifecycleExtensionPoint.class); + } + + @Override + public void kvmPingAgentNoFailure(KVMHostInventory host, NoErrorCompletion completion) { + List extensions = getExtensions(); + if (extensions.isEmpty()) { + completion.done(); + return; + } + + String hostUuid = host.getUuid(); + + List allExpectedNics; + try { + List runningVms = Q.New(VmInstanceVO.class) + .eq(VmInstanceVO_.hostUuid, hostUuid) + .eq(VmInstanceVO_.state, VmInstanceState.Running) + .list(); + allExpectedNics = runningVms.stream() + .flatMap(vm -> VmNicInventory.valueOf(vm.getVmNics()).stream()) + .collect(Collectors.toList()); + } catch (Exception e) { + logger.warn(String.format("[VmNicLifecycle] failed to query Running VMs " + + "on host[uuid:%s] for reconciliation, skip this round", hostUuid), e); + completion.done(); + return; + } + + long timeoutSeconds = VmNicLifecycleGlobalConfig.RECONCILE_TIMEOUT.value(Long.class); + + new While<>(extensions).step((ext, whileCompletion) -> { + List matchedNics; + try { + matchedNics = allExpectedNics.stream() + .filter(ext::isApplicable) + .collect(Collectors.toList()); + } catch (Exception e) { + logger.warn(String.format("[VmNicLifecycle] %s.isApplicable threw exception " + + "during reconciliation on host[uuid:%s]", + ext.getClass().getSimpleName(), hostUuid), e); + whileCompletion.done(); + return; + } + + AtomicBoolean completed = new AtomicBoolean(false); + + ThreadFacadeImpl.TimeoutTaskReceipt receipt = thdf.submitTimeoutTask(() -> { + if (completed.compareAndSet(false, true)) { + logger.warn(String.format("[VmNicLifecycle] %s.reconcileOnHost timed out " + + "after %ds on host[uuid:%s]", + ext.getClass().getSimpleName(), timeoutSeconds, hostUuid)); + whileCompletion.done(); + } + }, TimeUnit.SECONDS, timeoutSeconds); + + try { + ext.reconcileOnHost(hostUuid, matchedNics, new NoErrorCompletion() { + @Override + public void done() { + if (completed.compareAndSet(false, true)) { + receipt.cancel(); + whileCompletion.done(); + } + } + }); + } catch (Throwable t) { + if (completed.compareAndSet(false, true)) { + receipt.cancel(); + logger.warn(String.format("[VmNicLifecycle] %s.reconcileOnHost(host=%s) " + + "threw exception", ext.getClass().getSimpleName(), hostUuid), t); + whileCompletion.done(); + } + } + }, extensions.size()).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + completion.done(); + } + }); + } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/AbstractSdnControllerFactory.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/AbstractSdnControllerFactory.java new file mode 100644 index 00000000000..095632acd68 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/AbstractSdnControllerFactory.java @@ -0,0 +1,45 @@ +package org.zstack.sdnController; + +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.zstack.core.cloudbus.EventFacade; +import org.zstack.core.db.DatabaseFacade; +import org.zstack.core.db.SQL; +import org.zstack.header.network.sdncontroller.*; +import org.zstack.sdnController.header.SdnControllerCanonicalEvents; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; + +@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE) +public abstract class AbstractSdnControllerFactory implements SdnControllerFactory { + private static final CLogger logger = Utils.getLogger(AbstractSdnControllerFactory.class); + + @Autowired + private DatabaseFacade factoryDbf; + @Autowired + private EventFacade evtf; + + @Override + public void changeSdnControllerStatus(SdnControllerVO vo, SdnControllerStatusEvent event) { + SdnControllerStatus newStatus = resolveStatus(event, vo); + if (newStatus == vo.getStatus()) { + return; + } + SdnControllerStatus oldStatus = vo.getStatus(); + logger.debug(String.format("sdn controller[%s] event[%s]: %s -> %s", + vo.getUuid(), event, oldStatus, newStatus)); + SQL.New(SdnControllerVO.class) + .eq(SdnControllerVO_.uuid, vo.getUuid()) + .set(SdnControllerVO_.status, newStatus) + .update(); + vo.setStatus(newStatus); + SdnControllerCanonicalEvents.SdnControllerStatusChangedData d = new SdnControllerCanonicalEvents.SdnControllerStatusChangedData(); + d.setSdnControllerUuid(vo.getUuid()); + d.setSdnControllerType(vo.getVendorType()); + d.setOldStatus(oldStatus.toString()); + d.setNewStatus(newStatus.toString()); + d.setInv(SdnControllerInventory.valueOf(vo)); + evtf.fire(SdnControllerCanonicalEvents.SDNCONTROLLER_STATUS_CHANGED_PATH, d); + } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java index f1d1f11829b..029f618f020 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java @@ -11,7 +11,6 @@ import org.zstack.core.cascade.CascadeFacade; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusCallBack; -import org.zstack.core.cloudbus.EventFacade; import org.zstack.core.componentloader.PluginRegistry; import org.zstack.core.db.DatabaseFacade; import org.zstack.core.db.Q; @@ -69,8 +68,6 @@ public class SdnControllerBase { @Autowired private ThreadFacade thdf; @Autowired - private EventFacade evtf; - @Autowired SdnControllerManager sdnMgr; @Autowired private PluginRegistry pluginRgty; @@ -154,6 +151,8 @@ public void run(SyncTaskChain chain) { flowChain.getData().put(SDN_CONTROLLER_UUID, self.getUuid()); flowChain.setName(String.format("sync-sdn-controller-data-%s-%s", self.getUuid(), self.getName())); + // allowEmptyFlow: vendors may not provide sync flows; treat empty chain as success + flowChain.allowEmptyFlow(); // Start the chain; flows in factory-provided chain should perform data sync operations flowChain.done(new FlowDoneHandler(msg) { @Override @@ -179,26 +178,6 @@ public String getName() { }); } - public void changeSdnControllerStatus(SdnControllerStatus status) { - if (status == self.getStatus()) { - return; - } - - SdnControllerStatus oldStatus = self.getStatus(); - logger.debug(String.format("sdn controller [%s] changed status, old status: [%s], new status: [%s]", - self.getUuid(), oldStatus, status.toString())); - self.setStatus(status); - self = dbf.updateAndRefresh(self); - - SdnControllerCanonicalEvents.SdnControllerStatusChangedData d = new SdnControllerCanonicalEvents.SdnControllerStatusChangedData(); - d.setSdnControllerUuid(self.getUuid()); - d.setSdnControllerType(self.getVendorType()); - d.setOldStatus(oldStatus.toString()); - d.setNewStatus(status.toString()); - d.setInv(SdnControllerInventory.valueOf(self)); - evtf.fire(SdnControllerCanonicalEvents.SDNCONTROLLER_STATUS_CHANGED_PATH, d); - } - private void doChangeSdnController(APIChangeSdnControllerMsg msg, Completion completion) { FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("change-sdn-controller-%s-%s", self.getUuid(), self.getName())); @@ -224,6 +203,11 @@ public void run(FlowTrigger trigger, Map data) { } if (changed) { + String newUsername = self.getUsername(); + String newPassword = self.getPassword(); + self = dbf.reload(self); + self.setUsername(newUsername); + self.setPassword(newPassword); self = dbf.updateAndRefresh(self); chain.getData().put(SDN_CONTROLLER_CHANGED, changed); } @@ -257,6 +241,11 @@ public void rollback(FlowRollback trigger, Map data) { self.setUsername(username); } if (password != null || username != null) { + String rollbackUsername = self.getUsername(); + String rollbackPassword = self.getPassword(); + self = dbf.reload(self); + self.setUsername(rollbackUsername); + self.setPassword(rollbackPassword); self = dbf.updateAndRefresh(self); } @@ -422,13 +411,13 @@ private void doReconnectSdnController(Completion completion) { @Override public void run(FlowTrigger trigger, Map data) { - changeSdnControllerStatus(SdnControllerStatus.Connecting); + sdnMgr.getSdnControllerFactory(self.getVendorType()).changeSdnControllerStatus(self, SdnControllerStatusEvent.RECONNECT_STARTED); trigger.next(); } @Override public void rollback(FlowRollback trigger, Map data) { - changeSdnControllerStatus(SdnControllerStatus.Disconnected); + sdnMgr.getSdnControllerFactory(self.getVendorType()).changeSdnControllerStatus(self, SdnControllerStatusEvent.RECONNECT_FAILED); trigger.rollback(); } }).then(new NoRollbackFlow() { @@ -454,7 +443,7 @@ public void fail(ErrorCode errorCode) { @Override public void run(FlowTrigger trigger, Map data) { - changeSdnControllerStatus(SdnControllerStatus.Connected); + sdnMgr.getSdnControllerFactory(self.getVendorType()).changeSdnControllerStatus(self, SdnControllerStatusEvent.RECONNECT_SUCCESS); trigger.next(); } }).done(new FlowDoneHandler(completion) { @@ -903,7 +892,7 @@ public void fail(ErrorCode errorCode) { @Override public void run(FlowTrigger trigger, Map data) { sdnPingTracker.untrack(msg.getSdnControllerUuid()); - dbf.removeByPrimaryKey(msg.getSdnControllerUuid(), SdnControllerVO.class); + controller.deleteSdnControllerDb(self); trigger.next(); } }).done(new FlowDoneHandler(completion) { diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerFactory.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerFactory.java index 6c25dcaddb9..9455cf2727c 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerFactory.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerFactory.java @@ -4,13 +4,28 @@ import org.zstack.header.core.workflow.FlowChain; import org.zstack.header.network.l3.SdnControllerL3; import org.zstack.header.network.service.SdnControllerDhcp; -import org.zstack.network.securitygroup.SecurityGroupSdnBackend; +import org.zstack.header.network.sdncontroller.SdnControllerStatus; +import org.zstack.header.network.sdncontroller.SdnControllerStatusEvent; import org.zstack.header.network.sdncontroller.SdnControllerVO; +import org.zstack.network.securitygroup.SecurityGroupSdnBackend; public interface SdnControllerFactory { SdnControllerType getVendorType(); - SdnControllerVO persistSdnController(SdnControllerVO vo); + default SdnControllerStatus resolveStatus(SdnControllerStatusEvent event, SdnControllerVO vo) { + switch (event) { + case RECONNECT_STARTED: return SdnControllerStatus.Connecting; + case RECONNECT_SUCCESS: return SdnControllerStatus.Connected; + case RECONNECT_FAILED: return SdnControllerStatus.Disconnected; + case PING_FAILED: return SdnControllerStatus.Disconnected; + case INIT_SYNC_STARTED: return SdnControllerStatus.Connecting; + case INIT_SYNC_SUCCESS: return SdnControllerStatus.Connected; + case INIT_SYNC_FAILED: return SdnControllerStatus.Disconnected; + default: return vo.getStatus(); + } + } + + void changeSdnControllerStatus(SdnControllerVO vo, SdnControllerStatusEvent event); SdnController getSdnController(SdnControllerVO vo); diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java index 502efb5f21f..4a63f3c5c2b 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java @@ -38,6 +38,7 @@ public interface SdnControllerL2 { default void addVmNics(List nics, Completion completion) {completion.success();}; default void removeVmNics(List nics, Completion completion) {completion.success();}; + default void releaseNicIps(List nics, Completion completion) {completion.success();}; default void addL3NetworkIpRange(L3NetworkInventory inv, IpRangeInventory ipr, Completion completion) {completion.success();}; default void deleteL3NetworkIpRange(L3NetworkInventory inv, IpRangeInventory ipr, Completion completion) {completion.success();}; diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java index 2368fbb95ae..e832f146738 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java @@ -47,10 +47,10 @@ import static org.zstack.utils.clouderrorcode.CloudOperationsErrorCode.*; public class SdnControllerManagerImpl extends AbstractService implements SdnControllerManager, - L2NetworkCreateExtensionPoint, L2NetworkDeleteExtensionPoint, InstantiateResourceOnAttachingNicExtensionPoint, - PreVmInstantiateResourceExtensionPoint, VmReleaseResourceExtensionPoint, - ReleaseNetworkServiceOnDetachingNicExtensionPoint, SecurityGroupGetSdnBackendExtensionPoint, - AfterAddIpRangeExtensionPoint, IpRangeDeletionExtensionPoint, GetSdnControllerExtensionPoint { + L2NetworkCreateExtensionPoint, L2NetworkDeleteExtensionPoint, + SecurityGroupGetSdnBackendExtensionPoint, + AfterAddIpRangeExtensionPoint, IpRangeDeletionExtensionPoint, GetSdnControllerExtensionPoint, + AfterAllocateSdnNicExtensionPoint { private static final CLogger logger = Utils.getLogger(SdnControllerManagerImpl.class); private static final Logger log = LoggerFactory.getLogger(SdnControllerManagerImpl.class); @@ -270,8 +270,13 @@ private void handle(APIAddSdnControllerMsg msg) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { - tagMgr.createTagsFromAPICreateMessage(msg, vo.getUuid(), SdnControllerVO.class.getSimpleName()); - event.setInventory(SdnControllerInventory.valueOf(dbf.findByUuid(vo.getUuid(), SdnControllerVO.class))); + try { + tagMgr.createTagsFromAPICreateMessage(msg, vo.getUuid(), SdnControllerVO.class.getSimpleName()); + event.setInventory(SdnControllerInventory.valueOf(dbf.findByUuid(vo.getUuid(), SdnControllerVO.class))); + } catch (Exception e) { + logger.warn(String.format("failed to load SdnControllerVO[uuid:%s] after init: %s", + vo.getUuid(), e.getMessage()), e); + } } else { event.setError(reply.getError()); } @@ -454,267 +459,26 @@ public void done(ErrorCodeList errorCodeList) { }); } - @Override - public void releaseVmResource(VmInstanceSpec spec, Completion completion) { - if (VmInstanceConstant.VmOperation.DetachNic != spec.getCurrentVmOperation() && - VmInstanceConstant.VmOperation.Destroy != spec.getCurrentVmOperation()) { - completion.success(); - return; - } - - if (spec.getL3Networks() == null || spec.getL3Networks().isEmpty()) { - completion.success(); - return; - } - - // we run into this situation when VM nics are all detached and the - // VM is being rebooted - if (spec.getDestNics().isEmpty()) { - completion.success(); - return; - } - - Map> nicMaps = new HashMap<>(); - for (VmNicInventory nic : spec.getDestNics()) { - L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); - if (l3Vo == null) { - continue; - } - - L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); - if (l2VO == null) { - continue; - } - - VSwitchType vSwitchType = VSwitchType.valueOf(l2VO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() == null) { - continue; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10005, "sdn l2 network[uuid:%s] is not attached controller", l2VO.getUuid())); - return; - } - - nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); - } - - if (nicMaps.isEmpty()) { - completion.success(); - return; - } - - removeLogicalPort(nicMaps, completion); - } - - @Override - public void instantiateResourceOnAttachingNic(VmInstanceSpec spec, L3NetworkInventory l3, Completion completion) { - L2NetworkVO l2NetworkVO = dbf.findByUuid(l3.getL2NetworkUuid(), L2NetworkVO.class); - VSwitchType vSwitchType = VSwitchType.valueOf(l2NetworkVO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() == null) { - completion.success(); - return; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2NetworkVO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10006, "sdn l2 network[uuid:%s] is not attached controller", l2NetworkVO.getUuid())); - return; - } - - Map> nicMaps = new HashMap<>(); - List nics = new ArrayList<>(); - nics.add(spec.getDestNics().get(0)); - nicMaps.put(controllerUuid, nics); - sdnAddVmNics(nicMaps, completion); - } - - @Override - public void releaseResourceOnAttachingNic(VmInstanceSpec spec, L3NetworkInventory l3, NoErrorCompletion completion) { - L2NetworkVO l2NetworkVO = dbf.findByUuid(l3.getL2NetworkUuid(), L2NetworkVO.class); - VSwitchType vSwitchType = VSwitchType.valueOf(l2NetworkVO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() == null) { - completion.done(); - return; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2NetworkVO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - logger.warn(String.format("sdn l2 network[uuid:%s] is not attached controller", l2NetworkVO.getUuid())); - completion.done(); - return; - } - - Map> nicMaps = new HashMap<>(); - List nics = new ArrayList<>(); - nics.add(spec.getDestNics().get(0)); - nicMaps.put(controllerUuid, nics); - - removeLogicalPort(nicMaps, new Completion(completion) { - @Override - public void success() { - completion.done(); - } - - @Override - public void fail(ErrorCode errorCode) { - logger.info(String.format("failed to remove logical port for vm[uuid:%s] nic[internalName:%s], because: %s", - spec.getVmInventory().getUuid(), spec.getDestNics().get(0).getInternalName(), errorCode.getDetails())); - completion.done(); - } - }); - } - - @Override - public void releaseResourceOnDetachingNic(VmInstanceSpec spec, VmNicInventory nic, NoErrorCompletion completion) { - L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); - L2NetworkVO l2NetworkVO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); - VSwitchType vSwitchType = VSwitchType.valueOf(l2NetworkVO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() == null) { - completion.done(); - return; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2NetworkVO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - logger.warn(String.format("sdn l2 network[uuid:%s] is not attached controller", l2NetworkVO.getUuid())); - completion.done(); - return; - } - - Map> nicMaps = new HashMap<>(); - List nics = new ArrayList<>(); - nics.add(spec.getDestNics().get(0)); - nicMaps.put(controllerUuid, nics); - - removeLogicalPort(nicMaps, new Completion(completion) { - @Override - public void success() { - completion.done(); - } - - @Override - public void fail(ErrorCode errorCode) { - logger.info(String.format("failed to remove logical port for vm[uuid:%s] nic[internalName:%s], because: %s", - spec.getVmInventory().getUuid(), spec.getDestNics().get(0).getInternalName(), errorCode.getDetails())); - completion.done(); - } - }); - } - - @Override - public void preBeforeInstantiateVmResource(VmInstanceSpec spec) throws VmInstantiateResourceException { - + /** + * Returns true if the L2 network should be skipped for SDN port management: + * it has no SDN controller type configured on its VSwitchType. + */ + private boolean shouldSkipSdnForNic(L2NetworkVO l2VO) { + VSwitchType vSwitchType = VSwitchType.valueOf(l2VO.getvSwitchType()); + return vSwitchType.getSdnControllerType() == null; } - @Override - public void preInstantiateVmResource(VmInstanceSpec spec, Completion completion) { - if (spec.getL3Networks() == null || spec.getL3Networks().isEmpty()) { - completion.success(); - return; - } - - // we run into this situation when VM nics are all detached and the - // VM is being rebooted - if (spec.getDestNics().isEmpty()) { - completion.success(); - return; - } - - Map> nicMaps = new HashMap<>(); - for (VmNicInventory nic : spec.getDestNics()) { - L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); - if (l3Vo == null) { - continue; - } - - L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); - if (l2VO == null) { - continue; - } - - VSwitchType vSwitchType = VSwitchType.valueOf(l2VO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() ==null) { - continue; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10007, "sdn l2 network[uuid:%s] is not attached controller", l2VO.getUuid())); - return; - } - - nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); - } - - if (nicMaps.isEmpty()) { - completion.success(); - return; - } - - sdnAddVmNics(nicMaps, completion); - } - - @Override - public void preReleaseVmResource(VmInstanceSpec spec, Completion completion) { - // create/start/reboot vm failed, code will go here VmInstantiateResourcePreFlow.rollack() - // vm change image failed, - if (VmInstanceConstant.VmOperation.NewCreate != spec.getCurrentVmOperation()) { - completion.success(); - return; - } - - if (spec.getL3Networks() == null || spec.getL3Networks().isEmpty()) { - completion.success(); - return; - } - - // we run into this situation when VM nics are all detached and the - // VM is being rebooted - if (spec.getDestNics().isEmpty()) { - completion.success(); - return; - } - - Map> nicMaps = new HashMap<>(); - for (VmNicInventory nic : spec.getDestNics()) { - L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); - if (l3Vo == null) { - continue; - } - - L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); - if (l2VO == null) { - continue; - } - - VSwitchType vSwitchType = VSwitchType.valueOf(l2VO.getvSwitchType()); - if (vSwitchType.getSdnControllerType() ==null) { - continue; - } - - String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( - l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); - if (controllerUuid == null) { - completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10008, "sdn l2 network[uuid:%s] is not attached controller", l2VO.getUuid())); - return; - } - - nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); + private Set getNewlyAllocatedNicUuidsForStart(VmInstanceSpec spec) { + if (spec.getCurrentVmOperation() != VmInstanceConstant.VmOperation.Start) { + return null; } - if (nicMaps.isEmpty()) { - completion.success(); - return; + List nicUuids = spec.getExtensionData(SdnControllerConstant.ALLOCATED_IPS_ON_START, List.class); + if (nicUuids == null || nicUuids.isEmpty()) { + return Collections.emptySet(); } - removeLogicalPort(nicMaps, completion); + return new HashSet<>(nicUuids); } @Override @@ -899,4 +663,207 @@ private SdnControllerVO getSdnControllerVO(L3NetworkInventory l3Network) { } return dbf.findByUuid(sdnControllerUuid, SdnControllerVO.class); } + + @Override + public void afterAllocateSdnNic(VmInstanceSpec spec, List nics, Completion completion) { + if (nics == null || nics.isEmpty()) { + completion.success(); + return; + } + + Set newlyAllocatedNicUuids = getNewlyAllocatedNicUuidsForStart(spec); + Map> nicMaps = new HashMap<>(); + for (VmNicInventory nic : nics) { + L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); + if (l3Vo == null) { + continue; + } + + L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); + if (l2VO == null || shouldSkipSdnForNic(l2VO)) { + continue; + } + + if (newlyAllocatedNicUuids != null + && L2NetworkConstant.VSWITCH_TYPE_OVN_DPDK.equals(l2VO.getvSwitchType()) + && !newlyAllocatedNicUuids.contains(nic.getUuid())) { + continue; + } + + String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( + l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); + if (controllerUuid == null) { + completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10006, "sdn l2 network[uuid:%s] has not attached controller", l2VO.getUuid())); + return; + } + + nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); + } + + if (nicMaps.isEmpty()) { + completion.success(); + return; + } + + sdnAddVmNics(nicMaps, completion); + } + + @Override + public void rollbackSdnNic(VmInstanceSpec spec, List nics, Completion completion) { + if (nics == null || nics.isEmpty()) { + completion.success(); + return; + } + + Map> nicMaps = new HashMap<>(); + for (VmNicInventory nic : nics) { + L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); + if (l3Vo == null) { + continue; + } + + L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); + if (l2VO == null || shouldSkipSdnForNic(l2VO)) { + continue; + } + + String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( + l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); + if (controllerUuid == null) { + continue; + } + + nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); + } + + if (nicMaps.isEmpty()) { + completion.success(); + return; + } + + removeLogicalPort(nicMaps, completion); + } + + @Override + public void releaseSdnNics(List nics, Completion completion) { + if (nics == null || nics.isEmpty()) { + completion.success(); + return; + } + + Map> nicMaps = new HashMap<>(); + for (VmNicInventory nic : nics) { + L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); + if (l3Vo == null) { + continue; + } + + L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); + if (l2VO == null || shouldSkipSdnForNic(l2VO)) { + continue; + } + + String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( + l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); + if (controllerUuid == null) { + continue; + } + + nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); + } + + if (nicMaps.isEmpty()) { + completion.success(); + return; + } + + removeLogicalPort(nicMaps, completion); + } + + @Override + public void releaseNicIps(List nics, Completion completion) { + if (nics == null || nics.isEmpty()) { + completion.success(); + return; + } + + Map> nicMaps = new HashMap<>(); + for (VmNicInventory nic : nics) { + L3NetworkVO l3Vo = dbf.findByUuid(nic.getL3NetworkUuid(), L3NetworkVO.class); + if (l3Vo == null) { + continue; + } + + L2NetworkVO l2VO = dbf.findByUuid(l3Vo.getL2NetworkUuid(), L2NetworkVO.class); + if (l2VO == null || shouldSkipSdnForNic(l2VO)) { + continue; + } + + String controllerUuid = L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID.getTokenByResourceUuid( + l2VO.getUuid(), L2NetworkSystemTags.L2_NETWORK_SDN_CONTROLLER_UUID_TOKEN); + if (controllerUuid == null) { + continue; + } + + nicMaps.computeIfAbsent(controllerUuid, k -> new ArrayList<>()).add(nic); + } + + if (nicMaps.isEmpty()) { + completion.success(); + return; + } + + releaseNicIpsFromPort(nicMaps, completion); + } + + private void releaseNicIpsFromPort(Map> nicMaps, Completion completion) { + new While<>(nicMaps.entrySet()).each((e, wcomp) -> { + SdnControllerVO vo = dbf.findByUuid(e.getKey(), SdnControllerVO.class); + if (vo == null) { + wcomp.addError(operr(ORG_ZSTACK_SDNCONTROLLER_10031, + "cannot release SDN NIC IPs because sdn controller[uuid:%s] cannot be found", e.getKey())); + wcomp.allDone(); + return; + } + SdnControllerFactory factory; + try { + factory = getSdnControllerFactory(vo.getVendorType()); + } catch (CloudRuntimeException ex) { + wcomp.addError(operr(ORG_ZSTACK_SDNCONTROLLER_10032, + "cannot release SDN NIC IPs because sdn controller factory[type:%s] cannot be found: %s", + vo.getVendorType(), ex.getMessage())); + wcomp.allDone(); + return; + } + SdnControllerL2 controller = factory.getSdnControllerL2(vo); + if (controller == null) { + wcomp.addError(operr(ORG_ZSTACK_SDNCONTROLLER_10033, + "cannot release SDN NIC IPs because sdn controller L2[controllerUuid:%s, type:%s] cannot be found", + vo.getUuid(), vo.getVendorType())); + wcomp.allDone(); + return; + } + controller.releaseNicIps(e.getValue(), new Completion(wcomp) { + @Override + public void success() { + wcomp.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + wcomp.addError(errorCode); + wcomp.allDone(); + } + }); + }).run(new WhileDoneCompletion(completion) { + @Override + public void done(ErrorCodeList errorCodeList) { + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } + } + }); + } } diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerPingTracker.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerPingTracker.java index a959dee3005..d52d26909be 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerPingTracker.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerPingTracker.java @@ -18,6 +18,7 @@ import org.zstack.header.network.l2.SdnControllerDeleteExtensionPoint; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.sdncontroller.SdnControllerStatus; +import org.zstack.header.network.sdncontroller.SdnControllerStatusEvent; import org.zstack.header.network.sdncontroller.SdnControllerVO; import org.zstack.header.network.sdncontroller.SdnControllerVO_; import org.zstack.sdnController.header.*; @@ -53,6 +54,11 @@ public String getResourceName() { @Override public NeedReplyMessage getPingMessage(String resUuid) { SdnControllerVO vo = dbf.findByUuid(resUuid, SdnControllerVO.class); + if (vo == null) { + logger.warn(String.format("SDN controller[uuid:%s] has been deleted, skip ping sending", resUuid)); + untrack(resUuid); + return null; + } if (vo.getStatus() == SdnControllerStatus.Connecting) { return null; } @@ -81,10 +87,9 @@ public void handleReply(final String resourceUuid, MessageReply reply) { return; } - if (!reply.isSuccess()) { logger.warn(String.format("[SDN Ping Tracker]: unable to ping the sdn controller[uuid: %s], %s", resourceUuid, reply.getError())); - new SdnControllerBase(vo).changeSdnControllerStatus(SdnControllerStatus.Disconnected); + sdnMgr.getSdnControllerFactory(vo.getVendorType()).changeSdnControllerStatus(vo, SdnControllerStatusEvent.PING_FAILED); return; } diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnControllerFactory.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnControllerFactory.java index 2d297ca518c..75864392a31 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnControllerFactory.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnControllerFactory.java @@ -5,11 +5,10 @@ import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.sdncontroller.SdnControllerVO; import org.zstack.network.securitygroup.SecurityGroupSdnBackend; -import org.zstack.sdnController.SdnController; -import org.zstack.sdnController.SdnControllerFactory; +import org.zstack.sdnController.*; import org.zstack.sdnController.*; -public class H3cVcfcSdnControllerFactory implements SdnControllerFactory { +public class H3cVcfcSdnControllerFactory extends AbstractSdnControllerFactory { SdnControllerType sdnControllerType = new SdnControllerType(SdnControllerConstant.H3C_VCFC_CONTROLLER); @Autowired @@ -20,12 +19,6 @@ public SdnControllerType getVendorType() { return sdnControllerType; } - @Override - public SdnControllerVO persistSdnController(SdnControllerVO vo) { - vo = dbf.persistAndRefresh(vo); - return vo; - } - @Override public SdnController getSdnController(SdnControllerVO vo) { diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnControllerFactory.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnControllerFactory.java index b277a336c3d..97dde1b0725 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnControllerFactory.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnControllerFactory.java @@ -3,13 +3,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.zstack.core.db.DatabaseFacade; import org.zstack.network.securitygroup.SecurityGroupSdnBackend; +import org.zstack.sdnController.AbstractSdnControllerFactory; import org.zstack.sdnController.SdnController; import org.zstack.sdnController.SdnControllerFactory; import org.zstack.sdnController.SdnControllerL2; import org.zstack.sdnController.SdnControllerType; import org.zstack.header.network.sdncontroller.SdnControllerVO; -public class SugonSdnControllerFactory implements SdnControllerFactory { +public class SugonSdnControllerFactory extends AbstractSdnControllerFactory { SdnControllerType sdnControllerType = new SdnControllerType(SugonSdnControllerConstant.TF_CONTROLLER); @@ -21,11 +22,6 @@ public SdnControllerType getVendorType() { return sdnControllerType; } - @Override - public SdnControllerVO persistSdnController(SdnControllerVO vo) { - vo = dbf.persistAndRefresh(vo); - return vo; - } @Override public SdnController getSdnController(SdnControllerVO vo) { diff --git a/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java b/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java index d3a46ed8d78..9f9e9848714 100644 --- a/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java +++ b/plugin/vxlan/src/main/java/org/zstack/network/l2/vxlan/vxlanNetworkPool/VxlanNetworkCheckerImpl.java @@ -38,7 +38,7 @@ public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionExcepti } private void validate(APIChangeL2NetworkVlanIdMsg msg) { - if (!msg.getType().equals(VxlanNetworkConstant.VXLAN_NETWORK_TYPE)){ + if (!VxlanNetworkConstant.VXLAN_NETWORK_TYPE.equals(msg.getType())){ return; } if (!NetworkUtils.isValidVni(msg.getVlan())) { diff --git a/rest/src/main/resources/scripts/RestDocumentationGenerator.groovy b/rest/src/main/resources/scripts/RestDocumentationGenerator.groovy index c11a35e40a7..7f4df6504a9 100755 --- a/rest/src/main/resources/scripts/RestDocumentationGenerator.groovy +++ b/rest/src/main/resources/scripts/RestDocumentationGenerator.groovy @@ -787,10 +787,13 @@ class RestDocumentationGenerator implements DocumentGenerator { return globalConfigMarkDown } - Boolean isConsistent(GlobalConfigMarkDown md, GlobalConfig globalConfig) { - if (md == null || globalConfig == null) { - return false - } + List isConsistent(GlobalConfigMarkDown md, GlobalConfig globalConfig) { + if (md == null) { + return ["GlobalConfigMarkDown is null"] + } + if (globalConfig == null) { + return ["GlobalConfig is null"] + } String mdPath = PathUtil.join(PathUtil.join(Paths.get("../doc").toAbsolutePath().normalize().toString(), "globalconfig"), md.globalConfig.category, md.globalConfig.name) + ".md" @@ -798,70 +801,77 @@ class RestDocumentationGenerator implements DocumentGenerator { initializer.bindResources.get(globalConfig.getIdentity()).each { classes.add(it.getName()) } List newClasses = classes.sort() String validatorString = initializer.validatorMap.get(globalConfig.getIdentity()) - Boolean flag = true - if (md.globalConfig.name != globalConfig.name) { - logger.info("name of ${mdPath} is not latest") - flag = false - } - if (md.globalConfig.defaultValue != globalConfig.defaultValue) { - logger.info("defaultValue of ${mdPath} is not latest") - flag = false - } - if (StringUtils.trimToEmpty(md.globalConfig.description) != StringUtils.trimToEmpty(globalConfig.description)) { - logger.info("desc of ${mdPath} is not latest") - flag = false - } - if (md.globalConfig.type != globalConfig.type) { - if (globalConfig.type != null) { - logger.info("type of ${mdPath} is not latest") - flag = false - } - } - if (md.globalConfig.category != globalConfig.category) { - logger.info("category of ${mdPath} is not latest") - flag = false - } - List oldClasses = md.globalConfig.resources.sort() - if (oldClasses != newClasses) { - logger.info("classes of ${mdPath} is not latest") - flag = false - } + List mismatches = [] + if (md.globalConfig.name != globalConfig.name) { + logger.info("name of ${mdPath} is not latest") + mismatches.add("name mismatch in ${mdPath}: markdown='${md.globalConfig.name}', current='${globalConfig.name}'") + } + if (md.globalConfig.defaultValue != globalConfig.defaultValue) { + logger.info("defaultValue of ${mdPath} is not latest") + mismatches.add("defaultValue mismatch in ${mdPath}: markdown='${md.globalConfig.defaultValue}', current='${globalConfig.defaultValue}'") + } + if (StringUtils.trimToEmpty(md.globalConfig.description) != StringUtils.trimToEmpty(globalConfig.description)) { + logger.info("desc of ${mdPath} is not latest") + mismatches.add("description mismatch in ${mdPath}: markdown='${StringUtils.trimToEmpty(md.globalConfig.description)}', current='${StringUtils.trimToEmpty(globalConfig.description)}'") + } + if (md.globalConfig.type != globalConfig.type) { + if (globalConfig.type != null) { + logger.info("type of ${mdPath} is not latest") + mismatches.add("type mismatch in ${mdPath}: markdown='${md.globalConfig.type}', current='${globalConfig.type}'") + } + } + if (md.globalConfig.category != globalConfig.category) { + logger.info("category of ${mdPath} is not latest") + mismatches.add("category mismatch in ${mdPath}: markdown='${md.globalConfig.category}', current='${globalConfig.category}'") + } + List oldClasses = md.globalConfig.resources.sort() + if (oldClasses != newClasses) { + logger.info("classes of ${mdPath} is not latest") + mismatches.add("resources mismatch in ${mdPath}: markdown='${oldClasses}', current='${newClasses}'") + } if (md.globalConfig.valueRange != (validatorString)) { boolean useBooleanValidator = (globalConfig.type == "java.lang.Boolean" && md.globalConfig.valueRange == "{true, false}") - if (validatorString != null || !useBooleanValidator) { - logger.info("valueRange of ${mdPath} is not latest") - logger.info("valueRange = ${md.globalConfig.valueRange} validatorString = ${validatorString}") - flag = false - } - } - return flag - } + if (validatorString != null || !useBooleanValidator) { + logger.info("valueRange of ${mdPath} is not latest") + logger.info("valueRange = ${md.globalConfig.valueRange} validatorString = ${validatorString}") + mismatches.add("valueRange mismatch in ${mdPath}: markdown='${md.globalConfig.valueRange}', current='${validatorString}'") + } + } + return mismatches + } void checkMD(String mdPath, GlobalConfig globalConfig) { String result = ShellUtils.runAndReturn( "grep '${PLACEHOLDER}' ${mdPath}").stdout.replaceAll("\n", "") - if (!result.empty) { - throw new CloudRuntimeException("Placeholders are detected in ${mdPath}, please replace them by content.") - } - GlobalConfigMarkDown markDown = getExistGlobalConfigMarkDown(mdPath) - if (markDown.desc_CN.isEmpty() - || markDown.name_CN.isEmpty() - || markDown.valueRangeRemark.isEmpty() - || markDown.defaultValueRemark.isEmpty() - || markDown.resourcesGranularitiesRemark.isEmpty() - || markDown.additionalRemark.isEmpty() - || markDown.backgroundInformation.isEmpty() - || markDown.isUIExposed.isEmpty() - || markDown.isCLIExposed.isEmpty() - ) { - throw new CloudRuntimeException("The necessary information of ${mdPath} is missing, please complete the information before submission.") - } - if (!isConsistent(markDown, globalConfig)) { - throw new CloudRuntimeException("${mdPath} is not match with its definition, please use Repair mode to correct it.") - } - } + if (!result.empty) { + throw new CloudRuntimeException("Placeholders detected in ${mdPath}; please replace them with actual content.") + } + GlobalConfigMarkDown markDown = getExistGlobalConfigMarkDown(mdPath) + List missingFields = [] + if (markDown.desc_CN.isEmpty()) missingFields.add("desc_CN") + if (markDown.name_CN.isEmpty()) missingFields.add("name_CN") + if (markDown.valueRangeRemark.isEmpty()) missingFields.add("valueRangeRemark") + if (markDown.defaultValueRemark.isEmpty()) missingFields.add("defaultValueRemark") + if (markDown.resourcesGranularitiesRemark.isEmpty()) missingFields.add("resourcesGranularitiesRemark") + if (markDown.additionalRemark.isEmpty()) missingFields.add("additionalRemark") + if (markDown.backgroundInformation.isEmpty()) missingFields.add("backgroundInformation") + if (markDown.isUIExposed.isEmpty()) missingFields.add("isUIExposed") + if (markDown.isCLIExposed.isEmpty()) missingFields.add("isCLIExposed") + List inconsistencies = isConsistent(markDown, globalConfig) + if (!missingFields.isEmpty() || !inconsistencies.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed for ${mdPath}:\n") + if (!missingFields.isEmpty()) { + sb.append("Missing required fields: ${missingFields}\n") + } + if (!inconsistencies.isEmpty()) { + sb.append("Inconsistent fields:\n") + inconsistencies.each { sb.append("- ${it}\n") } + } + throw new CloudRuntimeException(sb.toString()) + } + } class ElaborationMarkDown { private def table = ["|编号|描述|原因|操作建议|更多|"] @@ -2815,23 +2825,32 @@ ${additionalRemark} return System.getProperty("ignoreError") != null } - void testGlobalConfigTemplateAndMarkDown() { - Map allConfigs = initializer.configs - allConfigs.each { - String newPath = - PathUtil.join(PathUtil.join(Paths.get("../doc").toAbsolutePath().normalize().toString(), - "globalconfig"), it.value.category, it.value.name) + DEPRECATED + ".md" - if (new File(newPath).exists()) { + void testGlobalConfigTemplateAndMarkDown() { + Map allConfigs = initializer.configs + List allErrors = [] + allConfigs.each { + String newPath = + PathUtil.join(PathUtil.join(Paths.get("../doc").toAbsolutePath().normalize().toString(), + "globalconfig"), it.value.category, it.value.name) + DEPRECATED + ".md" + if (new File(newPath).exists()) { return } - String mdPath = - PathUtil.join(PathUtil.join(Paths.get("../doc").toAbsolutePath().normalize().toString(), - "globalconfig"), it.value.category, it.value.name) + ".md" - File mdFile = new File(mdPath) - if (!mdFile.exists()) { - throw new CloudRuntimeException("Not found the document markdown of the global config ${it.value.name} , please generate it first.") - } - checkMD(mdPath, it.value) - } - } -} + String mdPath = + PathUtil.join(PathUtil.join(Paths.get("../doc").toAbsolutePath().normalize().toString(), + "globalconfig"), it.value.category, it.value.name) + ".md" + File mdFile = new File(mdPath) + if (!mdFile.exists()) { + allErrors.add("Global config markdown not found: ${mdPath}") + return + } + try { + checkMD(mdPath, it.value) + } catch (CloudRuntimeException e) { + allErrors.add(e.message) + } + } + if (!allErrors.isEmpty()) { + throw new CloudRuntimeException(allErrors.join("\n\n")) + } + } +} diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 4190373705a..8d80a6bc7df 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -5,1795 +5,1805 @@ public class SourceClassMap { public final static HashMap srcToDstMapping = new HashMap() { { - put("org.zstack.abstraction.OptionType", "org.zstack.sdk.OptionType"); - put("org.zstack.abstraction.OptionType$InputType", "org.zstack.sdk.InputType"); - put("org.zstack.accessKey.AccessKeyInventory", "org.zstack.sdk.AccessKeyInventory"); - put("org.zstack.accessKey.AccessKeyState", "org.zstack.sdk.AccessKeyState"); - put("org.zstack.accessKey.AccessKeyType", "org.zstack.sdk.AccessKeyType"); - put("org.zstack.ai.NginxRedirectRule", "org.zstack.sdk.NginxRedirectRule"); - put("org.zstack.ai.entity.ApplicationDevelopmentServiceInventory", "org.zstack.sdk.ApplicationDevelopmentServiceInventory"); - put("org.zstack.ai.entity.DatasetInventory", "org.zstack.sdk.DatasetInventory"); - put("org.zstack.ai.entity.ModelCenterCapacityInventory", "org.zstack.sdk.ModelCenterCapacityInventory"); - put("org.zstack.ai.entity.ModelCenterInventory", "org.zstack.sdk.ModelCenterInventory"); - put("org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory", "org.zstack.sdk.ModelEvalServiceInstanceGroupInventory"); - put("org.zstack.ai.entity.ModelEvaluationTaskInventory", "org.zstack.sdk.ModelEvaluationTaskInventory"); - put("org.zstack.ai.entity.ModelInventory", "org.zstack.sdk.ModelInventory"); - put("org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory", "org.zstack.sdk.ModelServiceGroupDatasetRefInventory"); - put("org.zstack.ai.entity.ModelServiceInstanceGroupInventory", "org.zstack.sdk.ModelServiceInstanceGroupInventory"); - put("org.zstack.ai.entity.ModelServiceInstanceInventory", "org.zstack.sdk.ModelServiceInstanceInventory"); - put("org.zstack.ai.entity.ModelServiceInventory", "org.zstack.sdk.ModelServiceInventory"); - put("org.zstack.ai.entity.ModelServiceRefInventory", "org.zstack.sdk.ModelServiceRefInventory"); - put("org.zstack.ai.entity.ModelServiceTemplateInventory", "org.zstack.sdk.ModelServiceTemplateInventory"); - put("org.zstack.ai.entity.TrainedModelRecordInventory", "org.zstack.sdk.TrainedModelRecordInventory"); - put("org.zstack.ai.entity.VmModelMountInventory", "org.zstack.sdk.VmModelMountInventory"); - put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); - put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); - put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); - put("org.zstack.ai.message.MatchEvidence", "org.zstack.sdk.MatchEvidence"); - put("org.zstack.ai.message.MatchedStep", "org.zstack.sdk.MatchedStep"); - put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); - put("org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService", "org.zstack.sdk.MetaServerService"); - put("org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus", "org.zstack.sdk.ServiceStatus"); - put("org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService", "org.zstack.sdk.ZdfsService"); - put("org.zstack.ai.message.ModelService", "org.zstack.sdk.ModelService"); - put("org.zstack.ai.message.ModelServiceMatchEntry", "org.zstack.sdk.ModelServiceMatchEntry"); - put("org.zstack.ai.message.ModelServiceMatchEntryName", "org.zstack.sdk.ModelServiceMatchEntryName"); - put("org.zstack.ai.message.ModelServiceMatchStatus", "org.zstack.sdk.ModelServiceMatchStatus"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory", "org.zstack.sdk.AliyunNasAccessGroupInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory", "org.zstack.sdk.AliyunNasAccessRuleInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory", "org.zstack.sdk.AliyunNasFileSystemInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory", "org.zstack.sdk.AliyunNasMountTargetInventory"); - put("org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty", "org.zstack.sdk.AliyunNasAccessGroupProperty"); - put("org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty", "org.zstack.sdk.AliyunNasFileSystemProperty"); - put("org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty", "org.zstack.sdk.AliyunNasMountTargetProperty"); - put("org.zstack.aliyun.pangu.AliyunPanguPartitionInventory", "org.zstack.sdk.AliyunPanguPartitionInventory"); - put("org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory", "org.zstack.sdk.AliyunProxyVSwitchInventory"); - put("org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory", "org.zstack.sdk.AliyunProxyVpcInventory"); - put("org.zstack.appliancevm.ApplianceVmInventory", "org.zstack.sdk.ApplianceVmInventory"); - put("org.zstack.autoscaling.group.AutoScalingGroupInventory", "org.zstack.sdk.AutoScalingGroupInventory"); - put("org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory", "org.zstack.sdk.AutoScalingGroupActivityInventory"); - put("org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory", "org.zstack.sdk.AutoScalingGroupInstanceInventory"); - put("org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory", "org.zstack.sdk.AddingNewVmRuleInventory"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleInventory", "org.zstack.sdk.AutoScalingRuleInventory"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleState", "org.zstack.sdk.AutoScalingRuleState"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleStatus", "org.zstack.sdk.AutoScalingRuleStatus"); - put("org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory", "org.zstack.sdk.RemovalInstanceRuleInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory", "org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory", "org.zstack.sdk.AutoScalingRuleTriggerInventory"); - put("org.zstack.autoscaling.template.AutoScalingTemplateInventory", "org.zstack.sdk.AutoScalingTemplateInventory"); - put("org.zstack.autoscaling.template.AutoScalingVmTemplateInventory", "org.zstack.sdk.AutoScalingVmTemplateInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2BondingInventory", "org.zstack.sdk.BareMetal2BondingInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory", "org.zstack.sdk.BareMetal2BondingNicRefInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory", "org.zstack.sdk.BareMetal2ChassisDiskInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory", "org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisInventory", "org.zstack.sdk.BareMetal2ChassisInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory", "org.zstack.sdk.BareMetal2ChassisNicInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory", "org.zstack.sdk.BareMetal2ChassisPciDeviceInventory"); - put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig", "org.zstack.sdk.BareMetal2DpuChassisConfig"); - put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory", "org.zstack.sdk.BareMetal2DpuChassisInventory"); - put("org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory", "org.zstack.sdk.BareMetal2IpmiChassisInventory"); - put("org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory", "org.zstack.sdk.BareMetal2ChassisOfferingInventory"); - put("org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory", "org.zstack.sdk.BareMetal2DpuHostInventory"); - put("org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig", "org.zstack.sdk.YuccaBareMetal2DpuChassisConfig"); - put("org.zstack.baremetal2.gateway.BareMetal2GatewayInventory", "org.zstack.sdk.BareMetal2GatewayInventory"); - put("org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory", "org.zstack.sdk.BareMetal2GatewayProvisionNicInventory"); - put("org.zstack.baremetal2.instance.BareMetal2InstanceInventory", "org.zstack.sdk.BareMetal2InstanceInventory"); - put("org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory", "org.zstack.sdk.BareMetal2InstanceProvisionNicInventory"); - put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory", "org.zstack.sdk.BareMetal2ProvisionNetworkInventory"); - put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity"); - put("org.zstack.billing.Pagination", "org.zstack.sdk.Pagination"); - put("org.zstack.billing.PriceInventory", "org.zstack.sdk.PriceInventory"); - put("org.zstack.billing.ResourceSpending", "org.zstack.sdk.ResourceSpending"); - put("org.zstack.billing.Spending", "org.zstack.sdk.Spending"); - put("org.zstack.billing.SpendingDetails", "org.zstack.sdk.SpendingDetails"); - put("org.zstack.billing.generator.BillingInventory", "org.zstack.sdk.BillingInventory"); - put("org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory", "org.zstack.sdk.BareMetal2BillingInventory"); - put("org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory", "org.zstack.sdk.PciDeviceBillingInventory"); - put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory", "org.zstack.sdk.PubIpVipBandwidthInBillingInventory"); - put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVipBandwidthOutBillingInventory"); - put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory"); - put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory"); - put("org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory", "org.zstack.sdk.VmCPUBillingInventory"); - put("org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory", "org.zstack.sdk.VmMemoryBillingInventory"); - put("org.zstack.billing.generator.volume.data.DataVolumeBillingInventory", "org.zstack.sdk.DataVolumeBillingInventory"); - put("org.zstack.billing.generator.volume.root.RootVolumeBillingInventory", "org.zstack.sdk.RootVolumeBillingInventory"); - put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending", "org.zstack.sdk.BareMetal2Spending"); - put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails", "org.zstack.sdk.BareMetal2SpendingDetails"); - put("org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory"); - put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending", "org.zstack.sdk.PciDeviceSpending"); - put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory", "org.zstack.sdk.PciDeviceSpendingInventory"); - put("org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory", "org.zstack.sdk.PricePciDeviceOfferingRefInventory"); - put("org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory", "org.zstack.sdk.SnapShotSpendingInventory"); - put("org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending", "org.zstack.sdk.SnapshotSpending"); - put("org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending", "org.zstack.sdk.PubIpVipBandwidthSpending"); - put("org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails", "org.zstack.sdk.VipBandwidthSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails", "org.zstack.sdk.VmCPUSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails", "org.zstack.sdk.VmMemorySpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmSpending", "org.zstack.sdk.VmSpending"); - put("org.zstack.billing.spendingcalculator.vm.VmSpendingDetails", "org.zstack.sdk.VmSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending", "org.zstack.sdk.PubIpVmNicBandwidthSpending"); - put("org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails", "org.zstack.sdk.VmNicBandwidthSpendingDetails"); - put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending", "org.zstack.sdk.DataVolumeSpending"); - put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory", "org.zstack.sdk.DataVolumeSpendingInventory"); - put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending", "org.zstack.sdk.RootVolumeSpending"); - put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory", "org.zstack.sdk.RootVolumeSpendingInventory"); - put("org.zstack.billing.table.APICreatePriceTableMsg$Price", "org.zstack.sdk.Price"); - put("org.zstack.billing.table.AccountPriceTableRefInventory", "org.zstack.sdk.AccountPriceTableRefInventory"); - put("org.zstack.billing.table.PriceTableInventory", "org.zstack.sdk.PriceTableInventory"); - put("org.zstack.cloudformation.template.struct.ActionStruct", "org.zstack.sdk.ActionStruct"); - put("org.zstack.cloudformation.template.struct.ResourceStruct", "org.zstack.sdk.ResourceStruct"); - put("org.zstack.cloudformation.template.struct.ResourceType", "org.zstack.sdk.ResourceType"); - put("org.zstack.container.ContainerBackupStorageInventory", "org.zstack.sdk.ContainerBackupStorageInventory"); - put("org.zstack.container.ContainerUsage", "org.zstack.sdk.ContainerUsage"); - put("org.zstack.container.entity.ContainerImageInventory", "org.zstack.sdk.ContainerImageInventory"); - put("org.zstack.container.entity.ContainerImageTagInventory", "org.zstack.sdk.ContainerImageTagInventory"); - put("org.zstack.container.entity.ContainerManagementEndpointInventory", "org.zstack.sdk.ContainerManagementEndpointInventory"); - put("org.zstack.container.entity.NativeClusterInventory", "org.zstack.sdk.NativeClusterInventory"); - put("org.zstack.container.entity.NativeHostInventory", "org.zstack.sdk.NativeHostInventory"); - put("org.zstack.container.entity.PodInventory", "org.zstack.sdk.PodInventory"); - put("org.zstack.container.entity.ProjectRepositoryInventory", "org.zstack.sdk.ProjectRepositoryInventory"); - put("org.zstack.container.entity.ZakuImageInventory", "org.zstack.sdk.ZakuImageInventory"); - put("org.zstack.core.config.GlobalConfigInventory", "org.zstack.sdk.GlobalConfigInventory"); - put("org.zstack.core.config.GlobalConfigOptions", "org.zstack.sdk.GlobalConfigOptions"); - put("org.zstack.core.config.GuestOsCharacterInventory", "org.zstack.sdk.GuestOsCharacterInventory"); - put("org.zstack.core.errorcode.ElaborationCategory", "org.zstack.sdk.ElaborationCategory"); - put("org.zstack.core.errorcode.ElaborationCheckResult", "org.zstack.sdk.ElaborationCheckResult"); - put("org.zstack.core.errorcode.ElaborationContent", "org.zstack.sdk.ElaborationContent"); - put("org.zstack.core.eventlog.EventLogInventory", "org.zstack.sdk.EventLogInventory"); - put("org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder", "org.zstack.sdk.ExternalServiceCapabilitiesBuilder"); - put("org.zstack.core.gc.GarbageCollectorInventory", "org.zstack.sdk.GarbageCollectorInventory"); - put("org.zstack.core.jsonlabel.JsonLabelInventory", "org.zstack.sdk.JsonLabelInventory"); - put("org.zstack.core.upgrade.AgentVersionInventory", "org.zstack.sdk.AgentVersionInventory"); - put("org.zstack.crypto.ccs.CCSCertificateInventory", "org.zstack.sdk.CCSCertificateInventory"); - put("org.zstack.crypto.ccs.CCSCertificateUserRefInventory", "org.zstack.sdk.CCSCertificateUserRefInventory"); - put("org.zstack.crypto.ccs.CCSCertificateUserState", "org.zstack.sdk.CCSCertificateUserState"); - put("org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory", "org.zstack.sdk.AiSiNoSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory", "org.zstack.sdk.CSPSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory", "org.zstack.sdk.FiSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory", "org.zstack.sdk.FiSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory", "org.zstack.sdk.FlkSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory", "org.zstack.sdk.FlkSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory", "org.zstack.sdk.HaiTaiSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory", "org.zstack.sdk.InfoSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory", "org.zstack.sdk.InfoSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory", "org.zstack.sdk.JitSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory", "org.zstack.sdk.KoAlSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory", "org.zstack.sdk.PluginSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory", "org.zstack.sdk.SanSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory", "org.zstack.sdk.SanSecSecurityMachineInventory"); - put("org.zstack.directory.DirectoryInventory", "org.zstack.sdk.DirectoryInventory"); - put("org.zstack.drs.api.HostLoad", "org.zstack.sdk.HostLoad"); - put("org.zstack.drs.api.Threshold", "org.zstack.sdk.Threshold"); - put("org.zstack.drs.entity.ClusterDRSInventory", "org.zstack.sdk.ClusterDRSInventory"); - put("org.zstack.drs.entity.DRSAdviceInventory", "org.zstack.sdk.DRSAdviceInventory"); - put("org.zstack.drs.entity.DRSVmMigrationActivityInventory", "org.zstack.sdk.DRSVmMigrationActivityInventory"); - put("org.zstack.externalbackup.BackupStorageExternalBackupInfo", "org.zstack.sdk.BackupStorageExternalBackupInfo"); - put("org.zstack.externalbackup.ExternalBackupInventory", "org.zstack.sdk.ExternalBackupInventory"); - put("org.zstack.externalbackup.ExternalBackupState", "org.zstack.sdk.ExternalBackupState"); - put("org.zstack.externalbackup.ResourceBackupState", "org.zstack.sdk.ResourceBackupState"); - put("org.zstack.externalbackup.ResourceExternalBackupInfo", "org.zstack.sdk.ResourceExternalBackupInfo"); - put("org.zstack.externalbackup.VmExternalBackupInfo", "org.zstack.sdk.VmExternalBackupInfo"); - put("org.zstack.externalbackup.VolumeExternalBackupInfo", "org.zstack.sdk.VolumeExternalBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxBackupInventory", "org.zstack.sdk.ZBoxBackupInventory"); - put("org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo", "org.zstack.sdk.ZBoxBackupStorageBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxVmBackupInfo", "org.zstack.sdk.ZBoxVmBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo", "org.zstack.sdk.ZBoxVolumeBackupInfo"); - put("org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory", "org.zstack.sdk.FaultToleranceVmGroupInventory"); - put("org.zstack.guesttools.GuestToolsInventory", "org.zstack.sdk.GuestToolsInventory"); - put("org.zstack.guesttools.GuestToolsStateInventory", "org.zstack.sdk.GuestToolsStateInventory"); - put("org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory"); - put("org.zstack.guesttools.GuestVmScriptExecutedRecordInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordInventory"); - put("org.zstack.guesttools.GuestVmScriptInventory", "org.zstack.sdk.GuestVmScriptInventory"); - put("org.zstack.guesttools.InvocationRecord", "org.zstack.sdk.InvocationRecord"); - put("org.zstack.guesttools.InvocationRecordDetail", "org.zstack.sdk.InvocationRecordDetail"); - put("org.zstack.ha.HaNetworkGroupInventory", "org.zstack.sdk.HaNetworkGroupInventory"); - put("org.zstack.ha.HaStrategyConditionInventory", "org.zstack.sdk.HaStrategyConditionInventory"); - put("org.zstack.header.acl.AccessControlListEntryInventory", "org.zstack.sdk.AccessControlListEntryInventory"); - put("org.zstack.header.acl.AccessControlListInventory", "org.zstack.sdk.AccessControlListInventory"); - put("org.zstack.header.affinitygroup.AffinityGroupInventory", "org.zstack.sdk.AffinityGroupInventory"); - put("org.zstack.header.affinitygroup.AffinityGroupUsageInventory", "org.zstack.sdk.AffinityGroupUsageInventory"); - put("org.zstack.header.aliyun.AliyunOssException", "org.zstack.sdk.AliyunOssException"); - put("org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory", "org.zstack.sdk.AliyunEbsBackupStorageInventory"); - put("org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory", "org.zstack.sdk.AliyunEbsPrimaryStorageInventory"); - put("org.zstack.header.aliyun.ecs.EcsInstanceInventory", "org.zstack.sdk.EcsInstanceInventory"); - put("org.zstack.header.aliyun.ecs.EcsInstanceType", "org.zstack.sdk.EcsInstanceType"); - put("org.zstack.header.aliyun.errorCode.AliyunErrorCode", "org.zstack.sdk.AliyunErrorCode"); - put("org.zstack.header.aliyun.image.EcsImageInventory", "org.zstack.sdk.EcsImageInventory"); - put("org.zstack.header.aliyun.image.ProgressProperty", "org.zstack.sdk.ProgressProperty"); - put("org.zstack.header.aliyun.network.HybridConnectionType", "org.zstack.sdk.HybridConnectionType"); - put("org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory", "org.zstack.sdk.AliyunRouterInterfaceInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory", "org.zstack.sdk.ConnectionAccessPointInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory", "org.zstack.sdk.ConnectionRelationShipInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty", "org.zstack.sdk.ConnectionRelationShipProperty"); - put("org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory", "org.zstack.sdk.VirtualBorderRouterInventory"); - put("org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory", "org.zstack.sdk.EcsSecurityGroupInventory"); - put("org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory", "org.zstack.sdk.EcsSecurityGroupRuleInventory"); - put("org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory", "org.zstack.sdk.EcsVSwitchInventory"); - put("org.zstack.header.aliyun.network.vpc.EcsVpcInventory", "org.zstack.sdk.EcsVpcInventory"); - put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory", "org.zstack.sdk.VpcVirtualRouteEntryInventory"); - put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory", "org.zstack.sdk.VpcVirtualRouterInventory"); - put("org.zstack.header.aliyun.oss.OssBucketInventory", "org.zstack.sdk.OssBucketInventory"); - put("org.zstack.header.aliyun.oss.OssBucketProperty", "org.zstack.sdk.OssBucketProperty"); - put("org.zstack.header.aliyun.storage.disk.AliyunDiskInventory", "org.zstack.sdk.AliyunDiskInventory"); - put("org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory", "org.zstack.sdk.AliyunSnapshotInventory"); - put("org.zstack.header.allocator.datatypes.CpuMemoryCapacityData", "org.zstack.sdk.CpuMemoryCapacityData"); - put("org.zstack.header.appcenter.PublishAppInventory", "org.zstack.sdk.PublishAppInventory"); - put("org.zstack.header.appcenter.PublishAppResourceStruct", "org.zstack.sdk.PublishAppResourceStruct"); - put("org.zstack.header.baremetal.BaremetalException", "org.zstack.sdk.BaremetalException"); - put("org.zstack.header.baremetal.chassis.BaremetalChassisInventory", "org.zstack.sdk.BaremetalChassisInventory"); - put("org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory", "org.zstack.sdk.BaremetalHardwareInfoInventory"); - put("org.zstack.header.baremetal.instance.BaremetalInstanceInventory", "org.zstack.sdk.BaremetalInstanceInventory"); - put("org.zstack.header.baremetal.network.BaremetalBondingInventory", "org.zstack.sdk.BaremetalBondingInventory"); - put("org.zstack.header.baremetal.network.BaremetalNicInventory", "org.zstack.sdk.BaremetalNicInventory"); - put("org.zstack.header.baremetal.network.BaremetalVlanNicInventory", "org.zstack.sdk.BaremetalVlanNicInventory"); - put("org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory", "org.zstack.sdk.PreconfigurationTemplateInventory"); - put("org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory", "org.zstack.sdk.BaremetalPxeServerInventory"); - put("org.zstack.header.bootstrap.MiniCandidateHostStruct", "org.zstack.sdk.MiniCandidateHostStruct"); - put("org.zstack.header.bootstrap.MiniHostInfo", "org.zstack.sdk.MiniHostInfo"); - put("org.zstack.header.bootstrap.MiniNetworkConfigStruct", "org.zstack.sdk.MiniNetworkConfigStruct"); - put("org.zstack.header.buildapp.BuildAppExportHistoryInventory", "org.zstack.sdk.BuildAppExportHistoryInventory"); - put("org.zstack.header.buildapp.BuildApplicationInventory", "org.zstack.sdk.BuildApplicationInventory"); - put("org.zstack.header.buildsystem.AppBuildSystemInventory", "org.zstack.sdk.AppBuildSystemInventory"); - put("org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory", "org.zstack.sdk.AppBuildSystemZoneRefInventory"); - put("org.zstack.header.cbt.CbtTaskInventory", "org.zstack.sdk.CbtTaskInventory"); - put("org.zstack.header.cbt.CbtTaskResourceRefInventory", "org.zstack.sdk.CbtTaskResourceRefInventory"); - put("org.zstack.header.cbt.CbtTaskStatus", "org.zstack.sdk.CbtTaskStatus"); - put("org.zstack.header.cbt.VolumeCbtBackupInfo", "org.zstack.sdk.VolumeCbtBackupInfo"); - put("org.zstack.header.cloudformation.CloudFormationStackEventInventory", "org.zstack.sdk.CloudFormationStackEventInventory"); - put("org.zstack.header.cloudformation.PreviewResourceStruct", "org.zstack.sdk.PreviewResourceStruct"); - put("org.zstack.header.cloudformation.ResourceStackInventory", "org.zstack.sdk.ResourceStackInventory"); - put("org.zstack.header.cloudformation.StackParameters", "org.zstack.sdk.StackParameters"); - put("org.zstack.header.cloudformation.StackTemplateInventory", "org.zstack.sdk.StackTemplateInventory"); - put("org.zstack.header.cloudformation.SupportedResourceStruct", "org.zstack.sdk.SupportedResourceStruct"); - put("org.zstack.header.cluster.ClusterInventory", "org.zstack.sdk.ClusterInventory"); - put("org.zstack.header.cluster.PowerOffHardwareResult", "org.zstack.sdk.PowerOffHardwareResult"); - put("org.zstack.header.configuration.DiskOfferingInventory", "org.zstack.sdk.DiskOfferingInventory"); - put("org.zstack.header.configuration.InstanceOfferingInventory", "org.zstack.sdk.InstanceOfferingInventory"); - put("org.zstack.header.console.ConsoleInventory", "org.zstack.sdk.ConsoleInventory"); - put("org.zstack.header.console.ConsoleProxyAgentInventory", "org.zstack.sdk.ConsoleProxyAgentInventory"); - put("org.zstack.header.core.external.plugin.PluginDriverInventory", "org.zstack.sdk.PluginDriverInventory"); - put("org.zstack.header.core.external.service.ExternalServiceCapabilities", "org.zstack.sdk.ExternalServiceCapabilities"); - put("org.zstack.header.core.external.service.ExternalServiceConfigurationInventory", "org.zstack.sdk.ExternalServiceConfigurationInventory"); - put("org.zstack.header.core.external.service.ExternalServiceInventory", "org.zstack.sdk.ExternalServiceInventory"); - put("org.zstack.header.core.progress.ChainInfo", "org.zstack.sdk.ChainInfo"); - put("org.zstack.header.core.progress.LongJobProgressDetail", "org.zstack.sdk.LongJobProgressDetail"); - put("org.zstack.header.core.progress.PendingTaskInfo", "org.zstack.sdk.PendingTaskInfo"); - put("org.zstack.header.core.progress.RunningTaskInfo", "org.zstack.sdk.RunningTaskInfo"); - put("org.zstack.header.core.progress.TaskInfo", "org.zstack.sdk.TaskInfo"); - put("org.zstack.header.core.progress.TaskProgressInventory", "org.zstack.sdk.TaskProgressInventory"); - put("org.zstack.header.core.trash.CleanTrashResult", "org.zstack.sdk.CleanTrashResult"); - put("org.zstack.header.core.trash.InstallPathRecycleInventory", "org.zstack.sdk.InstallPathRecycleInventory"); - put("org.zstack.header.core.trash.TrashCleanupResult", "org.zstack.sdk.TrashCleanupResult"); - put("org.zstack.header.core.webhooks.WebhookInventory", "org.zstack.sdk.WebhookInventory"); - put("org.zstack.header.datacenter.DataCenterInventory", "org.zstack.sdk.DataCenterInventory"); - put("org.zstack.header.datacenter.DataCenterProperty", "org.zstack.sdk.DataCenterProperty"); - put("org.zstack.header.errorcode.ErrorCode", "org.zstack.sdk.ErrorCode"); - put("org.zstack.header.errorcode.ErrorCodeList", "org.zstack.sdk.ErrorCodeList"); - put("org.zstack.header.flowMeter.FlowCollectorInventory", "org.zstack.sdk.FlowCollectorInventory"); - put("org.zstack.header.flowMeter.FlowCounter", "org.zstack.sdk.FlowCounter"); - put("org.zstack.header.flowMeter.FlowMeterInventory", "org.zstack.sdk.FlowMeterInventory"); - put("org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory", "org.zstack.sdk.NetworkRouterFlowMeterRefInventory"); - put("org.zstack.header.host.AddHostFromFileResult", "org.zstack.sdk.AddHostFromFileResult"); - put("org.zstack.header.host.CpuArchitecture", "org.zstack.sdk.CpuArchitecture"); - put("org.zstack.header.host.HostInventory", "org.zstack.sdk.HostInventory"); - put("org.zstack.header.host.HostIpmiInventory", "org.zstack.sdk.HostIpmiInventory"); - put("org.zstack.header.host.HostNUMANode", "org.zstack.sdk.HostNUMANode"); - put("org.zstack.header.host.HostNetworkBondingServiceRefInventory", "org.zstack.sdk.HostNetworkBondingServiceRefInventory"); - put("org.zstack.header.host.HostNetworkInterfaceServiceRefInventory", "org.zstack.sdk.HostNetworkInterfaceServiceRefInventory"); - put("org.zstack.header.host.HostNetworkLabelInventory", "org.zstack.sdk.HostNetworkLabelInventory"); - put("org.zstack.header.host.HostPhysicalMemoryInventory", "org.zstack.sdk.HostPhysicalMemoryInventory"); - put("org.zstack.header.host.HwMonitorStatus", "org.zstack.sdk.HwMonitorStatus"); - put("org.zstack.header.host.ServiceTypeStatisticData", "org.zstack.sdk.ServiceTypeStatisticData"); - put("org.zstack.header.hybrid.network.eip.HybridEipAddressInventory", "org.zstack.sdk.HybridEipAddressInventory"); - put("org.zstack.header.hybrid.network.eip.HybridEipStatus", "org.zstack.sdk.HybridEipStatus"); - put("org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory", "org.zstack.sdk.VpcUserVpnGatewayInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory", "org.zstack.sdk.VpcVpnConnectionInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory", "org.zstack.sdk.VpcVpnGatewayInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory", "org.zstack.sdk.VpcVpnIkeConfigInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct", "org.zstack.sdk.VpcVpnIkeConfigStruct"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory", "org.zstack.sdk.VpcVpnIpSecConfigInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct", "org.zstack.sdk.VpcVpnIpSecConfigStruct"); - put("org.zstack.header.identity.AccountInventory", "org.zstack.sdk.AccountInventory"); - put("org.zstack.header.identity.AccountResourceRefInventory", "org.zstack.sdk.AccountResourceRefInventory"); - put("org.zstack.header.identity.PolicyInventory", "org.zstack.sdk.PolicyInventory"); - put("org.zstack.header.identity.PolicyStatement", "org.zstack.sdk.PolicyStatement"); - put("org.zstack.header.identity.PolicyStatementEffect", "org.zstack.sdk.PolicyStatementEffect"); - put("org.zstack.header.identity.Quota$QuotaUsage", "org.zstack.sdk.QuotaUsage"); - put("org.zstack.header.identity.QuotaInventory", "org.zstack.sdk.QuotaInventory"); - put("org.zstack.header.identity.SessionInventory", "org.zstack.sdk.SessionInventory"); - put("org.zstack.header.identity.SharedResourceInventory", "org.zstack.sdk.SharedResourceInventory"); - put("org.zstack.header.identity.UserGroupInventory", "org.zstack.sdk.UserGroupInventory"); - put("org.zstack.header.identity.UserInventory", "org.zstack.sdk.UserInventory"); - put("org.zstack.header.identity.login.LoginAuthenticationProcedureDesc", "org.zstack.sdk.LoginAuthenticationProcedureDesc"); - put("org.zstack.header.identity.role.RoleInventory", "org.zstack.sdk.identity.role.RoleInventory"); - put("org.zstack.header.identity.role.RolePolicyRefInventory", "org.zstack.sdk.identity.role.RolePolicyRefInventory"); - put("org.zstack.header.identity.role.RolePolicyStatementInventory", "org.zstack.sdk.identity.role.RolePolicyStatementInventory"); - put("org.zstack.header.identity.role.RoleState", "org.zstack.sdk.identity.role.RoleState"); - put("org.zstack.header.identity.role.RoleStateEvent", "org.zstack.sdk.identity.role.RoleStateEvent"); - put("org.zstack.header.identity.role.RoleType", "org.zstack.sdk.identity.role.RoleType"); - put("org.zstack.header.identityzone.IdentityZoneInventory", "org.zstack.sdk.IdentityZoneInventory"); - put("org.zstack.header.identityzone.IdentityZoneProperty", "org.zstack.sdk.IdentityZoneProperty"); - put("org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure"); - put("org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure"); - put("org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails", "org.zstack.sdk.JobDetails"); - put("org.zstack.header.image.ImageBackupStorageRefInventory", "org.zstack.sdk.ImageBackupStorageRefInventory"); - put("org.zstack.header.image.ImageGroupInventory", "org.zstack.sdk.ImageGroupInventory"); - put("org.zstack.header.image.ImageGroupRefInventory", "org.zstack.sdk.ImageGroupRefInventory"); - put("org.zstack.header.image.ImageInventory", "org.zstack.sdk.ImageInventory"); - put("org.zstack.header.longjob.LongJobInventory", "org.zstack.sdk.LongJobInventory"); - put("org.zstack.header.longjob.LongJobState", "org.zstack.sdk.LongJobState"); - put("org.zstack.header.managementnode.ManagementNodeInventory", "org.zstack.sdk.ManagementNodeInventory"); - put("org.zstack.header.network.l2.L2NetworkData", "org.zstack.sdk.L2NetworkData"); - put("org.zstack.header.network.l2.L2NetworkInventory", "org.zstack.sdk.L2NetworkInventory"); - put("org.zstack.header.network.l2.L2VlanNetworkInventory", "org.zstack.sdk.L2VlanNetworkInventory"); - put("org.zstack.header.network.l3.AddressPoolInventory", "org.zstack.sdk.AddressPoolInventory"); - put("org.zstack.header.network.l3.FreeIpInventory", "org.zstack.sdk.FreeIpInventory"); - put("org.zstack.header.network.l3.IpRangeInventory", "org.zstack.sdk.IpRangeInventory"); - put("org.zstack.header.network.l3.IpRangeType", "org.zstack.sdk.IpRangeType"); - put("org.zstack.header.network.l3.L3NetworkHostRouteInventory", "org.zstack.sdk.L3NetworkHostRouteInventory"); - put("org.zstack.header.network.l3.L3NetworkInventory", "org.zstack.sdk.L3NetworkInventory"); - put("org.zstack.header.network.l3.NormalIpRangeInventory", "org.zstack.sdk.NormalIpRangeInventory"); - put("org.zstack.header.network.l3.ReservedIpRangeInventory", "org.zstack.sdk.ReservedIpRangeInventory"); - put("org.zstack.header.network.l3.UsedIpInventory", "org.zstack.sdk.UsedIpInventory"); - put("org.zstack.header.network.l3.datatypes.IpCapacityData", "org.zstack.sdk.IpCapacityData"); - put("org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory", "org.zstack.sdk.SdnControllerHostRefInventory"); - put("org.zstack.header.network.sdncontroller.SdnControllerInventory", "org.zstack.sdk.SdnControllerInventory"); - put("org.zstack.header.network.sdncontroller.SdnControllerStatus", "org.zstack.sdk.SdnControllerStatus"); - put("org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory", "org.zstack.sdk.NetworkServiceL3NetworkRefInventory"); - put("org.zstack.header.network.service.NetworkServiceProviderInventory", "org.zstack.sdk.NetworkServiceProviderInventory"); - put("org.zstack.header.portMirror.MirrorNetworkUsedIpInventory", "org.zstack.sdk.MirrorNetworkUsedIpInventory"); - put("org.zstack.header.portMirror.PortMirrorInventory", "org.zstack.sdk.PortMirrorInventory"); - put("org.zstack.header.portMirror.PortMirrorSessionInventory", "org.zstack.sdk.PortMirrorSessionInventory"); - put("org.zstack.header.portMirror.PortMirrorState", "org.zstack.sdk.PortMirrorState"); - put("org.zstack.header.portMirror.SessionStatus", "org.zstack.sdk.SessionStatus"); - put("org.zstack.header.portMirror.SessionType", "org.zstack.sdk.SessionType"); - put("org.zstack.header.protocol.Neighbor", "org.zstack.sdk.Neighbor"); - put("org.zstack.header.protocol.NetworkRouterAreaRefInventory", "org.zstack.sdk.NetworkRouterAreaRefInventory"); - put("org.zstack.header.protocol.RouterAreaInventory", "org.zstack.sdk.RouterAreaInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupInventory", "org.zstack.sdk.SchedulerJobGroupInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory", "org.zstack.sdk.SchedulerJobGroupJobRefInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory"); - put("org.zstack.header.scheduler.SchedulerJobHistoryInventory", "org.zstack.sdk.SchedulerJobHistoryInventory"); - put("org.zstack.header.scheduler.SchedulerJobInventory", "org.zstack.sdk.SchedulerJobInventory"); - put("org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory", "org.zstack.sdk.SchedulerJobSchedulerTriggerInventory"); - put("org.zstack.header.scheduler.SchedulerTriggerInventory", "org.zstack.sdk.SchedulerTriggerInventory"); - put("org.zstack.header.securitymachine.SecretResourcePoolInventory", "org.zstack.sdk.SecretResourcePoolInventory"); - put("org.zstack.header.securitymachine.SecurityMachineInventory", "org.zstack.sdk.SecurityMachineInventory"); - put("org.zstack.header.simulator.SimulatorHostInventory", "org.zstack.sdk.SimulatorHostInventory"); - put("org.zstack.header.sriov.EthernetVfPciDeviceInventory", "org.zstack.sdk.EthernetVfPciDeviceInventory"); - put("org.zstack.header.sriov.EthernetVfStatus", "org.zstack.sdk.EthernetVfStatus"); - put("org.zstack.header.sriov.VmVfNicInventory", "org.zstack.sdk.VmVfNicInventory"); - put("org.zstack.header.sshkeypair.SshKeyPairInventory", "org.zstack.sdk.SshKeyPairInventory"); - put("org.zstack.header.sshkeypair.SshPrivateKeyPairInventory", "org.zstack.sdk.SshPrivateKeyPairInventory"); - put("org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory", "org.zstack.sdk.ExternalBackupStorageInventory"); - put("org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory", "org.zstack.sdk.ExternalPrimaryStorageInventory"); - put("org.zstack.header.storage.backup.BackupMode", "org.zstack.sdk.BackupMode"); - put("org.zstack.header.storage.backup.BackupStorageInventory", "org.zstack.sdk.BackupStorageInventory"); - put("org.zstack.header.storage.backup.SyncBackupResult", "org.zstack.sdk.SyncBackupResult"); - put("org.zstack.header.storage.backup.VolumeBackupInventory", "org.zstack.sdk.VolumeBackupInventory"); - put("org.zstack.header.storage.backup.VolumeBackupStorageRefInventory", "org.zstack.sdk.VolumeBackupStorageRefInventory"); - put("org.zstack.header.storage.cdp.CdpPolicyInventory", "org.zstack.sdk.CdpPolicyInventory"); - put("org.zstack.header.storage.cdp.CdpPolicyState", "org.zstack.sdk.CdpPolicyState"); - put("org.zstack.header.storage.cdp.CdpTaskInventory", "org.zstack.sdk.CdpTaskInventory"); - put("org.zstack.header.storage.cdp.CdpTaskResourceRefInventory", "org.zstack.sdk.CdpTaskResourceRefInventory"); - put("org.zstack.header.storage.cdp.CdpTaskState", "org.zstack.sdk.CdpTaskState"); - put("org.zstack.header.storage.cdp.CdpTaskStatus", "org.zstack.sdk.CdpTaskStatus"); - put("org.zstack.header.storage.cdp.CdpTaskType", "org.zstack.sdk.CdpTaskType"); - put("org.zstack.header.storage.database.backup.DatabaseBackupInventory", "org.zstack.sdk.databasebackup.DatabaseBackupInventory"); - put("org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory", "org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory"); - put("org.zstack.header.storage.database.backup.DatabaseBackupStruct", "org.zstack.sdk.databasebackup.DatabaseBackupStruct"); - put("org.zstack.header.storage.database.backup.DatabaseType", "org.zstack.sdk.databasebackup.DatabaseType"); - put("org.zstack.header.storage.primary.ImageCacheInventory", "org.zstack.sdk.ImageCacheInventory"); - put("org.zstack.header.storage.primary.PrimaryStorageHostStatus", "org.zstack.sdk.PrimaryStorageHostStatus"); - put("org.zstack.header.storage.primary.PrimaryStorageInventory", "org.zstack.sdk.PrimaryStorageInventory"); - put("org.zstack.header.storage.primary.UsageReport", "org.zstack.sdk.UsageReport"); - put("org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct", "org.zstack.sdk.BatchDeleteVolumeSnapshotStruct"); - put("org.zstack.header.storage.snapshot.ShrinkResult", "org.zstack.sdk.ShrinkResult"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory", "org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotInventory", "org.zstack.sdk.VolumeSnapshotInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory", "org.zstack.sdk.SnapshotLeafInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory", "org.zstack.sdk.VolumeSnapshotTreeInventory"); - put("org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult", "org.zstack.sdk.DeleteSnapshotGroupResult"); - put("org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult", "org.zstack.sdk.RevertSnapshotGroupResult"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability", "org.zstack.sdk.VolumeSnapshotGroupAvailability"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory", "org.zstack.sdk.VolumeSnapshotGroupInventory"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory", "org.zstack.sdk.VolumeSnapshotGroupRefInventory"); - put("org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory", "org.zstack.sdk.VolumeSnapshotReferenceTreeInventory"); - put("org.zstack.header.storageDevice.LunInventory", "org.zstack.sdk.LunInventory"); - put("org.zstack.header.storageDevice.ScsiLunClusterStatusInventory", "org.zstack.sdk.ScsiLunClusterStatusInventory"); - put("org.zstack.header.storageDevice.ScsiLunHostRefInventory", "org.zstack.sdk.ScsiLunHostRefInventory"); - put("org.zstack.header.storageDevice.ScsiLunInventory", "org.zstack.sdk.ScsiLunInventory"); - put("org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory", "org.zstack.sdk.ScsiLunVmInstanceRefInventory"); - put("org.zstack.header.tag.SystemTagInventory", "org.zstack.sdk.SystemTagInventory"); - put("org.zstack.header.tag.TagInventory", "org.zstack.sdk.TagInventory"); - put("org.zstack.header.tag.TagPatternInventory", "org.zstack.sdk.TagPatternInventory"); - put("org.zstack.header.tag.TagPatternType", "org.zstack.sdk.TagPatternType"); - put("org.zstack.header.tag.UserTagInventory", "org.zstack.sdk.UserTagInventory"); - put("org.zstack.header.vdpa.VmVdpaNicInventory", "org.zstack.sdk.VmVdpaNicInventory"); - put("org.zstack.header.vipQos.VipQosInventory", "org.zstack.sdk.VipQosInventory"); - put("org.zstack.header.vipQos.VpcSharedQosInventory", "org.zstack.sdk.VpcSharedQosInventory"); - put("org.zstack.header.vipQos.VpcSharedQosRefVipInventory", "org.zstack.sdk.VpcSharedQosRefVipInventory"); - put("org.zstack.header.vm.CloneVmInstanceInventory", "org.zstack.sdk.CloneVmInstanceInventory"); - put("org.zstack.header.vm.CloneVmInstanceResults", "org.zstack.sdk.CloneVmInstanceResults"); - put("org.zstack.header.vm.VdiPortInfo", "org.zstack.sdk.VdiPortInfo"); - put("org.zstack.header.vm.VirtualizerInfo", "org.zstack.sdk.VirtualizerInfo"); - put("org.zstack.header.vm.VirtualizerInfoInventory", "org.zstack.sdk.VirtualizerInfoInventory"); - put("org.zstack.header.vm.VmCapabilities", "org.zstack.sdk.VmCapabilities"); - put("org.zstack.header.vm.VmInstanceInventory", "org.zstack.sdk.VmInstanceInventory"); - put("org.zstack.header.vm.VmNicInventory", "org.zstack.sdk.VmNicInventory"); - put("org.zstack.header.vm.VmPriorityConfigInventory", "org.zstack.sdk.VmPriorityConfigInventory"); - put("org.zstack.header.vm.VmPriorityLevel", "org.zstack.sdk.VmPriorityLevel"); - put("org.zstack.header.vm.VmSchedHistoryInventory", "org.zstack.sdk.VmSchedHistoryInventory"); - put("org.zstack.header.vm.cdrom.VmCdRomInventory", "org.zstack.sdk.VmCdRomInventory"); - put("org.zstack.header.vm.devices.DeviceAddress", "org.zstack.sdk.DeviceAddress"); - put("org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory", "org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory"); - put("org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory", "org.zstack.sdk.VmInstanceDeviceAddressGroupInventory"); - put("org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory", "org.zstack.sdk.HostSchedulingRuleGroupInventory"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState", "org.zstack.sdk.VmSchedulingRuleExecuteState"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory", "org.zstack.sdk.VmSchedulingRuleGroupInventory"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleInventory", "org.zstack.sdk.VmSchedulingRuleInventory"); - put("org.zstack.header.vo.ResourceInventory", "org.zstack.sdk.ResourceInventory"); - put("org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct", "org.zstack.sdk.VolumeFormatReplyStruct"); - put("org.zstack.header.volume.VolumeInventory", "org.zstack.sdk.VolumeInventory"); - put("org.zstack.header.volume.block.AccessPathInfo", "org.zstack.sdk.AccessPathInfo"); - put("org.zstack.header.volume.block.BlockVolumeInventory", "org.zstack.sdk.BlockVolumeInventory"); - put("org.zstack.header.volume.block.ExponBlockVolumeInventory", "org.zstack.sdk.ExponBlockVolumeInventory"); - put("org.zstack.header.volume.block.XskyBlockVolumeInventory", "org.zstack.sdk.XskyBlockVolumeInventory"); - put("org.zstack.header.vpc.VpcRouterDnsInventory", "org.zstack.sdk.VpcRouterDnsInventory"); - put("org.zstack.header.vpc.VpcRouterVmInventory", "org.zstack.sdk.VpcRouterVmInventory"); - put("org.zstack.header.vpc.VpcSnatStateInventory", "org.zstack.sdk.VpcSnatStateInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory", "org.zstack.sdk.VpcHaGroupApplianceVmRefInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupInventory", "org.zstack.sdk.VpcHaGroupInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory", "org.zstack.sdk.VpcHaGroupMonitorIpInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory", "org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory", "org.zstack.sdk.VpcHaGroupVipRefInventory"); - put("org.zstack.header.zdfs.StorageType", "org.zstack.sdk.StorageType"); - put("org.zstack.header.zdfs.ZdfsInventory", "org.zstack.sdk.ZdfsInventory"); - put("org.zstack.header.zdfs.ZdfsStorageInventory", "org.zstack.sdk.ZdfsStorageInventory"); - put("org.zstack.header.zone.ZoneInventory", "org.zstack.sdk.ZoneInventory"); - put("org.zstack.header.zwatch.AuditData", "org.zstack.sdk.AuditData"); - put("org.zstack.header.zwatch.AuditDataV1", "org.zstack.sdk.AuditDataV1"); - put("org.zstack.header.zwatch.AuditDataV2", "org.zstack.sdk.AuditDataV2"); - put("org.zstack.hybrid.account.HybridAccountInventory", "org.zstack.sdk.HybridAccountInventory"); - put("org.zstack.hybrid.core.HybridType", "org.zstack.sdk.HybridType"); - put("org.zstack.hygon.HygonCcpDeviceInventory", "org.zstack.sdk.HygonCcpDeviceInventory"); - put("org.zstack.hygon.HygonDeviceState", "org.zstack.sdk.HygonDeviceState"); - put("org.zstack.hygon.HygonDeviceType", "org.zstack.sdk.HygonDeviceType"); - put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct", "org.zstack.sdk.iam2.api.APIPermissionStruct"); - put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission", "org.zstack.sdk.iam2.api.Permission"); - put("org.zstack.iam2.api.Attribute", "org.zstack.sdk.iam2.api.Attribute"); - put("org.zstack.iam2.api.ErrorResult", "org.zstack.sdk.iam2.api.ErrorResult"); - put("org.zstack.iam2.container.ContainerClusterInventory", "org.zstack.sdk.iam2.container.ContainerClusterInventory"); - put("org.zstack.iam2.entity.AttributeType", "org.zstack.sdk.iam2.entity.AttributeType"); - put("org.zstack.iam2.entity.IAM2AttributeInventory", "org.zstack.sdk.iam2.entity.IAM2AttributeInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory"); - put("org.zstack.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory"); - put("org.zstack.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory"); - put("org.zstack.iam2.entity.IAM2ProjectInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectInventory"); - put("org.zstack.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory"); - put("org.zstack.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory"); - put("org.zstack.iam2.entity.IAM2State", "org.zstack.sdk.iam2.entity.IAM2State"); - put("org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory"); - put("org.zstack.iam2.entity.OrganizationType", "org.zstack.sdk.iam2.entity.OrganizationType"); - put("org.zstack.iam2.entity.ProjectState", "org.zstack.sdk.iam2.entity.ProjectState"); - put("org.zstack.iam2.entity.StateEvent", "org.zstack.sdk.iam2.entity.StateEvent"); - put("org.zstack.iam2.project.template.Template", "org.zstack.sdk.iam2.project.template.Template"); - put("org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory"); - put("org.zstack.imagereplicator.ImageReplicationGroupInventory", "org.zstack.sdk.ImageReplicationGroupInventory"); - put("org.zstack.imagereplicator.ReplicationGroupState", "org.zstack.sdk.ReplicationGroupState"); - put("org.zstack.ipsec.IPsecConnectionInventory", "org.zstack.sdk.IPsecConnectionInventory"); - put("org.zstack.ipsec.IPsecL3NetworkRefInventory", "org.zstack.sdk.IPsecL3NetworkRefInventory"); - put("org.zstack.ipsec.IPsecPeerCidrInventory", "org.zstack.sdk.IPsecPeerCidrInventory"); - put("org.zstack.kvm.APIKvmRunShellEvent$ShellResult", "org.zstack.sdk.ShellResult"); - put("org.zstack.kvm.BaseVirtualDeviceTO", "org.zstack.sdk.BaseVirtualDeviceTO"); - put("org.zstack.kvm.KVMAgentCommands$CdRomTO", "org.zstack.sdk.CdRomTO"); - put("org.zstack.kvm.KVMAgentCommands$IsoTO", "org.zstack.sdk.IsoTO"); - put("org.zstack.kvm.KVMAgentCommands$NicTO", "org.zstack.sdk.NicTO"); - put("org.zstack.kvm.KVMAgentCommands$VHostAddOn", "org.zstack.sdk.VHostAddOn"); - put("org.zstack.kvm.KVMHostInventory", "org.zstack.sdk.KVMHostInventory"); - put("org.zstack.kvm.KVMIsoTO", "org.zstack.sdk.KVMIsoTO"); - put("org.zstack.kvm.VolumeTO", "org.zstack.sdk.VolumeTO"); - put("org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory", "org.zstack.sdk.HostOsCategoryInventory"); - put("org.zstack.kvm.hypervisor.datatype.HypervisorVersionState", "org.zstack.sdk.HypervisorVersionState"); - put("org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory", "org.zstack.sdk.KvmHostHypervisorMetadataInventory"); - put("org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory", "org.zstack.sdk.KvmHypervisorInfoInventory"); - put("org.zstack.kvm.xmlhook.XmlHookInventory", "org.zstack.sdk.XmlHookInventory"); - put("org.zstack.kvm.xmlhook.XmlHookType", "org.zstack.sdk.XmlHookType"); - put("org.zstack.ldap.LdapAccountRefInventory", "org.zstack.sdk.LdapAccountRefInventory"); - put("org.zstack.ldap.LdapServerInventory", "org.zstack.sdk.LdapServerInventory"); - put("org.zstack.license.AdditionalLicenseInfo", "org.zstack.sdk.AdditionalLicenseInfo"); - put("org.zstack.license.AdditionalLicenseType", "org.zstack.sdk.AdditionalLicenseType"); - put("org.zstack.license.LicenseAddOnInventory", "org.zstack.sdk.LicenseAddOnInventory"); - put("org.zstack.license.LicenseInventory", "org.zstack.sdk.LicenseInventory"); - put("org.zstack.license.UKeyInventory", "org.zstack.sdk.UKeyInventory"); - put("org.zstack.license.UKeyStatus", "org.zstack.sdk.UKeyStatus"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); - put("org.zstack.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory"); - put("org.zstack.license.header.server.LicenseUsageDetailView", "org.zstack.sdk.license.header.server.LicenseUsageDetailView"); - put("org.zstack.license.header.server.LicenseUsageView", "org.zstack.sdk.license.header.server.LicenseUsageView"); - put("org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView"); - put("org.zstack.log.server.LogCategory", "org.zstack.sdk.LogCategory"); - put("org.zstack.log.server.LogLevel", "org.zstack.sdk.LogLevel"); - put("org.zstack.log.server.LogServerInventory", "org.zstack.sdk.LogServerInventory"); - put("org.zstack.log.server.LogType", "org.zstack.sdk.LogType"); - put("org.zstack.login.entity.LdapResourceRefInventory", "org.zstack.sdk.LdapResourceRefInventory"); - put("org.zstack.loginControl.entity.AccessControlRuleInventory", "org.zstack.sdk.AccessControlRuleInventory"); - put("org.zstack.loginControl.entity.ControlStrategy", "org.zstack.sdk.ControlStrategy"); - put("org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory", "org.zstack.sdk.ShareableVolumeVmInstanceRefInventory"); - put("org.zstack.monitoring.AlertInventory", "org.zstack.sdk.AlertInventory"); - put("org.zstack.monitoring.MonitorTriggerInventory", "org.zstack.sdk.MonitorTriggerInventory"); - put("org.zstack.monitoring.actions.EmailTriggerActionInventory", "org.zstack.sdk.EmailTriggerActionInventory"); - put("org.zstack.monitoring.actions.MonitorTriggerActionInventory", "org.zstack.sdk.MonitorTriggerActionInventory"); - put("org.zstack.monitoring.items.ItemInventory", "org.zstack.sdk.ItemInventory"); - put("org.zstack.monitoring.media.EmailMediaInventory", "org.zstack.sdk.EmailMediaInventory"); - put("org.zstack.monitoring.media.MediaInventory", "org.zstack.sdk.MediaInventory"); - put("org.zstack.mttyDevice.MttyDeviceInventory", "org.zstack.sdk.MttyDeviceInventory"); - put("org.zstack.mttyDevice.MttyDeviceState", "org.zstack.sdk.MttyDeviceState"); - put("org.zstack.mttyDevice.MttyDeviceType", "org.zstack.sdk.MttyDeviceType"); - put("org.zstack.mttyDevice.MttyDeviceVirtStatus", "org.zstack.sdk.MttyDeviceVirtStatus"); - put("org.zstack.multicast.router.header.MulticastRouteInventory", "org.zstack.sdk.MulticastRouteInventory"); - put("org.zstack.multicast.router.header.MulticastRouterInventory", "org.zstack.sdk.MulticastRouterInventory"); - put("org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory", "org.zstack.sdk.MulticastRouterRendezvousPointInventory"); - put("org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory", "org.zstack.sdk.MulticastRouterVpcVRouterRefInventory"); - put("org.zstack.nas.NasFileSystemInventory", "org.zstack.sdk.NasFileSystemInventory"); - put("org.zstack.nas.NasMountTargetInventory", "org.zstack.sdk.NasMountTargetInventory"); - put("org.zstack.nas.NasProtocolType", "org.zstack.sdk.NasProtocolType"); - put("org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory", "org.zstack.sdk.HostNetworkBondingInventory"); - put("org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory", "org.zstack.sdk.HostNetworkInterfaceInventory"); - put("org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory", "org.zstack.sdk.PhysicalSwitchInventory"); - put("org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory", "org.zstack.sdk.PhysicalSwitchPortInventory"); - put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory", "org.zstack.sdk.HostNetworkInterfaceLldpInventory"); - put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory", "org.zstack.sdk.HostNetworkInterfaceLldpRefInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory"); - put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory", "org.zstack.sdk.L2PortGroupNetworkInventory"); - put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode", "org.zstack.sdk.L2PortGroupVlanMode"); - put("org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory", "org.zstack.sdk.L2VirtualSwitchNetworkInventory"); - put("org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory", "org.zstack.sdk.RemoteVtepInventory"); - put("org.zstack.network.l2.vxlan.vtep.VtepInventory", "org.zstack.sdk.VtepInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory", "org.zstack.sdk.L2VxlanNetworkInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory", "org.zstack.sdk.L2VxlanNetworkPoolInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory", "org.zstack.sdk.VniRangeInventory"); - put("org.zstack.network.ovn.OvnControllerInventory", "org.zstack.sdk.OvnControllerInventory"); - put("org.zstack.network.ovn.OvnControllerVmInstanceInventory", "org.zstack.sdk.OvnControllerVmInstanceInventory"); - put("org.zstack.network.ovn.OvnControllerVmOfferingInventory", "org.zstack.sdk.OvnControllerVmOfferingInventory"); - put("org.zstack.network.securitygroup.SecurityGroupIngressRuleTO", "org.zstack.sdk.SecurityGroupIngressRuleTO"); - put("org.zstack.network.securitygroup.SecurityGroupInventory", "org.zstack.sdk.SecurityGroupInventory"); - put("org.zstack.network.securitygroup.SecurityGroupRuleInventory", "org.zstack.sdk.SecurityGroupRuleInventory"); - put("org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory", "org.zstack.sdk.VmNicSecurityGroupRefInventory"); - put("org.zstack.network.securitygroup.VmNicSecurityPolicyInventory", "org.zstack.sdk.VmNicSecurityPolicyInventory"); - put("org.zstack.network.service.eip.EipInventory", "org.zstack.sdk.EipInventory"); - put("org.zstack.network.service.flat.IpStatisticData", "org.zstack.sdk.IpStatisticData"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus", "org.zstack.sdk.NfvInstClusterStatus"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory", "org.zstack.sdk.NfvInstGroupConfigTaskInventory"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType", "org.zstack.sdk.FuncType"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType", "org.zstack.sdk.InstType"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode", "org.zstack.sdk.NfvInstGroupOperationMode"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus", "org.zstack.sdk.NfvInstGroupStatus"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstInventory", "org.zstack.sdk.NfvInstInventory"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory", "org.zstack.sdk.NfvInstOfferingInventory"); - put("org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl", "org.zstack.sdk.LoadBalancerListerAcl"); - put("org.zstack.network.service.lb.CertificateInventory", "org.zstack.sdk.CertificateInventory"); - put("org.zstack.network.service.lb.LoadBalancerInventory", "org.zstack.sdk.LoadBalancerInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory", "org.zstack.sdk.LoadBalancerListenerACLRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory", "org.zstack.sdk.LoadBalancerListenerCertificateRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerInventory", "org.zstack.sdk.LoadBalancerListenerInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory", "org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory", "org.zstack.sdk.LoadBalancerListenerVmNicRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupInventory", "org.zstack.sdk.LoadBalancerServerGroupInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory", "org.zstack.sdk.LoadBalancerServerGroupServerIpInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory", "org.zstack.sdk.NfvInstGroupInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory", "org.zstack.sdk.NfvInstGroupL3NetworkRefInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory", "org.zstack.sdk.NfvInstGroupMonitorIpInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory", "org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory"); - put("org.zstack.network.service.portforwarding.PortForwardingRuleInventory", "org.zstack.sdk.PortForwardingRuleInventory"); - put("org.zstack.network.service.slb.SlbGroupInventory", "org.zstack.sdk.SlbGroupInventory"); - put("org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory", "org.zstack.sdk.SlbGroupL3NetworkRefInventory"); - put("org.zstack.network.service.slb.SlbGroupMonitorIpInventory", "org.zstack.sdk.SlbGroupMonitorIpInventory"); - put("org.zstack.network.service.slb.SlbLoadBalancerInventory", "org.zstack.sdk.SlbLoadBalancerInventory"); - put("org.zstack.network.service.slb.SlbOfferingInventory", "org.zstack.sdk.SlbOfferingInventory"); - put("org.zstack.network.service.slb.SlbVmInstanceInventory", "org.zstack.sdk.SlbVmInstanceInventory"); - put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory", "org.zstack.sdk.SlbVmInstanceConfigTaskInventory"); - put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus", "org.zstack.sdk.SlbVmInstanceConfigTaskStatus"); - put("org.zstack.network.service.vip.VipInventory", "org.zstack.sdk.VipInventory"); - put("org.zstack.network.service.vip.VipNetworkServicesRefInventory", "org.zstack.sdk.VipNetworkServicesRefInventory"); - put("org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory", "org.zstack.sdk.VipPortRangeInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory", "org.zstack.sdk.VirtualRouterOfferingInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory", "org.zstack.sdk.VirtualRouterSoftwareVersionInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterVmInventory", "org.zstack.sdk.VirtualRouterVmInventory"); - put("org.zstack.observabilityServer.ObservabilityServerOfferingInventory", "org.zstack.sdk.ObservabilityServerOfferingInventory"); - put("org.zstack.observabilityServer.ObservabilityServerVmInventory", "org.zstack.sdk.ObservabilityServerVmInventory"); - put("org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory", "org.zstack.sdk.ObservabilityServerServiceDataInventory"); - put("org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory", "org.zstack.sdk.LoadBalancerDataInventory"); - put("org.zstack.ovf.datatype.ImagePackageInventory", "org.zstack.sdk.ImagePackageInventory"); - put("org.zstack.ovf.datatype.ImagePackageState", "org.zstack.sdk.ImagePackageState"); - put("org.zstack.ovf.datatype.OvfCdDriverInfo", "org.zstack.sdk.OvfCdDriverInfo"); - put("org.zstack.ovf.datatype.OvfCpuInfo", "org.zstack.sdk.OvfCpuInfo"); - put("org.zstack.ovf.datatype.OvfDiskInfo", "org.zstack.sdk.OvfDiskInfo"); - put("org.zstack.ovf.datatype.OvfEthernetAdapterInfo", "org.zstack.sdk.OvfEthernetAdapterInfo"); - put("org.zstack.ovf.datatype.OvfInfo", "org.zstack.sdk.OvfInfo"); - put("org.zstack.ovf.datatype.OvfMemoryInfo", "org.zstack.sdk.OvfMemoryInfo"); - put("org.zstack.ovf.datatype.OvfNetworkInfo", "org.zstack.sdk.OvfNetworkInfo"); - put("org.zstack.ovf.datatype.OvfOSInfo", "org.zstack.sdk.OvfOSInfo"); - put("org.zstack.ovf.datatype.OvfSystemInfo", "org.zstack.sdk.OvfSystemInfo"); - put("org.zstack.ovf.datatype.OvfVolumeInfo", "org.zstack.sdk.OvfVolumeInfo"); - put("org.zstack.pciDevice.HostIommuStateType", "org.zstack.sdk.HostIommuStateType"); - put("org.zstack.pciDevice.HostIommuStatusType", "org.zstack.sdk.HostIommuStatusType"); - put("org.zstack.pciDevice.PciDeviceChooser", "org.zstack.sdk.PciDeviceChooser"); - put("org.zstack.pciDevice.PciDeviceInventory", "org.zstack.sdk.PciDeviceInventory"); - put("org.zstack.pciDevice.PciDeviceMetaData", "org.zstack.sdk.PciDeviceMetaData"); - put("org.zstack.pciDevice.PciDeviceMetaDataEntry", "org.zstack.sdk.PciDeviceMetaDataEntry"); - put("org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator", "org.zstack.sdk.PciDeviceMetaDataOperator"); - put("org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory"); - put("org.zstack.pciDevice.PciDeviceOfferingInventory", "org.zstack.sdk.PciDeviceOfferingInventory"); - put("org.zstack.pciDevice.PciDeviceOfferingType", "org.zstack.sdk.PciDeviceOfferingType"); - put("org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory", "org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory"); - put("org.zstack.pciDevice.PciDeviceState", "org.zstack.sdk.PciDeviceState"); - put("org.zstack.pciDevice.PciDeviceStatus", "org.zstack.sdk.PciDeviceStatus"); - put("org.zstack.pciDevice.PciDeviceType", "org.zstack.sdk.PciDeviceType"); - put("org.zstack.pciDevice.gpu.GpuAllocateStatus", "org.zstack.sdk.GpuAllocateStatus"); - put("org.zstack.pciDevice.gpu.GpuDeviceInventory", "org.zstack.sdk.GpuDeviceInventory"); - put("org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory", "org.zstack.sdk.GpuDeviceSpecCandidateInventory"); - put("org.zstack.pciDevice.gpu.GpuDeviceSpecInventory", "org.zstack.sdk.GpuDeviceSpecInventory"); - put("org.zstack.pciDevice.gpu.GpuVendor", "org.zstack.sdk.GpuVendor"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory", "org.zstack.sdk.DGpuDeviceInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory", "org.zstack.sdk.DGpuProfileInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory", "org.zstack.sdk.DGpuSpecStatsInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuStatus", "org.zstack.sdk.DGpuStatus"); - put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory", "org.zstack.sdk.MdevDeviceSpecInventory"); - put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState", "org.zstack.sdk.MdevDeviceSpecState"); - put("org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory", "org.zstack.sdk.PciDeviceMdevSpecRefInventory"); - put("org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory"); - put("org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory", "org.zstack.sdk.PciDeviceSpecInventory"); - put("org.zstack.pciDevice.specification.pci.PciDeviceSpecState", "org.zstack.sdk.PciDeviceSpecState"); - put("org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory", "org.zstack.sdk.VmInstancePciDeviceSpecRefInventory"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtMode", "org.zstack.sdk.PciDeviceVirtMode"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtState", "org.zstack.sdk.PciDeviceVirtState"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtStatus", "org.zstack.sdk.PciDeviceVirtStatus"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser", "org.zstack.sdk.MdevDeviceChooser"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory", "org.zstack.sdk.MdevDeviceInventory"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState", "org.zstack.sdk.MdevDeviceState"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus", "org.zstack.sdk.MdevDeviceStatus"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType", "org.zstack.sdk.MdevDeviceType"); - put("org.zstack.policyRoute.PolicyRouteRuleInventory", "org.zstack.sdk.PolicyRouteRuleInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleProtocol", "org.zstack.sdk.PolicyRouteRuleProtocol"); - put("org.zstack.policyRoute.PolicyRouteRuleSetInventory", "org.zstack.sdk.PolicyRouteRuleSetInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory", "org.zstack.sdk.PolicyRouteRuleSetL3RefInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleState", "org.zstack.sdk.PolicyRouteRuleState"); - put("org.zstack.policyRoute.PolicyRouteTableInventory", "org.zstack.sdk.PolicyRouteTableInventory"); - put("org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory", "org.zstack.sdk.PolicyRouteTableRouteEntryInventory"); - put("org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory", "org.zstack.sdk.PolicyRouteTableVRouterRefInventory"); - put("org.zstack.proxy.UserProxyConfigInventory", "org.zstack.sdk.UserProxyConfigInventory"); - put("org.zstack.proxy.UserProxyConfigResourceRefInventory", "org.zstack.sdk.UserProxyConfigResourceRefInventory"); - put("org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct", "org.zstack.sdk.ResourceBindableConfigStruct"); - put("org.zstack.resourceconfig.ResourceConfigInventory", "org.zstack.sdk.ResourceConfigInventory"); - put("org.zstack.resourceconfig.ResourceConfigStruct", "org.zstack.sdk.ResourceConfigStruct"); - put("org.zstack.sdnController.header.H3cSdnControllerTenantInventory", "org.zstack.sdk.H3cSdnControllerTenantInventory"); - put("org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory", "org.zstack.sdk.HardwareL2VxlanNetworkInventory"); - put("org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory"); - put("org.zstack.sdnController.header.SdnVlanRange", "org.zstack.sdk.SdnVlanRange"); - put("org.zstack.snmp.agent.SnmpAgentInventory", "org.zstack.sdk.SnmpAgentInventory"); - put("org.zstack.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory"); - put("org.zstack.sns.SNSApplicationEndpointInventory", "org.zstack.sdk.sns.SNSApplicationEndpointInventory"); - put("org.zstack.sns.SNSApplicationPlatformInventory", "org.zstack.sdk.sns.SNSApplicationPlatformInventory"); - put("org.zstack.sns.SNSSmsReceiverInventory", "org.zstack.sdk.sns.SNSSmsReceiverInventory"); - put("org.zstack.sns.SNSSubscriberInventory", "org.zstack.sdk.sns.SNSSubscriberInventory"); - put("org.zstack.sns.SNSTopicInventory", "org.zstack.sdk.sns.SNSTopicInventory"); - put("org.zstack.sns.SmsReceiverType", "org.zstack.sdk.sns.SmsReceiverType"); - put("org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); - put("org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); - put("org.zstack.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory"); - put("org.zstack.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory"); - put("org.zstack.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory"); - put("org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory"); - put("org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory"); - put("org.zstack.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory"); - put("org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); - put("org.zstack.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory"); - put("org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory"); - put("org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); - put("org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); - put("org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory"); - put("org.zstack.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory"); - put("org.zstack.sso.header.AttributePurpose", "org.zstack.sdk.AttributePurpose"); - put("org.zstack.sso.header.CasClientInventory", "org.zstack.sdk.CasClientInventory"); - put("org.zstack.sso.header.CasState", "org.zstack.sdk.CasState"); - put("org.zstack.sso.header.ExtendedAttribute", "org.zstack.sdk.ExtendedAttribute"); - put("org.zstack.sso.header.OAuth2ClientInventory", "org.zstack.sdk.OAuth2ClientInventory"); - put("org.zstack.sso.header.OAuth2TokenInventory", "org.zstack.sdk.OAuth2TokenInventory"); - put("org.zstack.sso.header.RedirectUrlTemplate", "org.zstack.sdk.RedirectUrlTemplate"); - put("org.zstack.sso.header.RuleAttributeType", "org.zstack.sdk.RuleAttributeType"); - put("org.zstack.sso.header.SAML2ClientInventory", "org.zstack.sdk.SAML2ClientInventory"); - put("org.zstack.sso.header.SAML2State", "org.zstack.sdk.SAML2State"); - put("org.zstack.sso.header.SSOClientAttributeInventory", "org.zstack.sdk.SSOClientAttributeInventory"); - put("org.zstack.sso.header.SSOClientInventory", "org.zstack.sdk.SSOClientInventory"); - put("org.zstack.sso.header.SSORedirectTemplateInventory", "org.zstack.sdk.SSORedirectTemplateInventory"); - put("org.zstack.sso.header.SSOServerTokenInventory", "org.zstack.sdk.SSOServerTokenInventory"); - put("org.zstack.sso.header.SSOTokenInventory", "org.zstack.sdk.SSOTokenInventory"); - put("org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory", "org.zstack.sdk.ImageStoreBackupStorageInventory"); - put("org.zstack.storage.backup.imagestore.ImageStoreGcResult", "org.zstack.sdk.ImageStoreGcResult"); - put("org.zstack.storage.backup.imagestore.ImageStoreImageStruct", "org.zstack.sdk.ImageStoreImageStruct"); - put("org.zstack.storage.backup.sftp.SftpBackupStorageInventory", "org.zstack.sdk.SftpBackupStorageInventory"); - put("org.zstack.storage.ceph.backup.CephBackupStorageInventory", "org.zstack.sdk.CephBackupStorageInventory"); - put("org.zstack.storage.ceph.backup.CephBackupStorageMonInventory", "org.zstack.sdk.CephBackupStorageMonInventory"); - put("org.zstack.storage.ceph.primary.CephOsdGroupInventory", "org.zstack.sdk.CephOsdGroupInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStorageInventory", "org.zstack.sdk.CephPrimaryStorageInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory", "org.zstack.sdk.CephPrimaryStorageMonInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory", "org.zstack.sdk.CephPrimaryStoragePoolInventory"); - put("org.zstack.storage.ceph.primary.KVMCephVolumeTO", "org.zstack.sdk.KVMCephVolumeTO"); - put("org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.ceph.primary.KvmCephCdRomTO", "org.zstack.sdk.KvmCephCdRomTO"); - put("org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.ceph.primary.KvmCephIsoTO", "org.zstack.sdk.KvmCephIsoTO"); - put("org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.device.fibreChannel.FiberChannelLunInventory", "org.zstack.sdk.FiberChannelLunInventory"); - put("org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory", "org.zstack.sdk.FiberChannelStorageInventory"); - put("org.zstack.storage.device.hba.FcHbaDeviceInventory", "org.zstack.sdk.FcHbaDeviceInventory"); - put("org.zstack.storage.device.hba.HbaDeviceInventory", "org.zstack.sdk.HbaDeviceInventory"); - put("org.zstack.storage.device.iscsi.IscsiLunInventory", "org.zstack.sdk.IscsiLunInventory"); - put("org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory", "org.zstack.sdk.IscsiServerClusterRefInventory"); - put("org.zstack.storage.device.iscsi.IscsiServerInventory", "org.zstack.sdk.IscsiServerInventory"); - put("org.zstack.storage.device.iscsi.IscsiTargetInventory", "org.zstack.sdk.IscsiTargetInventory"); - put("org.zstack.storage.device.localRaid.LocateStatus", "org.zstack.sdk.LocateStatus"); - put("org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory"); - put("org.zstack.storage.device.localRaid.RaidControllerInventory", "org.zstack.sdk.RaidControllerInventory"); - put("org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory", "org.zstack.sdk.RaidPhysicalDriveInventory"); - put("org.zstack.storage.device.localRaid.RunningState", "org.zstack.sdk.RunningState"); - put("org.zstack.storage.device.localRaid.SmartDataStruct", "org.zstack.sdk.SmartDataStruct"); - put("org.zstack.storage.device.multipath.DeviceTO", "org.zstack.sdk.DeviceTO"); - put("org.zstack.storage.device.multipath.MultipathTopologyStruct", "org.zstack.sdk.MultipathTopologyStruct"); - put("org.zstack.storage.device.nvme.NvmeLunHostRefInventory", "org.zstack.sdk.NvmeLunHostRefInventory"); - put("org.zstack.storage.device.nvme.NvmeLunInventory", "org.zstack.sdk.NvmeLunInventory"); - put("org.zstack.storage.device.nvme.NvmeServerClusterRefInventory", "org.zstack.sdk.NvmeServerClusterRefInventory"); - put("org.zstack.storage.device.nvme.NvmeServerInventory", "org.zstack.sdk.NvmeServerInventory"); - put("org.zstack.storage.device.nvme.NvmeTargetInventory", "org.zstack.sdk.NvmeTargetInventory"); - put("org.zstack.storage.primary.block.BlockPrimaryStorageInventory", "org.zstack.sdk.BlockPrimaryStorageInventory"); - put("org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity", "org.zstack.sdk.HostDiskCapacity"); - put("org.zstack.storage.primary.local.LocalStorageResourceRefInventory", "org.zstack.sdk.LocalStorageResourceRefInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory", "org.zstack.sdk.MiniStorageHostRefInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageInventory", "org.zstack.sdk.MiniStorageInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory", "org.zstack.sdk.MiniStorageResourceReplicationInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageType", "org.zstack.sdk.MiniStorageType"); - put("org.zstack.storage.primary.ministorage.ReplicationDiskStatus", "org.zstack.sdk.ReplicationDiskStatus"); - put("org.zstack.storage.primary.ministorage.ReplicationNetworkStatus", "org.zstack.sdk.ReplicationNetworkStatus"); - put("org.zstack.storage.primary.ministorage.ReplicationRole", "org.zstack.sdk.ReplicationRole"); - put("org.zstack.storage.primary.ministorage.ReplicationState", "org.zstack.sdk.ReplicationState"); - put("org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct", "org.zstack.sdk.SharedBlockCandidateStruct"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupType", "org.zstack.sdk.SharedBlockGroupType"); - put("org.zstack.storage.primary.sharedblock.SharedBlockInventory", "org.zstack.sdk.SharedBlockInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockState", "org.zstack.sdk.SharedBlockState"); - put("org.zstack.storage.primary.sharedblock.SharedBlockStatus", "org.zstack.sdk.SharedBlockStatus"); - put("org.zstack.storage.primary.sharedblock.SharedBlockType", "org.zstack.sdk.SharedBlockType"); - put("org.zstack.tag2.AttachTagResult", "org.zstack.sdk.AttachTagResult"); - put("org.zstack.templateConfig.GlobalConfigTemplateInventory", "org.zstack.sdk.GlobalConfigTemplateInventory"); - put("org.zstack.templateConfig.TemplateConfigInventory", "org.zstack.sdk.TemplateConfigInventory"); - put("org.zstack.ticket.entity.ArchiveTicketInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketInventory"); - put("org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory"); - put("org.zstack.ticket.entity.TicketFlowCollectionInventory", "org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory"); - put("org.zstack.ticket.entity.TicketFlowInventory", "org.zstack.sdk.ticket.entity.TicketFlowInventory"); - put("org.zstack.ticket.entity.TicketInventory", "org.zstack.sdk.ticket.entity.TicketInventory"); - put("org.zstack.ticket.entity.TicketRequest", "org.zstack.sdk.ticket.entity.TicketRequest"); - put("org.zstack.ticket.entity.TicketStatus", "org.zstack.sdk.ticket.entity.TicketStatus"); - put("org.zstack.ticket.entity.TicketStatusEvent", "org.zstack.sdk.ticket.entity.TicketStatusEvent"); - put("org.zstack.ticket.entity.TicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory"); - put("org.zstack.ticket.entity.TicketTypeInventory", "org.zstack.sdk.ticket.entity.TicketTypeInventory"); - put("org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); - put("org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory", "org.zstack.sdk.TwoFactorAuthenticationInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory", "org.zstack.sdk.TwoFactorAuthenticationSecretInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus", "org.zstack.sdk.TwoFactorAuthenticationSecretStatus"); - put("org.zstack.usbDevice.UsbDeviceInventory", "org.zstack.sdk.UsbDeviceInventory"); - put("org.zstack.usbDevice.UsbDeviceState", "org.zstack.sdk.UsbDeviceState"); - put("org.zstack.v2v.V2VConversionHostInventory", "org.zstack.sdk.V2VConversionHostInventory"); - put("org.zstack.vmware.ESXHostInventory", "org.zstack.sdk.ESXHostInventory"); - put("org.zstack.vmware.VCenterBackupStorageInventory", "org.zstack.sdk.VCenterBackupStorageInventory"); - put("org.zstack.vmware.VCenterClusterInventory", "org.zstack.sdk.VCenterClusterInventory"); - put("org.zstack.vmware.VCenterDatacenterInventory", "org.zstack.sdk.VCenterDatacenterInventory"); - put("org.zstack.vmware.VCenterInventory", "org.zstack.sdk.VCenterInventory"); - put("org.zstack.vmware.VCenterPrimaryStorageInventory", "org.zstack.sdk.VCenterPrimaryStorageInventory"); - put("org.zstack.vmware.VCenterResourcePoolInventory", "org.zstack.sdk.VCenterResourcePoolInventory"); - put("org.zstack.vmware.VCenterResourcePoolUsageInventory", "org.zstack.sdk.VCenterResourcePoolUsageInventory"); - put("org.zstack.vpcfirewall.entity.ActionType", "org.zstack.sdk.ActionType"); - put("org.zstack.vpcfirewall.entity.FirewallRuleState", "org.zstack.sdk.FirewallRuleState"); - put("org.zstack.vpcfirewall.entity.IpSetType", "org.zstack.sdk.IpSetType"); - put("org.zstack.vpcfirewall.entity.PacketsForwardType", "org.zstack.sdk.PacketsForwardType"); - put("org.zstack.vpcfirewall.entity.ProtocolType", "org.zstack.sdk.ProtocolType"); - put("org.zstack.vpcfirewall.entity.VpcFirewallInventory", "org.zstack.sdk.VpcFirewallInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory", "org.zstack.sdk.VpcFirewallIpSetTemplateInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory", "org.zstack.sdk.VpcFirewallRuleInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory", "org.zstack.sdk.VpcFirewallRuleSetInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory", "org.zstack.sdk.VpcFirewallRuleSetL3RefInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory", "org.zstack.sdk.VpcFirewallRuleTemplateInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory", "org.zstack.sdk.VpcFirewallVRouterRefInventory"); - put("org.zstack.vrouterRoute.VRouterRouteEntryAO", "org.zstack.sdk.VRouterRouteEntryAO"); - put("org.zstack.vrouterRoute.VRouterRouteEntryInventory", "org.zstack.sdk.VRouterRouteEntryInventory"); - put("org.zstack.vrouterRoute.VRouterRouteEntryType", "org.zstack.sdk.VRouterRouteEntryType"); - put("org.zstack.vrouterRoute.VRouterRouteTableInventory", "org.zstack.sdk.VRouterRouteTableInventory"); - put("org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory"); - put("org.zstack.xdragon.XDragonHostInventory", "org.zstack.sdk.XDragonHostInventory"); - put("org.zstack.zbox.ZBoxInventory", "org.zstack.sdk.ZBoxInventory"); - put("org.zstack.zbox.ZBoxLocationRefInventory", "org.zstack.sdk.ZBoxLocationRefInventory"); - put("org.zstack.zbox.ZBoxState", "org.zstack.sdk.ZBoxState"); - put("org.zstack.zbox.ZBoxStatus", "org.zstack.sdk.ZBoxStatus"); - put("org.zstack.zops.ChronyServerInfo", "org.zstack.sdk.ChronyServerInfo"); - put("org.zstack.zops.ChronyServerInfoPair", "org.zstack.sdk.ChronyServerInfoPair"); - put("org.zstack.zops.HostConnectedStatus", "org.zstack.sdk.HostConnectedStatus"); - put("org.zstack.zops.NetworkReachablePair", "org.zstack.sdk.NetworkReachablePair"); - put("org.zstack.zql.ZQLQueryReturn", "org.zstack.sdk.ZQLQueryReturn"); - put("org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam", "org.zstack.sdk.zwatch.alarm.ActionParam"); - put("org.zstack.zwatch.alarm.AlarmActionInventory", "org.zstack.sdk.zwatch.alarm.AlarmActionInventory"); - put("org.zstack.zwatch.alarm.AlarmDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory"); - put("org.zstack.zwatch.alarm.AlarmInventory", "org.zstack.sdk.zwatch.alarm.AlarmInventory"); - put("org.zstack.zwatch.alarm.AlarmLabelInventory", "org.zstack.sdk.zwatch.alarm.AlarmLabelInventory"); - put("org.zstack.zwatch.alarm.AlarmState", "org.zstack.sdk.zwatch.alarm.AlarmState"); - put("org.zstack.zwatch.alarm.AlarmStatus", "org.zstack.sdk.zwatch.alarm.AlarmStatus"); - put("org.zstack.zwatch.alarm.AlertDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlertDataAckInventory"); - put("org.zstack.zwatch.alarm.EventDataAckInventory", "org.zstack.sdk.zwatch.alarm.EventDataAckInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionState", "org.zstack.sdk.zwatch.alarm.EventSubscriptionState"); - put("org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); - put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); - put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); - put("org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory"); - put("org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); - put("org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct", "org.zstack.sdk.zwatch.api.EventStruct"); - put("org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct", "org.zstack.sdk.zwatch.api.MetricStruct"); - put("org.zstack.zwatch.api.Histogram", "org.zstack.sdk.zwatch.api.Histogram"); - put("org.zstack.zwatch.api.Histogram$Tag", "org.zstack.sdk.zwatch.api.Tag"); - put("org.zstack.zwatch.datatype.AlarmData", "org.zstack.sdk.zwatch.datatype.AlarmData"); - put("org.zstack.zwatch.datatype.AlarmDataV1", "org.zstack.sdk.zwatch.datatype.AlarmDataV1"); - put("org.zstack.zwatch.datatype.AlarmDataV2", "org.zstack.sdk.zwatch.datatype.AlarmDataV2"); - put("org.zstack.zwatch.datatype.AuditType", "org.zstack.sdk.zwatch.datatype.AuditType"); - put("org.zstack.zwatch.datatype.Datapoint", "org.zstack.sdk.zwatch.datatype.Datapoint"); - put("org.zstack.zwatch.datatype.EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); - put("org.zstack.zwatch.datatype.EventData", "org.zstack.sdk.zwatch.datatype.EventData"); - put("org.zstack.zwatch.datatype.EventFamily$EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); - put("org.zstack.zwatch.datatype.Label", "org.zstack.sdk.zwatch.datatype.Label"); - put("org.zstack.zwatch.datatype.Label$Operator", "org.zstack.sdk.zwatch.datatype.Operator"); - put("org.zstack.zwatch.datatype.MetricDatum", "org.zstack.sdk.zwatch.datatype.MetricDatum"); - put("org.zstack.zwatch.influxdb.InfluxEventData", "org.zstack.sdk.zwatch.influxdb.InfluxEventData"); - put("org.zstack.zwatch.influxdb.InfluxEventDataV1", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1"); - put("org.zstack.zwatch.influxdb.InfluxEventDataV2", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2"); - put("org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory"); - put("org.zstack.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory"); - put("org.zstack.zwatch.metricpusher.ReceiverState", "org.zstack.sdk.zwatch.metricpusher.ReceiverState"); - put("org.zstack.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory"); - put("org.zstack.zwatch.migratedb.AuditsInventory", "org.zstack.sdk.zwatch.migratedb.AuditsInventory"); - put("org.zstack.zwatch.migratedb.EventRecordsInventory", "org.zstack.sdk.zwatch.migratedb.EventRecordsInventory"); - put("org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory"); - put("org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory"); - put("org.zstack.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState"); - put("org.zstack.zwatch.resnotify.ResNotifyType", "org.zstack.sdk.zwatch.resnotify.ResNotifyType"); - put("org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory"); - put("org.zstack.zwatch.ruleengine.ComparisonOperator", "org.zstack.sdk.zwatch.ruleengine.ComparisonOperator"); - put("org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); - put("org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); - put("org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); + put("org.zstack.abstraction.OptionType", "org.zstack.sdk.OptionType"); + put("org.zstack.abstraction.OptionType$InputType", "org.zstack.sdk.InputType"); + put("org.zstack.accessKey.AccessKeyInventory", "org.zstack.sdk.AccessKeyInventory"); + put("org.zstack.accessKey.AccessKeyState", "org.zstack.sdk.AccessKeyState"); + put("org.zstack.accessKey.AccessKeyType", "org.zstack.sdk.AccessKeyType"); + put("org.zstack.ai.NginxRedirectRule", "org.zstack.sdk.NginxRedirectRule"); + put("org.zstack.ai.entity.ApplicationDevelopmentServiceInventory", "org.zstack.sdk.ApplicationDevelopmentServiceInventory"); + put("org.zstack.ai.entity.DatasetInventory", "org.zstack.sdk.DatasetInventory"); + put("org.zstack.ai.entity.ModelCenterCapacityInventory", "org.zstack.sdk.ModelCenterCapacityInventory"); + put("org.zstack.ai.entity.ModelCenterInventory", "org.zstack.sdk.ModelCenterInventory"); + put("org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory", "org.zstack.sdk.ModelEvalServiceInstanceGroupInventory"); + put("org.zstack.ai.entity.ModelEvaluationTaskInventory", "org.zstack.sdk.ModelEvaluationTaskInventory"); + put("org.zstack.ai.entity.ModelInventory", "org.zstack.sdk.ModelInventory"); + put("org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory", "org.zstack.sdk.ModelServiceGroupDatasetRefInventory"); + put("org.zstack.ai.entity.ModelServiceInstanceGroupInventory", "org.zstack.sdk.ModelServiceInstanceGroupInventory"); + put("org.zstack.ai.entity.ModelServiceInstanceInventory", "org.zstack.sdk.ModelServiceInstanceInventory"); + put("org.zstack.ai.entity.ModelServiceInventory", "org.zstack.sdk.ModelServiceInventory"); + put("org.zstack.ai.entity.ModelServiceRefInventory", "org.zstack.sdk.ModelServiceRefInventory"); + put("org.zstack.ai.entity.ModelServiceTemplateInventory", "org.zstack.sdk.ModelServiceTemplateInventory"); + put("org.zstack.ai.entity.TrainedModelRecordInventory", "org.zstack.sdk.TrainedModelRecordInventory"); + put("org.zstack.ai.entity.VmModelMountInventory", "org.zstack.sdk.VmModelMountInventory"); + put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); + put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); + put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); + put("org.zstack.ai.message.MatchEvidence", "org.zstack.sdk.MatchEvidence"); + put("org.zstack.ai.message.MatchedStep", "org.zstack.sdk.MatchedStep"); + put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); + put("org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService", "org.zstack.sdk.MetaServerService"); + put("org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus", "org.zstack.sdk.ServiceStatus"); + put("org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService", "org.zstack.sdk.ZdfsService"); + put("org.zstack.ai.message.ModelService", "org.zstack.sdk.ModelService"); + put("org.zstack.ai.message.ModelServiceMatchEntry", "org.zstack.sdk.ModelServiceMatchEntry"); + put("org.zstack.ai.message.ModelServiceMatchEntryName", "org.zstack.sdk.ModelServiceMatchEntryName"); + put("org.zstack.ai.message.ModelServiceMatchStatus", "org.zstack.sdk.ModelServiceMatchStatus"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory", "org.zstack.sdk.AliyunNasAccessGroupInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory", "org.zstack.sdk.AliyunNasAccessRuleInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory", "org.zstack.sdk.AliyunNasFileSystemInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory", "org.zstack.sdk.AliyunNasMountTargetInventory"); + put("org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty", "org.zstack.sdk.AliyunNasAccessGroupProperty"); + put("org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty", "org.zstack.sdk.AliyunNasFileSystemProperty"); + put("org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty", "org.zstack.sdk.AliyunNasMountTargetProperty"); + put("org.zstack.aliyun.pangu.AliyunPanguPartitionInventory", "org.zstack.sdk.AliyunPanguPartitionInventory"); + put("org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory", "org.zstack.sdk.AliyunProxyVSwitchInventory"); + put("org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory", "org.zstack.sdk.AliyunProxyVpcInventory"); + put("org.zstack.appliancevm.ApplianceVmInventory", "org.zstack.sdk.ApplianceVmInventory"); + put("org.zstack.autoscaling.group.AutoScalingGroupInventory", "org.zstack.sdk.AutoScalingGroupInventory"); + put("org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory", "org.zstack.sdk.AutoScalingGroupActivityInventory"); + put("org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory", "org.zstack.sdk.AutoScalingGroupInstanceInventory"); + put("org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory", "org.zstack.sdk.AddingNewVmRuleInventory"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleInventory", "org.zstack.sdk.AutoScalingRuleInventory"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleState", "org.zstack.sdk.AutoScalingRuleState"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleStatus", "org.zstack.sdk.AutoScalingRuleStatus"); + put("org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory", "org.zstack.sdk.RemovalInstanceRuleInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory", "org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory", "org.zstack.sdk.AutoScalingRuleTriggerInventory"); + put("org.zstack.autoscaling.template.AutoScalingTemplateInventory", "org.zstack.sdk.AutoScalingTemplateInventory"); + put("org.zstack.autoscaling.template.AutoScalingVmTemplateInventory", "org.zstack.sdk.AutoScalingVmTemplateInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2BondingInventory", "org.zstack.sdk.BareMetal2BondingInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory", "org.zstack.sdk.BareMetal2BondingNicRefInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory", "org.zstack.sdk.BareMetal2ChassisDiskInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory", "org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisInventory", "org.zstack.sdk.BareMetal2ChassisInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory", "org.zstack.sdk.BareMetal2ChassisNicInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory", "org.zstack.sdk.BareMetal2ChassisPciDeviceInventory"); + put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig", "org.zstack.sdk.BareMetal2DpuChassisConfig"); + put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory", "org.zstack.sdk.BareMetal2DpuChassisInventory"); + put("org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory", "org.zstack.sdk.BareMetal2IpmiChassisInventory"); + put("org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory", "org.zstack.sdk.BareMetal2ChassisOfferingInventory"); + put("org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory", "org.zstack.sdk.BareMetal2DpuHostInventory"); + put("org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig", "org.zstack.sdk.YuccaBareMetal2DpuChassisConfig"); + put("org.zstack.baremetal2.gateway.BareMetal2GatewayInventory", "org.zstack.sdk.BareMetal2GatewayInventory"); + put("org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory", "org.zstack.sdk.BareMetal2GatewayProvisionNicInventory"); + put("org.zstack.baremetal2.instance.BareMetal2InstanceInventory", "org.zstack.sdk.BareMetal2InstanceInventory"); + put("org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory", "org.zstack.sdk.BareMetal2InstanceProvisionNicInventory"); + put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory", "org.zstack.sdk.BareMetal2ProvisionNetworkInventory"); + put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity"); + put("org.zstack.billing.Pagination", "org.zstack.sdk.Pagination"); + put("org.zstack.billing.PriceInventory", "org.zstack.sdk.PriceInventory"); + put("org.zstack.billing.ResourceSpending", "org.zstack.sdk.ResourceSpending"); + put("org.zstack.billing.Spending", "org.zstack.sdk.Spending"); + put("org.zstack.billing.SpendingDetails", "org.zstack.sdk.SpendingDetails"); + put("org.zstack.billing.generator.BillingInventory", "org.zstack.sdk.BillingInventory"); + put("org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory", "org.zstack.sdk.BareMetal2BillingInventory"); + put("org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory", "org.zstack.sdk.PciDeviceBillingInventory"); + put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory", "org.zstack.sdk.PubIpVipBandwidthInBillingInventory"); + put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVipBandwidthOutBillingInventory"); + put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory"); + put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory"); + put("org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory", "org.zstack.sdk.VmCPUBillingInventory"); + put("org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory", "org.zstack.sdk.VmMemoryBillingInventory"); + put("org.zstack.billing.generator.volume.data.DataVolumeBillingInventory", "org.zstack.sdk.DataVolumeBillingInventory"); + put("org.zstack.billing.generator.volume.root.RootVolumeBillingInventory", "org.zstack.sdk.RootVolumeBillingInventory"); + put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending", "org.zstack.sdk.BareMetal2Spending"); + put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails", "org.zstack.sdk.BareMetal2SpendingDetails"); + put("org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory"); + put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending", "org.zstack.sdk.PciDeviceSpending"); + put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory", "org.zstack.sdk.PciDeviceSpendingInventory"); + put("org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory", "org.zstack.sdk.PricePciDeviceOfferingRefInventory"); + put("org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory", "org.zstack.sdk.SnapShotSpendingInventory"); + put("org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending", "org.zstack.sdk.SnapshotSpending"); + put("org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending", "org.zstack.sdk.PubIpVipBandwidthSpending"); + put("org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails", "org.zstack.sdk.VipBandwidthSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails", "org.zstack.sdk.VmCPUSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails", "org.zstack.sdk.VmMemorySpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmSpending", "org.zstack.sdk.VmSpending"); + put("org.zstack.billing.spendingcalculator.vm.VmSpendingDetails", "org.zstack.sdk.VmSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending", "org.zstack.sdk.PubIpVmNicBandwidthSpending"); + put("org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails", "org.zstack.sdk.VmNicBandwidthSpendingDetails"); + put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending", "org.zstack.sdk.DataVolumeSpending"); + put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory", "org.zstack.sdk.DataVolumeSpendingInventory"); + put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending", "org.zstack.sdk.RootVolumeSpending"); + put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory", "org.zstack.sdk.RootVolumeSpendingInventory"); + put("org.zstack.billing.table.APICreatePriceTableMsg$Price", "org.zstack.sdk.Price"); + put("org.zstack.billing.table.AccountPriceTableRefInventory", "org.zstack.sdk.AccountPriceTableRefInventory"); + put("org.zstack.billing.table.PriceTableInventory", "org.zstack.sdk.PriceTableInventory"); + put("org.zstack.cloudformation.template.struct.ActionStruct", "org.zstack.sdk.ActionStruct"); + put("org.zstack.cloudformation.template.struct.ResourceStruct", "org.zstack.sdk.ResourceStruct"); + put("org.zstack.cloudformation.template.struct.ResourceType", "org.zstack.sdk.ResourceType"); + put("org.zstack.container.ContainerBackupStorageInventory", "org.zstack.sdk.ContainerBackupStorageInventory"); + put("org.zstack.container.ContainerUsage", "org.zstack.sdk.ContainerUsage"); + put("org.zstack.container.entity.ContainerImageInventory", "org.zstack.sdk.ContainerImageInventory"); + put("org.zstack.container.entity.ContainerImageTagInventory", "org.zstack.sdk.ContainerImageTagInventory"); + put("org.zstack.container.entity.ContainerManagementEndpointInventory", "org.zstack.sdk.ContainerManagementEndpointInventory"); + put("org.zstack.container.entity.NativeClusterInventory", "org.zstack.sdk.NativeClusterInventory"); + put("org.zstack.container.entity.NativeHostInventory", "org.zstack.sdk.NativeHostInventory"); + put("org.zstack.container.entity.PodInventory", "org.zstack.sdk.PodInventory"); + put("org.zstack.container.entity.ProjectRepositoryInventory", "org.zstack.sdk.ProjectRepositoryInventory"); + put("org.zstack.container.entity.ZakuImageInventory", "org.zstack.sdk.ZakuImageInventory"); + put("org.zstack.core.config.GlobalConfigInventory", "org.zstack.sdk.GlobalConfigInventory"); + put("org.zstack.core.config.GlobalConfigOptions", "org.zstack.sdk.GlobalConfigOptions"); + put("org.zstack.core.config.GuestOsCharacterInventory", "org.zstack.sdk.GuestOsCharacterInventory"); + put("org.zstack.core.errorcode.ElaborationCategory", "org.zstack.sdk.ElaborationCategory"); + put("org.zstack.core.errorcode.ElaborationCheckResult", "org.zstack.sdk.ElaborationCheckResult"); + put("org.zstack.core.errorcode.ElaborationContent", "org.zstack.sdk.ElaborationContent"); + put("org.zstack.core.eventlog.EventLogInventory", "org.zstack.sdk.EventLogInventory"); + put("org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder", "org.zstack.sdk.ExternalServiceCapabilitiesBuilder"); + put("org.zstack.core.gc.GarbageCollectorInventory", "org.zstack.sdk.GarbageCollectorInventory"); + put("org.zstack.core.jsonlabel.JsonLabelInventory", "org.zstack.sdk.JsonLabelInventory"); + put("org.zstack.core.upgrade.AgentVersionInventory", "org.zstack.sdk.AgentVersionInventory"); + put("org.zstack.crypto.ccs.CCSCertificateInventory", "org.zstack.sdk.CCSCertificateInventory"); + put("org.zstack.crypto.ccs.CCSCertificateUserRefInventory", "org.zstack.sdk.CCSCertificateUserRefInventory"); + put("org.zstack.crypto.ccs.CCSCertificateUserState", "org.zstack.sdk.CCSCertificateUserState"); + put("org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory", "org.zstack.sdk.AiSiNoSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory", "org.zstack.sdk.CSPSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory", "org.zstack.sdk.FiSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory", "org.zstack.sdk.FiSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory", "org.zstack.sdk.FlkSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory", "org.zstack.sdk.FlkSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory", "org.zstack.sdk.HaiTaiSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory", "org.zstack.sdk.InfoSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory", "org.zstack.sdk.InfoSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory", "org.zstack.sdk.JitSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory", "org.zstack.sdk.KoAlSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory", "org.zstack.sdk.PluginSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory", "org.zstack.sdk.SanSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory", "org.zstack.sdk.SanSecSecurityMachineInventory"); + put("org.zstack.directory.DirectoryInventory", "org.zstack.sdk.DirectoryInventory"); + put("org.zstack.drs.api.HostLoad", "org.zstack.sdk.HostLoad"); + put("org.zstack.drs.api.Threshold", "org.zstack.sdk.Threshold"); + put("org.zstack.drs.entity.ClusterDRSInventory", "org.zstack.sdk.ClusterDRSInventory"); + put("org.zstack.drs.entity.DRSAdviceInventory", "org.zstack.sdk.DRSAdviceInventory"); + put("org.zstack.drs.entity.DRSVmMigrationActivityInventory", "org.zstack.sdk.DRSVmMigrationActivityInventory"); + put("org.zstack.externalbackup.BackupStorageExternalBackupInfo", "org.zstack.sdk.BackupStorageExternalBackupInfo"); + put("org.zstack.externalbackup.ExternalBackupInventory", "org.zstack.sdk.ExternalBackupInventory"); + put("org.zstack.externalbackup.ExternalBackupState", "org.zstack.sdk.ExternalBackupState"); + put("org.zstack.externalbackup.ResourceBackupState", "org.zstack.sdk.ResourceBackupState"); + put("org.zstack.externalbackup.ResourceExternalBackupInfo", "org.zstack.sdk.ResourceExternalBackupInfo"); + put("org.zstack.externalbackup.VmExternalBackupInfo", "org.zstack.sdk.VmExternalBackupInfo"); + put("org.zstack.externalbackup.VolumeExternalBackupInfo", "org.zstack.sdk.VolumeExternalBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxBackupInventory", "org.zstack.sdk.ZBoxBackupInventory"); + put("org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo", "org.zstack.sdk.ZBoxBackupStorageBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxVmBackupInfo", "org.zstack.sdk.ZBoxVmBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo", "org.zstack.sdk.ZBoxVolumeBackupInfo"); + put("org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory", "org.zstack.sdk.FaultToleranceVmGroupInventory"); + put("org.zstack.guesttools.GuestToolsInventory", "org.zstack.sdk.GuestToolsInventory"); + put("org.zstack.guesttools.GuestToolsStateInventory", "org.zstack.sdk.GuestToolsStateInventory"); + put("org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory"); + put("org.zstack.guesttools.GuestVmScriptExecutedRecordInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordInventory"); + put("org.zstack.guesttools.GuestVmScriptInventory", "org.zstack.sdk.GuestVmScriptInventory"); + put("org.zstack.guesttools.InvocationRecord", "org.zstack.sdk.InvocationRecord"); + put("org.zstack.guesttools.InvocationRecordDetail", "org.zstack.sdk.InvocationRecordDetail"); + put("org.zstack.ha.HaNetworkGroupInventory", "org.zstack.sdk.HaNetworkGroupInventory"); + put("org.zstack.ha.HaStrategyConditionInventory", "org.zstack.sdk.HaStrategyConditionInventory"); + put("org.zstack.header.acl.AccessControlListEntryInventory", "org.zstack.sdk.AccessControlListEntryInventory"); + put("org.zstack.header.acl.AccessControlListInventory", "org.zstack.sdk.AccessControlListInventory"); + put("org.zstack.header.affinitygroup.AffinityGroupInventory", "org.zstack.sdk.AffinityGroupInventory"); + put("org.zstack.header.affinitygroup.AffinityGroupUsageInventory", "org.zstack.sdk.AffinityGroupUsageInventory"); + put("org.zstack.header.aliyun.AliyunOssException", "org.zstack.sdk.AliyunOssException"); + put("org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory", "org.zstack.sdk.AliyunEbsBackupStorageInventory"); + put("org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory", "org.zstack.sdk.AliyunEbsPrimaryStorageInventory"); + put("org.zstack.header.aliyun.ecs.EcsInstanceInventory", "org.zstack.sdk.EcsInstanceInventory"); + put("org.zstack.header.aliyun.ecs.EcsInstanceType", "org.zstack.sdk.EcsInstanceType"); + put("org.zstack.header.aliyun.errorCode.AliyunErrorCode", "org.zstack.sdk.AliyunErrorCode"); + put("org.zstack.header.aliyun.image.EcsImageInventory", "org.zstack.sdk.EcsImageInventory"); + put("org.zstack.header.aliyun.image.ProgressProperty", "org.zstack.sdk.ProgressProperty"); + put("org.zstack.header.aliyun.network.HybridConnectionType", "org.zstack.sdk.HybridConnectionType"); + put("org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory", "org.zstack.sdk.AliyunRouterInterfaceInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory", "org.zstack.sdk.ConnectionAccessPointInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory", "org.zstack.sdk.ConnectionRelationShipInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty", "org.zstack.sdk.ConnectionRelationShipProperty"); + put("org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory", "org.zstack.sdk.VirtualBorderRouterInventory"); + put("org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory", "org.zstack.sdk.EcsSecurityGroupInventory"); + put("org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory", "org.zstack.sdk.EcsSecurityGroupRuleInventory"); + put("org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory", "org.zstack.sdk.EcsVSwitchInventory"); + put("org.zstack.header.aliyun.network.vpc.EcsVpcInventory", "org.zstack.sdk.EcsVpcInventory"); + put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory", "org.zstack.sdk.VpcVirtualRouteEntryInventory"); + put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory", "org.zstack.sdk.VpcVirtualRouterInventory"); + put("org.zstack.header.aliyun.oss.OssBucketInventory", "org.zstack.sdk.OssBucketInventory"); + put("org.zstack.header.aliyun.oss.OssBucketProperty", "org.zstack.sdk.OssBucketProperty"); + put("org.zstack.header.aliyun.storage.disk.AliyunDiskInventory", "org.zstack.sdk.AliyunDiskInventory"); + put("org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory", "org.zstack.sdk.AliyunSnapshotInventory"); + put("org.zstack.header.allocator.datatypes.CpuMemoryCapacityData", "org.zstack.sdk.CpuMemoryCapacityData"); + put("org.zstack.header.appcenter.PublishAppInventory", "org.zstack.sdk.PublishAppInventory"); + put("org.zstack.header.appcenter.PublishAppResourceStruct", "org.zstack.sdk.PublishAppResourceStruct"); + put("org.zstack.header.baremetal.BaremetalException", "org.zstack.sdk.BaremetalException"); + put("org.zstack.header.baremetal.chassis.BaremetalChassisInventory", "org.zstack.sdk.BaremetalChassisInventory"); + put("org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory", "org.zstack.sdk.BaremetalHardwareInfoInventory"); + put("org.zstack.header.baremetal.instance.BaremetalInstanceInventory", "org.zstack.sdk.BaremetalInstanceInventory"); + put("org.zstack.header.baremetal.network.BaremetalBondingInventory", "org.zstack.sdk.BaremetalBondingInventory"); + put("org.zstack.header.baremetal.network.BaremetalNicInventory", "org.zstack.sdk.BaremetalNicInventory"); + put("org.zstack.header.baremetal.network.BaremetalVlanNicInventory", "org.zstack.sdk.BaremetalVlanNicInventory"); + put("org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory", "org.zstack.sdk.PreconfigurationTemplateInventory"); + put("org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory", "org.zstack.sdk.BaremetalPxeServerInventory"); + put("org.zstack.header.bootstrap.MiniCandidateHostStruct", "org.zstack.sdk.MiniCandidateHostStruct"); + put("org.zstack.header.bootstrap.MiniHostInfo", "org.zstack.sdk.MiniHostInfo"); + put("org.zstack.header.bootstrap.MiniNetworkConfigStruct", "org.zstack.sdk.MiniNetworkConfigStruct"); + put("org.zstack.header.buildapp.BuildAppExportHistoryInventory", "org.zstack.sdk.BuildAppExportHistoryInventory"); + put("org.zstack.header.buildapp.BuildApplicationInventory", "org.zstack.sdk.BuildApplicationInventory"); + put("org.zstack.header.buildsystem.AppBuildSystemInventory", "org.zstack.sdk.AppBuildSystemInventory"); + put("org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory", "org.zstack.sdk.AppBuildSystemZoneRefInventory"); + put("org.zstack.header.cbt.CbtTaskInventory", "org.zstack.sdk.CbtTaskInventory"); + put("org.zstack.header.cbt.CbtTaskResourceRefInventory", "org.zstack.sdk.CbtTaskResourceRefInventory"); + put("org.zstack.header.cbt.CbtTaskStatus", "org.zstack.sdk.CbtTaskStatus"); + put("org.zstack.header.cbt.VolumeCbtBackupInfo", "org.zstack.sdk.VolumeCbtBackupInfo"); + put("org.zstack.header.cloudformation.CloudFormationStackEventInventory", "org.zstack.sdk.CloudFormationStackEventInventory"); + put("org.zstack.header.cloudformation.PreviewResourceStruct", "org.zstack.sdk.PreviewResourceStruct"); + put("org.zstack.header.cloudformation.ResourceStackInventory", "org.zstack.sdk.ResourceStackInventory"); + put("org.zstack.header.cloudformation.StackParameters", "org.zstack.sdk.StackParameters"); + put("org.zstack.header.cloudformation.StackTemplateInventory", "org.zstack.sdk.StackTemplateInventory"); + put("org.zstack.header.cloudformation.SupportedResourceStruct", "org.zstack.sdk.SupportedResourceStruct"); + put("org.zstack.header.cluster.ClusterInventory", "org.zstack.sdk.ClusterInventory"); + put("org.zstack.header.cluster.PowerOffHardwareResult", "org.zstack.sdk.PowerOffHardwareResult"); + put("org.zstack.header.configuration.DiskOfferingInventory", "org.zstack.sdk.DiskOfferingInventory"); + put("org.zstack.header.configuration.InstanceOfferingInventory", "org.zstack.sdk.InstanceOfferingInventory"); + put("org.zstack.header.console.ConsoleInventory", "org.zstack.sdk.ConsoleInventory"); + put("org.zstack.header.console.ConsoleProxyAgentInventory", "org.zstack.sdk.ConsoleProxyAgentInventory"); + put("org.zstack.header.core.external.plugin.PluginDriverInventory", "org.zstack.sdk.PluginDriverInventory"); + put("org.zstack.header.core.external.service.ExternalServiceCapabilities", "org.zstack.sdk.ExternalServiceCapabilities"); + put("org.zstack.header.core.external.service.ExternalServiceConfigurationInventory", "org.zstack.sdk.ExternalServiceConfigurationInventory"); + put("org.zstack.header.core.external.service.ExternalServiceInventory", "org.zstack.sdk.ExternalServiceInventory"); + put("org.zstack.header.core.progress.ChainInfo", "org.zstack.sdk.ChainInfo"); + put("org.zstack.header.core.progress.LongJobProgressDetail", "org.zstack.sdk.LongJobProgressDetail"); + put("org.zstack.header.core.progress.PendingTaskInfo", "org.zstack.sdk.PendingTaskInfo"); + put("org.zstack.header.core.progress.RunningTaskInfo", "org.zstack.sdk.RunningTaskInfo"); + put("org.zstack.header.core.progress.TaskInfo", "org.zstack.sdk.TaskInfo"); + put("org.zstack.header.core.progress.TaskProgressInventory", "org.zstack.sdk.TaskProgressInventory"); + put("org.zstack.header.core.trash.CleanTrashResult", "org.zstack.sdk.CleanTrashResult"); + put("org.zstack.header.core.trash.InstallPathRecycleInventory", "org.zstack.sdk.InstallPathRecycleInventory"); + put("org.zstack.header.core.trash.TrashCleanupResult", "org.zstack.sdk.TrashCleanupResult"); + put("org.zstack.header.core.webhooks.WebhookInventory", "org.zstack.sdk.WebhookInventory"); + put("org.zstack.header.datacenter.DataCenterInventory", "org.zstack.sdk.DataCenterInventory"); + put("org.zstack.header.datacenter.DataCenterProperty", "org.zstack.sdk.DataCenterProperty"); + put("org.zstack.header.errorcode.ErrorCode", "org.zstack.sdk.ErrorCode"); + put("org.zstack.header.errorcode.ErrorCodeList", "org.zstack.sdk.ErrorCodeList"); + put("org.zstack.header.flowMeter.FlowCollectorInventory", "org.zstack.sdk.FlowCollectorInventory"); + put("org.zstack.header.flowMeter.FlowCounter", "org.zstack.sdk.FlowCounter"); + put("org.zstack.header.flowMeter.FlowMeterInventory", "org.zstack.sdk.FlowMeterInventory"); + put("org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory", "org.zstack.sdk.NetworkRouterFlowMeterRefInventory"); + put("org.zstack.header.host.AddHostFromFileResult", "org.zstack.sdk.AddHostFromFileResult"); + put("org.zstack.header.host.CpuArchitecture", "org.zstack.sdk.CpuArchitecture"); + put("org.zstack.header.host.HostInventory", "org.zstack.sdk.HostInventory"); + put("org.zstack.header.host.HostIpmiInventory", "org.zstack.sdk.HostIpmiInventory"); + put("org.zstack.header.host.HostNUMANode", "org.zstack.sdk.HostNUMANode"); + put("org.zstack.header.host.HostNetworkBondingServiceRefInventory", "org.zstack.sdk.HostNetworkBondingServiceRefInventory"); + put("org.zstack.header.host.HostNetworkInterfaceServiceRefInventory", "org.zstack.sdk.HostNetworkInterfaceServiceRefInventory"); + put("org.zstack.header.host.HostNetworkLabelInventory", "org.zstack.sdk.HostNetworkLabelInventory"); + put("org.zstack.header.host.HostPhysicalMemoryInventory", "org.zstack.sdk.HostPhysicalMemoryInventory"); + put("org.zstack.header.host.HwMonitorStatus", "org.zstack.sdk.HwMonitorStatus"); + put("org.zstack.header.host.ServiceTypeStatisticData", "org.zstack.sdk.ServiceTypeStatisticData"); + put("org.zstack.header.hybrid.network.eip.HybridEipAddressInventory", "org.zstack.sdk.HybridEipAddressInventory"); + put("org.zstack.header.hybrid.network.eip.HybridEipStatus", "org.zstack.sdk.HybridEipStatus"); + put("org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory", "org.zstack.sdk.VpcUserVpnGatewayInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory", "org.zstack.sdk.VpcVpnConnectionInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory", "org.zstack.sdk.VpcVpnGatewayInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory", "org.zstack.sdk.VpcVpnIkeConfigInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct", "org.zstack.sdk.VpcVpnIkeConfigStruct"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory", "org.zstack.sdk.VpcVpnIpSecConfigInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct", "org.zstack.sdk.VpcVpnIpSecConfigStruct"); + put("org.zstack.header.identity.AccountInventory", "org.zstack.sdk.AccountInventory"); + put("org.zstack.header.identity.AccountResourceRefInventory", "org.zstack.sdk.AccountResourceRefInventory"); + put("org.zstack.header.identity.PolicyInventory", "org.zstack.sdk.PolicyInventory"); + put("org.zstack.header.identity.PolicyStatement", "org.zstack.sdk.PolicyStatement"); + put("org.zstack.header.identity.PolicyStatementEffect", "org.zstack.sdk.PolicyStatementEffect"); + put("org.zstack.header.identity.Quota$QuotaUsage", "org.zstack.sdk.QuotaUsage"); + put("org.zstack.header.identity.QuotaInventory", "org.zstack.sdk.QuotaInventory"); + put("org.zstack.header.identity.SessionInventory", "org.zstack.sdk.SessionInventory"); + put("org.zstack.header.identity.SharedResourceInventory", "org.zstack.sdk.SharedResourceInventory"); + put("org.zstack.header.identity.UserGroupInventory", "org.zstack.sdk.UserGroupInventory"); + put("org.zstack.header.identity.UserInventory", "org.zstack.sdk.UserInventory"); + put("org.zstack.header.identity.login.LoginAuthenticationProcedureDesc", "org.zstack.sdk.LoginAuthenticationProcedureDesc"); + put("org.zstack.header.identity.role.RoleInventory", "org.zstack.sdk.identity.role.RoleInventory"); + put("org.zstack.header.identity.role.RolePolicyRefInventory", "org.zstack.sdk.identity.role.RolePolicyRefInventory"); + put("org.zstack.header.identity.role.RolePolicyStatementInventory", "org.zstack.sdk.identity.role.RolePolicyStatementInventory"); + put("org.zstack.header.identity.role.RoleState", "org.zstack.sdk.identity.role.RoleState"); + put("org.zstack.header.identity.role.RoleStateEvent", "org.zstack.sdk.identity.role.RoleStateEvent"); + put("org.zstack.header.identity.role.RoleType", "org.zstack.sdk.identity.role.RoleType"); + put("org.zstack.header.identityzone.IdentityZoneInventory", "org.zstack.sdk.IdentityZoneInventory"); + put("org.zstack.header.identityzone.IdentityZoneProperty", "org.zstack.sdk.IdentityZoneProperty"); + put("org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure"); + put("org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure"); + put("org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails", "org.zstack.sdk.JobDetails"); + put("org.zstack.header.image.ImageBackupStorageRefInventory", "org.zstack.sdk.ImageBackupStorageRefInventory"); + put("org.zstack.header.image.ImageGroupInventory", "org.zstack.sdk.ImageGroupInventory"); + put("org.zstack.header.image.ImageGroupRefInventory", "org.zstack.sdk.ImageGroupRefInventory"); + put("org.zstack.header.image.ImageInventory", "org.zstack.sdk.ImageInventory"); + put("org.zstack.header.longjob.LongJobInventory", "org.zstack.sdk.LongJobInventory"); + put("org.zstack.header.longjob.LongJobState", "org.zstack.sdk.LongJobState"); + put("org.zstack.header.managementnode.ManagementNodeInventory", "org.zstack.sdk.ManagementNodeInventory"); + put("org.zstack.header.network.l2.L2NetworkData", "org.zstack.sdk.L2NetworkData"); + put("org.zstack.header.network.l2.L2NetworkInventory", "org.zstack.sdk.L2NetworkInventory"); + put("org.zstack.header.network.l2.L2VlanNetworkInventory", "org.zstack.sdk.L2VlanNetworkInventory"); + put("org.zstack.header.network.l3.AddressPoolInventory", "org.zstack.sdk.AddressPoolInventory"); + put("org.zstack.header.network.l3.FreeIpInventory", "org.zstack.sdk.FreeIpInventory"); + put("org.zstack.header.network.l3.IpRangeInventory", "org.zstack.sdk.IpRangeInventory"); + put("org.zstack.header.network.l3.IpRangeType", "org.zstack.sdk.IpRangeType"); + put("org.zstack.header.network.l3.L3NetworkHostRouteInventory", "org.zstack.sdk.L3NetworkHostRouteInventory"); + put("org.zstack.header.network.l3.L3NetworkInventory", "org.zstack.sdk.L3NetworkInventory"); + put("org.zstack.header.network.l3.NormalIpRangeInventory", "org.zstack.sdk.NormalIpRangeInventory"); + put("org.zstack.header.network.l3.ReservedIpRangeInventory", "org.zstack.sdk.ReservedIpRangeInventory"); + put("org.zstack.header.network.l3.UsedIpInventory", "org.zstack.sdk.UsedIpInventory"); + put("org.zstack.header.network.l3.datatypes.IpCapacityData", "org.zstack.sdk.IpCapacityData"); + put("org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory", "org.zstack.sdk.SdnControllerHostRefInventory"); + put("org.zstack.header.network.sdncontroller.SdnControllerInventory", "org.zstack.sdk.SdnControllerInventory"); + put("org.zstack.header.network.sdncontroller.SdnControllerStatus", "org.zstack.sdk.SdnControllerStatus"); + put("org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory", "org.zstack.sdk.NetworkServiceL3NetworkRefInventory"); + put("org.zstack.header.network.service.NetworkServiceProviderInventory", "org.zstack.sdk.NetworkServiceProviderInventory"); + put("org.zstack.header.portMirror.MirrorNetworkUsedIpInventory", "org.zstack.sdk.MirrorNetworkUsedIpInventory"); + put("org.zstack.header.portMirror.PortMirrorInventory", "org.zstack.sdk.PortMirrorInventory"); + put("org.zstack.header.portMirror.PortMirrorSessionInventory", "org.zstack.sdk.PortMirrorSessionInventory"); + put("org.zstack.header.portMirror.PortMirrorState", "org.zstack.sdk.PortMirrorState"); + put("org.zstack.header.portMirror.SessionStatus", "org.zstack.sdk.SessionStatus"); + put("org.zstack.header.portMirror.SessionType", "org.zstack.sdk.SessionType"); + put("org.zstack.header.protocol.Neighbor", "org.zstack.sdk.Neighbor"); + put("org.zstack.header.protocol.NetworkRouterAreaRefInventory", "org.zstack.sdk.NetworkRouterAreaRefInventory"); + put("org.zstack.header.protocol.RouterAreaInventory", "org.zstack.sdk.RouterAreaInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupInventory", "org.zstack.sdk.SchedulerJobGroupInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory", "org.zstack.sdk.SchedulerJobGroupJobRefInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.header.scheduler.SchedulerJobHistoryInventory", "org.zstack.sdk.SchedulerJobHistoryInventory"); + put("org.zstack.header.scheduler.SchedulerJobInventory", "org.zstack.sdk.SchedulerJobInventory"); + put("org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory", "org.zstack.sdk.SchedulerJobSchedulerTriggerInventory"); + put("org.zstack.header.scheduler.SchedulerTriggerInventory", "org.zstack.sdk.SchedulerTriggerInventory"); + put("org.zstack.header.securitymachine.SecretResourcePoolInventory", "org.zstack.sdk.SecretResourcePoolInventory"); + put("org.zstack.header.securitymachine.SecurityMachineInventory", "org.zstack.sdk.SecurityMachineInventory"); + put("org.zstack.header.simulator.SimulatorHostInventory", "org.zstack.sdk.SimulatorHostInventory"); + put("org.zstack.header.sriov.EthernetVfPciDeviceInventory", "org.zstack.sdk.EthernetVfPciDeviceInventory"); + put("org.zstack.header.sriov.EthernetVfStatus", "org.zstack.sdk.EthernetVfStatus"); + put("org.zstack.header.sriov.VmVfNicInventory", "org.zstack.sdk.VmVfNicInventory"); + put("org.zstack.header.sshkeypair.SshKeyPairInventory", "org.zstack.sdk.SshKeyPairInventory"); + put("org.zstack.header.sshkeypair.SshPrivateKeyPairInventory", "org.zstack.sdk.SshPrivateKeyPairInventory"); + put("org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory", "org.zstack.sdk.ExternalBackupStorageInventory"); + put("org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory", "org.zstack.sdk.ExternalPrimaryStorageInventory"); + put("org.zstack.header.storage.backup.BackupMode", "org.zstack.sdk.BackupMode"); + put("org.zstack.header.storage.backup.BackupStorageInventory", "org.zstack.sdk.BackupStorageInventory"); + put("org.zstack.header.storage.backup.SyncBackupResult", "org.zstack.sdk.SyncBackupResult"); + put("org.zstack.header.storage.backup.VolumeBackupInventory", "org.zstack.sdk.VolumeBackupInventory"); + put("org.zstack.header.storage.backup.VolumeBackupStorageRefInventory", "org.zstack.sdk.VolumeBackupStorageRefInventory"); + put("org.zstack.header.storage.cdp.CdpPolicyInventory", "org.zstack.sdk.CdpPolicyInventory"); + put("org.zstack.header.storage.cdp.CdpPolicyState", "org.zstack.sdk.CdpPolicyState"); + put("org.zstack.header.storage.cdp.CdpTaskInventory", "org.zstack.sdk.CdpTaskInventory"); + put("org.zstack.header.storage.cdp.CdpTaskResourceRefInventory", "org.zstack.sdk.CdpTaskResourceRefInventory"); + put("org.zstack.header.storage.cdp.CdpTaskState", "org.zstack.sdk.CdpTaskState"); + put("org.zstack.header.storage.cdp.CdpTaskStatus", "org.zstack.sdk.CdpTaskStatus"); + put("org.zstack.header.storage.cdp.CdpTaskType", "org.zstack.sdk.CdpTaskType"); + put("org.zstack.header.storage.database.backup.DatabaseBackupInventory", "org.zstack.sdk.databasebackup.DatabaseBackupInventory"); + put("org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory", "org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory"); + put("org.zstack.header.storage.database.backup.DatabaseBackupStruct", "org.zstack.sdk.databasebackup.DatabaseBackupStruct"); + put("org.zstack.header.storage.database.backup.DatabaseType", "org.zstack.sdk.databasebackup.DatabaseType"); + put("org.zstack.header.storage.primary.ImageCacheInventory", "org.zstack.sdk.ImageCacheInventory"); + put("org.zstack.header.storage.primary.PrimaryStorageHostStatus", "org.zstack.sdk.PrimaryStorageHostStatus"); + put("org.zstack.header.storage.primary.PrimaryStorageInventory", "org.zstack.sdk.PrimaryStorageInventory"); + put("org.zstack.header.storage.primary.UsageReport", "org.zstack.sdk.UsageReport"); + put("org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct", "org.zstack.sdk.BatchDeleteVolumeSnapshotStruct"); + put("org.zstack.header.storage.snapshot.ShrinkResult", "org.zstack.sdk.ShrinkResult"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory", "org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotInventory", "org.zstack.sdk.VolumeSnapshotInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory", "org.zstack.sdk.SnapshotLeafInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory", "org.zstack.sdk.VolumeSnapshotTreeInventory"); + put("org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult", "org.zstack.sdk.DeleteSnapshotGroupResult"); + put("org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult", "org.zstack.sdk.RevertSnapshotGroupResult"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability", "org.zstack.sdk.VolumeSnapshotGroupAvailability"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory", "org.zstack.sdk.VolumeSnapshotGroupInventory"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory", "org.zstack.sdk.VolumeSnapshotGroupRefInventory"); + put("org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory", "org.zstack.sdk.VolumeSnapshotReferenceTreeInventory"); + put("org.zstack.header.storageDevice.LunInventory", "org.zstack.sdk.LunInventory"); + put("org.zstack.header.storageDevice.ScsiLunClusterStatusInventory", "org.zstack.sdk.ScsiLunClusterStatusInventory"); + put("org.zstack.header.storageDevice.ScsiLunHostRefInventory", "org.zstack.sdk.ScsiLunHostRefInventory"); + put("org.zstack.header.storageDevice.ScsiLunInventory", "org.zstack.sdk.ScsiLunInventory"); + put("org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory", "org.zstack.sdk.ScsiLunVmInstanceRefInventory"); + put("org.zstack.header.tag.SystemTagInventory", "org.zstack.sdk.SystemTagInventory"); + put("org.zstack.header.tag.TagInventory", "org.zstack.sdk.TagInventory"); + put("org.zstack.header.tag.TagPatternInventory", "org.zstack.sdk.TagPatternInventory"); + put("org.zstack.header.tag.TagPatternType", "org.zstack.sdk.TagPatternType"); + put("org.zstack.header.tag.UserTagInventory", "org.zstack.sdk.UserTagInventory"); + put("org.zstack.header.vdpa.VmVdpaNicInventory", "org.zstack.sdk.VmVdpaNicInventory"); + put("org.zstack.header.vipQos.VipQosInventory", "org.zstack.sdk.VipQosInventory"); + put("org.zstack.header.vipQos.VpcSharedQosInventory", "org.zstack.sdk.VpcSharedQosInventory"); + put("org.zstack.header.vipQos.VpcSharedQosRefVipInventory", "org.zstack.sdk.VpcSharedQosRefVipInventory"); + put("org.zstack.header.vm.CloneVmInstanceInventory", "org.zstack.sdk.CloneVmInstanceInventory"); + put("org.zstack.header.vm.CloneVmInstanceResults", "org.zstack.sdk.CloneVmInstanceResults"); + put("org.zstack.header.vm.VdiPortInfo", "org.zstack.sdk.VdiPortInfo"); + put("org.zstack.header.vm.VirtualizerInfo", "org.zstack.sdk.VirtualizerInfo"); + put("org.zstack.header.vm.VirtualizerInfoInventory", "org.zstack.sdk.VirtualizerInfoInventory"); + put("org.zstack.header.vm.VmCapabilities", "org.zstack.sdk.VmCapabilities"); + put("org.zstack.header.vm.VmInstanceInventory", "org.zstack.sdk.VmInstanceInventory"); + put("org.zstack.header.vm.VmNicInventory", "org.zstack.sdk.VmNicInventory"); + put("org.zstack.header.vm.VmPriorityConfigInventory", "org.zstack.sdk.VmPriorityConfigInventory"); + put("org.zstack.header.vm.VmPriorityLevel", "org.zstack.sdk.VmPriorityLevel"); + put("org.zstack.header.vm.VmSchedHistoryInventory", "org.zstack.sdk.VmSchedHistoryInventory"); + put("org.zstack.header.vm.cdrom.VmCdRomInventory", "org.zstack.sdk.VmCdRomInventory"); + put("org.zstack.header.vm.devices.DeviceAddress", "org.zstack.sdk.DeviceAddress"); + put("org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory", "org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory"); + put("org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory", "org.zstack.sdk.VmInstanceDeviceAddressGroupInventory"); + put("org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory", "org.zstack.sdk.HostSchedulingRuleGroupInventory"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState", "org.zstack.sdk.VmSchedulingRuleExecuteState"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory", "org.zstack.sdk.VmSchedulingRuleGroupInventory"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleInventory", "org.zstack.sdk.VmSchedulingRuleInventory"); + put("org.zstack.header.vo.ResourceInventory", "org.zstack.sdk.ResourceInventory"); + put("org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct", "org.zstack.sdk.VolumeFormatReplyStruct"); + put("org.zstack.header.volume.VolumeInventory", "org.zstack.sdk.VolumeInventory"); + put("org.zstack.header.volume.block.AccessPathInfo", "org.zstack.sdk.AccessPathInfo"); + put("org.zstack.header.volume.block.BlockVolumeInventory", "org.zstack.sdk.BlockVolumeInventory"); + put("org.zstack.header.volume.block.ExponBlockVolumeInventory", "org.zstack.sdk.ExponBlockVolumeInventory"); + put("org.zstack.header.volume.block.XskyBlockVolumeInventory", "org.zstack.sdk.XskyBlockVolumeInventory"); + put("org.zstack.header.vpc.VpcRouterDnsInventory", "org.zstack.sdk.VpcRouterDnsInventory"); + put("org.zstack.header.vpc.VpcRouterVmInventory", "org.zstack.sdk.VpcRouterVmInventory"); + put("org.zstack.header.vpc.VpcSnatStateInventory", "org.zstack.sdk.VpcSnatStateInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory", "org.zstack.sdk.VpcHaGroupApplianceVmRefInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupInventory", "org.zstack.sdk.VpcHaGroupInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory", "org.zstack.sdk.VpcHaGroupMonitorIpInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory", "org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory", "org.zstack.sdk.VpcHaGroupVipRefInventory"); + put("org.zstack.header.zdfs.StorageType", "org.zstack.sdk.StorageType"); + put("org.zstack.header.zdfs.ZdfsInventory", "org.zstack.sdk.ZdfsInventory"); + put("org.zstack.header.zdfs.ZdfsStorageInventory", "org.zstack.sdk.ZdfsStorageInventory"); + put("org.zstack.header.zone.ZoneInventory", "org.zstack.sdk.ZoneInventory"); + put("org.zstack.header.zwatch.AuditData", "org.zstack.sdk.AuditData"); + put("org.zstack.header.zwatch.AuditDataV1", "org.zstack.sdk.AuditDataV1"); + put("org.zstack.header.zwatch.AuditDataV2", "org.zstack.sdk.AuditDataV2"); + put("org.zstack.hybrid.account.HybridAccountInventory", "org.zstack.sdk.HybridAccountInventory"); + put("org.zstack.hybrid.core.HybridType", "org.zstack.sdk.HybridType"); + put("org.zstack.hygon.HygonCcpDeviceInventory", "org.zstack.sdk.HygonCcpDeviceInventory"); + put("org.zstack.hygon.HygonDeviceState", "org.zstack.sdk.HygonDeviceState"); + put("org.zstack.hygon.HygonDeviceType", "org.zstack.sdk.HygonDeviceType"); + put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct", "org.zstack.sdk.iam2.api.APIPermissionStruct"); + put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission", "org.zstack.sdk.iam2.api.Permission"); + put("org.zstack.iam2.api.Attribute", "org.zstack.sdk.iam2.api.Attribute"); + put("org.zstack.iam2.api.ErrorResult", "org.zstack.sdk.iam2.api.ErrorResult"); + put("org.zstack.iam2.container.ContainerClusterInventory", "org.zstack.sdk.iam2.container.ContainerClusterInventory"); + put("org.zstack.iam2.entity.AttributeType", "org.zstack.sdk.iam2.entity.AttributeType"); + put("org.zstack.iam2.entity.IAM2AttributeInventory", "org.zstack.sdk.iam2.entity.IAM2AttributeInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory"); + put("org.zstack.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory"); + put("org.zstack.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory"); + put("org.zstack.iam2.entity.IAM2ProjectInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectInventory"); + put("org.zstack.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory"); + put("org.zstack.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory"); + put("org.zstack.iam2.entity.IAM2State", "org.zstack.sdk.iam2.entity.IAM2State"); + put("org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory"); + put("org.zstack.iam2.entity.OrganizationType", "org.zstack.sdk.iam2.entity.OrganizationType"); + put("org.zstack.iam2.entity.ProjectState", "org.zstack.sdk.iam2.entity.ProjectState"); + put("org.zstack.iam2.entity.StateEvent", "org.zstack.sdk.iam2.entity.StateEvent"); + put("org.zstack.iam2.project.template.Template", "org.zstack.sdk.iam2.project.template.Template"); + put("org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory"); + put("org.zstack.imagereplicator.ImageReplicationGroupInventory", "org.zstack.sdk.ImageReplicationGroupInventory"); + put("org.zstack.imagereplicator.ReplicationGroupState", "org.zstack.sdk.ReplicationGroupState"); + put("org.zstack.ipsec.IPsecConnectionInventory", "org.zstack.sdk.IPsecConnectionInventory"); + put("org.zstack.ipsec.IPsecL3NetworkRefInventory", "org.zstack.sdk.IPsecL3NetworkRefInventory"); + put("org.zstack.ipsec.IPsecPeerCidrInventory", "org.zstack.sdk.IPsecPeerCidrInventory"); + put("org.zstack.kvm.APIKvmRunShellEvent$ShellResult", "org.zstack.sdk.ShellResult"); + put("org.zstack.kvm.BaseVirtualDeviceTO", "org.zstack.sdk.BaseVirtualDeviceTO"); + put("org.zstack.kvm.KVMAgentCommands$CdRomTO", "org.zstack.sdk.CdRomTO"); + put("org.zstack.kvm.KVMAgentCommands$IsoTO", "org.zstack.sdk.IsoTO"); + put("org.zstack.kvm.KVMAgentCommands$NicTO", "org.zstack.sdk.NicTO"); + put("org.zstack.kvm.KVMAgentCommands$VHostAddOn", "org.zstack.sdk.VHostAddOn"); + put("org.zstack.kvm.KVMHostInventory", "org.zstack.sdk.KVMHostInventory"); + put("org.zstack.kvm.KVMIsoTO", "org.zstack.sdk.KVMIsoTO"); + put("org.zstack.kvm.VolumeTO", "org.zstack.sdk.VolumeTO"); + put("org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory", "org.zstack.sdk.HostOsCategoryInventory"); + put("org.zstack.kvm.hypervisor.datatype.HypervisorVersionState", "org.zstack.sdk.HypervisorVersionState"); + put("org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory", "org.zstack.sdk.KvmHostHypervisorMetadataInventory"); + put("org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory", "org.zstack.sdk.KvmHypervisorInfoInventory"); + put("org.zstack.kvm.xmlhook.XmlHookInventory", "org.zstack.sdk.XmlHookInventory"); + put("org.zstack.kvm.xmlhook.XmlHookType", "org.zstack.sdk.XmlHookType"); + put("org.zstack.ldap.LdapAccountRefInventory", "org.zstack.sdk.LdapAccountRefInventory"); + put("org.zstack.ldap.LdapServerInventory", "org.zstack.sdk.LdapServerInventory"); + put("org.zstack.license.AdditionalLicenseInfo", "org.zstack.sdk.AdditionalLicenseInfo"); + put("org.zstack.license.AdditionalLicenseType", "org.zstack.sdk.AdditionalLicenseType"); + put("org.zstack.license.LicenseAddOnInventory", "org.zstack.sdk.LicenseAddOnInventory"); + put("org.zstack.license.LicenseInventory", "org.zstack.sdk.LicenseInventory"); + put("org.zstack.license.UKeyInventory", "org.zstack.sdk.UKeyInventory"); + put("org.zstack.license.UKeyStatus", "org.zstack.sdk.UKeyStatus"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); + put("org.zstack.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory"); + put("org.zstack.license.header.server.LicenseUsageDetailView", "org.zstack.sdk.license.header.server.LicenseUsageDetailView"); + put("org.zstack.license.header.server.LicenseUsageView", "org.zstack.sdk.license.header.server.LicenseUsageView"); + put("org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView"); + put("org.zstack.log.server.LogCategory", "org.zstack.sdk.LogCategory"); + put("org.zstack.log.server.LogLevel", "org.zstack.sdk.LogLevel"); + put("org.zstack.log.server.LogServerInventory", "org.zstack.sdk.LogServerInventory"); + put("org.zstack.log.server.LogType", "org.zstack.sdk.LogType"); + put("org.zstack.login.entity.LdapResourceRefInventory", "org.zstack.sdk.LdapResourceRefInventory"); + put("org.zstack.loginControl.entity.AccessControlRuleInventory", "org.zstack.sdk.AccessControlRuleInventory"); + put("org.zstack.loginControl.entity.ControlStrategy", "org.zstack.sdk.ControlStrategy"); + put("org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory", "org.zstack.sdk.ShareableVolumeVmInstanceRefInventory"); + put("org.zstack.monitoring.AlertInventory", "org.zstack.sdk.AlertInventory"); + put("org.zstack.monitoring.MonitorTriggerInventory", "org.zstack.sdk.MonitorTriggerInventory"); + put("org.zstack.monitoring.actions.EmailTriggerActionInventory", "org.zstack.sdk.EmailTriggerActionInventory"); + put("org.zstack.monitoring.actions.MonitorTriggerActionInventory", "org.zstack.sdk.MonitorTriggerActionInventory"); + put("org.zstack.monitoring.items.ItemInventory", "org.zstack.sdk.ItemInventory"); + put("org.zstack.monitoring.media.EmailMediaInventory", "org.zstack.sdk.EmailMediaInventory"); + put("org.zstack.monitoring.media.MediaInventory", "org.zstack.sdk.MediaInventory"); + put("org.zstack.mttyDevice.MttyDeviceInventory", "org.zstack.sdk.MttyDeviceInventory"); + put("org.zstack.mttyDevice.MttyDeviceState", "org.zstack.sdk.MttyDeviceState"); + put("org.zstack.mttyDevice.MttyDeviceType", "org.zstack.sdk.MttyDeviceType"); + put("org.zstack.mttyDevice.MttyDeviceVirtStatus", "org.zstack.sdk.MttyDeviceVirtStatus"); + put("org.zstack.multicast.router.header.MulticastRouteInventory", "org.zstack.sdk.MulticastRouteInventory"); + put("org.zstack.multicast.router.header.MulticastRouterInventory", "org.zstack.sdk.MulticastRouterInventory"); + put("org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory", "org.zstack.sdk.MulticastRouterRendezvousPointInventory"); + put("org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory", "org.zstack.sdk.MulticastRouterVpcVRouterRefInventory"); + put("org.zstack.nas.NasFileSystemInventory", "org.zstack.sdk.NasFileSystemInventory"); + put("org.zstack.nas.NasMountTargetInventory", "org.zstack.sdk.NasMountTargetInventory"); + put("org.zstack.nas.NasProtocolType", "org.zstack.sdk.NasProtocolType"); + put("org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory", "org.zstack.sdk.HostNetworkBondingInventory"); + put("org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory", "org.zstack.sdk.HostNetworkInterfaceInventory"); + put("org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory", "org.zstack.sdk.PhysicalSwitchInventory"); + put("org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory", "org.zstack.sdk.PhysicalSwitchPortInventory"); + put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory", "org.zstack.sdk.HostNetworkInterfaceLldpInventory"); + put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory", "org.zstack.sdk.HostNetworkInterfaceLldpRefInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory"); + put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory", "org.zstack.sdk.L2PortGroupNetworkInventory"); + put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode", "org.zstack.sdk.L2PortGroupVlanMode"); + put("org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory", "org.zstack.sdk.L2VirtualSwitchNetworkInventory"); + put("org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory", "org.zstack.sdk.RemoteVtepInventory"); + put("org.zstack.network.l2.vxlan.vtep.VtepInventory", "org.zstack.sdk.VtepInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory", "org.zstack.sdk.L2VxlanNetworkInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory", "org.zstack.sdk.L2VxlanNetworkPoolInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory", "org.zstack.sdk.VniRangeInventory"); + put("org.zstack.network.ovn.OvnControllerInventory", "org.zstack.sdk.OvnControllerInventory"); + put("org.zstack.network.ovn.OvnControllerVmInstanceInventory", "org.zstack.sdk.OvnControllerVmInstanceInventory"); + put("org.zstack.network.ovn.OvnControllerVmOfferingInventory", "org.zstack.sdk.OvnControllerVmOfferingInventory"); + put("org.zstack.network.securitygroup.SecurityGroupIngressRuleTO", "org.zstack.sdk.SecurityGroupIngressRuleTO"); + put("org.zstack.network.securitygroup.SecurityGroupInventory", "org.zstack.sdk.SecurityGroupInventory"); + put("org.zstack.network.securitygroup.SecurityGroupRuleInventory", "org.zstack.sdk.SecurityGroupRuleInventory"); + put("org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory", "org.zstack.sdk.VmNicSecurityGroupRefInventory"); + put("org.zstack.network.securitygroup.VmNicSecurityPolicyInventory", "org.zstack.sdk.VmNicSecurityPolicyInventory"); + put("org.zstack.network.service.eip.EipInventory", "org.zstack.sdk.EipInventory"); + put("org.zstack.network.service.flat.IpStatisticData", "org.zstack.sdk.IpStatisticData"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus", "org.zstack.sdk.NfvInstClusterStatus"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory", "org.zstack.sdk.NfvInstGroupConfigTaskInventory"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType", "org.zstack.sdk.FuncType"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType", "org.zstack.sdk.InstType"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode", "org.zstack.sdk.NfvInstGroupOperationMode"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus", "org.zstack.sdk.NfvInstGroupStatus"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstInventory", "org.zstack.sdk.NfvInstInventory"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory", "org.zstack.sdk.NfvInstOfferingInventory"); + put("org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl", "org.zstack.sdk.LoadBalancerListerAcl"); + put("org.zstack.network.service.lb.CertificateInventory", "org.zstack.sdk.CertificateInventory"); + put("org.zstack.network.service.lb.LoadBalancerInventory", "org.zstack.sdk.LoadBalancerInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory", "org.zstack.sdk.LoadBalancerListenerACLRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory", "org.zstack.sdk.LoadBalancerListenerCertificateRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerInventory", "org.zstack.sdk.LoadBalancerListenerInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory", "org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory", "org.zstack.sdk.LoadBalancerListenerVmNicRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupInventory", "org.zstack.sdk.LoadBalancerServerGroupInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory", "org.zstack.sdk.LoadBalancerServerGroupServerIpInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory", "org.zstack.sdk.NfvInstGroupInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory", "org.zstack.sdk.NfvInstGroupL3NetworkRefInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory", "org.zstack.sdk.NfvInstGroupMonitorIpInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory", "org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory"); + put("org.zstack.network.service.portforwarding.PortForwardingRuleInventory", "org.zstack.sdk.PortForwardingRuleInventory"); + put("org.zstack.network.service.slb.SlbGroupInventory", "org.zstack.sdk.SlbGroupInventory"); + put("org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory", "org.zstack.sdk.SlbGroupL3NetworkRefInventory"); + put("org.zstack.network.service.slb.SlbGroupMonitorIpInventory", "org.zstack.sdk.SlbGroupMonitorIpInventory"); + put("org.zstack.network.service.slb.SlbLoadBalancerInventory", "org.zstack.sdk.SlbLoadBalancerInventory"); + put("org.zstack.network.service.slb.SlbOfferingInventory", "org.zstack.sdk.SlbOfferingInventory"); + put("org.zstack.network.service.slb.SlbVmInstanceInventory", "org.zstack.sdk.SlbVmInstanceInventory"); + put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory", "org.zstack.sdk.SlbVmInstanceConfigTaskInventory"); + put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus", "org.zstack.sdk.SlbVmInstanceConfigTaskStatus"); + put("org.zstack.network.service.vip.VipInventory", "org.zstack.sdk.VipInventory"); + put("org.zstack.network.service.vip.VipNetworkServicesRefInventory", "org.zstack.sdk.VipNetworkServicesRefInventory"); + put("org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory", "org.zstack.sdk.VipPortRangeInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory", "org.zstack.sdk.VirtualRouterOfferingInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory", "org.zstack.sdk.VirtualRouterSoftwareVersionInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterVmInventory", "org.zstack.sdk.VirtualRouterVmInventory"); + put("org.zstack.network.zns.L2GeneveNetworkInventory", "org.zstack.sdk.network.zns.L2GeneveNetworkInventory"); + put("org.zstack.network.zns.ZnsControllerInventory", "org.zstack.sdk.network.zns.ZnsControllerInventory"); + put("org.zstack.network.zns.ZnsTenantInventory", "org.zstack.sdk.network.zns.ZnsTenantInventory"); + put("org.zstack.network.zns.ZnsTenantRouterInventory", "org.zstack.sdk.network.zns.ZnsTenantRouterInventory"); + put("org.zstack.network.zns.ZnsTransportZoneInventory", "org.zstack.sdk.network.zns.ZnsTransportZoneInventory"); + put("org.zstack.observabilityServer.ObservabilityServerOfferingInventory", "org.zstack.sdk.ObservabilityServerOfferingInventory"); + put("org.zstack.observabilityServer.ObservabilityServerVmInventory", "org.zstack.sdk.ObservabilityServerVmInventory"); + put("org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory", "org.zstack.sdk.ObservabilityServerServiceDataInventory"); + put("org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory", "org.zstack.sdk.LoadBalancerDataInventory"); + put("org.zstack.ovf.datatype.ImagePackageInventory", "org.zstack.sdk.ImagePackageInventory"); + put("org.zstack.ovf.datatype.ImagePackageState", "org.zstack.sdk.ImagePackageState"); + put("org.zstack.ovf.datatype.OvfCdDriverInfo", "org.zstack.sdk.OvfCdDriverInfo"); + put("org.zstack.ovf.datatype.OvfCpuInfo", "org.zstack.sdk.OvfCpuInfo"); + put("org.zstack.ovf.datatype.OvfDiskInfo", "org.zstack.sdk.OvfDiskInfo"); + put("org.zstack.ovf.datatype.OvfEthernetAdapterInfo", "org.zstack.sdk.OvfEthernetAdapterInfo"); + put("org.zstack.ovf.datatype.OvfInfo", "org.zstack.sdk.OvfInfo"); + put("org.zstack.ovf.datatype.OvfMemoryInfo", "org.zstack.sdk.OvfMemoryInfo"); + put("org.zstack.ovf.datatype.OvfNetworkInfo", "org.zstack.sdk.OvfNetworkInfo"); + put("org.zstack.ovf.datatype.OvfOSInfo", "org.zstack.sdk.OvfOSInfo"); + put("org.zstack.ovf.datatype.OvfSystemInfo", "org.zstack.sdk.OvfSystemInfo"); + put("org.zstack.ovf.datatype.OvfVolumeInfo", "org.zstack.sdk.OvfVolumeInfo"); + put("org.zstack.pciDevice.HostIommuStateType", "org.zstack.sdk.HostIommuStateType"); + put("org.zstack.pciDevice.HostIommuStatusType", "org.zstack.sdk.HostIommuStatusType"); + put("org.zstack.pciDevice.PciDeviceChooser", "org.zstack.sdk.PciDeviceChooser"); + put("org.zstack.pciDevice.PciDeviceInventory", "org.zstack.sdk.PciDeviceInventory"); + put("org.zstack.pciDevice.PciDeviceMetaData", "org.zstack.sdk.PciDeviceMetaData"); + put("org.zstack.pciDevice.PciDeviceMetaDataEntry", "org.zstack.sdk.PciDeviceMetaDataEntry"); + put("org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator", "org.zstack.sdk.PciDeviceMetaDataOperator"); + put("org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory"); + put("org.zstack.pciDevice.PciDeviceOfferingInventory", "org.zstack.sdk.PciDeviceOfferingInventory"); + put("org.zstack.pciDevice.PciDeviceOfferingType", "org.zstack.sdk.PciDeviceOfferingType"); + put("org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory", "org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory"); + put("org.zstack.pciDevice.PciDeviceState", "org.zstack.sdk.PciDeviceState"); + put("org.zstack.pciDevice.PciDeviceStatus", "org.zstack.sdk.PciDeviceStatus"); + put("org.zstack.pciDevice.PciDeviceType", "org.zstack.sdk.PciDeviceType"); + put("org.zstack.pciDevice.gpu.GpuAllocateStatus", "org.zstack.sdk.GpuAllocateStatus"); + put("org.zstack.pciDevice.gpu.GpuDeviceInventory", "org.zstack.sdk.GpuDeviceInventory"); + put("org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory", "org.zstack.sdk.GpuDeviceSpecCandidateInventory"); + put("org.zstack.pciDevice.gpu.GpuDeviceSpecInventory", "org.zstack.sdk.GpuDeviceSpecInventory"); + put("org.zstack.pciDevice.gpu.GpuVendor", "org.zstack.sdk.GpuVendor"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory", "org.zstack.sdk.DGpuDeviceInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory", "org.zstack.sdk.DGpuProfileInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory", "org.zstack.sdk.DGpuSpecStatsInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuStatus", "org.zstack.sdk.DGpuStatus"); + put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory", "org.zstack.sdk.MdevDeviceSpecInventory"); + put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState", "org.zstack.sdk.MdevDeviceSpecState"); + put("org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory", "org.zstack.sdk.PciDeviceMdevSpecRefInventory"); + put("org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory"); + put("org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory", "org.zstack.sdk.PciDeviceSpecInventory"); + put("org.zstack.pciDevice.specification.pci.PciDeviceSpecState", "org.zstack.sdk.PciDeviceSpecState"); + put("org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory", "org.zstack.sdk.VmInstancePciDeviceSpecRefInventory"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtMode", "org.zstack.sdk.PciDeviceVirtMode"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtState", "org.zstack.sdk.PciDeviceVirtState"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtStatus", "org.zstack.sdk.PciDeviceVirtStatus"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser", "org.zstack.sdk.MdevDeviceChooser"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory", "org.zstack.sdk.MdevDeviceInventory"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState", "org.zstack.sdk.MdevDeviceState"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus", "org.zstack.sdk.MdevDeviceStatus"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType", "org.zstack.sdk.MdevDeviceType"); + put("org.zstack.policyRoute.PolicyRouteRuleInventory", "org.zstack.sdk.PolicyRouteRuleInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleProtocol", "org.zstack.sdk.PolicyRouteRuleProtocol"); + put("org.zstack.policyRoute.PolicyRouteRuleSetInventory", "org.zstack.sdk.PolicyRouteRuleSetInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory", "org.zstack.sdk.PolicyRouteRuleSetL3RefInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleState", "org.zstack.sdk.PolicyRouteRuleState"); + put("org.zstack.policyRoute.PolicyRouteTableInventory", "org.zstack.sdk.PolicyRouteTableInventory"); + put("org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory", "org.zstack.sdk.PolicyRouteTableRouteEntryInventory"); + put("org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory", "org.zstack.sdk.PolicyRouteTableVRouterRefInventory"); + put("org.zstack.proxy.UserProxyConfigInventory", "org.zstack.sdk.UserProxyConfigInventory"); + put("org.zstack.proxy.UserProxyConfigResourceRefInventory", "org.zstack.sdk.UserProxyConfigResourceRefInventory"); + put("org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct", "org.zstack.sdk.ResourceBindableConfigStruct"); + put("org.zstack.resourceconfig.ResourceConfigInventory", "org.zstack.sdk.ResourceConfigInventory"); + put("org.zstack.resourceconfig.ResourceConfigStruct", "org.zstack.sdk.ResourceConfigStruct"); + put("org.zstack.sdnController.header.H3cSdnControllerTenantInventory", "org.zstack.sdk.H3cSdnControllerTenantInventory"); + put("org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory", "org.zstack.sdk.HardwareL2VxlanNetworkInventory"); + put("org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory"); + put("org.zstack.sdnController.header.SdnVlanRange", "org.zstack.sdk.SdnVlanRange"); + put("org.zstack.snmp.agent.SnmpAgentInventory", "org.zstack.sdk.SnmpAgentInventory"); + put("org.zstack.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory"); + put("org.zstack.sns.SNSApplicationEndpointInventory", "org.zstack.sdk.sns.SNSApplicationEndpointInventory"); + put("org.zstack.sns.SNSApplicationPlatformInventory", "org.zstack.sdk.sns.SNSApplicationPlatformInventory"); + put("org.zstack.sns.SNSSmsReceiverInventory", "org.zstack.sdk.sns.SNSSmsReceiverInventory"); + put("org.zstack.sns.SNSSubscriberInventory", "org.zstack.sdk.sns.SNSSubscriberInventory"); + put("org.zstack.sns.SNSTopicInventory", "org.zstack.sdk.sns.SNSTopicInventory"); + put("org.zstack.sns.SmsReceiverType", "org.zstack.sdk.sns.SmsReceiverType"); + put("org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); + put("org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); + put("org.zstack.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory"); + put("org.zstack.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory"); + put("org.zstack.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory"); + put("org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory"); + put("org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory"); + put("org.zstack.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory"); + put("org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); + put("org.zstack.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory"); + put("org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory"); + put("org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); + put("org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); + put("org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory"); + put("org.zstack.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory"); + put("org.zstack.sso.header.AttributePurpose", "org.zstack.sdk.AttributePurpose"); + put("org.zstack.sso.header.CasClientInventory", "org.zstack.sdk.CasClientInventory"); + put("org.zstack.sso.header.CasState", "org.zstack.sdk.CasState"); + put("org.zstack.sso.header.ExtendedAttribute", "org.zstack.sdk.ExtendedAttribute"); + put("org.zstack.sso.header.OAuth2ClientInventory", "org.zstack.sdk.OAuth2ClientInventory"); + put("org.zstack.sso.header.OAuth2TokenInventory", "org.zstack.sdk.OAuth2TokenInventory"); + put("org.zstack.sso.header.RedirectUrlTemplate", "org.zstack.sdk.RedirectUrlTemplate"); + put("org.zstack.sso.header.RuleAttributeType", "org.zstack.sdk.RuleAttributeType"); + put("org.zstack.sso.header.SAML2ClientInventory", "org.zstack.sdk.SAML2ClientInventory"); + put("org.zstack.sso.header.SAML2State", "org.zstack.sdk.SAML2State"); + put("org.zstack.sso.header.SSOClientAttributeInventory", "org.zstack.sdk.SSOClientAttributeInventory"); + put("org.zstack.sso.header.SSOClientInventory", "org.zstack.sdk.SSOClientInventory"); + put("org.zstack.sso.header.SSORedirectTemplateInventory", "org.zstack.sdk.SSORedirectTemplateInventory"); + put("org.zstack.sso.header.SSOServerTokenInventory", "org.zstack.sdk.SSOServerTokenInventory"); + put("org.zstack.sso.header.SSOTokenInventory", "org.zstack.sdk.SSOTokenInventory"); + put("org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory", "org.zstack.sdk.ImageStoreBackupStorageInventory"); + put("org.zstack.storage.backup.imagestore.ImageStoreGcResult", "org.zstack.sdk.ImageStoreGcResult"); + put("org.zstack.storage.backup.imagestore.ImageStoreImageStruct", "org.zstack.sdk.ImageStoreImageStruct"); + put("org.zstack.storage.backup.sftp.SftpBackupStorageInventory", "org.zstack.sdk.SftpBackupStorageInventory"); + put("org.zstack.storage.ceph.backup.CephBackupStorageInventory", "org.zstack.sdk.CephBackupStorageInventory"); + put("org.zstack.storage.ceph.backup.CephBackupStorageMonInventory", "org.zstack.sdk.CephBackupStorageMonInventory"); + put("org.zstack.storage.ceph.primary.CephOsdGroupInventory", "org.zstack.sdk.CephOsdGroupInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStorageInventory", "org.zstack.sdk.CephPrimaryStorageInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory", "org.zstack.sdk.CephPrimaryStorageMonInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory", "org.zstack.sdk.CephPrimaryStoragePoolInventory"); + put("org.zstack.storage.ceph.primary.KVMCephVolumeTO", "org.zstack.sdk.KVMCephVolumeTO"); + put("org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.ceph.primary.KvmCephCdRomTO", "org.zstack.sdk.KvmCephCdRomTO"); + put("org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.ceph.primary.KvmCephIsoTO", "org.zstack.sdk.KvmCephIsoTO"); + put("org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.device.fibreChannel.FiberChannelLunInventory", "org.zstack.sdk.FiberChannelLunInventory"); + put("org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory", "org.zstack.sdk.FiberChannelStorageInventory"); + put("org.zstack.storage.device.hba.FcHbaDeviceInventory", "org.zstack.sdk.FcHbaDeviceInventory"); + put("org.zstack.storage.device.hba.HbaDeviceInventory", "org.zstack.sdk.HbaDeviceInventory"); + put("org.zstack.storage.device.iscsi.IscsiLunInventory", "org.zstack.sdk.IscsiLunInventory"); + put("org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory", "org.zstack.sdk.IscsiServerClusterRefInventory"); + put("org.zstack.storage.device.iscsi.IscsiServerInventory", "org.zstack.sdk.IscsiServerInventory"); + put("org.zstack.storage.device.iscsi.IscsiTargetInventory", "org.zstack.sdk.IscsiTargetInventory"); + put("org.zstack.storage.device.localRaid.LocateStatus", "org.zstack.sdk.LocateStatus"); + put("org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory"); + put("org.zstack.storage.device.localRaid.RaidControllerInventory", "org.zstack.sdk.RaidControllerInventory"); + put("org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory", "org.zstack.sdk.RaidPhysicalDriveInventory"); + put("org.zstack.storage.device.localRaid.RunningState", "org.zstack.sdk.RunningState"); + put("org.zstack.storage.device.localRaid.SmartDataStruct", "org.zstack.sdk.SmartDataStruct"); + put("org.zstack.storage.device.multipath.DeviceTO", "org.zstack.sdk.DeviceTO"); + put("org.zstack.storage.device.multipath.MultipathTopologyStruct", "org.zstack.sdk.MultipathTopologyStruct"); + put("org.zstack.storage.device.nvme.NvmeLunHostRefInventory", "org.zstack.sdk.NvmeLunHostRefInventory"); + put("org.zstack.storage.device.nvme.NvmeLunInventory", "org.zstack.sdk.NvmeLunInventory"); + put("org.zstack.storage.device.nvme.NvmeServerClusterRefInventory", "org.zstack.sdk.NvmeServerClusterRefInventory"); + put("org.zstack.storage.device.nvme.NvmeServerInventory", "org.zstack.sdk.NvmeServerInventory"); + put("org.zstack.storage.device.nvme.NvmeTargetInventory", "org.zstack.sdk.NvmeTargetInventory"); + put("org.zstack.storage.primary.block.BlockPrimaryStorageInventory", "org.zstack.sdk.BlockPrimaryStorageInventory"); + put("org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity", "org.zstack.sdk.HostDiskCapacity"); + put("org.zstack.storage.primary.local.LocalStorageResourceRefInventory", "org.zstack.sdk.LocalStorageResourceRefInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory", "org.zstack.sdk.MiniStorageHostRefInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageInventory", "org.zstack.sdk.MiniStorageInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory", "org.zstack.sdk.MiniStorageResourceReplicationInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageType", "org.zstack.sdk.MiniStorageType"); + put("org.zstack.storage.primary.ministorage.ReplicationDiskStatus", "org.zstack.sdk.ReplicationDiskStatus"); + put("org.zstack.storage.primary.ministorage.ReplicationNetworkStatus", "org.zstack.sdk.ReplicationNetworkStatus"); + put("org.zstack.storage.primary.ministorage.ReplicationRole", "org.zstack.sdk.ReplicationRole"); + put("org.zstack.storage.primary.ministorage.ReplicationState", "org.zstack.sdk.ReplicationState"); + put("org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct", "org.zstack.sdk.SharedBlockCandidateStruct"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupType", "org.zstack.sdk.SharedBlockGroupType"); + put("org.zstack.storage.primary.sharedblock.SharedBlockInventory", "org.zstack.sdk.SharedBlockInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockState", "org.zstack.sdk.SharedBlockState"); + put("org.zstack.storage.primary.sharedblock.SharedBlockStatus", "org.zstack.sdk.SharedBlockStatus"); + put("org.zstack.storage.primary.sharedblock.SharedBlockType", "org.zstack.sdk.SharedBlockType"); + put("org.zstack.tag2.AttachTagResult", "org.zstack.sdk.AttachTagResult"); + put("org.zstack.templateConfig.GlobalConfigTemplateInventory", "org.zstack.sdk.GlobalConfigTemplateInventory"); + put("org.zstack.templateConfig.TemplateConfigInventory", "org.zstack.sdk.TemplateConfigInventory"); + put("org.zstack.ticket.entity.ArchiveTicketInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketInventory"); + put("org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory"); + put("org.zstack.ticket.entity.TicketFlowCollectionInventory", "org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory"); + put("org.zstack.ticket.entity.TicketFlowInventory", "org.zstack.sdk.ticket.entity.TicketFlowInventory"); + put("org.zstack.ticket.entity.TicketInventory", "org.zstack.sdk.ticket.entity.TicketInventory"); + put("org.zstack.ticket.entity.TicketRequest", "org.zstack.sdk.ticket.entity.TicketRequest"); + put("org.zstack.ticket.entity.TicketStatus", "org.zstack.sdk.ticket.entity.TicketStatus"); + put("org.zstack.ticket.entity.TicketStatusEvent", "org.zstack.sdk.ticket.entity.TicketStatusEvent"); + put("org.zstack.ticket.entity.TicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory"); + put("org.zstack.ticket.entity.TicketTypeInventory", "org.zstack.sdk.ticket.entity.TicketTypeInventory"); + put("org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); + put("org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory", "org.zstack.sdk.TwoFactorAuthenticationInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory", "org.zstack.sdk.TwoFactorAuthenticationSecretInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus", "org.zstack.sdk.TwoFactorAuthenticationSecretStatus"); + put("org.zstack.usbDevice.UsbDeviceInventory", "org.zstack.sdk.UsbDeviceInventory"); + put("org.zstack.usbDevice.UsbDeviceState", "org.zstack.sdk.UsbDeviceState"); + put("org.zstack.v2v.V2VConversionHostInventory", "org.zstack.sdk.V2VConversionHostInventory"); + put("org.zstack.vmware.ESXHostInventory", "org.zstack.sdk.ESXHostInventory"); + put("org.zstack.vmware.VCenterBackupStorageInventory", "org.zstack.sdk.VCenterBackupStorageInventory"); + put("org.zstack.vmware.VCenterClusterInventory", "org.zstack.sdk.VCenterClusterInventory"); + put("org.zstack.vmware.VCenterDatacenterInventory", "org.zstack.sdk.VCenterDatacenterInventory"); + put("org.zstack.vmware.VCenterInventory", "org.zstack.sdk.VCenterInventory"); + put("org.zstack.vmware.VCenterPrimaryStorageInventory", "org.zstack.sdk.VCenterPrimaryStorageInventory"); + put("org.zstack.vmware.VCenterResourcePoolInventory", "org.zstack.sdk.VCenterResourcePoolInventory"); + put("org.zstack.vmware.VCenterResourcePoolUsageInventory", "org.zstack.sdk.VCenterResourcePoolUsageInventory"); + put("org.zstack.vpcfirewall.entity.ActionType", "org.zstack.sdk.ActionType"); + put("org.zstack.vpcfirewall.entity.FirewallRuleState", "org.zstack.sdk.FirewallRuleState"); + put("org.zstack.vpcfirewall.entity.IpSetType", "org.zstack.sdk.IpSetType"); + put("org.zstack.vpcfirewall.entity.PacketsForwardType", "org.zstack.sdk.PacketsForwardType"); + put("org.zstack.vpcfirewall.entity.ProtocolType", "org.zstack.sdk.ProtocolType"); + put("org.zstack.vpcfirewall.entity.VpcFirewallInventory", "org.zstack.sdk.VpcFirewallInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory", "org.zstack.sdk.VpcFirewallIpSetTemplateInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory", "org.zstack.sdk.VpcFirewallRuleInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory", "org.zstack.sdk.VpcFirewallRuleSetInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory", "org.zstack.sdk.VpcFirewallRuleSetL3RefInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory", "org.zstack.sdk.VpcFirewallRuleTemplateInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory", "org.zstack.sdk.VpcFirewallVRouterRefInventory"); + put("org.zstack.vrouterRoute.VRouterRouteEntryAO", "org.zstack.sdk.VRouterRouteEntryAO"); + put("org.zstack.vrouterRoute.VRouterRouteEntryInventory", "org.zstack.sdk.VRouterRouteEntryInventory"); + put("org.zstack.vrouterRoute.VRouterRouteEntryType", "org.zstack.sdk.VRouterRouteEntryType"); + put("org.zstack.vrouterRoute.VRouterRouteTableInventory", "org.zstack.sdk.VRouterRouteTableInventory"); + put("org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory"); + put("org.zstack.xdragon.XDragonHostInventory", "org.zstack.sdk.XDragonHostInventory"); + put("org.zstack.zbox.ZBoxInventory", "org.zstack.sdk.ZBoxInventory"); + put("org.zstack.zbox.ZBoxLocationRefInventory", "org.zstack.sdk.ZBoxLocationRefInventory"); + put("org.zstack.zbox.ZBoxState", "org.zstack.sdk.ZBoxState"); + put("org.zstack.zbox.ZBoxStatus", "org.zstack.sdk.ZBoxStatus"); + put("org.zstack.zops.ChronyServerInfo", "org.zstack.sdk.ChronyServerInfo"); + put("org.zstack.zops.ChronyServerInfoPair", "org.zstack.sdk.ChronyServerInfoPair"); + put("org.zstack.zops.HostConnectedStatus", "org.zstack.sdk.HostConnectedStatus"); + put("org.zstack.zops.NetworkReachablePair", "org.zstack.sdk.NetworkReachablePair"); + put("org.zstack.zql.ZQLQueryReturn", "org.zstack.sdk.ZQLQueryReturn"); + put("org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam", "org.zstack.sdk.zwatch.alarm.ActionParam"); + put("org.zstack.zwatch.alarm.AlarmActionInventory", "org.zstack.sdk.zwatch.alarm.AlarmActionInventory"); + put("org.zstack.zwatch.alarm.AlarmDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory"); + put("org.zstack.zwatch.alarm.AlarmInventory", "org.zstack.sdk.zwatch.alarm.AlarmInventory"); + put("org.zstack.zwatch.alarm.AlarmLabelInventory", "org.zstack.sdk.zwatch.alarm.AlarmLabelInventory"); + put("org.zstack.zwatch.alarm.AlarmState", "org.zstack.sdk.zwatch.alarm.AlarmState"); + put("org.zstack.zwatch.alarm.AlarmStatus", "org.zstack.sdk.zwatch.alarm.AlarmStatus"); + put("org.zstack.zwatch.alarm.AlertDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlertDataAckInventory"); + put("org.zstack.zwatch.alarm.EventDataAckInventory", "org.zstack.sdk.zwatch.alarm.EventDataAckInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionState", "org.zstack.sdk.zwatch.alarm.EventSubscriptionState"); + put("org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); + put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); + put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); + put("org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory"); + put("org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); + put("org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct", "org.zstack.sdk.zwatch.api.EventStruct"); + put("org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct", "org.zstack.sdk.zwatch.api.MetricStruct"); + put("org.zstack.zwatch.api.Histogram", "org.zstack.sdk.zwatch.api.Histogram"); + put("org.zstack.zwatch.api.Histogram$Tag", "org.zstack.sdk.zwatch.api.Tag"); + put("org.zstack.zwatch.datatype.AlarmData", "org.zstack.sdk.zwatch.datatype.AlarmData"); + put("org.zstack.zwatch.datatype.AlarmDataV1", "org.zstack.sdk.zwatch.datatype.AlarmDataV1"); + put("org.zstack.zwatch.datatype.AlarmDataV2", "org.zstack.sdk.zwatch.datatype.AlarmDataV2"); + put("org.zstack.zwatch.datatype.AuditType", "org.zstack.sdk.zwatch.datatype.AuditType"); + put("org.zstack.zwatch.datatype.Datapoint", "org.zstack.sdk.zwatch.datatype.Datapoint"); + put("org.zstack.zwatch.datatype.EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); + put("org.zstack.zwatch.datatype.EventData", "org.zstack.sdk.zwatch.datatype.EventData"); + put("org.zstack.zwatch.datatype.EventFamily$EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); + put("org.zstack.zwatch.datatype.Label", "org.zstack.sdk.zwatch.datatype.Label"); + put("org.zstack.zwatch.datatype.Label$Operator", "org.zstack.sdk.zwatch.datatype.Operator"); + put("org.zstack.zwatch.datatype.MetricDatum", "org.zstack.sdk.zwatch.datatype.MetricDatum"); + put("org.zstack.zwatch.influxdb.InfluxEventData", "org.zstack.sdk.zwatch.influxdb.InfluxEventData"); + put("org.zstack.zwatch.influxdb.InfluxEventDataV1", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1"); + put("org.zstack.zwatch.influxdb.InfluxEventDataV2", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2"); + put("org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory"); + put("org.zstack.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory"); + put("org.zstack.zwatch.metricpusher.ReceiverState", "org.zstack.sdk.zwatch.metricpusher.ReceiverState"); + put("org.zstack.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory"); + put("org.zstack.zwatch.migratedb.AuditsInventory", "org.zstack.sdk.zwatch.migratedb.AuditsInventory"); + put("org.zstack.zwatch.migratedb.EventRecordsInventory", "org.zstack.sdk.zwatch.migratedb.EventRecordsInventory"); + put("org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory"); + put("org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory"); + put("org.zstack.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState"); + put("org.zstack.zwatch.resnotify.ResNotifyType", "org.zstack.sdk.zwatch.resnotify.ResNotifyType"); + put("org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory"); + put("org.zstack.zwatch.ruleengine.ComparisonOperator", "org.zstack.sdk.zwatch.ruleengine.ComparisonOperator"); + put("org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); + put("org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); + put("org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); } }; public final static HashMap dstToSrcMapping = new HashMap() { { - put("org.zstack.sdk.AccessControlListEntryInventory", "org.zstack.header.acl.AccessControlListEntryInventory"); - put("org.zstack.sdk.AccessControlListInventory", "org.zstack.header.acl.AccessControlListInventory"); - put("org.zstack.sdk.AccessControlRuleInventory", "org.zstack.loginControl.entity.AccessControlRuleInventory"); - put("org.zstack.sdk.AccessKeyInventory", "org.zstack.accessKey.AccessKeyInventory"); - put("org.zstack.sdk.AccessKeyState", "org.zstack.accessKey.AccessKeyState"); - put("org.zstack.sdk.AccessKeyType", "org.zstack.accessKey.AccessKeyType"); - put("org.zstack.sdk.AccessPathInfo", "org.zstack.header.volume.block.AccessPathInfo"); - put("org.zstack.sdk.AccountInventory", "org.zstack.header.identity.AccountInventory"); - put("org.zstack.sdk.AccountPriceTableRefInventory", "org.zstack.billing.table.AccountPriceTableRefInventory"); - put("org.zstack.sdk.AccountResourceRefInventory", "org.zstack.header.identity.AccountResourceRefInventory"); - put("org.zstack.sdk.ActionStruct", "org.zstack.cloudformation.template.struct.ActionStruct"); - put("org.zstack.sdk.ActionType", "org.zstack.vpcfirewall.entity.ActionType"); - put("org.zstack.sdk.AddHostFromFileResult", "org.zstack.header.host.AddHostFromFileResult"); - put("org.zstack.sdk.AddingNewVmRuleInventory", "org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory"); - put("org.zstack.sdk.AdditionalLicenseInfo", "org.zstack.license.AdditionalLicenseInfo"); - put("org.zstack.sdk.AdditionalLicenseType", "org.zstack.license.AdditionalLicenseType"); - put("org.zstack.sdk.AddressPoolInventory", "org.zstack.header.network.l3.AddressPoolInventory"); - put("org.zstack.sdk.AffinityGroupInventory", "org.zstack.header.affinitygroup.AffinityGroupInventory"); - put("org.zstack.sdk.AffinityGroupUsageInventory", "org.zstack.header.affinitygroup.AffinityGroupUsageInventory"); - put("org.zstack.sdk.AgentVersionInventory", "org.zstack.core.upgrade.AgentVersionInventory"); - put("org.zstack.sdk.AiSiNoSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory"); - put("org.zstack.sdk.AlertInventory", "org.zstack.monitoring.AlertInventory"); - put("org.zstack.sdk.AliyunDiskInventory", "org.zstack.header.aliyun.storage.disk.AliyunDiskInventory"); - put("org.zstack.sdk.AliyunEbsBackupStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory"); - put("org.zstack.sdk.AliyunEbsPrimaryStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory"); - put("org.zstack.sdk.AliyunErrorCode", "org.zstack.header.aliyun.errorCode.AliyunErrorCode"); - put("org.zstack.sdk.AliyunNasAccessGroupInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory"); - put("org.zstack.sdk.AliyunNasAccessGroupProperty", "org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty"); - put("org.zstack.sdk.AliyunNasAccessRuleInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory"); - put("org.zstack.sdk.AliyunNasFileSystemInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory"); - put("org.zstack.sdk.AliyunNasFileSystemProperty", "org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty"); - put("org.zstack.sdk.AliyunNasMountTargetInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory"); - put("org.zstack.sdk.AliyunNasMountTargetProperty", "org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty"); - put("org.zstack.sdk.AliyunOssException", "org.zstack.header.aliyun.AliyunOssException"); - put("org.zstack.sdk.AliyunPanguPartitionInventory", "org.zstack.aliyun.pangu.AliyunPanguPartitionInventory"); - put("org.zstack.sdk.AliyunProxyVSwitchInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory"); - put("org.zstack.sdk.AliyunProxyVpcInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory"); - put("org.zstack.sdk.AliyunRouterInterfaceInventory", "org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory"); - put("org.zstack.sdk.AliyunSnapshotInventory", "org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory"); - put("org.zstack.sdk.AppBuildSystemInventory", "org.zstack.header.buildsystem.AppBuildSystemInventory"); - put("org.zstack.sdk.AppBuildSystemZoneRefInventory", "org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory"); - put("org.zstack.sdk.ApplianceVmInventory", "org.zstack.appliancevm.ApplianceVmInventory"); - put("org.zstack.sdk.ApplicationDevelopmentServiceInventory", "org.zstack.ai.entity.ApplicationDevelopmentServiceInventory"); - put("org.zstack.sdk.ArchitectureImageMapping", "org.zstack.ai.message.ArchitectureImageMapping"); - put("org.zstack.sdk.AttachTagResult", "org.zstack.tag2.AttachTagResult"); - put("org.zstack.sdk.AttributePurpose", "org.zstack.sso.header.AttributePurpose"); - put("org.zstack.sdk.AuditData", "org.zstack.header.zwatch.AuditData"); - put("org.zstack.sdk.AuditDataV1", "org.zstack.header.zwatch.AuditDataV1"); - put("org.zstack.sdk.AuditDataV2", "org.zstack.header.zwatch.AuditDataV2"); - put("org.zstack.sdk.AutoScalingGroupActivityInventory", "org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory"); - put("org.zstack.sdk.AutoScalingGroupInstanceInventory", "org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory"); - put("org.zstack.sdk.AutoScalingGroupInventory", "org.zstack.autoscaling.group.AutoScalingGroupInventory"); - put("org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory"); - put("org.zstack.sdk.AutoScalingRuleInventory", "org.zstack.autoscaling.group.rule.AutoScalingRuleInventory"); - put("org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory"); - put("org.zstack.sdk.AutoScalingRuleState", "org.zstack.autoscaling.group.rule.AutoScalingRuleState"); - put("org.zstack.sdk.AutoScalingRuleStatus", "org.zstack.autoscaling.group.rule.AutoScalingRuleStatus"); - put("org.zstack.sdk.AutoScalingRuleTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory"); - put("org.zstack.sdk.AutoScalingTemplateInventory", "org.zstack.autoscaling.template.AutoScalingTemplateInventory"); - put("org.zstack.sdk.AutoScalingVmTemplateInventory", "org.zstack.autoscaling.template.AutoScalingVmTemplateInventory"); - put("org.zstack.sdk.BackupMode", "org.zstack.header.storage.backup.BackupMode"); - put("org.zstack.sdk.BackupStorageExternalBackupInfo", "org.zstack.externalbackup.BackupStorageExternalBackupInfo"); - put("org.zstack.sdk.BackupStorageInventory", "org.zstack.header.storage.backup.BackupStorageInventory"); - put("org.zstack.sdk.BareMetal2BillingInventory", "org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory"); - put("org.zstack.sdk.BareMetal2BondingInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingInventory"); - put("org.zstack.sdk.BareMetal2BondingNicRefInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory"); - put("org.zstack.sdk.BareMetal2ChassisDiskInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory"); - put("org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory"); - put("org.zstack.sdk.BareMetal2ChassisInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisInventory"); - put("org.zstack.sdk.BareMetal2ChassisNicInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory"); - put("org.zstack.sdk.BareMetal2ChassisOfferingInventory", "org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory"); - put("org.zstack.sdk.BareMetal2ChassisPciDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory"); - put("org.zstack.sdk.BareMetal2DpuChassisConfig", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig"); - put("org.zstack.sdk.BareMetal2DpuChassisInventory", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory"); - put("org.zstack.sdk.BareMetal2DpuHostInventory", "org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory"); - put("org.zstack.sdk.BareMetal2GatewayInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayInventory"); - put("org.zstack.sdk.BareMetal2GatewayProvisionNicInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory"); - put("org.zstack.sdk.BareMetal2InstanceInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceInventory"); - put("org.zstack.sdk.BareMetal2InstanceProvisionNicInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory"); - put("org.zstack.sdk.BareMetal2IpmiChassisInventory", "org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory"); - put("org.zstack.sdk.BareMetal2ProvisionNetworkInventory", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory"); - put("org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity"); - put("org.zstack.sdk.BareMetal2Spending", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending"); - put("org.zstack.sdk.BareMetal2SpendingDetails", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails"); - put("org.zstack.sdk.BaremetalBondingInventory", "org.zstack.header.baremetal.network.BaremetalBondingInventory"); - put("org.zstack.sdk.BaremetalChassisInventory", "org.zstack.header.baremetal.chassis.BaremetalChassisInventory"); - put("org.zstack.sdk.BaremetalException", "org.zstack.header.baremetal.BaremetalException"); - put("org.zstack.sdk.BaremetalHardwareInfoInventory", "org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory"); - put("org.zstack.sdk.BaremetalInstanceInventory", "org.zstack.header.baremetal.instance.BaremetalInstanceInventory"); - put("org.zstack.sdk.BaremetalNicInventory", "org.zstack.header.baremetal.network.BaremetalNicInventory"); - put("org.zstack.sdk.BaremetalPxeServerInventory", "org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory"); - put("org.zstack.sdk.BaremetalVlanNicInventory", "org.zstack.header.baremetal.network.BaremetalVlanNicInventory"); - put("org.zstack.sdk.BaseVirtualDeviceTO", "org.zstack.kvm.BaseVirtualDeviceTO"); - put("org.zstack.sdk.BatchDeleteVolumeSnapshotStruct", "org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct"); - put("org.zstack.sdk.BillingInventory", "org.zstack.billing.generator.BillingInventory"); - put("org.zstack.sdk.BlockPrimaryStorageInventory", "org.zstack.storage.primary.block.BlockPrimaryStorageInventory"); - put("org.zstack.sdk.BlockVolumeInventory", "org.zstack.header.volume.block.BlockVolumeInventory"); - put("org.zstack.sdk.BuildAppExportHistoryInventory", "org.zstack.header.buildapp.BuildAppExportHistoryInventory"); - put("org.zstack.sdk.BuildApplicationInventory", "org.zstack.header.buildapp.BuildApplicationInventory"); - put("org.zstack.sdk.CCSCertificateInventory", "org.zstack.crypto.ccs.CCSCertificateInventory"); - put("org.zstack.sdk.CCSCertificateUserRefInventory", "org.zstack.crypto.ccs.CCSCertificateUserRefInventory"); - put("org.zstack.sdk.CCSCertificateUserState", "org.zstack.crypto.ccs.CCSCertificateUserState"); - put("org.zstack.sdk.CSPSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory"); - put("org.zstack.sdk.CasClientInventory", "org.zstack.sso.header.CasClientInventory"); - put("org.zstack.sdk.CasState", "org.zstack.sso.header.CasState"); - put("org.zstack.sdk.CbtTaskInventory", "org.zstack.header.cbt.CbtTaskInventory"); - put("org.zstack.sdk.CbtTaskResourceRefInventory", "org.zstack.header.cbt.CbtTaskResourceRefInventory"); - put("org.zstack.sdk.CbtTaskStatus", "org.zstack.header.cbt.CbtTaskStatus"); - put("org.zstack.sdk.CdRomTO", "org.zstack.kvm.KVMAgentCommands$CdRomTO"); - put("org.zstack.sdk.CdpPolicyInventory", "org.zstack.header.storage.cdp.CdpPolicyInventory"); - put("org.zstack.sdk.CdpPolicyState", "org.zstack.header.storage.cdp.CdpPolicyState"); - put("org.zstack.sdk.CdpTaskInventory", "org.zstack.header.storage.cdp.CdpTaskInventory"); - put("org.zstack.sdk.CdpTaskResourceRefInventory", "org.zstack.header.storage.cdp.CdpTaskResourceRefInventory"); - put("org.zstack.sdk.CdpTaskState", "org.zstack.header.storage.cdp.CdpTaskState"); - put("org.zstack.sdk.CdpTaskStatus", "org.zstack.header.storage.cdp.CdpTaskStatus"); - put("org.zstack.sdk.CdpTaskType", "org.zstack.header.storage.cdp.CdpTaskType"); - put("org.zstack.sdk.CephBackupStorageInventory", "org.zstack.storage.ceph.backup.CephBackupStorageInventory"); - put("org.zstack.sdk.CephBackupStorageMonInventory", "org.zstack.storage.ceph.backup.CephBackupStorageMonInventory"); - put("org.zstack.sdk.CephOsdGroupInventory", "org.zstack.storage.ceph.primary.CephOsdGroupInventory"); - put("org.zstack.sdk.CephPrimaryStorageInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageInventory"); - put("org.zstack.sdk.CephPrimaryStorageMonInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory"); - put("org.zstack.sdk.CephPrimaryStoragePoolInventory", "org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory"); - put("org.zstack.sdk.CertificateInventory", "org.zstack.network.service.lb.CertificateInventory"); - put("org.zstack.sdk.ChainInfo", "org.zstack.header.core.progress.ChainInfo"); - put("org.zstack.sdk.ChronyServerInfo", "org.zstack.zops.ChronyServerInfo"); - put("org.zstack.sdk.ChronyServerInfoPair", "org.zstack.zops.ChronyServerInfoPair"); - put("org.zstack.sdk.CleanTrashResult", "org.zstack.header.core.trash.CleanTrashResult"); - put("org.zstack.sdk.CloneVmInstanceInventory", "org.zstack.header.vm.CloneVmInstanceInventory"); - put("org.zstack.sdk.CloneVmInstanceResults", "org.zstack.header.vm.CloneVmInstanceResults"); - put("org.zstack.sdk.CloudFormationStackEventInventory", "org.zstack.header.cloudformation.CloudFormationStackEventInventory"); - put("org.zstack.sdk.ClusterDRSInventory", "org.zstack.drs.entity.ClusterDRSInventory"); - put("org.zstack.sdk.ClusterInventory", "org.zstack.header.cluster.ClusterInventory"); - put("org.zstack.sdk.ConnectionAccessPointInventory", "org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory"); - put("org.zstack.sdk.ConnectionRelationShipInventory", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory"); - put("org.zstack.sdk.ConnectionRelationShipProperty", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty"); - put("org.zstack.sdk.ConsoleInventory", "org.zstack.header.console.ConsoleInventory"); - put("org.zstack.sdk.ConsoleProxyAgentInventory", "org.zstack.header.console.ConsoleProxyAgentInventory"); - put("org.zstack.sdk.ContainerBackupStorageInventory", "org.zstack.container.ContainerBackupStorageInventory"); - put("org.zstack.sdk.ContainerImageInventory", "org.zstack.container.entity.ContainerImageInventory"); - put("org.zstack.sdk.ContainerImageTagInventory", "org.zstack.container.entity.ContainerImageTagInventory"); - put("org.zstack.sdk.ContainerManagementEndpointInventory", "org.zstack.container.entity.ContainerManagementEndpointInventory"); - put("org.zstack.sdk.ContainerUsage", "org.zstack.container.ContainerUsage"); - put("org.zstack.sdk.ControlStrategy", "org.zstack.loginControl.entity.ControlStrategy"); - put("org.zstack.sdk.CpuArchitecture", "org.zstack.header.host.CpuArchitecture"); - put("org.zstack.sdk.CpuMemoryCapacityData", "org.zstack.header.allocator.datatypes.CpuMemoryCapacityData"); - put("org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure"); - put("org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure"); - put("org.zstack.sdk.DGpuDeviceInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory"); - put("org.zstack.sdk.DGpuProfileInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory"); - put("org.zstack.sdk.DGpuSpecStatsInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory"); - put("org.zstack.sdk.DGpuStatus", "org.zstack.pciDevice.gpu.dgpu.DGpuStatus"); - put("org.zstack.sdk.DRSAdviceInventory", "org.zstack.drs.entity.DRSAdviceInventory"); - put("org.zstack.sdk.DRSVmMigrationActivityInventory", "org.zstack.drs.entity.DRSVmMigrationActivityInventory"); - put("org.zstack.sdk.DataCenterInventory", "org.zstack.header.datacenter.DataCenterInventory"); - put("org.zstack.sdk.DataCenterProperty", "org.zstack.header.datacenter.DataCenterProperty"); - put("org.zstack.sdk.DataVolumeBillingInventory", "org.zstack.billing.generator.volume.data.DataVolumeBillingInventory"); - put("org.zstack.sdk.DataVolumeSpending", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending"); - put("org.zstack.sdk.DataVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory"); - put("org.zstack.sdk.DatasetInventory", "org.zstack.ai.entity.DatasetInventory"); - put("org.zstack.sdk.DeleteSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult"); - put("org.zstack.sdk.DeviceAddress", "org.zstack.header.vm.devices.DeviceAddress"); - put("org.zstack.sdk.DeviceTO", "org.zstack.storage.device.multipath.DeviceTO"); - put("org.zstack.sdk.DirectoryInventory", "org.zstack.directory.DirectoryInventory"); - put("org.zstack.sdk.DiskOfferingInventory", "org.zstack.header.configuration.DiskOfferingInventory"); - put("org.zstack.sdk.ESXHostInventory", "org.zstack.vmware.ESXHostInventory"); - put("org.zstack.sdk.EcsImageInventory", "org.zstack.header.aliyun.image.EcsImageInventory"); - put("org.zstack.sdk.EcsInstanceInventory", "org.zstack.header.aliyun.ecs.EcsInstanceInventory"); - put("org.zstack.sdk.EcsInstanceType", "org.zstack.header.aliyun.ecs.EcsInstanceType"); - put("org.zstack.sdk.EcsSecurityGroupInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory"); - put("org.zstack.sdk.EcsSecurityGroupRuleInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory"); - put("org.zstack.sdk.EcsVSwitchInventory", "org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory"); - put("org.zstack.sdk.EcsVpcInventory", "org.zstack.header.aliyun.network.vpc.EcsVpcInventory"); - put("org.zstack.sdk.EipInventory", "org.zstack.network.service.eip.EipInventory"); - put("org.zstack.sdk.ElaborationCategory", "org.zstack.core.errorcode.ElaborationCategory"); - put("org.zstack.sdk.ElaborationCheckResult", "org.zstack.core.errorcode.ElaborationCheckResult"); - put("org.zstack.sdk.ElaborationContent", "org.zstack.core.errorcode.ElaborationContent"); - put("org.zstack.sdk.EmailMediaInventory", "org.zstack.monitoring.media.EmailMediaInventory"); - put("org.zstack.sdk.EmailTriggerActionInventory", "org.zstack.monitoring.actions.EmailTriggerActionInventory"); - put("org.zstack.sdk.ErrorCode", "org.zstack.header.errorcode.ErrorCode"); - put("org.zstack.sdk.ErrorCodeList", "org.zstack.header.errorcode.ErrorCodeList"); - put("org.zstack.sdk.EthernetVfPciDeviceInventory", "org.zstack.header.sriov.EthernetVfPciDeviceInventory"); - put("org.zstack.sdk.EthernetVfStatus", "org.zstack.header.sriov.EthernetVfStatus"); - put("org.zstack.sdk.EventLogInventory", "org.zstack.core.eventlog.EventLogInventory"); - put("org.zstack.sdk.ExponBlockVolumeInventory", "org.zstack.header.volume.block.ExponBlockVolumeInventory"); - put("org.zstack.sdk.ExtendedAttribute", "org.zstack.sso.header.ExtendedAttribute"); - put("org.zstack.sdk.ExternalBackupInventory", "org.zstack.externalbackup.ExternalBackupInventory"); - put("org.zstack.sdk.ExternalBackupState", "org.zstack.externalbackup.ExternalBackupState"); - put("org.zstack.sdk.ExternalBackupStorageInventory", "org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory"); - put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); - put("org.zstack.sdk.ExternalServiceCapabilities", "org.zstack.header.core.external.service.ExternalServiceCapabilities"); - put("org.zstack.sdk.ExternalServiceCapabilitiesBuilder", "org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder"); - put("org.zstack.sdk.ExternalServiceConfigurationInventory", "org.zstack.header.core.external.service.ExternalServiceConfigurationInventory"); - put("org.zstack.sdk.ExternalServiceInventory", "org.zstack.header.core.external.service.ExternalServiceInventory"); - put("org.zstack.sdk.FaultToleranceVmGroupInventory", "org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory"); - put("org.zstack.sdk.FcHbaDeviceInventory", "org.zstack.storage.device.hba.FcHbaDeviceInventory"); - put("org.zstack.sdk.FiSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory"); - put("org.zstack.sdk.FiSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory"); - put("org.zstack.sdk.FiberChannelLunInventory", "org.zstack.storage.device.fibreChannel.FiberChannelLunInventory"); - put("org.zstack.sdk.FiberChannelStorageInventory", "org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory"); - put("org.zstack.sdk.FirewallRuleState", "org.zstack.vpcfirewall.entity.FirewallRuleState"); - put("org.zstack.sdk.FlkSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory"); - put("org.zstack.sdk.FlkSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory"); - put("org.zstack.sdk.FlowCollectorInventory", "org.zstack.header.flowMeter.FlowCollectorInventory"); - put("org.zstack.sdk.FlowCounter", "org.zstack.header.flowMeter.FlowCounter"); - put("org.zstack.sdk.FlowMeterInventory", "org.zstack.header.flowMeter.FlowMeterInventory"); - put("org.zstack.sdk.FreeIpInventory", "org.zstack.header.network.l3.FreeIpInventory"); - put("org.zstack.sdk.FuncType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType"); - put("org.zstack.sdk.GarbageCollectorInventory", "org.zstack.core.gc.GarbageCollectorInventory"); - put("org.zstack.sdk.GlobalConfigInventory", "org.zstack.core.config.GlobalConfigInventory"); - put("org.zstack.sdk.GlobalConfigOptions", "org.zstack.core.config.GlobalConfigOptions"); - put("org.zstack.sdk.GlobalConfigTemplateInventory", "org.zstack.templateConfig.GlobalConfigTemplateInventory"); - put("org.zstack.sdk.GpuAllocateStatus", "org.zstack.pciDevice.gpu.GpuAllocateStatus"); - put("org.zstack.sdk.GpuDeviceInventory", "org.zstack.pciDevice.gpu.GpuDeviceInventory"); - put("org.zstack.sdk.GpuDeviceSpecCandidateInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory"); - put("org.zstack.sdk.GpuDeviceSpecInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecInventory"); - put("org.zstack.sdk.GpuVendor", "org.zstack.pciDevice.gpu.GpuVendor"); - put("org.zstack.sdk.GuestOsCharacterInventory", "org.zstack.core.config.GuestOsCharacterInventory"); - put("org.zstack.sdk.GuestToolsInventory", "org.zstack.guesttools.GuestToolsInventory"); - put("org.zstack.sdk.GuestToolsStateInventory", "org.zstack.guesttools.GuestToolsStateInventory"); - put("org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory"); - put("org.zstack.sdk.GuestVmScriptExecutedRecordInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordInventory"); - put("org.zstack.sdk.GuestVmScriptInventory", "org.zstack.guesttools.GuestVmScriptInventory"); - put("org.zstack.sdk.H3cSdnControllerTenantInventory", "org.zstack.sdnController.header.H3cSdnControllerTenantInventory"); - put("org.zstack.sdk.HaNetworkGroupInventory", "org.zstack.ha.HaNetworkGroupInventory"); - put("org.zstack.sdk.HaStrategyConditionInventory", "org.zstack.ha.HaStrategyConditionInventory"); - put("org.zstack.sdk.HaiTaiSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory"); - put("org.zstack.sdk.HardwareL2VxlanNetworkInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory"); - put("org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory"); - put("org.zstack.sdk.HbaDeviceInventory", "org.zstack.storage.device.hba.HbaDeviceInventory"); - put("org.zstack.sdk.HostConnectedStatus", "org.zstack.zops.HostConnectedStatus"); - put("org.zstack.sdk.HostDiskCapacity", "org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity"); - put("org.zstack.sdk.HostInventory", "org.zstack.header.host.HostInventory"); - put("org.zstack.sdk.HostIommuStateType", "org.zstack.pciDevice.HostIommuStateType"); - put("org.zstack.sdk.HostIommuStatusType", "org.zstack.pciDevice.HostIommuStatusType"); - put("org.zstack.sdk.HostIpmiInventory", "org.zstack.header.host.HostIpmiInventory"); - put("org.zstack.sdk.HostLoad", "org.zstack.drs.api.HostLoad"); - put("org.zstack.sdk.HostNUMANode", "org.zstack.header.host.HostNUMANode"); - put("org.zstack.sdk.HostNetworkBondingInventory", "org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory"); - put("org.zstack.sdk.HostNetworkBondingServiceRefInventory", "org.zstack.header.host.HostNetworkBondingServiceRefInventory"); - put("org.zstack.sdk.HostNetworkInterfaceInventory", "org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory"); - put("org.zstack.sdk.HostNetworkInterfaceLldpInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory"); - put("org.zstack.sdk.HostNetworkInterfaceLldpRefInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory"); - put("org.zstack.sdk.HostNetworkInterfaceServiceRefInventory", "org.zstack.header.host.HostNetworkInterfaceServiceRefInventory"); - put("org.zstack.sdk.HostNetworkLabelInventory", "org.zstack.header.host.HostNetworkLabelInventory"); - put("org.zstack.sdk.HostOsCategoryInventory", "org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory"); - put("org.zstack.sdk.HostPhysicalMemoryInventory", "org.zstack.header.host.HostPhysicalMemoryInventory"); - put("org.zstack.sdk.HostSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory"); - put("org.zstack.sdk.HwMonitorStatus", "org.zstack.header.host.HwMonitorStatus"); - put("org.zstack.sdk.HybridAccountInventory", "org.zstack.hybrid.account.HybridAccountInventory"); - put("org.zstack.sdk.HybridConnectionType", "org.zstack.header.aliyun.network.HybridConnectionType"); - put("org.zstack.sdk.HybridEipAddressInventory", "org.zstack.header.hybrid.network.eip.HybridEipAddressInventory"); - put("org.zstack.sdk.HybridEipStatus", "org.zstack.header.hybrid.network.eip.HybridEipStatus"); - put("org.zstack.sdk.HybridType", "org.zstack.hybrid.core.HybridType"); - put("org.zstack.sdk.HygonCcpDeviceInventory", "org.zstack.hygon.HygonCcpDeviceInventory"); - put("org.zstack.sdk.HygonDeviceState", "org.zstack.hygon.HygonDeviceState"); - put("org.zstack.sdk.HygonDeviceType", "org.zstack.hygon.HygonDeviceType"); - put("org.zstack.sdk.HypervisorVersionState", "org.zstack.kvm.hypervisor.datatype.HypervisorVersionState"); - put("org.zstack.sdk.IPsecConnectionInventory", "org.zstack.ipsec.IPsecConnectionInventory"); - put("org.zstack.sdk.IPsecL3NetworkRefInventory", "org.zstack.ipsec.IPsecL3NetworkRefInventory"); - put("org.zstack.sdk.IPsecPeerCidrInventory", "org.zstack.ipsec.IPsecPeerCidrInventory"); - put("org.zstack.sdk.IdentityZoneInventory", "org.zstack.header.identityzone.IdentityZoneInventory"); - put("org.zstack.sdk.IdentityZoneProperty", "org.zstack.header.identityzone.IdentityZoneProperty"); - put("org.zstack.sdk.ImageBackupStorageRefInventory", "org.zstack.header.image.ImageBackupStorageRefInventory"); - put("org.zstack.sdk.ImageCacheInventory", "org.zstack.header.storage.primary.ImageCacheInventory"); - put("org.zstack.sdk.ImageGroupInventory", "org.zstack.header.image.ImageGroupInventory"); - put("org.zstack.sdk.ImageGroupRefInventory", "org.zstack.header.image.ImageGroupRefInventory"); - put("org.zstack.sdk.ImageInventory", "org.zstack.header.image.ImageInventory"); - put("org.zstack.sdk.ImagePackageInventory", "org.zstack.ovf.datatype.ImagePackageInventory"); - put("org.zstack.sdk.ImagePackageState", "org.zstack.ovf.datatype.ImagePackageState"); - put("org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory"); - put("org.zstack.sdk.ImageReplicationGroupInventory", "org.zstack.imagereplicator.ImageReplicationGroupInventory"); - put("org.zstack.sdk.ImageStoreBackupStorageInventory", "org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory"); - put("org.zstack.sdk.ImageStoreGcResult", "org.zstack.storage.backup.imagestore.ImageStoreGcResult"); - put("org.zstack.sdk.ImageStoreImageStruct", "org.zstack.storage.backup.imagestore.ImageStoreImageStruct"); - put("org.zstack.sdk.InfoSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory"); - put("org.zstack.sdk.InfoSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory"); - put("org.zstack.sdk.InputType", "org.zstack.abstraction.OptionType$InputType"); - put("org.zstack.sdk.InstType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType"); - put("org.zstack.sdk.InstallPathRecycleInventory", "org.zstack.header.core.trash.InstallPathRecycleInventory"); - put("org.zstack.sdk.InstanceOfferingInventory", "org.zstack.header.configuration.InstanceOfferingInventory"); - put("org.zstack.sdk.InvocationRecord", "org.zstack.guesttools.InvocationRecord"); - put("org.zstack.sdk.InvocationRecordDetail", "org.zstack.guesttools.InvocationRecordDetail"); - put("org.zstack.sdk.IpCapacityData", "org.zstack.header.network.l3.datatypes.IpCapacityData"); - put("org.zstack.sdk.IpRangeInventory", "org.zstack.header.network.l3.IpRangeInventory"); - put("org.zstack.sdk.IpRangeType", "org.zstack.header.network.l3.IpRangeType"); - put("org.zstack.sdk.IpSetType", "org.zstack.vpcfirewall.entity.IpSetType"); - put("org.zstack.sdk.IpStatisticData", "org.zstack.network.service.flat.IpStatisticData"); - put("org.zstack.sdk.IscsiLunInventory", "org.zstack.storage.device.iscsi.IscsiLunInventory"); - put("org.zstack.sdk.IscsiServerClusterRefInventory", "org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory"); - put("org.zstack.sdk.IscsiServerInventory", "org.zstack.storage.device.iscsi.IscsiServerInventory"); - put("org.zstack.sdk.IscsiTargetInventory", "org.zstack.storage.device.iscsi.IscsiTargetInventory"); - put("org.zstack.sdk.IsoTO", "org.zstack.kvm.KVMAgentCommands$IsoTO"); - put("org.zstack.sdk.ItemInventory", "org.zstack.monitoring.items.ItemInventory"); - put("org.zstack.sdk.JitSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory"); - put("org.zstack.sdk.JobDetails", "org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails"); - put("org.zstack.sdk.JsonLabelInventory", "org.zstack.core.jsonlabel.JsonLabelInventory"); - put("org.zstack.sdk.KVMCephVolumeTO", "org.zstack.storage.ceph.primary.KVMCephVolumeTO"); - put("org.zstack.sdk.KVMHostInventory", "org.zstack.kvm.KVMHostInventory"); - put("org.zstack.sdk.KVMIsoTO", "org.zstack.kvm.KVMIsoTO"); - put("org.zstack.sdk.KoAlSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory"); - put("org.zstack.sdk.KvmCephCdRomTO", "org.zstack.storage.ceph.primary.KvmCephCdRomTO"); - put("org.zstack.sdk.KvmCephIsoTO", "org.zstack.storage.ceph.primary.KvmCephIsoTO"); - put("org.zstack.sdk.KvmHostHypervisorMetadataInventory", "org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory"); - put("org.zstack.sdk.KvmHypervisorInfoInventory", "org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory"); - put("org.zstack.sdk.L2NetworkData", "org.zstack.header.network.l2.L2NetworkData"); - put("org.zstack.sdk.L2NetworkInventory", "org.zstack.header.network.l2.L2NetworkInventory"); - put("org.zstack.sdk.L2PortGroupNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory"); - put("org.zstack.sdk.L2PortGroupVlanMode", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode"); - put("org.zstack.sdk.L2VirtualSwitchNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory"); - put("org.zstack.sdk.L2VlanNetworkInventory", "org.zstack.header.network.l2.L2VlanNetworkInventory"); - put("org.zstack.sdk.L2VxlanNetworkInventory", "org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory"); - put("org.zstack.sdk.L2VxlanNetworkPoolInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory"); - put("org.zstack.sdk.L3NetworkHostRouteInventory", "org.zstack.header.network.l3.L3NetworkHostRouteInventory"); - put("org.zstack.sdk.L3NetworkInventory", "org.zstack.header.network.l3.L3NetworkInventory"); - put("org.zstack.sdk.LdapAccountRefInventory", "org.zstack.ldap.LdapAccountRefInventory"); - put("org.zstack.sdk.LdapResourceRefInventory", "org.zstack.login.entity.LdapResourceRefInventory"); - put("org.zstack.sdk.LdapServerInventory", "org.zstack.ldap.LdapServerInventory"); - put("org.zstack.sdk.LicenseAddOnInventory", "org.zstack.license.LicenseAddOnInventory"); - put("org.zstack.sdk.LicenseInventory", "org.zstack.license.LicenseInventory"); - put("org.zstack.sdk.LoadBalancerDataInventory", "org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory"); - put("org.zstack.sdk.LoadBalancerInventory", "org.zstack.network.service.lb.LoadBalancerInventory"); - put("org.zstack.sdk.LoadBalancerListenerACLRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerCertificateRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerInventory", "org.zstack.network.service.lb.LoadBalancerListenerInventory"); - put("org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory"); - put("org.zstack.sdk.LoadBalancerListerAcl", "org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl"); - put("org.zstack.sdk.LoadBalancerServerGroupInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupInventory"); - put("org.zstack.sdk.LoadBalancerServerGroupServerIpInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory"); - put("org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory"); - put("org.zstack.sdk.LocalStorageResourceRefInventory", "org.zstack.storage.primary.local.LocalStorageResourceRefInventory"); - put("org.zstack.sdk.LocateStatus", "org.zstack.storage.device.localRaid.LocateStatus"); - put("org.zstack.sdk.LogCategory", "org.zstack.log.server.LogCategory"); - put("org.zstack.sdk.LogLevel", "org.zstack.log.server.LogLevel"); - put("org.zstack.sdk.LogServerInventory", "org.zstack.log.server.LogServerInventory"); - put("org.zstack.sdk.LogType", "org.zstack.log.server.LogType"); - put("org.zstack.sdk.LoginAuthenticationProcedureDesc", "org.zstack.header.identity.login.LoginAuthenticationProcedureDesc"); - put("org.zstack.sdk.LongJobInventory", "org.zstack.header.longjob.LongJobInventory"); - put("org.zstack.sdk.LongJobProgressDetail", "org.zstack.header.core.progress.LongJobProgressDetail"); - put("org.zstack.sdk.LongJobState", "org.zstack.header.longjob.LongJobState"); - put("org.zstack.sdk.LunInventory", "org.zstack.header.storageDevice.LunInventory"); - put("org.zstack.sdk.MaaSUsage", "org.zstack.ai.message.MaaSUsage"); - put("org.zstack.sdk.ManagementNodeInventory", "org.zstack.header.managementnode.ManagementNodeInventory"); - put("org.zstack.sdk.MatchEvidence", "org.zstack.ai.message.MatchEvidence"); - put("org.zstack.sdk.MatchedStep", "org.zstack.ai.message.MatchedStep"); - put("org.zstack.sdk.MdevDeviceChooser", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser"); - put("org.zstack.sdk.MdevDeviceInventory", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory"); - put("org.zstack.sdk.MdevDeviceSpecInventory", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory"); - put("org.zstack.sdk.MdevDeviceSpecState", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState"); - put("org.zstack.sdk.MdevDeviceState", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState"); - put("org.zstack.sdk.MdevDeviceStatus", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus"); - put("org.zstack.sdk.MdevDeviceType", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType"); - put("org.zstack.sdk.MediaInventory", "org.zstack.monitoring.media.MediaInventory"); - put("org.zstack.sdk.MetaServerService", "org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService"); - put("org.zstack.sdk.MiniCandidateHostStruct", "org.zstack.header.bootstrap.MiniCandidateHostStruct"); - put("org.zstack.sdk.MiniHostInfo", "org.zstack.header.bootstrap.MiniHostInfo"); - put("org.zstack.sdk.MiniNetworkConfigStruct", "org.zstack.header.bootstrap.MiniNetworkConfigStruct"); - put("org.zstack.sdk.MiniStorageHostRefInventory", "org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory"); - put("org.zstack.sdk.MiniStorageInventory", "org.zstack.storage.primary.ministorage.MiniStorageInventory"); - put("org.zstack.sdk.MiniStorageResourceReplicationInventory", "org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory"); - put("org.zstack.sdk.MiniStorageType", "org.zstack.storage.primary.ministorage.MiniStorageType"); - put("org.zstack.sdk.MirrorNetworkUsedIpInventory", "org.zstack.header.portMirror.MirrorNetworkUsedIpInventory"); - put("org.zstack.sdk.ModelCenterCapacityInventory", "org.zstack.ai.entity.ModelCenterCapacityInventory"); - put("org.zstack.sdk.ModelCenterInventory", "org.zstack.ai.entity.ModelCenterInventory"); - put("org.zstack.sdk.ModelCenterServiceInventory", "org.zstack.ai.message.ModelCenterServiceInventory"); - put("org.zstack.sdk.ModelEvalServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory"); - put("org.zstack.sdk.ModelEvaluationTaskInventory", "org.zstack.ai.entity.ModelEvaluationTaskInventory"); - put("org.zstack.sdk.ModelInventory", "org.zstack.ai.entity.ModelInventory"); - put("org.zstack.sdk.ModelService", "org.zstack.ai.message.ModelService"); - put("org.zstack.sdk.ModelServiceGroupDatasetRefInventory", "org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory"); - put("org.zstack.sdk.ModelServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelServiceInstanceGroupInventory"); - put("org.zstack.sdk.ModelServiceInstanceInventory", "org.zstack.ai.entity.ModelServiceInstanceInventory"); - put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); - put("org.zstack.sdk.ModelServiceMatchEntry", "org.zstack.ai.message.ModelServiceMatchEntry"); - put("org.zstack.sdk.ModelServiceMatchEntryName", "org.zstack.ai.message.ModelServiceMatchEntryName"); - put("org.zstack.sdk.ModelServiceMatchStatus", "org.zstack.ai.message.ModelServiceMatchStatus"); - put("org.zstack.sdk.ModelServiceRefInventory", "org.zstack.ai.entity.ModelServiceRefInventory"); - put("org.zstack.sdk.ModelServiceTemplateInventory", "org.zstack.ai.entity.ModelServiceTemplateInventory"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo"); - put("org.zstack.sdk.MonitorTriggerActionInventory", "org.zstack.monitoring.actions.MonitorTriggerActionInventory"); - put("org.zstack.sdk.MonitorTriggerInventory", "org.zstack.monitoring.MonitorTriggerInventory"); - put("org.zstack.sdk.MttyDeviceInventory", "org.zstack.mttyDevice.MttyDeviceInventory"); - put("org.zstack.sdk.MttyDeviceState", "org.zstack.mttyDevice.MttyDeviceState"); - put("org.zstack.sdk.MttyDeviceType", "org.zstack.mttyDevice.MttyDeviceType"); - put("org.zstack.sdk.MttyDeviceVirtStatus", "org.zstack.mttyDevice.MttyDeviceVirtStatus"); - put("org.zstack.sdk.MulticastRouteInventory", "org.zstack.multicast.router.header.MulticastRouteInventory"); - put("org.zstack.sdk.MulticastRouterInventory", "org.zstack.multicast.router.header.MulticastRouterInventory"); - put("org.zstack.sdk.MulticastRouterRendezvousPointInventory", "org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory"); - put("org.zstack.sdk.MulticastRouterVpcVRouterRefInventory", "org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory"); - put("org.zstack.sdk.MultipathTopologyStruct", "org.zstack.storage.device.multipath.MultipathTopologyStruct"); - put("org.zstack.sdk.NasFileSystemInventory", "org.zstack.nas.NasFileSystemInventory"); - put("org.zstack.sdk.NasMountTargetInventory", "org.zstack.nas.NasMountTargetInventory"); - put("org.zstack.sdk.NasProtocolType", "org.zstack.nas.NasProtocolType"); - put("org.zstack.sdk.NativeClusterInventory", "org.zstack.container.entity.NativeClusterInventory"); - put("org.zstack.sdk.NativeHostInventory", "org.zstack.container.entity.NativeHostInventory"); - put("org.zstack.sdk.Neighbor", "org.zstack.header.protocol.Neighbor"); - put("org.zstack.sdk.NetworkReachablePair", "org.zstack.zops.NetworkReachablePair"); - put("org.zstack.sdk.NetworkRouterAreaRefInventory", "org.zstack.header.protocol.NetworkRouterAreaRefInventory"); - put("org.zstack.sdk.NetworkRouterFlowMeterRefInventory", "org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory"); - put("org.zstack.sdk.NetworkServiceL3NetworkRefInventory", "org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory"); - put("org.zstack.sdk.NetworkServiceProviderInventory", "org.zstack.header.network.service.NetworkServiceProviderInventory"); - put("org.zstack.sdk.NfvInstClusterStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus"); - put("org.zstack.sdk.NfvInstGroupConfigTaskInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory"); - put("org.zstack.sdk.NfvInstGroupInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory"); - put("org.zstack.sdk.NfvInstGroupL3NetworkRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory"); - put("org.zstack.sdk.NfvInstGroupMonitorIpInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory"); - put("org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory"); - put("org.zstack.sdk.NfvInstGroupOperationMode", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode"); - put("org.zstack.sdk.NfvInstGroupStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus"); - put("org.zstack.sdk.NfvInstInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstInventory"); - put("org.zstack.sdk.NfvInstOfferingInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory"); - put("org.zstack.sdk.NginxRedirectRule", "org.zstack.ai.NginxRedirectRule"); - put("org.zstack.sdk.NicTO", "org.zstack.kvm.KVMAgentCommands$NicTO"); - put("org.zstack.sdk.NormalIpRangeInventory", "org.zstack.header.network.l3.NormalIpRangeInventory"); - put("org.zstack.sdk.NvmeLunHostRefInventory", "org.zstack.storage.device.nvme.NvmeLunHostRefInventory"); - put("org.zstack.sdk.NvmeLunInventory", "org.zstack.storage.device.nvme.NvmeLunInventory"); - put("org.zstack.sdk.NvmeServerClusterRefInventory", "org.zstack.storage.device.nvme.NvmeServerClusterRefInventory"); - put("org.zstack.sdk.NvmeServerInventory", "org.zstack.storage.device.nvme.NvmeServerInventory"); - put("org.zstack.sdk.NvmeTargetInventory", "org.zstack.storage.device.nvme.NvmeTargetInventory"); - put("org.zstack.sdk.OAuth2ClientInventory", "org.zstack.sso.header.OAuth2ClientInventory"); - put("org.zstack.sdk.OAuth2TokenInventory", "org.zstack.sso.header.OAuth2TokenInventory"); - put("org.zstack.sdk.ObservabilityServerOfferingInventory", "org.zstack.observabilityServer.ObservabilityServerOfferingInventory"); - put("org.zstack.sdk.ObservabilityServerServiceDataInventory", "org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory"); - put("org.zstack.sdk.ObservabilityServerVmInventory", "org.zstack.observabilityServer.ObservabilityServerVmInventory"); - put("org.zstack.sdk.OptionType", "org.zstack.abstraction.OptionType"); - put("org.zstack.sdk.OssBucketInventory", "org.zstack.header.aliyun.oss.OssBucketInventory"); - put("org.zstack.sdk.OssBucketProperty", "org.zstack.header.aliyun.oss.OssBucketProperty"); - put("org.zstack.sdk.OvfCdDriverInfo", "org.zstack.ovf.datatype.OvfCdDriverInfo"); - put("org.zstack.sdk.OvfCpuInfo", "org.zstack.ovf.datatype.OvfCpuInfo"); - put("org.zstack.sdk.OvfDiskInfo", "org.zstack.ovf.datatype.OvfDiskInfo"); - put("org.zstack.sdk.OvfEthernetAdapterInfo", "org.zstack.ovf.datatype.OvfEthernetAdapterInfo"); - put("org.zstack.sdk.OvfInfo", "org.zstack.ovf.datatype.OvfInfo"); - put("org.zstack.sdk.OvfMemoryInfo", "org.zstack.ovf.datatype.OvfMemoryInfo"); - put("org.zstack.sdk.OvfNetworkInfo", "org.zstack.ovf.datatype.OvfNetworkInfo"); - put("org.zstack.sdk.OvfOSInfo", "org.zstack.ovf.datatype.OvfOSInfo"); - put("org.zstack.sdk.OvfSystemInfo", "org.zstack.ovf.datatype.OvfSystemInfo"); - put("org.zstack.sdk.OvfVolumeInfo", "org.zstack.ovf.datatype.OvfVolumeInfo"); - put("org.zstack.sdk.OvnControllerInventory", "org.zstack.network.ovn.OvnControllerInventory"); - put("org.zstack.sdk.OvnControllerVmInstanceInventory", "org.zstack.network.ovn.OvnControllerVmInstanceInventory"); - put("org.zstack.sdk.OvnControllerVmOfferingInventory", "org.zstack.network.ovn.OvnControllerVmOfferingInventory"); - put("org.zstack.sdk.PacketsForwardType", "org.zstack.vpcfirewall.entity.PacketsForwardType"); - put("org.zstack.sdk.Pagination", "org.zstack.billing.Pagination"); - put("org.zstack.sdk.PciDeviceBillingInventory", "org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory"); - put("org.zstack.sdk.PciDeviceChooser", "org.zstack.pciDevice.PciDeviceChooser"); - put("org.zstack.sdk.PciDeviceInventory", "org.zstack.pciDevice.PciDeviceInventory"); - put("org.zstack.sdk.PciDeviceMdevSpecRefInventory", "org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory"); - put("org.zstack.sdk.PciDeviceMetaData", "org.zstack.pciDevice.PciDeviceMetaData"); - put("org.zstack.sdk.PciDeviceMetaDataEntry", "org.zstack.pciDevice.PciDeviceMetaDataEntry"); - put("org.zstack.sdk.PciDeviceMetaDataOperator", "org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator"); - put("org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory"); - put("org.zstack.sdk.PciDeviceOfferingInventory", "org.zstack.pciDevice.PciDeviceOfferingInventory"); - put("org.zstack.sdk.PciDeviceOfferingType", "org.zstack.pciDevice.PciDeviceOfferingType"); - put("org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory", "org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory"); - put("org.zstack.sdk.PciDeviceSpecInventory", "org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory"); - put("org.zstack.sdk.PciDeviceSpecState", "org.zstack.pciDevice.specification.pci.PciDeviceSpecState"); - put("org.zstack.sdk.PciDeviceSpending", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending"); - put("org.zstack.sdk.PciDeviceSpendingInventory", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory"); - put("org.zstack.sdk.PciDeviceState", "org.zstack.pciDevice.PciDeviceState"); - put("org.zstack.sdk.PciDeviceStatus", "org.zstack.pciDevice.PciDeviceStatus"); - put("org.zstack.sdk.PciDeviceType", "org.zstack.pciDevice.PciDeviceType"); - put("org.zstack.sdk.PciDeviceVirtMode", "org.zstack.pciDevice.virtual.PciDeviceVirtMode"); - put("org.zstack.sdk.PciDeviceVirtState", "org.zstack.pciDevice.virtual.PciDeviceVirtState"); - put("org.zstack.sdk.PciDeviceVirtStatus", "org.zstack.pciDevice.virtual.PciDeviceVirtStatus"); - put("org.zstack.sdk.PendingTaskInfo", "org.zstack.header.core.progress.PendingTaskInfo"); - put("org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory"); - put("org.zstack.sdk.PhysicalSwitchInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory"); - put("org.zstack.sdk.PhysicalSwitchPortInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory"); - put("org.zstack.sdk.PluginDriverInventory", "org.zstack.header.core.external.plugin.PluginDriverInventory"); - put("org.zstack.sdk.PluginSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory"); - put("org.zstack.sdk.PodInventory", "org.zstack.container.entity.PodInventory"); - put("org.zstack.sdk.PolicyInventory", "org.zstack.header.identity.PolicyInventory"); - put("org.zstack.sdk.PolicyRouteRuleInventory", "org.zstack.policyRoute.PolicyRouteRuleInventory"); - put("org.zstack.sdk.PolicyRouteRuleProtocol", "org.zstack.policyRoute.PolicyRouteRuleProtocol"); - put("org.zstack.sdk.PolicyRouteRuleSetInventory", "org.zstack.policyRoute.PolicyRouteRuleSetInventory"); - put("org.zstack.sdk.PolicyRouteRuleSetL3RefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory"); - put("org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory"); - put("org.zstack.sdk.PolicyRouteRuleState", "org.zstack.policyRoute.PolicyRouteRuleState"); - put("org.zstack.sdk.PolicyRouteTableInventory", "org.zstack.policyRoute.PolicyRouteTableInventory"); - put("org.zstack.sdk.PolicyRouteTableRouteEntryInventory", "org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory"); - put("org.zstack.sdk.PolicyRouteTableVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory"); - put("org.zstack.sdk.PolicyStatement", "org.zstack.header.identity.PolicyStatement"); - put("org.zstack.sdk.PolicyStatementEffect", "org.zstack.header.identity.PolicyStatementEffect"); - put("org.zstack.sdk.PortForwardingRuleInventory", "org.zstack.network.service.portforwarding.PortForwardingRuleInventory"); - put("org.zstack.sdk.PortMirrorInventory", "org.zstack.header.portMirror.PortMirrorInventory"); - put("org.zstack.sdk.PortMirrorSessionInventory", "org.zstack.header.portMirror.PortMirrorSessionInventory"); - put("org.zstack.sdk.PortMirrorState", "org.zstack.header.portMirror.PortMirrorState"); - put("org.zstack.sdk.PowerOffHardwareResult", "org.zstack.header.cluster.PowerOffHardwareResult"); - put("org.zstack.sdk.PreconfigurationTemplateInventory", "org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory"); - put("org.zstack.sdk.PreviewResourceStruct", "org.zstack.header.cloudformation.PreviewResourceStruct"); - put("org.zstack.sdk.Price", "org.zstack.billing.table.APICreatePriceTableMsg$Price"); - put("org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory"); - put("org.zstack.sdk.PriceInventory", "org.zstack.billing.PriceInventory"); - put("org.zstack.sdk.PricePciDeviceOfferingRefInventory", "org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory"); - put("org.zstack.sdk.PriceTableInventory", "org.zstack.billing.table.PriceTableInventory"); - put("org.zstack.sdk.PrimaryStorageHostStatus", "org.zstack.header.storage.primary.PrimaryStorageHostStatus"); - put("org.zstack.sdk.PrimaryStorageInventory", "org.zstack.header.storage.primary.PrimaryStorageInventory"); - put("org.zstack.sdk.ProgressProperty", "org.zstack.header.aliyun.image.ProgressProperty"); - put("org.zstack.sdk.ProjectRepositoryInventory", "org.zstack.container.entity.ProjectRepositoryInventory"); - put("org.zstack.sdk.ProtocolType", "org.zstack.vpcfirewall.entity.ProtocolType"); - put("org.zstack.sdk.PubIpVipBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory"); - put("org.zstack.sdk.PubIpVipBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory"); - put("org.zstack.sdk.PubIpVipBandwidthSpending", "org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending"); - put("org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory"); - put("org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory"); - put("org.zstack.sdk.PubIpVmNicBandwidthSpending", "org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending"); - put("org.zstack.sdk.PublishAppInventory", "org.zstack.header.appcenter.PublishAppInventory"); - put("org.zstack.sdk.PublishAppResourceStruct", "org.zstack.header.appcenter.PublishAppResourceStruct"); - put("org.zstack.sdk.QuotaInventory", "org.zstack.header.identity.QuotaInventory"); - put("org.zstack.sdk.QuotaUsage", "org.zstack.header.identity.Quota$QuotaUsage"); - put("org.zstack.sdk.RaidControllerInventory", "org.zstack.storage.device.localRaid.RaidControllerInventory"); - put("org.zstack.sdk.RaidPhysicalDriveInventory", "org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory"); - put("org.zstack.sdk.RedirectUrlTemplate", "org.zstack.sso.header.RedirectUrlTemplate"); - put("org.zstack.sdk.RemoteVtepInventory", "org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory"); - put("org.zstack.sdk.RemovalInstanceRuleInventory", "org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory"); - put("org.zstack.sdk.ReplicationDiskStatus", "org.zstack.storage.primary.ministorage.ReplicationDiskStatus"); - put("org.zstack.sdk.ReplicationGroupState", "org.zstack.imagereplicator.ReplicationGroupState"); - put("org.zstack.sdk.ReplicationNetworkStatus", "org.zstack.storage.primary.ministorage.ReplicationNetworkStatus"); - put("org.zstack.sdk.ReplicationRole", "org.zstack.storage.primary.ministorage.ReplicationRole"); - put("org.zstack.sdk.ReplicationState", "org.zstack.storage.primary.ministorage.ReplicationState"); - put("org.zstack.sdk.ReservedIpRangeInventory", "org.zstack.header.network.l3.ReservedIpRangeInventory"); - put("org.zstack.sdk.ResourceBackupState", "org.zstack.externalbackup.ResourceBackupState"); - put("org.zstack.sdk.ResourceBindableConfigStruct", "org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct"); - put("org.zstack.sdk.ResourceConfigInventory", "org.zstack.resourceconfig.ResourceConfigInventory"); - put("org.zstack.sdk.ResourceConfigStruct", "org.zstack.resourceconfig.ResourceConfigStruct"); - put("org.zstack.sdk.ResourceExternalBackupInfo", "org.zstack.externalbackup.ResourceExternalBackupInfo"); - put("org.zstack.sdk.ResourceInventory", "org.zstack.header.vo.ResourceInventory"); - put("org.zstack.sdk.ResourceSpending", "org.zstack.billing.ResourceSpending"); - put("org.zstack.sdk.ResourceStackInventory", "org.zstack.header.cloudformation.ResourceStackInventory"); - put("org.zstack.sdk.ResourceStruct", "org.zstack.cloudformation.template.struct.ResourceStruct"); - put("org.zstack.sdk.ResourceType", "org.zstack.cloudformation.template.struct.ResourceType"); - put("org.zstack.sdk.RevertSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult"); - put("org.zstack.sdk.RootVolumeBillingInventory", "org.zstack.billing.generator.volume.root.RootVolumeBillingInventory"); - put("org.zstack.sdk.RootVolumeSpending", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending"); - put("org.zstack.sdk.RootVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory"); - put("org.zstack.sdk.RouterAreaInventory", "org.zstack.header.protocol.RouterAreaInventory"); - put("org.zstack.sdk.RuleAttributeType", "org.zstack.sso.header.RuleAttributeType"); - put("org.zstack.sdk.RunningState", "org.zstack.storage.device.localRaid.RunningState"); - put("org.zstack.sdk.RunningTaskInfo", "org.zstack.header.core.progress.RunningTaskInfo"); - put("org.zstack.sdk.SAML2ClientInventory", "org.zstack.sso.header.SAML2ClientInventory"); - put("org.zstack.sdk.SAML2State", "org.zstack.sso.header.SAML2State"); - put("org.zstack.sdk.SSOClientAttributeInventory", "org.zstack.sso.header.SSOClientAttributeInventory"); - put("org.zstack.sdk.SSOClientInventory", "org.zstack.sso.header.SSOClientInventory"); - put("org.zstack.sdk.SSORedirectTemplateInventory", "org.zstack.sso.header.SSORedirectTemplateInventory"); - put("org.zstack.sdk.SSOServerTokenInventory", "org.zstack.sso.header.SSOServerTokenInventory"); - put("org.zstack.sdk.SSOTokenInventory", "org.zstack.sso.header.SSOTokenInventory"); - put("org.zstack.sdk.SanSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory"); - put("org.zstack.sdk.SanSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory"); - put("org.zstack.sdk.SchedulerJobGroupInventory", "org.zstack.header.scheduler.SchedulerJobGroupInventory"); - put("org.zstack.sdk.SchedulerJobGroupJobRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory"); - put("org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory"); - put("org.zstack.sdk.SchedulerJobHistoryInventory", "org.zstack.header.scheduler.SchedulerJobHistoryInventory"); - put("org.zstack.sdk.SchedulerJobInventory", "org.zstack.header.scheduler.SchedulerJobInventory"); - put("org.zstack.sdk.SchedulerJobSchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory"); - put("org.zstack.sdk.SchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerTriggerInventory"); - put("org.zstack.sdk.ScsiLunClusterStatusInventory", "org.zstack.header.storageDevice.ScsiLunClusterStatusInventory"); - put("org.zstack.sdk.ScsiLunHostRefInventory", "org.zstack.header.storageDevice.ScsiLunHostRefInventory"); - put("org.zstack.sdk.ScsiLunInventory", "org.zstack.header.storageDevice.ScsiLunInventory"); - put("org.zstack.sdk.ScsiLunVmInstanceRefInventory", "org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory"); - put("org.zstack.sdk.SdnControllerHostRefInventory", "org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory"); - put("org.zstack.sdk.SdnControllerInventory", "org.zstack.header.network.sdncontroller.SdnControllerInventory"); - put("org.zstack.sdk.SdnControllerStatus", "org.zstack.header.network.sdncontroller.SdnControllerStatus"); - put("org.zstack.sdk.SdnVlanRange", "org.zstack.sdnController.header.SdnVlanRange"); - put("org.zstack.sdk.SecretResourcePoolInventory", "org.zstack.header.securitymachine.SecretResourcePoolInventory"); - put("org.zstack.sdk.SecurityGroupIngressRuleTO", "org.zstack.network.securitygroup.SecurityGroupIngressRuleTO"); - put("org.zstack.sdk.SecurityGroupInventory", "org.zstack.network.securitygroup.SecurityGroupInventory"); - put("org.zstack.sdk.SecurityGroupRuleInventory", "org.zstack.network.securitygroup.SecurityGroupRuleInventory"); - put("org.zstack.sdk.SecurityMachineInventory", "org.zstack.header.securitymachine.SecurityMachineInventory"); - put("org.zstack.sdk.ServiceStatus", "org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus"); - put("org.zstack.sdk.ServiceTypeStatisticData", "org.zstack.header.host.ServiceTypeStatisticData"); - put("org.zstack.sdk.SessionInventory", "org.zstack.header.identity.SessionInventory"); - put("org.zstack.sdk.SessionStatus", "org.zstack.header.portMirror.SessionStatus"); - put("org.zstack.sdk.SessionType", "org.zstack.header.portMirror.SessionType"); - put("org.zstack.sdk.SftpBackupStorageInventory", "org.zstack.storage.backup.sftp.SftpBackupStorageInventory"); - put("org.zstack.sdk.ShareableVolumeVmInstanceRefInventory", "org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory"); - put("org.zstack.sdk.SharedBlockCandidateStruct", "org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct"); - put("org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory"); - put("org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory"); - put("org.zstack.sdk.SharedBlockGroupType", "org.zstack.storage.primary.sharedblock.SharedBlockGroupType"); - put("org.zstack.sdk.SharedBlockInventory", "org.zstack.storage.primary.sharedblock.SharedBlockInventory"); - put("org.zstack.sdk.SharedBlockState", "org.zstack.storage.primary.sharedblock.SharedBlockState"); - put("org.zstack.sdk.SharedBlockStatus", "org.zstack.storage.primary.sharedblock.SharedBlockStatus"); - put("org.zstack.sdk.SharedBlockType", "org.zstack.storage.primary.sharedblock.SharedBlockType"); - put("org.zstack.sdk.SharedResourceInventory", "org.zstack.header.identity.SharedResourceInventory"); - put("org.zstack.sdk.ShellResult", "org.zstack.kvm.APIKvmRunShellEvent$ShellResult"); - put("org.zstack.sdk.ShrinkResult", "org.zstack.header.storage.snapshot.ShrinkResult"); - put("org.zstack.sdk.SimulatorHostInventory", "org.zstack.header.simulator.SimulatorHostInventory"); - put("org.zstack.sdk.SlbGroupInventory", "org.zstack.network.service.slb.SlbGroupInventory"); - put("org.zstack.sdk.SlbGroupL3NetworkRefInventory", "org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory"); - put("org.zstack.sdk.SlbGroupMonitorIpInventory", "org.zstack.network.service.slb.SlbGroupMonitorIpInventory"); - put("org.zstack.sdk.SlbLoadBalancerInventory", "org.zstack.network.service.slb.SlbLoadBalancerInventory"); - put("org.zstack.sdk.SlbOfferingInventory", "org.zstack.network.service.slb.SlbOfferingInventory"); - put("org.zstack.sdk.SlbVmInstanceConfigTaskInventory", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory"); - put("org.zstack.sdk.SlbVmInstanceConfigTaskStatus", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus"); - put("org.zstack.sdk.SlbVmInstanceInventory", "org.zstack.network.service.slb.SlbVmInstanceInventory"); - put("org.zstack.sdk.SmartDataStruct", "org.zstack.storage.device.localRaid.SmartDataStruct"); - put("org.zstack.sdk.SnapShotSpendingInventory", "org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory"); - put("org.zstack.sdk.SnapshotLeafInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory"); - put("org.zstack.sdk.SnapshotSpending", "org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending"); - put("org.zstack.sdk.SnmpAgentInventory", "org.zstack.snmp.agent.SnmpAgentInventory"); - put("org.zstack.sdk.Spending", "org.zstack.billing.Spending"); - put("org.zstack.sdk.SpendingDetails", "org.zstack.billing.SpendingDetails"); - put("org.zstack.sdk.SshKeyPairInventory", "org.zstack.header.sshkeypair.SshKeyPairInventory"); - put("org.zstack.sdk.SshPrivateKeyPairInventory", "org.zstack.header.sshkeypair.SshPrivateKeyPairInventory"); - put("org.zstack.sdk.StackParameters", "org.zstack.header.cloudformation.StackParameters"); - put("org.zstack.sdk.StackTemplateInventory", "org.zstack.header.cloudformation.StackTemplateInventory"); - put("org.zstack.sdk.StorageType", "org.zstack.header.zdfs.StorageType"); - put("org.zstack.sdk.SupportedResourceStruct", "org.zstack.header.cloudformation.SupportedResourceStruct"); - put("org.zstack.sdk.SyncBackupResult", "org.zstack.header.storage.backup.SyncBackupResult"); - put("org.zstack.sdk.SystemTagInventory", "org.zstack.header.tag.SystemTagInventory"); - put("org.zstack.sdk.TagInventory", "org.zstack.header.tag.TagInventory"); - put("org.zstack.sdk.TagPatternInventory", "org.zstack.header.tag.TagPatternInventory"); - put("org.zstack.sdk.TagPatternType", "org.zstack.header.tag.TagPatternType"); - put("org.zstack.sdk.TaskInfo", "org.zstack.header.core.progress.TaskInfo"); - put("org.zstack.sdk.TaskProgressInventory", "org.zstack.header.core.progress.TaskProgressInventory"); - put("org.zstack.sdk.TemplateConfigInventory", "org.zstack.templateConfig.TemplateConfigInventory"); - put("org.zstack.sdk.Threshold", "org.zstack.drs.api.Threshold"); - put("org.zstack.sdk.TrainedModelRecordInventory", "org.zstack.ai.entity.TrainedModelRecordInventory"); - put("org.zstack.sdk.TrashCleanupResult", "org.zstack.header.core.trash.TrashCleanupResult"); - put("org.zstack.sdk.TwoFactorAuthenticationInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory"); - put("org.zstack.sdk.TwoFactorAuthenticationSecretInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory"); - put("org.zstack.sdk.TwoFactorAuthenticationSecretStatus", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus"); - put("org.zstack.sdk.UKeyInventory", "org.zstack.license.UKeyInventory"); - put("org.zstack.sdk.UKeyStatus", "org.zstack.license.UKeyStatus"); - put("org.zstack.sdk.UsageReport", "org.zstack.header.storage.primary.UsageReport"); - put("org.zstack.sdk.UsbDeviceInventory", "org.zstack.usbDevice.UsbDeviceInventory"); - put("org.zstack.sdk.UsbDeviceState", "org.zstack.usbDevice.UsbDeviceState"); - put("org.zstack.sdk.UsedIpInventory", "org.zstack.header.network.l3.UsedIpInventory"); - put("org.zstack.sdk.UserGroupInventory", "org.zstack.header.identity.UserGroupInventory"); - put("org.zstack.sdk.UserInventory", "org.zstack.header.identity.UserInventory"); - put("org.zstack.sdk.UserProxyConfigInventory", "org.zstack.proxy.UserProxyConfigInventory"); - put("org.zstack.sdk.UserProxyConfigResourceRefInventory", "org.zstack.proxy.UserProxyConfigResourceRefInventory"); - put("org.zstack.sdk.UserTagInventory", "org.zstack.header.tag.UserTagInventory"); - put("org.zstack.sdk.V2VConversionHostInventory", "org.zstack.v2v.V2VConversionHostInventory"); - put("org.zstack.sdk.VCenterBackupStorageInventory", "org.zstack.vmware.VCenterBackupStorageInventory"); - put("org.zstack.sdk.VCenterClusterInventory", "org.zstack.vmware.VCenterClusterInventory"); - put("org.zstack.sdk.VCenterDatacenterInventory", "org.zstack.vmware.VCenterDatacenterInventory"); - put("org.zstack.sdk.VCenterInventory", "org.zstack.vmware.VCenterInventory"); - put("org.zstack.sdk.VCenterPrimaryStorageInventory", "org.zstack.vmware.VCenterPrimaryStorageInventory"); - put("org.zstack.sdk.VCenterResourcePoolInventory", "org.zstack.vmware.VCenterResourcePoolInventory"); - put("org.zstack.sdk.VCenterResourcePoolUsageInventory", "org.zstack.vmware.VCenterResourcePoolUsageInventory"); - put("org.zstack.sdk.VHostAddOn", "org.zstack.kvm.KVMAgentCommands$VHostAddOn"); - put("org.zstack.sdk.VRouterRouteEntryAO", "org.zstack.vrouterRoute.VRouterRouteEntryAO"); - put("org.zstack.sdk.VRouterRouteEntryInventory", "org.zstack.vrouterRoute.VRouterRouteEntryInventory"); - put("org.zstack.sdk.VRouterRouteEntryType", "org.zstack.vrouterRoute.VRouterRouteEntryType"); - put("org.zstack.sdk.VRouterRouteTableInventory", "org.zstack.vrouterRoute.VRouterRouteTableInventory"); - put("org.zstack.sdk.VdiPortInfo", "org.zstack.header.vm.VdiPortInfo"); - put("org.zstack.sdk.VipBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails"); - put("org.zstack.sdk.VipInventory", "org.zstack.network.service.vip.VipInventory"); - put("org.zstack.sdk.VipNetworkServicesRefInventory", "org.zstack.network.service.vip.VipNetworkServicesRefInventory"); - put("org.zstack.sdk.VipPortRangeInventory", "org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory"); - put("org.zstack.sdk.VipQosInventory", "org.zstack.header.vipQos.VipQosInventory"); - put("org.zstack.sdk.VirtualBorderRouterInventory", "org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory"); - put("org.zstack.sdk.VirtualRouterOfferingInventory", "org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory"); - put("org.zstack.sdk.VirtualRouterSoftwareVersionInventory", "org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory"); - put("org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory"); - put("org.zstack.sdk.VirtualRouterVmInventory", "org.zstack.network.service.virtualrouter.VirtualRouterVmInventory"); - put("org.zstack.sdk.VirtualizerInfo", "org.zstack.header.vm.VirtualizerInfo"); - put("org.zstack.sdk.VirtualizerInfoInventory", "org.zstack.header.vm.VirtualizerInfoInventory"); - put("org.zstack.sdk.VmCPUBillingInventory", "org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory"); - put("org.zstack.sdk.VmCPUSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails"); - put("org.zstack.sdk.VmCapabilities", "org.zstack.header.vm.VmCapabilities"); - put("org.zstack.sdk.VmCdRomInventory", "org.zstack.header.vm.cdrom.VmCdRomInventory"); - put("org.zstack.sdk.VmExternalBackupInfo", "org.zstack.externalbackup.VmExternalBackupInfo"); - put("org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory"); - put("org.zstack.sdk.VmInstanceDeviceAddressGroupInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory"); - put("org.zstack.sdk.VmInstanceInventory", "org.zstack.header.vm.VmInstanceInventory"); - put("org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory"); - put("org.zstack.sdk.VmInstancePciDeviceSpecRefInventory", "org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory"); - put("org.zstack.sdk.VmMemoryBillingInventory", "org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory"); - put("org.zstack.sdk.VmMemorySpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails"); - put("org.zstack.sdk.VmModelMountInventory", "org.zstack.ai.entity.VmModelMountInventory"); - put("org.zstack.sdk.VmModelMountStatus", "org.zstack.ai.entity.VmModelMountStatus"); - put("org.zstack.sdk.VmNicBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails"); - put("org.zstack.sdk.VmNicInventory", "org.zstack.header.vm.VmNicInventory"); - put("org.zstack.sdk.VmNicSecurityGroupRefInventory", "org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory"); - put("org.zstack.sdk.VmNicSecurityPolicyInventory", "org.zstack.network.securitygroup.VmNicSecurityPolicyInventory"); - put("org.zstack.sdk.VmPriorityConfigInventory", "org.zstack.header.vm.VmPriorityConfigInventory"); - put("org.zstack.sdk.VmPriorityLevel", "org.zstack.header.vm.VmPriorityLevel"); - put("org.zstack.sdk.VmSchedHistoryInventory", "org.zstack.header.vm.VmSchedHistoryInventory"); - put("org.zstack.sdk.VmSchedulingRuleExecuteState", "org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState"); - put("org.zstack.sdk.VmSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory"); - put("org.zstack.sdk.VmSchedulingRuleInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleInventory"); - put("org.zstack.sdk.VmSpending", "org.zstack.billing.spendingcalculator.vm.VmSpending"); - put("org.zstack.sdk.VmSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmSpendingDetails"); - put("org.zstack.sdk.VmVdpaNicInventory", "org.zstack.header.vdpa.VmVdpaNicInventory"); - put("org.zstack.sdk.VmVfNicInventory", "org.zstack.header.sriov.VmVfNicInventory"); - put("org.zstack.sdk.VniRangeInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory"); - put("org.zstack.sdk.VolumeBackupInventory", "org.zstack.header.storage.backup.VolumeBackupInventory"); - put("org.zstack.sdk.VolumeBackupStorageRefInventory", "org.zstack.header.storage.backup.VolumeBackupStorageRefInventory"); - put("org.zstack.sdk.VolumeCbtBackupInfo", "org.zstack.header.cbt.VolumeCbtBackupInfo"); - put("org.zstack.sdk.VolumeExternalBackupInfo", "org.zstack.externalbackup.VolumeExternalBackupInfo"); - put("org.zstack.sdk.VolumeFormatReplyStruct", "org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct"); - put("org.zstack.sdk.VolumeInventory", "org.zstack.header.volume.VolumeInventory"); - put("org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory"); - put("org.zstack.sdk.VolumeSnapshotGroupAvailability", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability"); - put("org.zstack.sdk.VolumeSnapshotGroupInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory"); - put("org.zstack.sdk.VolumeSnapshotGroupRefInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory"); - put("org.zstack.sdk.VolumeSnapshotInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotInventory"); - put("org.zstack.sdk.VolumeSnapshotReferenceTreeInventory", "org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory"); - put("org.zstack.sdk.VolumeSnapshotTreeInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory"); - put("org.zstack.sdk.VolumeTO", "org.zstack.kvm.VolumeTO"); - put("org.zstack.sdk.VpcFirewallInventory", "org.zstack.vpcfirewall.entity.VpcFirewallInventory"); - put("org.zstack.sdk.VpcFirewallIpSetTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory"); - put("org.zstack.sdk.VpcFirewallRuleInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory"); - put("org.zstack.sdk.VpcFirewallRuleSetInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory"); - put("org.zstack.sdk.VpcFirewallRuleSetL3RefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory"); - put("org.zstack.sdk.VpcFirewallRuleTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory"); - put("org.zstack.sdk.VpcFirewallVRouterRefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory"); - put("org.zstack.sdk.VpcHaGroupApplianceVmRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory"); - put("org.zstack.sdk.VpcHaGroupInventory", "org.zstack.header.vpc.ha.VpcHaGroupInventory"); - put("org.zstack.sdk.VpcHaGroupMonitorIpInventory", "org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory"); - put("org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory"); - put("org.zstack.sdk.VpcHaGroupVipRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory"); - put("org.zstack.sdk.VpcRouterDnsInventory", "org.zstack.header.vpc.VpcRouterDnsInventory"); - put("org.zstack.sdk.VpcRouterVmInventory", "org.zstack.header.vpc.VpcRouterVmInventory"); - put("org.zstack.sdk.VpcSharedQosInventory", "org.zstack.header.vipQos.VpcSharedQosInventory"); - put("org.zstack.sdk.VpcSharedQosRefVipInventory", "org.zstack.header.vipQos.VpcSharedQosRefVipInventory"); - put("org.zstack.sdk.VpcSnatStateInventory", "org.zstack.header.vpc.VpcSnatStateInventory"); - put("org.zstack.sdk.VpcUserVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory"); - put("org.zstack.sdk.VpcVirtualRouteEntryInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory"); - put("org.zstack.sdk.VpcVirtualRouterInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory"); - put("org.zstack.sdk.VpcVpnConnectionInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory"); - put("org.zstack.sdk.VpcVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory"); - put("org.zstack.sdk.VpcVpnIkeConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory"); - put("org.zstack.sdk.VpcVpnIkeConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct"); - put("org.zstack.sdk.VpcVpnIpSecConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory"); - put("org.zstack.sdk.VpcVpnIpSecConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct"); - put("org.zstack.sdk.VtepInventory", "org.zstack.network.l2.vxlan.vtep.VtepInventory"); - put("org.zstack.sdk.WebhookInventory", "org.zstack.header.core.webhooks.WebhookInventory"); - put("org.zstack.sdk.XDragonHostInventory", "org.zstack.xdragon.XDragonHostInventory"); - put("org.zstack.sdk.XmlHookInventory", "org.zstack.kvm.xmlhook.XmlHookInventory"); - put("org.zstack.sdk.XmlHookType", "org.zstack.kvm.xmlhook.XmlHookType"); - put("org.zstack.sdk.XskyBlockVolumeInventory", "org.zstack.header.volume.block.XskyBlockVolumeInventory"); - put("org.zstack.sdk.YuccaBareMetal2DpuChassisConfig", "org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig"); - put("org.zstack.sdk.ZBoxBackupInventory", "org.zstack.externalbackup.zbox.ZBoxBackupInventory"); - put("org.zstack.sdk.ZBoxBackupStorageBackupInfo", "org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo"); - put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory"); - put("org.zstack.sdk.ZBoxLocationRefInventory", "org.zstack.zbox.ZBoxLocationRefInventory"); - put("org.zstack.sdk.ZBoxState", "org.zstack.zbox.ZBoxState"); - put("org.zstack.sdk.ZBoxStatus", "org.zstack.zbox.ZBoxStatus"); - put("org.zstack.sdk.ZBoxVmBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVmBackupInfo"); - put("org.zstack.sdk.ZBoxVolumeBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo"); - put("org.zstack.sdk.ZQLQueryReturn", "org.zstack.zql.ZQLQueryReturn"); - put("org.zstack.sdk.ZakuImageInventory", "org.zstack.container.entity.ZakuImageInventory"); - put("org.zstack.sdk.ZdfsInventory", "org.zstack.header.zdfs.ZdfsInventory"); - put("org.zstack.sdk.ZdfsService", "org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService"); - put("org.zstack.sdk.ZdfsStorageInventory", "org.zstack.header.zdfs.ZdfsStorageInventory"); - put("org.zstack.sdk.ZoneInventory", "org.zstack.header.zone.ZoneInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupInventory", "org.zstack.header.storage.database.backup.DatabaseBackupInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory", "org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupStruct", "org.zstack.header.storage.database.backup.DatabaseBackupStruct"); - put("org.zstack.sdk.databasebackup.DatabaseType", "org.zstack.header.storage.database.backup.DatabaseType"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory"); - put("org.zstack.sdk.iam2.api.APIPermissionStruct", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct"); - put("org.zstack.sdk.iam2.api.Attribute", "org.zstack.iam2.api.Attribute"); - put("org.zstack.sdk.iam2.api.ErrorResult", "org.zstack.iam2.api.ErrorResult"); - put("org.zstack.sdk.iam2.api.Permission", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission"); - put("org.zstack.sdk.iam2.container.ContainerClusterInventory", "org.zstack.iam2.container.ContainerClusterInventory"); - put("org.zstack.sdk.iam2.entity.AttributeType", "org.zstack.iam2.entity.AttributeType"); - put("org.zstack.sdk.iam2.entity.IAM2AttributeInventory", "org.zstack.iam2.entity.IAM2AttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.iam2.entity.IAM2OrganizationAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationInventory", "org.zstack.iam2.entity.IAM2OrganizationInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.iam2.entity.IAM2ProjectAccountRefInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.iam2.entity.IAM2ProjectAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectInventory", "org.zstack.iam2.entity.IAM2ProjectInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.iam2.entity.IAM2ProjectRoleInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.iam2.entity.IAM2ProjectTemplateInventory"); - put("org.zstack.sdk.iam2.entity.IAM2State", "org.zstack.iam2.entity.IAM2State"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory", "org.zstack.iam2.entity.IAM2VirtualIDInventory"); - put("org.zstack.sdk.iam2.entity.OrganizationType", "org.zstack.iam2.entity.OrganizationType"); - put("org.zstack.sdk.iam2.entity.ProjectState", "org.zstack.iam2.entity.ProjectState"); - put("org.zstack.sdk.iam2.entity.StateEvent", "org.zstack.iam2.entity.StateEvent"); - put("org.zstack.sdk.iam2.project.template.Template", "org.zstack.iam2.project.template.Template"); - put("org.zstack.sdk.identity.role.RoleInventory", "org.zstack.header.identity.role.RoleInventory"); - put("org.zstack.sdk.identity.role.RolePolicyRefInventory", "org.zstack.header.identity.role.RolePolicyRefInventory"); - put("org.zstack.sdk.identity.role.RolePolicyStatementInventory", "org.zstack.header.identity.role.RolePolicyStatementInventory"); - put("org.zstack.sdk.identity.role.RoleState", "org.zstack.header.identity.role.RoleState"); - put("org.zstack.sdk.identity.role.RoleStateEvent", "org.zstack.header.identity.role.RoleStateEvent"); - put("org.zstack.sdk.identity.role.RoleType", "org.zstack.header.identity.role.RoleType"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.license.header.server.LicenseAuthorizedCapacityInventory"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.license.header.server.LicenseAuthorizedNodeInventory"); - put("org.zstack.sdk.license.header.server.LicenseUsageDetailView", "org.zstack.license.header.server.LicenseUsageDetailView"); - put("org.zstack.sdk.license.header.server.LicenseUsageView", "org.zstack.license.header.server.LicenseUsageView"); - put("org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView"); - put("org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sns.SNSAliyunSmsEndpointInventory"); - put("org.zstack.sdk.sns.SNSApplicationEndpointInventory", "org.zstack.sns.SNSApplicationEndpointInventory"); - put("org.zstack.sdk.sns.SNSApplicationPlatformInventory", "org.zstack.sns.SNSApplicationPlatformInventory"); - put("org.zstack.sdk.sns.SNSSmsReceiverInventory", "org.zstack.sns.SNSSmsReceiverInventory"); - put("org.zstack.sdk.sns.SNSSubscriberInventory", "org.zstack.sns.SNSSubscriberInventory"); - put("org.zstack.sdk.sns.SNSTopicInventory", "org.zstack.sns.SNSTopicInventory"); - put("org.zstack.sdk.sns.SmsReceiverType", "org.zstack.sns.SmsReceiverType"); - put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); - put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sns.platform.email.SNSEmailAddressInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sns.platform.email.SNSEmailEndpointInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sns.platform.email.SNSEmailPlatformInventory"); - put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory"); - put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory"); - put("org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sns.platform.http.SNSHttpEndpointInventory"); - put("org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); - put("org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sns.platform.plugin.SNSPluginEndpointInventory"); - put("org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory"); - put("org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); - put("org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); - put("org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory"); - put("org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sns.platform.wecom.SNSWeComEndpointInventory"); - put("org.zstack.sdk.ticket.entity.ArchiveTicketInventory", "org.zstack.ticket.entity.ArchiveTicketInventory"); - put("org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory"); - put("org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory", "org.zstack.ticket.entity.TicketFlowCollectionInventory"); - put("org.zstack.sdk.ticket.entity.TicketFlowInventory", "org.zstack.ticket.entity.TicketFlowInventory"); - put("org.zstack.sdk.ticket.entity.TicketInventory", "org.zstack.ticket.entity.TicketInventory"); - put("org.zstack.sdk.ticket.entity.TicketRequest", "org.zstack.ticket.entity.TicketRequest"); - put("org.zstack.sdk.ticket.entity.TicketStatus", "org.zstack.ticket.entity.TicketStatus"); - put("org.zstack.sdk.ticket.entity.TicketStatusEvent", "org.zstack.ticket.entity.TicketStatusEvent"); - put("org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory", "org.zstack.ticket.entity.TicketStatusHistoryInventory"); - put("org.zstack.sdk.ticket.entity.TicketTypeInventory", "org.zstack.ticket.entity.TicketTypeInventory"); - put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); - put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory"); - put("org.zstack.sdk.zwatch.alarm.ActionParam", "org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam"); - put("org.zstack.sdk.zwatch.alarm.AlarmActionInventory", "org.zstack.zwatch.alarm.AlarmActionInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory", "org.zstack.zwatch.alarm.AlarmDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmInventory", "org.zstack.zwatch.alarm.AlarmInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmLabelInventory", "org.zstack.zwatch.alarm.AlarmLabelInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmState", "org.zstack.zwatch.alarm.AlarmState"); - put("org.zstack.sdk.zwatch.alarm.AlarmStatus", "org.zstack.zwatch.alarm.AlarmStatus"); - put("org.zstack.sdk.zwatch.alarm.AlertDataAckInventory", "org.zstack.zwatch.alarm.AlertDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.EventDataAckInventory", "org.zstack.zwatch.alarm.EventDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.zwatch.alarm.EventSubscriptionActionInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory", "org.zstack.zwatch.alarm.EventSubscriptionInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.zwatch.alarm.EventSubscriptionLabelInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionState", "org.zstack.zwatch.alarm.EventSubscriptionState"); - put("org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); - put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); - put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); - put("org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory"); - put("org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); - put("org.zstack.sdk.zwatch.api.EventStruct", "org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct"); - put("org.zstack.sdk.zwatch.api.Histogram", "org.zstack.zwatch.api.Histogram"); - put("org.zstack.sdk.zwatch.api.MetricStruct", "org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct"); - put("org.zstack.sdk.zwatch.api.Tag", "org.zstack.zwatch.api.Histogram$Tag"); - put("org.zstack.sdk.zwatch.datatype.AlarmData", "org.zstack.zwatch.datatype.AlarmData"); - put("org.zstack.sdk.zwatch.datatype.AlarmDataV1", "org.zstack.zwatch.datatype.AlarmDataV1"); - put("org.zstack.sdk.zwatch.datatype.AlarmDataV2", "org.zstack.zwatch.datatype.AlarmDataV2"); - put("org.zstack.sdk.zwatch.datatype.AuditType", "org.zstack.zwatch.datatype.AuditType"); - put("org.zstack.sdk.zwatch.datatype.Datapoint", "org.zstack.zwatch.datatype.Datapoint"); - put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EmergencyLevel"); - put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EventFamily$EmergencyLevel"); - put("org.zstack.sdk.zwatch.datatype.EventData", "org.zstack.zwatch.datatype.EventData"); - put("org.zstack.sdk.zwatch.datatype.Label", "org.zstack.zwatch.datatype.Label"); - put("org.zstack.sdk.zwatch.datatype.MetricDatum", "org.zstack.zwatch.datatype.MetricDatum"); - put("org.zstack.sdk.zwatch.datatype.Operator", "org.zstack.zwatch.datatype.Label$Operator"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventData", "org.zstack.zwatch.influxdb.InfluxEventData"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1", "org.zstack.zwatch.influxdb.InfluxEventDataV1"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2", "org.zstack.zwatch.influxdb.InfluxEventDataV2"); - put("org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory"); - put("org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.zwatch.metricpusher.MetricTemplateInventory"); - put("org.zstack.sdk.zwatch.metricpusher.ReceiverState", "org.zstack.zwatch.metricpusher.ReceiverState"); - put("org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.zwatch.migratedb.AlarmRecordsInventory"); - put("org.zstack.sdk.zwatch.migratedb.AuditsInventory", "org.zstack.zwatch.migratedb.AuditsInventory"); - put("org.zstack.sdk.zwatch.migratedb.EventRecordsInventory", "org.zstack.zwatch.migratedb.EventRecordsInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupState"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.zwatch.resnotify.ResNotifySubscriptionState"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifyType", "org.zstack.zwatch.resnotify.ResNotifyType"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory"); - put("org.zstack.sdk.zwatch.ruleengine.ComparisonOperator", "org.zstack.zwatch.ruleengine.ComparisonOperator"); - put("org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); - put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); - put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); + put("org.zstack.sdk.AccessControlListEntryInventory", "org.zstack.header.acl.AccessControlListEntryInventory"); + put("org.zstack.sdk.AccessControlListInventory", "org.zstack.header.acl.AccessControlListInventory"); + put("org.zstack.sdk.AccessControlRuleInventory", "org.zstack.loginControl.entity.AccessControlRuleInventory"); + put("org.zstack.sdk.AccessKeyInventory", "org.zstack.accessKey.AccessKeyInventory"); + put("org.zstack.sdk.AccessKeyState", "org.zstack.accessKey.AccessKeyState"); + put("org.zstack.sdk.AccessKeyType", "org.zstack.accessKey.AccessKeyType"); + put("org.zstack.sdk.AccessPathInfo", "org.zstack.header.volume.block.AccessPathInfo"); + put("org.zstack.sdk.AccountInventory", "org.zstack.header.identity.AccountInventory"); + put("org.zstack.sdk.AccountPriceTableRefInventory", "org.zstack.billing.table.AccountPriceTableRefInventory"); + put("org.zstack.sdk.AccountResourceRefInventory", "org.zstack.header.identity.AccountResourceRefInventory"); + put("org.zstack.sdk.ActionStruct", "org.zstack.cloudformation.template.struct.ActionStruct"); + put("org.zstack.sdk.ActionType", "org.zstack.vpcfirewall.entity.ActionType"); + put("org.zstack.sdk.AddHostFromFileResult", "org.zstack.header.host.AddHostFromFileResult"); + put("org.zstack.sdk.AddingNewVmRuleInventory", "org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory"); + put("org.zstack.sdk.AdditionalLicenseInfo", "org.zstack.license.AdditionalLicenseInfo"); + put("org.zstack.sdk.AdditionalLicenseType", "org.zstack.license.AdditionalLicenseType"); + put("org.zstack.sdk.AddressPoolInventory", "org.zstack.header.network.l3.AddressPoolInventory"); + put("org.zstack.sdk.AffinityGroupInventory", "org.zstack.header.affinitygroup.AffinityGroupInventory"); + put("org.zstack.sdk.AffinityGroupUsageInventory", "org.zstack.header.affinitygroup.AffinityGroupUsageInventory"); + put("org.zstack.sdk.AgentVersionInventory", "org.zstack.core.upgrade.AgentVersionInventory"); + put("org.zstack.sdk.AiSiNoSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory"); + put("org.zstack.sdk.AlertInventory", "org.zstack.monitoring.AlertInventory"); + put("org.zstack.sdk.AliyunDiskInventory", "org.zstack.header.aliyun.storage.disk.AliyunDiskInventory"); + put("org.zstack.sdk.AliyunEbsBackupStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory"); + put("org.zstack.sdk.AliyunEbsPrimaryStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory"); + put("org.zstack.sdk.AliyunErrorCode", "org.zstack.header.aliyun.errorCode.AliyunErrorCode"); + put("org.zstack.sdk.AliyunNasAccessGroupInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory"); + put("org.zstack.sdk.AliyunNasAccessGroupProperty", "org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty"); + put("org.zstack.sdk.AliyunNasAccessRuleInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory"); + put("org.zstack.sdk.AliyunNasFileSystemInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory"); + put("org.zstack.sdk.AliyunNasFileSystemProperty", "org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty"); + put("org.zstack.sdk.AliyunNasMountTargetInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory"); + put("org.zstack.sdk.AliyunNasMountTargetProperty", "org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty"); + put("org.zstack.sdk.AliyunOssException", "org.zstack.header.aliyun.AliyunOssException"); + put("org.zstack.sdk.AliyunPanguPartitionInventory", "org.zstack.aliyun.pangu.AliyunPanguPartitionInventory"); + put("org.zstack.sdk.AliyunProxyVSwitchInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory"); + put("org.zstack.sdk.AliyunProxyVpcInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory"); + put("org.zstack.sdk.AliyunRouterInterfaceInventory", "org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory"); + put("org.zstack.sdk.AliyunSnapshotInventory", "org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory"); + put("org.zstack.sdk.AppBuildSystemInventory", "org.zstack.header.buildsystem.AppBuildSystemInventory"); + put("org.zstack.sdk.AppBuildSystemZoneRefInventory", "org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory"); + put("org.zstack.sdk.ApplianceVmInventory", "org.zstack.appliancevm.ApplianceVmInventory"); + put("org.zstack.sdk.ApplicationDevelopmentServiceInventory", "org.zstack.ai.entity.ApplicationDevelopmentServiceInventory"); + put("org.zstack.sdk.ArchitectureImageMapping", "org.zstack.ai.message.ArchitectureImageMapping"); + put("org.zstack.sdk.AttachTagResult", "org.zstack.tag2.AttachTagResult"); + put("org.zstack.sdk.AttributePurpose", "org.zstack.sso.header.AttributePurpose"); + put("org.zstack.sdk.AuditData", "org.zstack.header.zwatch.AuditData"); + put("org.zstack.sdk.AuditDataV1", "org.zstack.header.zwatch.AuditDataV1"); + put("org.zstack.sdk.AuditDataV2", "org.zstack.header.zwatch.AuditDataV2"); + put("org.zstack.sdk.AutoScalingGroupActivityInventory", "org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory"); + put("org.zstack.sdk.AutoScalingGroupInstanceInventory", "org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory"); + put("org.zstack.sdk.AutoScalingGroupInventory", "org.zstack.autoscaling.group.AutoScalingGroupInventory"); + put("org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory"); + put("org.zstack.sdk.AutoScalingRuleInventory", "org.zstack.autoscaling.group.rule.AutoScalingRuleInventory"); + put("org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory"); + put("org.zstack.sdk.AutoScalingRuleState", "org.zstack.autoscaling.group.rule.AutoScalingRuleState"); + put("org.zstack.sdk.AutoScalingRuleStatus", "org.zstack.autoscaling.group.rule.AutoScalingRuleStatus"); + put("org.zstack.sdk.AutoScalingRuleTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory"); + put("org.zstack.sdk.AutoScalingTemplateInventory", "org.zstack.autoscaling.template.AutoScalingTemplateInventory"); + put("org.zstack.sdk.AutoScalingVmTemplateInventory", "org.zstack.autoscaling.template.AutoScalingVmTemplateInventory"); + put("org.zstack.sdk.BackupMode", "org.zstack.header.storage.backup.BackupMode"); + put("org.zstack.sdk.BackupStorageExternalBackupInfo", "org.zstack.externalbackup.BackupStorageExternalBackupInfo"); + put("org.zstack.sdk.BackupStorageInventory", "org.zstack.header.storage.backup.BackupStorageInventory"); + put("org.zstack.sdk.BareMetal2BillingInventory", "org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory"); + put("org.zstack.sdk.BareMetal2BondingInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingInventory"); + put("org.zstack.sdk.BareMetal2BondingNicRefInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory"); + put("org.zstack.sdk.BareMetal2ChassisDiskInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory"); + put("org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory"); + put("org.zstack.sdk.BareMetal2ChassisInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisInventory"); + put("org.zstack.sdk.BareMetal2ChassisNicInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory"); + put("org.zstack.sdk.BareMetal2ChassisOfferingInventory", "org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory"); + put("org.zstack.sdk.BareMetal2ChassisPciDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory"); + put("org.zstack.sdk.BareMetal2DpuChassisConfig", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig"); + put("org.zstack.sdk.BareMetal2DpuChassisInventory", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory"); + put("org.zstack.sdk.BareMetal2DpuHostInventory", "org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory"); + put("org.zstack.sdk.BareMetal2GatewayInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayInventory"); + put("org.zstack.sdk.BareMetal2GatewayProvisionNicInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory"); + put("org.zstack.sdk.BareMetal2InstanceInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceInventory"); + put("org.zstack.sdk.BareMetal2InstanceProvisionNicInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory"); + put("org.zstack.sdk.BareMetal2IpmiChassisInventory", "org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory"); + put("org.zstack.sdk.BareMetal2ProvisionNetworkInventory", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory"); + put("org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity"); + put("org.zstack.sdk.BareMetal2Spending", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending"); + put("org.zstack.sdk.BareMetal2SpendingDetails", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails"); + put("org.zstack.sdk.BaremetalBondingInventory", "org.zstack.header.baremetal.network.BaremetalBondingInventory"); + put("org.zstack.sdk.BaremetalChassisInventory", "org.zstack.header.baremetal.chassis.BaremetalChassisInventory"); + put("org.zstack.sdk.BaremetalException", "org.zstack.header.baremetal.BaremetalException"); + put("org.zstack.sdk.BaremetalHardwareInfoInventory", "org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory"); + put("org.zstack.sdk.BaremetalInstanceInventory", "org.zstack.header.baremetal.instance.BaremetalInstanceInventory"); + put("org.zstack.sdk.BaremetalNicInventory", "org.zstack.header.baremetal.network.BaremetalNicInventory"); + put("org.zstack.sdk.BaremetalPxeServerInventory", "org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory"); + put("org.zstack.sdk.BaremetalVlanNicInventory", "org.zstack.header.baremetal.network.BaremetalVlanNicInventory"); + put("org.zstack.sdk.BaseVirtualDeviceTO", "org.zstack.kvm.BaseVirtualDeviceTO"); + put("org.zstack.sdk.BatchDeleteVolumeSnapshotStruct", "org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct"); + put("org.zstack.sdk.BillingInventory", "org.zstack.billing.generator.BillingInventory"); + put("org.zstack.sdk.BlockPrimaryStorageInventory", "org.zstack.storage.primary.block.BlockPrimaryStorageInventory"); + put("org.zstack.sdk.BlockVolumeInventory", "org.zstack.header.volume.block.BlockVolumeInventory"); + put("org.zstack.sdk.BuildAppExportHistoryInventory", "org.zstack.header.buildapp.BuildAppExportHistoryInventory"); + put("org.zstack.sdk.BuildApplicationInventory", "org.zstack.header.buildapp.BuildApplicationInventory"); + put("org.zstack.sdk.CCSCertificateInventory", "org.zstack.crypto.ccs.CCSCertificateInventory"); + put("org.zstack.sdk.CCSCertificateUserRefInventory", "org.zstack.crypto.ccs.CCSCertificateUserRefInventory"); + put("org.zstack.sdk.CCSCertificateUserState", "org.zstack.crypto.ccs.CCSCertificateUserState"); + put("org.zstack.sdk.CSPSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory"); + put("org.zstack.sdk.CasClientInventory", "org.zstack.sso.header.CasClientInventory"); + put("org.zstack.sdk.CasState", "org.zstack.sso.header.CasState"); + put("org.zstack.sdk.CbtTaskInventory", "org.zstack.header.cbt.CbtTaskInventory"); + put("org.zstack.sdk.CbtTaskResourceRefInventory", "org.zstack.header.cbt.CbtTaskResourceRefInventory"); + put("org.zstack.sdk.CbtTaskStatus", "org.zstack.header.cbt.CbtTaskStatus"); + put("org.zstack.sdk.CdRomTO", "org.zstack.kvm.KVMAgentCommands$CdRomTO"); + put("org.zstack.sdk.CdpPolicyInventory", "org.zstack.header.storage.cdp.CdpPolicyInventory"); + put("org.zstack.sdk.CdpPolicyState", "org.zstack.header.storage.cdp.CdpPolicyState"); + put("org.zstack.sdk.CdpTaskInventory", "org.zstack.header.storage.cdp.CdpTaskInventory"); + put("org.zstack.sdk.CdpTaskResourceRefInventory", "org.zstack.header.storage.cdp.CdpTaskResourceRefInventory"); + put("org.zstack.sdk.CdpTaskState", "org.zstack.header.storage.cdp.CdpTaskState"); + put("org.zstack.sdk.CdpTaskStatus", "org.zstack.header.storage.cdp.CdpTaskStatus"); + put("org.zstack.sdk.CdpTaskType", "org.zstack.header.storage.cdp.CdpTaskType"); + put("org.zstack.sdk.CephBackupStorageInventory", "org.zstack.storage.ceph.backup.CephBackupStorageInventory"); + put("org.zstack.sdk.CephBackupStorageMonInventory", "org.zstack.storage.ceph.backup.CephBackupStorageMonInventory"); + put("org.zstack.sdk.CephOsdGroupInventory", "org.zstack.storage.ceph.primary.CephOsdGroupInventory"); + put("org.zstack.sdk.CephPrimaryStorageInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageInventory"); + put("org.zstack.sdk.CephPrimaryStorageMonInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory"); + put("org.zstack.sdk.CephPrimaryStoragePoolInventory", "org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory"); + put("org.zstack.sdk.CertificateInventory", "org.zstack.network.service.lb.CertificateInventory"); + put("org.zstack.sdk.ChainInfo", "org.zstack.header.core.progress.ChainInfo"); + put("org.zstack.sdk.ChronyServerInfo", "org.zstack.zops.ChronyServerInfo"); + put("org.zstack.sdk.ChronyServerInfoPair", "org.zstack.zops.ChronyServerInfoPair"); + put("org.zstack.sdk.CleanTrashResult", "org.zstack.header.core.trash.CleanTrashResult"); + put("org.zstack.sdk.CloneVmInstanceInventory", "org.zstack.header.vm.CloneVmInstanceInventory"); + put("org.zstack.sdk.CloneVmInstanceResults", "org.zstack.header.vm.CloneVmInstanceResults"); + put("org.zstack.sdk.CloudFormationStackEventInventory", "org.zstack.header.cloudformation.CloudFormationStackEventInventory"); + put("org.zstack.sdk.ClusterDRSInventory", "org.zstack.drs.entity.ClusterDRSInventory"); + put("org.zstack.sdk.ClusterInventory", "org.zstack.header.cluster.ClusterInventory"); + put("org.zstack.sdk.ConnectionAccessPointInventory", "org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory"); + put("org.zstack.sdk.ConnectionRelationShipInventory", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory"); + put("org.zstack.sdk.ConnectionRelationShipProperty", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty"); + put("org.zstack.sdk.ConsoleInventory", "org.zstack.header.console.ConsoleInventory"); + put("org.zstack.sdk.ConsoleProxyAgentInventory", "org.zstack.header.console.ConsoleProxyAgentInventory"); + put("org.zstack.sdk.ContainerBackupStorageInventory", "org.zstack.container.ContainerBackupStorageInventory"); + put("org.zstack.sdk.ContainerImageInventory", "org.zstack.container.entity.ContainerImageInventory"); + put("org.zstack.sdk.ContainerImageTagInventory", "org.zstack.container.entity.ContainerImageTagInventory"); + put("org.zstack.sdk.ContainerManagementEndpointInventory", "org.zstack.container.entity.ContainerManagementEndpointInventory"); + put("org.zstack.sdk.ContainerUsage", "org.zstack.container.ContainerUsage"); + put("org.zstack.sdk.ControlStrategy", "org.zstack.loginControl.entity.ControlStrategy"); + put("org.zstack.sdk.CpuArchitecture", "org.zstack.header.host.CpuArchitecture"); + put("org.zstack.sdk.CpuMemoryCapacityData", "org.zstack.header.allocator.datatypes.CpuMemoryCapacityData"); + put("org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure"); + put("org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure"); + put("org.zstack.sdk.DGpuDeviceInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory"); + put("org.zstack.sdk.DGpuProfileInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory"); + put("org.zstack.sdk.DGpuSpecStatsInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory"); + put("org.zstack.sdk.DGpuStatus", "org.zstack.pciDevice.gpu.dgpu.DGpuStatus"); + put("org.zstack.sdk.DRSAdviceInventory", "org.zstack.drs.entity.DRSAdviceInventory"); + put("org.zstack.sdk.DRSVmMigrationActivityInventory", "org.zstack.drs.entity.DRSVmMigrationActivityInventory"); + put("org.zstack.sdk.DataCenterInventory", "org.zstack.header.datacenter.DataCenterInventory"); + put("org.zstack.sdk.DataCenterProperty", "org.zstack.header.datacenter.DataCenterProperty"); + put("org.zstack.sdk.DataVolumeBillingInventory", "org.zstack.billing.generator.volume.data.DataVolumeBillingInventory"); + put("org.zstack.sdk.DataVolumeSpending", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending"); + put("org.zstack.sdk.DataVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory"); + put("org.zstack.sdk.DatasetInventory", "org.zstack.ai.entity.DatasetInventory"); + put("org.zstack.sdk.DeleteSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult"); + put("org.zstack.sdk.DeviceAddress", "org.zstack.header.vm.devices.DeviceAddress"); + put("org.zstack.sdk.DeviceTO", "org.zstack.storage.device.multipath.DeviceTO"); + put("org.zstack.sdk.DirectoryInventory", "org.zstack.directory.DirectoryInventory"); + put("org.zstack.sdk.DiskOfferingInventory", "org.zstack.header.configuration.DiskOfferingInventory"); + put("org.zstack.sdk.ESXHostInventory", "org.zstack.vmware.ESXHostInventory"); + put("org.zstack.sdk.EcsImageInventory", "org.zstack.header.aliyun.image.EcsImageInventory"); + put("org.zstack.sdk.EcsInstanceInventory", "org.zstack.header.aliyun.ecs.EcsInstanceInventory"); + put("org.zstack.sdk.EcsInstanceType", "org.zstack.header.aliyun.ecs.EcsInstanceType"); + put("org.zstack.sdk.EcsSecurityGroupInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory"); + put("org.zstack.sdk.EcsSecurityGroupRuleInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory"); + put("org.zstack.sdk.EcsVSwitchInventory", "org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory"); + put("org.zstack.sdk.EcsVpcInventory", "org.zstack.header.aliyun.network.vpc.EcsVpcInventory"); + put("org.zstack.sdk.EipInventory", "org.zstack.network.service.eip.EipInventory"); + put("org.zstack.sdk.ElaborationCategory", "org.zstack.core.errorcode.ElaborationCategory"); + put("org.zstack.sdk.ElaborationCheckResult", "org.zstack.core.errorcode.ElaborationCheckResult"); + put("org.zstack.sdk.ElaborationContent", "org.zstack.core.errorcode.ElaborationContent"); + put("org.zstack.sdk.EmailMediaInventory", "org.zstack.monitoring.media.EmailMediaInventory"); + put("org.zstack.sdk.EmailTriggerActionInventory", "org.zstack.monitoring.actions.EmailTriggerActionInventory"); + put("org.zstack.sdk.ErrorCode", "org.zstack.header.errorcode.ErrorCode"); + put("org.zstack.sdk.ErrorCodeList", "org.zstack.header.errorcode.ErrorCodeList"); + put("org.zstack.sdk.EthernetVfPciDeviceInventory", "org.zstack.header.sriov.EthernetVfPciDeviceInventory"); + put("org.zstack.sdk.EthernetVfStatus", "org.zstack.header.sriov.EthernetVfStatus"); + put("org.zstack.sdk.EventLogInventory", "org.zstack.core.eventlog.EventLogInventory"); + put("org.zstack.sdk.ExponBlockVolumeInventory", "org.zstack.header.volume.block.ExponBlockVolumeInventory"); + put("org.zstack.sdk.ExtendedAttribute", "org.zstack.sso.header.ExtendedAttribute"); + put("org.zstack.sdk.ExternalBackupInventory", "org.zstack.externalbackup.ExternalBackupInventory"); + put("org.zstack.sdk.ExternalBackupState", "org.zstack.externalbackup.ExternalBackupState"); + put("org.zstack.sdk.ExternalBackupStorageInventory", "org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory"); + put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); + put("org.zstack.sdk.ExternalServiceCapabilities", "org.zstack.header.core.external.service.ExternalServiceCapabilities"); + put("org.zstack.sdk.ExternalServiceCapabilitiesBuilder", "org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder"); + put("org.zstack.sdk.ExternalServiceConfigurationInventory", "org.zstack.header.core.external.service.ExternalServiceConfigurationInventory"); + put("org.zstack.sdk.ExternalServiceInventory", "org.zstack.header.core.external.service.ExternalServiceInventory"); + put("org.zstack.sdk.FaultToleranceVmGroupInventory", "org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory"); + put("org.zstack.sdk.FcHbaDeviceInventory", "org.zstack.storage.device.hba.FcHbaDeviceInventory"); + put("org.zstack.sdk.FiSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory"); + put("org.zstack.sdk.FiSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory"); + put("org.zstack.sdk.FiberChannelLunInventory", "org.zstack.storage.device.fibreChannel.FiberChannelLunInventory"); + put("org.zstack.sdk.FiberChannelStorageInventory", "org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory"); + put("org.zstack.sdk.FirewallRuleState", "org.zstack.vpcfirewall.entity.FirewallRuleState"); + put("org.zstack.sdk.FlkSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory"); + put("org.zstack.sdk.FlkSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory"); + put("org.zstack.sdk.FlowCollectorInventory", "org.zstack.header.flowMeter.FlowCollectorInventory"); + put("org.zstack.sdk.FlowCounter", "org.zstack.header.flowMeter.FlowCounter"); + put("org.zstack.sdk.FlowMeterInventory", "org.zstack.header.flowMeter.FlowMeterInventory"); + put("org.zstack.sdk.FreeIpInventory", "org.zstack.header.network.l3.FreeIpInventory"); + put("org.zstack.sdk.FuncType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType"); + put("org.zstack.sdk.GarbageCollectorInventory", "org.zstack.core.gc.GarbageCollectorInventory"); + put("org.zstack.sdk.GlobalConfigInventory", "org.zstack.core.config.GlobalConfigInventory"); + put("org.zstack.sdk.GlobalConfigOptions", "org.zstack.core.config.GlobalConfigOptions"); + put("org.zstack.sdk.GlobalConfigTemplateInventory", "org.zstack.templateConfig.GlobalConfigTemplateInventory"); + put("org.zstack.sdk.GpuAllocateStatus", "org.zstack.pciDevice.gpu.GpuAllocateStatus"); + put("org.zstack.sdk.GpuDeviceInventory", "org.zstack.pciDevice.gpu.GpuDeviceInventory"); + put("org.zstack.sdk.GpuDeviceSpecCandidateInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory"); + put("org.zstack.sdk.GpuDeviceSpecInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecInventory"); + put("org.zstack.sdk.GpuVendor", "org.zstack.pciDevice.gpu.GpuVendor"); + put("org.zstack.sdk.GuestOsCharacterInventory", "org.zstack.core.config.GuestOsCharacterInventory"); + put("org.zstack.sdk.GuestToolsInventory", "org.zstack.guesttools.GuestToolsInventory"); + put("org.zstack.sdk.GuestToolsStateInventory", "org.zstack.guesttools.GuestToolsStateInventory"); + put("org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory"); + put("org.zstack.sdk.GuestVmScriptExecutedRecordInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordInventory"); + put("org.zstack.sdk.GuestVmScriptInventory", "org.zstack.guesttools.GuestVmScriptInventory"); + put("org.zstack.sdk.H3cSdnControllerTenantInventory", "org.zstack.sdnController.header.H3cSdnControllerTenantInventory"); + put("org.zstack.sdk.HaNetworkGroupInventory", "org.zstack.ha.HaNetworkGroupInventory"); + put("org.zstack.sdk.HaStrategyConditionInventory", "org.zstack.ha.HaStrategyConditionInventory"); + put("org.zstack.sdk.HaiTaiSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory"); + put("org.zstack.sdk.HardwareL2VxlanNetworkInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory"); + put("org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory"); + put("org.zstack.sdk.HbaDeviceInventory", "org.zstack.storage.device.hba.HbaDeviceInventory"); + put("org.zstack.sdk.HostConnectedStatus", "org.zstack.zops.HostConnectedStatus"); + put("org.zstack.sdk.HostDiskCapacity", "org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity"); + put("org.zstack.sdk.HostInventory", "org.zstack.header.host.HostInventory"); + put("org.zstack.sdk.HostIommuStateType", "org.zstack.pciDevice.HostIommuStateType"); + put("org.zstack.sdk.HostIommuStatusType", "org.zstack.pciDevice.HostIommuStatusType"); + put("org.zstack.sdk.HostIpmiInventory", "org.zstack.header.host.HostIpmiInventory"); + put("org.zstack.sdk.HostLoad", "org.zstack.drs.api.HostLoad"); + put("org.zstack.sdk.HostNUMANode", "org.zstack.header.host.HostNUMANode"); + put("org.zstack.sdk.HostNetworkBondingInventory", "org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory"); + put("org.zstack.sdk.HostNetworkBondingServiceRefInventory", "org.zstack.header.host.HostNetworkBondingServiceRefInventory"); + put("org.zstack.sdk.HostNetworkInterfaceInventory", "org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory"); + put("org.zstack.sdk.HostNetworkInterfaceLldpInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory"); + put("org.zstack.sdk.HostNetworkInterfaceLldpRefInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory"); + put("org.zstack.sdk.HostNetworkInterfaceServiceRefInventory", "org.zstack.header.host.HostNetworkInterfaceServiceRefInventory"); + put("org.zstack.sdk.HostNetworkLabelInventory", "org.zstack.header.host.HostNetworkLabelInventory"); + put("org.zstack.sdk.HostOsCategoryInventory", "org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory"); + put("org.zstack.sdk.HostPhysicalMemoryInventory", "org.zstack.header.host.HostPhysicalMemoryInventory"); + put("org.zstack.sdk.HostSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory"); + put("org.zstack.sdk.HwMonitorStatus", "org.zstack.header.host.HwMonitorStatus"); + put("org.zstack.sdk.HybridAccountInventory", "org.zstack.hybrid.account.HybridAccountInventory"); + put("org.zstack.sdk.HybridConnectionType", "org.zstack.header.aliyun.network.HybridConnectionType"); + put("org.zstack.sdk.HybridEipAddressInventory", "org.zstack.header.hybrid.network.eip.HybridEipAddressInventory"); + put("org.zstack.sdk.HybridEipStatus", "org.zstack.header.hybrid.network.eip.HybridEipStatus"); + put("org.zstack.sdk.HybridType", "org.zstack.hybrid.core.HybridType"); + put("org.zstack.sdk.HygonCcpDeviceInventory", "org.zstack.hygon.HygonCcpDeviceInventory"); + put("org.zstack.sdk.HygonDeviceState", "org.zstack.hygon.HygonDeviceState"); + put("org.zstack.sdk.HygonDeviceType", "org.zstack.hygon.HygonDeviceType"); + put("org.zstack.sdk.HypervisorVersionState", "org.zstack.kvm.hypervisor.datatype.HypervisorVersionState"); + put("org.zstack.sdk.IPsecConnectionInventory", "org.zstack.ipsec.IPsecConnectionInventory"); + put("org.zstack.sdk.IPsecL3NetworkRefInventory", "org.zstack.ipsec.IPsecL3NetworkRefInventory"); + put("org.zstack.sdk.IPsecPeerCidrInventory", "org.zstack.ipsec.IPsecPeerCidrInventory"); + put("org.zstack.sdk.IdentityZoneInventory", "org.zstack.header.identityzone.IdentityZoneInventory"); + put("org.zstack.sdk.IdentityZoneProperty", "org.zstack.header.identityzone.IdentityZoneProperty"); + put("org.zstack.sdk.ImageBackupStorageRefInventory", "org.zstack.header.image.ImageBackupStorageRefInventory"); + put("org.zstack.sdk.ImageCacheInventory", "org.zstack.header.storage.primary.ImageCacheInventory"); + put("org.zstack.sdk.ImageGroupInventory", "org.zstack.header.image.ImageGroupInventory"); + put("org.zstack.sdk.ImageGroupRefInventory", "org.zstack.header.image.ImageGroupRefInventory"); + put("org.zstack.sdk.ImageInventory", "org.zstack.header.image.ImageInventory"); + put("org.zstack.sdk.ImagePackageInventory", "org.zstack.ovf.datatype.ImagePackageInventory"); + put("org.zstack.sdk.ImagePackageState", "org.zstack.ovf.datatype.ImagePackageState"); + put("org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory"); + put("org.zstack.sdk.ImageReplicationGroupInventory", "org.zstack.imagereplicator.ImageReplicationGroupInventory"); + put("org.zstack.sdk.ImageStoreBackupStorageInventory", "org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory"); + put("org.zstack.sdk.ImageStoreGcResult", "org.zstack.storage.backup.imagestore.ImageStoreGcResult"); + put("org.zstack.sdk.ImageStoreImageStruct", "org.zstack.storage.backup.imagestore.ImageStoreImageStruct"); + put("org.zstack.sdk.InfoSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory"); + put("org.zstack.sdk.InfoSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory"); + put("org.zstack.sdk.InputType", "org.zstack.abstraction.OptionType$InputType"); + put("org.zstack.sdk.InstType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType"); + put("org.zstack.sdk.InstallPathRecycleInventory", "org.zstack.header.core.trash.InstallPathRecycleInventory"); + put("org.zstack.sdk.InstanceOfferingInventory", "org.zstack.header.configuration.InstanceOfferingInventory"); + put("org.zstack.sdk.InvocationRecord", "org.zstack.guesttools.InvocationRecord"); + put("org.zstack.sdk.InvocationRecordDetail", "org.zstack.guesttools.InvocationRecordDetail"); + put("org.zstack.sdk.IpCapacityData", "org.zstack.header.network.l3.datatypes.IpCapacityData"); + put("org.zstack.sdk.IpRangeInventory", "org.zstack.header.network.l3.IpRangeInventory"); + put("org.zstack.sdk.IpRangeType", "org.zstack.header.network.l3.IpRangeType"); + put("org.zstack.sdk.IpSetType", "org.zstack.vpcfirewall.entity.IpSetType"); + put("org.zstack.sdk.IpStatisticData", "org.zstack.network.service.flat.IpStatisticData"); + put("org.zstack.sdk.IscsiLunInventory", "org.zstack.storage.device.iscsi.IscsiLunInventory"); + put("org.zstack.sdk.IscsiServerClusterRefInventory", "org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory"); + put("org.zstack.sdk.IscsiServerInventory", "org.zstack.storage.device.iscsi.IscsiServerInventory"); + put("org.zstack.sdk.IscsiTargetInventory", "org.zstack.storage.device.iscsi.IscsiTargetInventory"); + put("org.zstack.sdk.IsoTO", "org.zstack.kvm.KVMAgentCommands$IsoTO"); + put("org.zstack.sdk.ItemInventory", "org.zstack.monitoring.items.ItemInventory"); + put("org.zstack.sdk.JitSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory"); + put("org.zstack.sdk.JobDetails", "org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails"); + put("org.zstack.sdk.JsonLabelInventory", "org.zstack.core.jsonlabel.JsonLabelInventory"); + put("org.zstack.sdk.KVMCephVolumeTO", "org.zstack.storage.ceph.primary.KVMCephVolumeTO"); + put("org.zstack.sdk.KVMHostInventory", "org.zstack.kvm.KVMHostInventory"); + put("org.zstack.sdk.KVMIsoTO", "org.zstack.kvm.KVMIsoTO"); + put("org.zstack.sdk.KoAlSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory"); + put("org.zstack.sdk.KvmCephCdRomTO", "org.zstack.storage.ceph.primary.KvmCephCdRomTO"); + put("org.zstack.sdk.KvmCephIsoTO", "org.zstack.storage.ceph.primary.KvmCephIsoTO"); + put("org.zstack.sdk.KvmHostHypervisorMetadataInventory", "org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory"); + put("org.zstack.sdk.KvmHypervisorInfoInventory", "org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory"); + put("org.zstack.sdk.L2NetworkData", "org.zstack.header.network.l2.L2NetworkData"); + put("org.zstack.sdk.L2NetworkInventory", "org.zstack.header.network.l2.L2NetworkInventory"); + put("org.zstack.sdk.L2PortGroupNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory"); + put("org.zstack.sdk.L2PortGroupVlanMode", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode"); + put("org.zstack.sdk.L2VirtualSwitchNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory"); + put("org.zstack.sdk.L2VlanNetworkInventory", "org.zstack.header.network.l2.L2VlanNetworkInventory"); + put("org.zstack.sdk.L2VxlanNetworkInventory", "org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory"); + put("org.zstack.sdk.L2VxlanNetworkPoolInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory"); + put("org.zstack.sdk.L3NetworkHostRouteInventory", "org.zstack.header.network.l3.L3NetworkHostRouteInventory"); + put("org.zstack.sdk.L3NetworkInventory", "org.zstack.header.network.l3.L3NetworkInventory"); + put("org.zstack.sdk.LdapAccountRefInventory", "org.zstack.ldap.LdapAccountRefInventory"); + put("org.zstack.sdk.LdapResourceRefInventory", "org.zstack.login.entity.LdapResourceRefInventory"); + put("org.zstack.sdk.LdapServerInventory", "org.zstack.ldap.LdapServerInventory"); + put("org.zstack.sdk.LicenseAddOnInventory", "org.zstack.license.LicenseAddOnInventory"); + put("org.zstack.sdk.LicenseInventory", "org.zstack.license.LicenseInventory"); + put("org.zstack.sdk.LoadBalancerDataInventory", "org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory"); + put("org.zstack.sdk.LoadBalancerInventory", "org.zstack.network.service.lb.LoadBalancerInventory"); + put("org.zstack.sdk.LoadBalancerListenerACLRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerCertificateRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerInventory", "org.zstack.network.service.lb.LoadBalancerListenerInventory"); + put("org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory"); + put("org.zstack.sdk.LoadBalancerListerAcl", "org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl"); + put("org.zstack.sdk.LoadBalancerServerGroupInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupInventory"); + put("org.zstack.sdk.LoadBalancerServerGroupServerIpInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory"); + put("org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory"); + put("org.zstack.sdk.LocalStorageResourceRefInventory", "org.zstack.storage.primary.local.LocalStorageResourceRefInventory"); + put("org.zstack.sdk.LocateStatus", "org.zstack.storage.device.localRaid.LocateStatus"); + put("org.zstack.sdk.LogCategory", "org.zstack.log.server.LogCategory"); + put("org.zstack.sdk.LogLevel", "org.zstack.log.server.LogLevel"); + put("org.zstack.sdk.LogServerInventory", "org.zstack.log.server.LogServerInventory"); + put("org.zstack.sdk.LogType", "org.zstack.log.server.LogType"); + put("org.zstack.sdk.LoginAuthenticationProcedureDesc", "org.zstack.header.identity.login.LoginAuthenticationProcedureDesc"); + put("org.zstack.sdk.LongJobInventory", "org.zstack.header.longjob.LongJobInventory"); + put("org.zstack.sdk.LongJobProgressDetail", "org.zstack.header.core.progress.LongJobProgressDetail"); + put("org.zstack.sdk.LongJobState", "org.zstack.header.longjob.LongJobState"); + put("org.zstack.sdk.LunInventory", "org.zstack.header.storageDevice.LunInventory"); + put("org.zstack.sdk.MaaSUsage", "org.zstack.ai.message.MaaSUsage"); + put("org.zstack.sdk.ManagementNodeInventory", "org.zstack.header.managementnode.ManagementNodeInventory"); + put("org.zstack.sdk.MatchEvidence", "org.zstack.ai.message.MatchEvidence"); + put("org.zstack.sdk.MatchedStep", "org.zstack.ai.message.MatchedStep"); + put("org.zstack.sdk.MdevDeviceChooser", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser"); + put("org.zstack.sdk.MdevDeviceInventory", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory"); + put("org.zstack.sdk.MdevDeviceSpecInventory", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory"); + put("org.zstack.sdk.MdevDeviceSpecState", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState"); + put("org.zstack.sdk.MdevDeviceState", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState"); + put("org.zstack.sdk.MdevDeviceStatus", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus"); + put("org.zstack.sdk.MdevDeviceType", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType"); + put("org.zstack.sdk.MediaInventory", "org.zstack.monitoring.media.MediaInventory"); + put("org.zstack.sdk.MetaServerService", "org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService"); + put("org.zstack.sdk.MiniCandidateHostStruct", "org.zstack.header.bootstrap.MiniCandidateHostStruct"); + put("org.zstack.sdk.MiniHostInfo", "org.zstack.header.bootstrap.MiniHostInfo"); + put("org.zstack.sdk.MiniNetworkConfigStruct", "org.zstack.header.bootstrap.MiniNetworkConfigStruct"); + put("org.zstack.sdk.MiniStorageHostRefInventory", "org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory"); + put("org.zstack.sdk.MiniStorageInventory", "org.zstack.storage.primary.ministorage.MiniStorageInventory"); + put("org.zstack.sdk.MiniStorageResourceReplicationInventory", "org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory"); + put("org.zstack.sdk.MiniStorageType", "org.zstack.storage.primary.ministorage.MiniStorageType"); + put("org.zstack.sdk.MirrorNetworkUsedIpInventory", "org.zstack.header.portMirror.MirrorNetworkUsedIpInventory"); + put("org.zstack.sdk.ModelCenterCapacityInventory", "org.zstack.ai.entity.ModelCenterCapacityInventory"); + put("org.zstack.sdk.ModelCenterInventory", "org.zstack.ai.entity.ModelCenterInventory"); + put("org.zstack.sdk.ModelCenterServiceInventory", "org.zstack.ai.message.ModelCenterServiceInventory"); + put("org.zstack.sdk.ModelEvalServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory"); + put("org.zstack.sdk.ModelEvaluationTaskInventory", "org.zstack.ai.entity.ModelEvaluationTaskInventory"); + put("org.zstack.sdk.ModelInventory", "org.zstack.ai.entity.ModelInventory"); + put("org.zstack.sdk.ModelService", "org.zstack.ai.message.ModelService"); + put("org.zstack.sdk.ModelServiceGroupDatasetRefInventory", "org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory"); + put("org.zstack.sdk.ModelServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelServiceInstanceGroupInventory"); + put("org.zstack.sdk.ModelServiceInstanceInventory", "org.zstack.ai.entity.ModelServiceInstanceInventory"); + put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); + put("org.zstack.sdk.ModelServiceMatchEntry", "org.zstack.ai.message.ModelServiceMatchEntry"); + put("org.zstack.sdk.ModelServiceMatchEntryName", "org.zstack.ai.message.ModelServiceMatchEntryName"); + put("org.zstack.sdk.ModelServiceMatchStatus", "org.zstack.ai.message.ModelServiceMatchStatus"); + put("org.zstack.sdk.ModelServiceRefInventory", "org.zstack.ai.entity.ModelServiceRefInventory"); + put("org.zstack.sdk.ModelServiceTemplateInventory", "org.zstack.ai.entity.ModelServiceTemplateInventory"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo"); + put("org.zstack.sdk.MonitorTriggerActionInventory", "org.zstack.monitoring.actions.MonitorTriggerActionInventory"); + put("org.zstack.sdk.MonitorTriggerInventory", "org.zstack.monitoring.MonitorTriggerInventory"); + put("org.zstack.sdk.MttyDeviceInventory", "org.zstack.mttyDevice.MttyDeviceInventory"); + put("org.zstack.sdk.MttyDeviceState", "org.zstack.mttyDevice.MttyDeviceState"); + put("org.zstack.sdk.MttyDeviceType", "org.zstack.mttyDevice.MttyDeviceType"); + put("org.zstack.sdk.MttyDeviceVirtStatus", "org.zstack.mttyDevice.MttyDeviceVirtStatus"); + put("org.zstack.sdk.MulticastRouteInventory", "org.zstack.multicast.router.header.MulticastRouteInventory"); + put("org.zstack.sdk.MulticastRouterInventory", "org.zstack.multicast.router.header.MulticastRouterInventory"); + put("org.zstack.sdk.MulticastRouterRendezvousPointInventory", "org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory"); + put("org.zstack.sdk.MulticastRouterVpcVRouterRefInventory", "org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory"); + put("org.zstack.sdk.MultipathTopologyStruct", "org.zstack.storage.device.multipath.MultipathTopologyStruct"); + put("org.zstack.sdk.NasFileSystemInventory", "org.zstack.nas.NasFileSystemInventory"); + put("org.zstack.sdk.NasMountTargetInventory", "org.zstack.nas.NasMountTargetInventory"); + put("org.zstack.sdk.NasProtocolType", "org.zstack.nas.NasProtocolType"); + put("org.zstack.sdk.NativeClusterInventory", "org.zstack.container.entity.NativeClusterInventory"); + put("org.zstack.sdk.NativeHostInventory", "org.zstack.container.entity.NativeHostInventory"); + put("org.zstack.sdk.Neighbor", "org.zstack.header.protocol.Neighbor"); + put("org.zstack.sdk.NetworkReachablePair", "org.zstack.zops.NetworkReachablePair"); + put("org.zstack.sdk.NetworkRouterAreaRefInventory", "org.zstack.header.protocol.NetworkRouterAreaRefInventory"); + put("org.zstack.sdk.NetworkRouterFlowMeterRefInventory", "org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory"); + put("org.zstack.sdk.NetworkServiceL3NetworkRefInventory", "org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory"); + put("org.zstack.sdk.NetworkServiceProviderInventory", "org.zstack.header.network.service.NetworkServiceProviderInventory"); + put("org.zstack.sdk.NfvInstClusterStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus"); + put("org.zstack.sdk.NfvInstGroupConfigTaskInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory"); + put("org.zstack.sdk.NfvInstGroupInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory"); + put("org.zstack.sdk.NfvInstGroupL3NetworkRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory"); + put("org.zstack.sdk.NfvInstGroupMonitorIpInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory"); + put("org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory"); + put("org.zstack.sdk.NfvInstGroupOperationMode", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode"); + put("org.zstack.sdk.NfvInstGroupStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus"); + put("org.zstack.sdk.NfvInstInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstInventory"); + put("org.zstack.sdk.NfvInstOfferingInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory"); + put("org.zstack.sdk.NginxRedirectRule", "org.zstack.ai.NginxRedirectRule"); + put("org.zstack.sdk.NicTO", "org.zstack.kvm.KVMAgentCommands$NicTO"); + put("org.zstack.sdk.NormalIpRangeInventory", "org.zstack.header.network.l3.NormalIpRangeInventory"); + put("org.zstack.sdk.NvmeLunHostRefInventory", "org.zstack.storage.device.nvme.NvmeLunHostRefInventory"); + put("org.zstack.sdk.NvmeLunInventory", "org.zstack.storage.device.nvme.NvmeLunInventory"); + put("org.zstack.sdk.NvmeServerClusterRefInventory", "org.zstack.storage.device.nvme.NvmeServerClusterRefInventory"); + put("org.zstack.sdk.NvmeServerInventory", "org.zstack.storage.device.nvme.NvmeServerInventory"); + put("org.zstack.sdk.NvmeTargetInventory", "org.zstack.storage.device.nvme.NvmeTargetInventory"); + put("org.zstack.sdk.OAuth2ClientInventory", "org.zstack.sso.header.OAuth2ClientInventory"); + put("org.zstack.sdk.OAuth2TokenInventory", "org.zstack.sso.header.OAuth2TokenInventory"); + put("org.zstack.sdk.ObservabilityServerOfferingInventory", "org.zstack.observabilityServer.ObservabilityServerOfferingInventory"); + put("org.zstack.sdk.ObservabilityServerServiceDataInventory", "org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory"); + put("org.zstack.sdk.ObservabilityServerVmInventory", "org.zstack.observabilityServer.ObservabilityServerVmInventory"); + put("org.zstack.sdk.OptionType", "org.zstack.abstraction.OptionType"); + put("org.zstack.sdk.OssBucketInventory", "org.zstack.header.aliyun.oss.OssBucketInventory"); + put("org.zstack.sdk.OssBucketProperty", "org.zstack.header.aliyun.oss.OssBucketProperty"); + put("org.zstack.sdk.OvfCdDriverInfo", "org.zstack.ovf.datatype.OvfCdDriverInfo"); + put("org.zstack.sdk.OvfCpuInfo", "org.zstack.ovf.datatype.OvfCpuInfo"); + put("org.zstack.sdk.OvfDiskInfo", "org.zstack.ovf.datatype.OvfDiskInfo"); + put("org.zstack.sdk.OvfEthernetAdapterInfo", "org.zstack.ovf.datatype.OvfEthernetAdapterInfo"); + put("org.zstack.sdk.OvfInfo", "org.zstack.ovf.datatype.OvfInfo"); + put("org.zstack.sdk.OvfMemoryInfo", "org.zstack.ovf.datatype.OvfMemoryInfo"); + put("org.zstack.sdk.OvfNetworkInfo", "org.zstack.ovf.datatype.OvfNetworkInfo"); + put("org.zstack.sdk.OvfOSInfo", "org.zstack.ovf.datatype.OvfOSInfo"); + put("org.zstack.sdk.OvfSystemInfo", "org.zstack.ovf.datatype.OvfSystemInfo"); + put("org.zstack.sdk.OvfVolumeInfo", "org.zstack.ovf.datatype.OvfVolumeInfo"); + put("org.zstack.sdk.OvnControllerInventory", "org.zstack.network.ovn.OvnControllerInventory"); + put("org.zstack.sdk.OvnControllerVmInstanceInventory", "org.zstack.network.ovn.OvnControllerVmInstanceInventory"); + put("org.zstack.sdk.OvnControllerVmOfferingInventory", "org.zstack.network.ovn.OvnControllerVmOfferingInventory"); + put("org.zstack.sdk.PacketsForwardType", "org.zstack.vpcfirewall.entity.PacketsForwardType"); + put("org.zstack.sdk.Pagination", "org.zstack.billing.Pagination"); + put("org.zstack.sdk.PciDeviceBillingInventory", "org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory"); + put("org.zstack.sdk.PciDeviceChooser", "org.zstack.pciDevice.PciDeviceChooser"); + put("org.zstack.sdk.PciDeviceInventory", "org.zstack.pciDevice.PciDeviceInventory"); + put("org.zstack.sdk.PciDeviceMdevSpecRefInventory", "org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory"); + put("org.zstack.sdk.PciDeviceMetaData", "org.zstack.pciDevice.PciDeviceMetaData"); + put("org.zstack.sdk.PciDeviceMetaDataEntry", "org.zstack.pciDevice.PciDeviceMetaDataEntry"); + put("org.zstack.sdk.PciDeviceMetaDataOperator", "org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator"); + put("org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory"); + put("org.zstack.sdk.PciDeviceOfferingInventory", "org.zstack.pciDevice.PciDeviceOfferingInventory"); + put("org.zstack.sdk.PciDeviceOfferingType", "org.zstack.pciDevice.PciDeviceOfferingType"); + put("org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory", "org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory"); + put("org.zstack.sdk.PciDeviceSpecInventory", "org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory"); + put("org.zstack.sdk.PciDeviceSpecState", "org.zstack.pciDevice.specification.pci.PciDeviceSpecState"); + put("org.zstack.sdk.PciDeviceSpending", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending"); + put("org.zstack.sdk.PciDeviceSpendingInventory", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory"); + put("org.zstack.sdk.PciDeviceState", "org.zstack.pciDevice.PciDeviceState"); + put("org.zstack.sdk.PciDeviceStatus", "org.zstack.pciDevice.PciDeviceStatus"); + put("org.zstack.sdk.PciDeviceType", "org.zstack.pciDevice.PciDeviceType"); + put("org.zstack.sdk.PciDeviceVirtMode", "org.zstack.pciDevice.virtual.PciDeviceVirtMode"); + put("org.zstack.sdk.PciDeviceVirtState", "org.zstack.pciDevice.virtual.PciDeviceVirtState"); + put("org.zstack.sdk.PciDeviceVirtStatus", "org.zstack.pciDevice.virtual.PciDeviceVirtStatus"); + put("org.zstack.sdk.PendingTaskInfo", "org.zstack.header.core.progress.PendingTaskInfo"); + put("org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory"); + put("org.zstack.sdk.PhysicalSwitchInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory"); + put("org.zstack.sdk.PhysicalSwitchPortInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory"); + put("org.zstack.sdk.PluginDriverInventory", "org.zstack.header.core.external.plugin.PluginDriverInventory"); + put("org.zstack.sdk.PluginSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory"); + put("org.zstack.sdk.PodInventory", "org.zstack.container.entity.PodInventory"); + put("org.zstack.sdk.PolicyInventory", "org.zstack.header.identity.PolicyInventory"); + put("org.zstack.sdk.PolicyRouteRuleInventory", "org.zstack.policyRoute.PolicyRouteRuleInventory"); + put("org.zstack.sdk.PolicyRouteRuleProtocol", "org.zstack.policyRoute.PolicyRouteRuleProtocol"); + put("org.zstack.sdk.PolicyRouteRuleSetInventory", "org.zstack.policyRoute.PolicyRouteRuleSetInventory"); + put("org.zstack.sdk.PolicyRouteRuleSetL3RefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory"); + put("org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory"); + put("org.zstack.sdk.PolicyRouteRuleState", "org.zstack.policyRoute.PolicyRouteRuleState"); + put("org.zstack.sdk.PolicyRouteTableInventory", "org.zstack.policyRoute.PolicyRouteTableInventory"); + put("org.zstack.sdk.PolicyRouteTableRouteEntryInventory", "org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory"); + put("org.zstack.sdk.PolicyRouteTableVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory"); + put("org.zstack.sdk.PolicyStatement", "org.zstack.header.identity.PolicyStatement"); + put("org.zstack.sdk.PolicyStatementEffect", "org.zstack.header.identity.PolicyStatementEffect"); + put("org.zstack.sdk.PortForwardingRuleInventory", "org.zstack.network.service.portforwarding.PortForwardingRuleInventory"); + put("org.zstack.sdk.PortMirrorInventory", "org.zstack.header.portMirror.PortMirrorInventory"); + put("org.zstack.sdk.PortMirrorSessionInventory", "org.zstack.header.portMirror.PortMirrorSessionInventory"); + put("org.zstack.sdk.PortMirrorState", "org.zstack.header.portMirror.PortMirrorState"); + put("org.zstack.sdk.PowerOffHardwareResult", "org.zstack.header.cluster.PowerOffHardwareResult"); + put("org.zstack.sdk.PreconfigurationTemplateInventory", "org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory"); + put("org.zstack.sdk.PreviewResourceStruct", "org.zstack.header.cloudformation.PreviewResourceStruct"); + put("org.zstack.sdk.Price", "org.zstack.billing.table.APICreatePriceTableMsg$Price"); + put("org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory"); + put("org.zstack.sdk.PriceInventory", "org.zstack.billing.PriceInventory"); + put("org.zstack.sdk.PricePciDeviceOfferingRefInventory", "org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory"); + put("org.zstack.sdk.PriceTableInventory", "org.zstack.billing.table.PriceTableInventory"); + put("org.zstack.sdk.PrimaryStorageHostStatus", "org.zstack.header.storage.primary.PrimaryStorageHostStatus"); + put("org.zstack.sdk.PrimaryStorageInventory", "org.zstack.header.storage.primary.PrimaryStorageInventory"); + put("org.zstack.sdk.ProgressProperty", "org.zstack.header.aliyun.image.ProgressProperty"); + put("org.zstack.sdk.ProjectRepositoryInventory", "org.zstack.container.entity.ProjectRepositoryInventory"); + put("org.zstack.sdk.ProtocolType", "org.zstack.vpcfirewall.entity.ProtocolType"); + put("org.zstack.sdk.PubIpVipBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory"); + put("org.zstack.sdk.PubIpVipBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory"); + put("org.zstack.sdk.PubIpVipBandwidthSpending", "org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending"); + put("org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory"); + put("org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory"); + put("org.zstack.sdk.PubIpVmNicBandwidthSpending", "org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending"); + put("org.zstack.sdk.PublishAppInventory", "org.zstack.header.appcenter.PublishAppInventory"); + put("org.zstack.sdk.PublishAppResourceStruct", "org.zstack.header.appcenter.PublishAppResourceStruct"); + put("org.zstack.sdk.QuotaInventory", "org.zstack.header.identity.QuotaInventory"); + put("org.zstack.sdk.QuotaUsage", "org.zstack.header.identity.Quota$QuotaUsage"); + put("org.zstack.sdk.RaidControllerInventory", "org.zstack.storage.device.localRaid.RaidControllerInventory"); + put("org.zstack.sdk.RaidPhysicalDriveInventory", "org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory"); + put("org.zstack.sdk.RedirectUrlTemplate", "org.zstack.sso.header.RedirectUrlTemplate"); + put("org.zstack.sdk.RemoteVtepInventory", "org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory"); + put("org.zstack.sdk.RemovalInstanceRuleInventory", "org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory"); + put("org.zstack.sdk.ReplicationDiskStatus", "org.zstack.storage.primary.ministorage.ReplicationDiskStatus"); + put("org.zstack.sdk.ReplicationGroupState", "org.zstack.imagereplicator.ReplicationGroupState"); + put("org.zstack.sdk.ReplicationNetworkStatus", "org.zstack.storage.primary.ministorage.ReplicationNetworkStatus"); + put("org.zstack.sdk.ReplicationRole", "org.zstack.storage.primary.ministorage.ReplicationRole"); + put("org.zstack.sdk.ReplicationState", "org.zstack.storage.primary.ministorage.ReplicationState"); + put("org.zstack.sdk.ReservedIpRangeInventory", "org.zstack.header.network.l3.ReservedIpRangeInventory"); + put("org.zstack.sdk.ResourceBackupState", "org.zstack.externalbackup.ResourceBackupState"); + put("org.zstack.sdk.ResourceBindableConfigStruct", "org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct"); + put("org.zstack.sdk.ResourceConfigInventory", "org.zstack.resourceconfig.ResourceConfigInventory"); + put("org.zstack.sdk.ResourceConfigStruct", "org.zstack.resourceconfig.ResourceConfigStruct"); + put("org.zstack.sdk.ResourceExternalBackupInfo", "org.zstack.externalbackup.ResourceExternalBackupInfo"); + put("org.zstack.sdk.ResourceInventory", "org.zstack.header.vo.ResourceInventory"); + put("org.zstack.sdk.ResourceSpending", "org.zstack.billing.ResourceSpending"); + put("org.zstack.sdk.ResourceStackInventory", "org.zstack.header.cloudformation.ResourceStackInventory"); + put("org.zstack.sdk.ResourceStruct", "org.zstack.cloudformation.template.struct.ResourceStruct"); + put("org.zstack.sdk.ResourceType", "org.zstack.cloudformation.template.struct.ResourceType"); + put("org.zstack.sdk.RevertSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult"); + put("org.zstack.sdk.RootVolumeBillingInventory", "org.zstack.billing.generator.volume.root.RootVolumeBillingInventory"); + put("org.zstack.sdk.RootVolumeSpending", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending"); + put("org.zstack.sdk.RootVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory"); + put("org.zstack.sdk.RouterAreaInventory", "org.zstack.header.protocol.RouterAreaInventory"); + put("org.zstack.sdk.RuleAttributeType", "org.zstack.sso.header.RuleAttributeType"); + put("org.zstack.sdk.RunningState", "org.zstack.storage.device.localRaid.RunningState"); + put("org.zstack.sdk.RunningTaskInfo", "org.zstack.header.core.progress.RunningTaskInfo"); + put("org.zstack.sdk.SAML2ClientInventory", "org.zstack.sso.header.SAML2ClientInventory"); + put("org.zstack.sdk.SAML2State", "org.zstack.sso.header.SAML2State"); + put("org.zstack.sdk.SSOClientAttributeInventory", "org.zstack.sso.header.SSOClientAttributeInventory"); + put("org.zstack.sdk.SSOClientInventory", "org.zstack.sso.header.SSOClientInventory"); + put("org.zstack.sdk.SSORedirectTemplateInventory", "org.zstack.sso.header.SSORedirectTemplateInventory"); + put("org.zstack.sdk.SSOServerTokenInventory", "org.zstack.sso.header.SSOServerTokenInventory"); + put("org.zstack.sdk.SSOTokenInventory", "org.zstack.sso.header.SSOTokenInventory"); + put("org.zstack.sdk.SanSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory"); + put("org.zstack.sdk.SanSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory"); + put("org.zstack.sdk.SchedulerJobGroupInventory", "org.zstack.header.scheduler.SchedulerJobGroupInventory"); + put("org.zstack.sdk.SchedulerJobGroupJobRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory"); + put("org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.sdk.SchedulerJobHistoryInventory", "org.zstack.header.scheduler.SchedulerJobHistoryInventory"); + put("org.zstack.sdk.SchedulerJobInventory", "org.zstack.header.scheduler.SchedulerJobInventory"); + put("org.zstack.sdk.SchedulerJobSchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory"); + put("org.zstack.sdk.SchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerTriggerInventory"); + put("org.zstack.sdk.ScsiLunClusterStatusInventory", "org.zstack.header.storageDevice.ScsiLunClusterStatusInventory"); + put("org.zstack.sdk.ScsiLunHostRefInventory", "org.zstack.header.storageDevice.ScsiLunHostRefInventory"); + put("org.zstack.sdk.ScsiLunInventory", "org.zstack.header.storageDevice.ScsiLunInventory"); + put("org.zstack.sdk.ScsiLunVmInstanceRefInventory", "org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory"); + put("org.zstack.sdk.SdnControllerHostRefInventory", "org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory"); + put("org.zstack.sdk.SdnControllerInventory", "org.zstack.header.network.sdncontroller.SdnControllerInventory"); + put("org.zstack.sdk.SdnControllerStatus", "org.zstack.header.network.sdncontroller.SdnControllerStatus"); + put("org.zstack.sdk.SdnVlanRange", "org.zstack.sdnController.header.SdnVlanRange"); + put("org.zstack.sdk.SecretResourcePoolInventory", "org.zstack.header.securitymachine.SecretResourcePoolInventory"); + put("org.zstack.sdk.SecurityGroupIngressRuleTO", "org.zstack.network.securitygroup.SecurityGroupIngressRuleTO"); + put("org.zstack.sdk.SecurityGroupInventory", "org.zstack.network.securitygroup.SecurityGroupInventory"); + put("org.zstack.sdk.SecurityGroupRuleInventory", "org.zstack.network.securitygroup.SecurityGroupRuleInventory"); + put("org.zstack.sdk.SecurityMachineInventory", "org.zstack.header.securitymachine.SecurityMachineInventory"); + put("org.zstack.sdk.ServiceStatus", "org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus"); + put("org.zstack.sdk.ServiceTypeStatisticData", "org.zstack.header.host.ServiceTypeStatisticData"); + put("org.zstack.sdk.SessionInventory", "org.zstack.header.identity.SessionInventory"); + put("org.zstack.sdk.SessionStatus", "org.zstack.header.portMirror.SessionStatus"); + put("org.zstack.sdk.SessionType", "org.zstack.header.portMirror.SessionType"); + put("org.zstack.sdk.SftpBackupStorageInventory", "org.zstack.storage.backup.sftp.SftpBackupStorageInventory"); + put("org.zstack.sdk.ShareableVolumeVmInstanceRefInventory", "org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory"); + put("org.zstack.sdk.SharedBlockCandidateStruct", "org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct"); + put("org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory"); + put("org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory"); + put("org.zstack.sdk.SharedBlockGroupType", "org.zstack.storage.primary.sharedblock.SharedBlockGroupType"); + put("org.zstack.sdk.SharedBlockInventory", "org.zstack.storage.primary.sharedblock.SharedBlockInventory"); + put("org.zstack.sdk.SharedBlockState", "org.zstack.storage.primary.sharedblock.SharedBlockState"); + put("org.zstack.sdk.SharedBlockStatus", "org.zstack.storage.primary.sharedblock.SharedBlockStatus"); + put("org.zstack.sdk.SharedBlockType", "org.zstack.storage.primary.sharedblock.SharedBlockType"); + put("org.zstack.sdk.SharedResourceInventory", "org.zstack.header.identity.SharedResourceInventory"); + put("org.zstack.sdk.ShellResult", "org.zstack.kvm.APIKvmRunShellEvent$ShellResult"); + put("org.zstack.sdk.ShrinkResult", "org.zstack.header.storage.snapshot.ShrinkResult"); + put("org.zstack.sdk.SimulatorHostInventory", "org.zstack.header.simulator.SimulatorHostInventory"); + put("org.zstack.sdk.SlbGroupInventory", "org.zstack.network.service.slb.SlbGroupInventory"); + put("org.zstack.sdk.SlbGroupL3NetworkRefInventory", "org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory"); + put("org.zstack.sdk.SlbGroupMonitorIpInventory", "org.zstack.network.service.slb.SlbGroupMonitorIpInventory"); + put("org.zstack.sdk.SlbLoadBalancerInventory", "org.zstack.network.service.slb.SlbLoadBalancerInventory"); + put("org.zstack.sdk.SlbOfferingInventory", "org.zstack.network.service.slb.SlbOfferingInventory"); + put("org.zstack.sdk.SlbVmInstanceConfigTaskInventory", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory"); + put("org.zstack.sdk.SlbVmInstanceConfigTaskStatus", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus"); + put("org.zstack.sdk.SlbVmInstanceInventory", "org.zstack.network.service.slb.SlbVmInstanceInventory"); + put("org.zstack.sdk.SmartDataStruct", "org.zstack.storage.device.localRaid.SmartDataStruct"); + put("org.zstack.sdk.SnapShotSpendingInventory", "org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory"); + put("org.zstack.sdk.SnapshotLeafInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory"); + put("org.zstack.sdk.SnapshotSpending", "org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending"); + put("org.zstack.sdk.SnmpAgentInventory", "org.zstack.snmp.agent.SnmpAgentInventory"); + put("org.zstack.sdk.Spending", "org.zstack.billing.Spending"); + put("org.zstack.sdk.SpendingDetails", "org.zstack.billing.SpendingDetails"); + put("org.zstack.sdk.SshKeyPairInventory", "org.zstack.header.sshkeypair.SshKeyPairInventory"); + put("org.zstack.sdk.SshPrivateKeyPairInventory", "org.zstack.header.sshkeypair.SshPrivateKeyPairInventory"); + put("org.zstack.sdk.StackParameters", "org.zstack.header.cloudformation.StackParameters"); + put("org.zstack.sdk.StackTemplateInventory", "org.zstack.header.cloudformation.StackTemplateInventory"); + put("org.zstack.sdk.StorageType", "org.zstack.header.zdfs.StorageType"); + put("org.zstack.sdk.SupportedResourceStruct", "org.zstack.header.cloudformation.SupportedResourceStruct"); + put("org.zstack.sdk.SyncBackupResult", "org.zstack.header.storage.backup.SyncBackupResult"); + put("org.zstack.sdk.SystemTagInventory", "org.zstack.header.tag.SystemTagInventory"); + put("org.zstack.sdk.TagInventory", "org.zstack.header.tag.TagInventory"); + put("org.zstack.sdk.TagPatternInventory", "org.zstack.header.tag.TagPatternInventory"); + put("org.zstack.sdk.TagPatternType", "org.zstack.header.tag.TagPatternType"); + put("org.zstack.sdk.TaskInfo", "org.zstack.header.core.progress.TaskInfo"); + put("org.zstack.sdk.TaskProgressInventory", "org.zstack.header.core.progress.TaskProgressInventory"); + put("org.zstack.sdk.TemplateConfigInventory", "org.zstack.templateConfig.TemplateConfigInventory"); + put("org.zstack.sdk.Threshold", "org.zstack.drs.api.Threshold"); + put("org.zstack.sdk.TrainedModelRecordInventory", "org.zstack.ai.entity.TrainedModelRecordInventory"); + put("org.zstack.sdk.TrashCleanupResult", "org.zstack.header.core.trash.TrashCleanupResult"); + put("org.zstack.sdk.TwoFactorAuthenticationInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory"); + put("org.zstack.sdk.TwoFactorAuthenticationSecretInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory"); + put("org.zstack.sdk.TwoFactorAuthenticationSecretStatus", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus"); + put("org.zstack.sdk.UKeyInventory", "org.zstack.license.UKeyInventory"); + put("org.zstack.sdk.UKeyStatus", "org.zstack.license.UKeyStatus"); + put("org.zstack.sdk.UsageReport", "org.zstack.header.storage.primary.UsageReport"); + put("org.zstack.sdk.UsbDeviceInventory", "org.zstack.usbDevice.UsbDeviceInventory"); + put("org.zstack.sdk.UsbDeviceState", "org.zstack.usbDevice.UsbDeviceState"); + put("org.zstack.sdk.UsedIpInventory", "org.zstack.header.network.l3.UsedIpInventory"); + put("org.zstack.sdk.UserGroupInventory", "org.zstack.header.identity.UserGroupInventory"); + put("org.zstack.sdk.UserInventory", "org.zstack.header.identity.UserInventory"); + put("org.zstack.sdk.UserProxyConfigInventory", "org.zstack.proxy.UserProxyConfigInventory"); + put("org.zstack.sdk.UserProxyConfigResourceRefInventory", "org.zstack.proxy.UserProxyConfigResourceRefInventory"); + put("org.zstack.sdk.UserTagInventory", "org.zstack.header.tag.UserTagInventory"); + put("org.zstack.sdk.V2VConversionHostInventory", "org.zstack.v2v.V2VConversionHostInventory"); + put("org.zstack.sdk.VCenterBackupStorageInventory", "org.zstack.vmware.VCenterBackupStorageInventory"); + put("org.zstack.sdk.VCenterClusterInventory", "org.zstack.vmware.VCenterClusterInventory"); + put("org.zstack.sdk.VCenterDatacenterInventory", "org.zstack.vmware.VCenterDatacenterInventory"); + put("org.zstack.sdk.VCenterInventory", "org.zstack.vmware.VCenterInventory"); + put("org.zstack.sdk.VCenterPrimaryStorageInventory", "org.zstack.vmware.VCenterPrimaryStorageInventory"); + put("org.zstack.sdk.VCenterResourcePoolInventory", "org.zstack.vmware.VCenterResourcePoolInventory"); + put("org.zstack.sdk.VCenterResourcePoolUsageInventory", "org.zstack.vmware.VCenterResourcePoolUsageInventory"); + put("org.zstack.sdk.VHostAddOn", "org.zstack.kvm.KVMAgentCommands$VHostAddOn"); + put("org.zstack.sdk.VRouterRouteEntryAO", "org.zstack.vrouterRoute.VRouterRouteEntryAO"); + put("org.zstack.sdk.VRouterRouteEntryInventory", "org.zstack.vrouterRoute.VRouterRouteEntryInventory"); + put("org.zstack.sdk.VRouterRouteEntryType", "org.zstack.vrouterRoute.VRouterRouteEntryType"); + put("org.zstack.sdk.VRouterRouteTableInventory", "org.zstack.vrouterRoute.VRouterRouteTableInventory"); + put("org.zstack.sdk.VdiPortInfo", "org.zstack.header.vm.VdiPortInfo"); + put("org.zstack.sdk.VipBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails"); + put("org.zstack.sdk.VipInventory", "org.zstack.network.service.vip.VipInventory"); + put("org.zstack.sdk.VipNetworkServicesRefInventory", "org.zstack.network.service.vip.VipNetworkServicesRefInventory"); + put("org.zstack.sdk.VipPortRangeInventory", "org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory"); + put("org.zstack.sdk.VipQosInventory", "org.zstack.header.vipQos.VipQosInventory"); + put("org.zstack.sdk.VirtualBorderRouterInventory", "org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory"); + put("org.zstack.sdk.VirtualRouterOfferingInventory", "org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory"); + put("org.zstack.sdk.VirtualRouterSoftwareVersionInventory", "org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory"); + put("org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory"); + put("org.zstack.sdk.VirtualRouterVmInventory", "org.zstack.network.service.virtualrouter.VirtualRouterVmInventory"); + put("org.zstack.sdk.VirtualizerInfo", "org.zstack.header.vm.VirtualizerInfo"); + put("org.zstack.sdk.VirtualizerInfoInventory", "org.zstack.header.vm.VirtualizerInfoInventory"); + put("org.zstack.sdk.VmCPUBillingInventory", "org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory"); + put("org.zstack.sdk.VmCPUSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails"); + put("org.zstack.sdk.VmCapabilities", "org.zstack.header.vm.VmCapabilities"); + put("org.zstack.sdk.VmCdRomInventory", "org.zstack.header.vm.cdrom.VmCdRomInventory"); + put("org.zstack.sdk.VmExternalBackupInfo", "org.zstack.externalbackup.VmExternalBackupInfo"); + put("org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory"); + put("org.zstack.sdk.VmInstanceDeviceAddressGroupInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory"); + put("org.zstack.sdk.VmInstanceInventory", "org.zstack.header.vm.VmInstanceInventory"); + put("org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory"); + put("org.zstack.sdk.VmInstancePciDeviceSpecRefInventory", "org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory"); + put("org.zstack.sdk.VmMemoryBillingInventory", "org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory"); + put("org.zstack.sdk.VmMemorySpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails"); + put("org.zstack.sdk.VmModelMountInventory", "org.zstack.ai.entity.VmModelMountInventory"); + put("org.zstack.sdk.VmModelMountStatus", "org.zstack.ai.entity.VmModelMountStatus"); + put("org.zstack.sdk.VmNicBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails"); + put("org.zstack.sdk.VmNicInventory", "org.zstack.header.vm.VmNicInventory"); + put("org.zstack.sdk.VmNicSecurityGroupRefInventory", "org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory"); + put("org.zstack.sdk.VmNicSecurityPolicyInventory", "org.zstack.network.securitygroup.VmNicSecurityPolicyInventory"); + put("org.zstack.sdk.VmPriorityConfigInventory", "org.zstack.header.vm.VmPriorityConfigInventory"); + put("org.zstack.sdk.VmPriorityLevel", "org.zstack.header.vm.VmPriorityLevel"); + put("org.zstack.sdk.VmSchedHistoryInventory", "org.zstack.header.vm.VmSchedHistoryInventory"); + put("org.zstack.sdk.VmSchedulingRuleExecuteState", "org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState"); + put("org.zstack.sdk.VmSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory"); + put("org.zstack.sdk.VmSchedulingRuleInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleInventory"); + put("org.zstack.sdk.VmSpending", "org.zstack.billing.spendingcalculator.vm.VmSpending"); + put("org.zstack.sdk.VmSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmSpendingDetails"); + put("org.zstack.sdk.VmVdpaNicInventory", "org.zstack.header.vdpa.VmVdpaNicInventory"); + put("org.zstack.sdk.VmVfNicInventory", "org.zstack.header.sriov.VmVfNicInventory"); + put("org.zstack.sdk.VniRangeInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory"); + put("org.zstack.sdk.VolumeBackupInventory", "org.zstack.header.storage.backup.VolumeBackupInventory"); + put("org.zstack.sdk.VolumeBackupStorageRefInventory", "org.zstack.header.storage.backup.VolumeBackupStorageRefInventory"); + put("org.zstack.sdk.VolumeCbtBackupInfo", "org.zstack.header.cbt.VolumeCbtBackupInfo"); + put("org.zstack.sdk.VolumeExternalBackupInfo", "org.zstack.externalbackup.VolumeExternalBackupInfo"); + put("org.zstack.sdk.VolumeFormatReplyStruct", "org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct"); + put("org.zstack.sdk.VolumeInventory", "org.zstack.header.volume.VolumeInventory"); + put("org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory"); + put("org.zstack.sdk.VolumeSnapshotGroupAvailability", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability"); + put("org.zstack.sdk.VolumeSnapshotGroupInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory"); + put("org.zstack.sdk.VolumeSnapshotGroupRefInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory"); + put("org.zstack.sdk.VolumeSnapshotInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotInventory"); + put("org.zstack.sdk.VolumeSnapshotReferenceTreeInventory", "org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory"); + put("org.zstack.sdk.VolumeSnapshotTreeInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory"); + put("org.zstack.sdk.VolumeTO", "org.zstack.kvm.VolumeTO"); + put("org.zstack.sdk.VpcFirewallInventory", "org.zstack.vpcfirewall.entity.VpcFirewallInventory"); + put("org.zstack.sdk.VpcFirewallIpSetTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory"); + put("org.zstack.sdk.VpcFirewallRuleInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory"); + put("org.zstack.sdk.VpcFirewallRuleSetInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory"); + put("org.zstack.sdk.VpcFirewallRuleSetL3RefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory"); + put("org.zstack.sdk.VpcFirewallRuleTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory"); + put("org.zstack.sdk.VpcFirewallVRouterRefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory"); + put("org.zstack.sdk.VpcHaGroupApplianceVmRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory"); + put("org.zstack.sdk.VpcHaGroupInventory", "org.zstack.header.vpc.ha.VpcHaGroupInventory"); + put("org.zstack.sdk.VpcHaGroupMonitorIpInventory", "org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory"); + put("org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory"); + put("org.zstack.sdk.VpcHaGroupVipRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory"); + put("org.zstack.sdk.VpcRouterDnsInventory", "org.zstack.header.vpc.VpcRouterDnsInventory"); + put("org.zstack.sdk.VpcRouterVmInventory", "org.zstack.header.vpc.VpcRouterVmInventory"); + put("org.zstack.sdk.VpcSharedQosInventory", "org.zstack.header.vipQos.VpcSharedQosInventory"); + put("org.zstack.sdk.VpcSharedQosRefVipInventory", "org.zstack.header.vipQos.VpcSharedQosRefVipInventory"); + put("org.zstack.sdk.VpcSnatStateInventory", "org.zstack.header.vpc.VpcSnatStateInventory"); + put("org.zstack.sdk.VpcUserVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory"); + put("org.zstack.sdk.VpcVirtualRouteEntryInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory"); + put("org.zstack.sdk.VpcVirtualRouterInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory"); + put("org.zstack.sdk.VpcVpnConnectionInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory"); + put("org.zstack.sdk.VpcVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory"); + put("org.zstack.sdk.VpcVpnIkeConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory"); + put("org.zstack.sdk.VpcVpnIkeConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct"); + put("org.zstack.sdk.VpcVpnIpSecConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory"); + put("org.zstack.sdk.VpcVpnIpSecConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct"); + put("org.zstack.sdk.VtepInventory", "org.zstack.network.l2.vxlan.vtep.VtepInventory"); + put("org.zstack.sdk.WebhookInventory", "org.zstack.header.core.webhooks.WebhookInventory"); + put("org.zstack.sdk.XDragonHostInventory", "org.zstack.xdragon.XDragonHostInventory"); + put("org.zstack.sdk.XmlHookInventory", "org.zstack.kvm.xmlhook.XmlHookInventory"); + put("org.zstack.sdk.XmlHookType", "org.zstack.kvm.xmlhook.XmlHookType"); + put("org.zstack.sdk.XskyBlockVolumeInventory", "org.zstack.header.volume.block.XskyBlockVolumeInventory"); + put("org.zstack.sdk.YuccaBareMetal2DpuChassisConfig", "org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig"); + put("org.zstack.sdk.ZBoxBackupInventory", "org.zstack.externalbackup.zbox.ZBoxBackupInventory"); + put("org.zstack.sdk.ZBoxBackupStorageBackupInfo", "org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo"); + put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory"); + put("org.zstack.sdk.ZBoxLocationRefInventory", "org.zstack.zbox.ZBoxLocationRefInventory"); + put("org.zstack.sdk.ZBoxState", "org.zstack.zbox.ZBoxState"); + put("org.zstack.sdk.ZBoxStatus", "org.zstack.zbox.ZBoxStatus"); + put("org.zstack.sdk.ZBoxVmBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVmBackupInfo"); + put("org.zstack.sdk.ZBoxVolumeBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo"); + put("org.zstack.sdk.ZQLQueryReturn", "org.zstack.zql.ZQLQueryReturn"); + put("org.zstack.sdk.ZakuImageInventory", "org.zstack.container.entity.ZakuImageInventory"); + put("org.zstack.sdk.ZdfsInventory", "org.zstack.header.zdfs.ZdfsInventory"); + put("org.zstack.sdk.ZdfsService", "org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService"); + put("org.zstack.sdk.ZdfsStorageInventory", "org.zstack.header.zdfs.ZdfsStorageInventory"); + put("org.zstack.sdk.ZoneInventory", "org.zstack.header.zone.ZoneInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupInventory", "org.zstack.header.storage.database.backup.DatabaseBackupInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory", "org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupStruct", "org.zstack.header.storage.database.backup.DatabaseBackupStruct"); + put("org.zstack.sdk.databasebackup.DatabaseType", "org.zstack.header.storage.database.backup.DatabaseType"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory"); + put("org.zstack.sdk.iam2.api.APIPermissionStruct", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct"); + put("org.zstack.sdk.iam2.api.Attribute", "org.zstack.iam2.api.Attribute"); + put("org.zstack.sdk.iam2.api.ErrorResult", "org.zstack.iam2.api.ErrorResult"); + put("org.zstack.sdk.iam2.api.Permission", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission"); + put("org.zstack.sdk.iam2.container.ContainerClusterInventory", "org.zstack.iam2.container.ContainerClusterInventory"); + put("org.zstack.sdk.iam2.entity.AttributeType", "org.zstack.iam2.entity.AttributeType"); + put("org.zstack.sdk.iam2.entity.IAM2AttributeInventory", "org.zstack.iam2.entity.IAM2AttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.iam2.entity.IAM2OrganizationAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationInventory", "org.zstack.iam2.entity.IAM2OrganizationInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.iam2.entity.IAM2ProjectAccountRefInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.iam2.entity.IAM2ProjectAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectInventory", "org.zstack.iam2.entity.IAM2ProjectInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.iam2.entity.IAM2ProjectRoleInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.iam2.entity.IAM2ProjectTemplateInventory"); + put("org.zstack.sdk.iam2.entity.IAM2State", "org.zstack.iam2.entity.IAM2State"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory", "org.zstack.iam2.entity.IAM2VirtualIDInventory"); + put("org.zstack.sdk.iam2.entity.OrganizationType", "org.zstack.iam2.entity.OrganizationType"); + put("org.zstack.sdk.iam2.entity.ProjectState", "org.zstack.iam2.entity.ProjectState"); + put("org.zstack.sdk.iam2.entity.StateEvent", "org.zstack.iam2.entity.StateEvent"); + put("org.zstack.sdk.iam2.project.template.Template", "org.zstack.iam2.project.template.Template"); + put("org.zstack.sdk.identity.role.RoleInventory", "org.zstack.header.identity.role.RoleInventory"); + put("org.zstack.sdk.identity.role.RolePolicyRefInventory", "org.zstack.header.identity.role.RolePolicyRefInventory"); + put("org.zstack.sdk.identity.role.RolePolicyStatementInventory", "org.zstack.header.identity.role.RolePolicyStatementInventory"); + put("org.zstack.sdk.identity.role.RoleState", "org.zstack.header.identity.role.RoleState"); + put("org.zstack.sdk.identity.role.RoleStateEvent", "org.zstack.header.identity.role.RoleStateEvent"); + put("org.zstack.sdk.identity.role.RoleType", "org.zstack.header.identity.role.RoleType"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.license.header.server.LicenseAuthorizedCapacityInventory"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.license.header.server.LicenseAuthorizedNodeInventory"); + put("org.zstack.sdk.license.header.server.LicenseUsageDetailView", "org.zstack.license.header.server.LicenseUsageDetailView"); + put("org.zstack.sdk.license.header.server.LicenseUsageView", "org.zstack.license.header.server.LicenseUsageView"); + put("org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView"); + put("org.zstack.sdk.network.zns.L2GeneveNetworkInventory", "org.zstack.network.zns.L2GeneveNetworkInventory"); + put("org.zstack.sdk.network.zns.ZnsControllerInventory", "org.zstack.network.zns.ZnsControllerInventory"); + put("org.zstack.sdk.network.zns.ZnsTenantInventory", "org.zstack.network.zns.ZnsTenantInventory"); + put("org.zstack.sdk.network.zns.ZnsTenantRouterInventory", "org.zstack.network.zns.ZnsTenantRouterInventory"); + put("org.zstack.sdk.network.zns.ZnsTransportZoneInventory", "org.zstack.network.zns.ZnsTransportZoneInventory"); + put("org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sns.SNSAliyunSmsEndpointInventory"); + put("org.zstack.sdk.sns.SNSApplicationEndpointInventory", "org.zstack.sns.SNSApplicationEndpointInventory"); + put("org.zstack.sdk.sns.SNSApplicationPlatformInventory", "org.zstack.sns.SNSApplicationPlatformInventory"); + put("org.zstack.sdk.sns.SNSSmsReceiverInventory", "org.zstack.sns.SNSSmsReceiverInventory"); + put("org.zstack.sdk.sns.SNSSubscriberInventory", "org.zstack.sns.SNSSubscriberInventory"); + put("org.zstack.sdk.sns.SNSTopicInventory", "org.zstack.sns.SNSTopicInventory"); + put("org.zstack.sdk.sns.SmsReceiverType", "org.zstack.sns.SmsReceiverType"); + put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); + put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sns.platform.email.SNSEmailAddressInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sns.platform.email.SNSEmailEndpointInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sns.platform.email.SNSEmailPlatformInventory"); + put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory"); + put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory"); + put("org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sns.platform.http.SNSHttpEndpointInventory"); + put("org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); + put("org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sns.platform.plugin.SNSPluginEndpointInventory"); + put("org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory"); + put("org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); + put("org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); + put("org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory"); + put("org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sns.platform.wecom.SNSWeComEndpointInventory"); + put("org.zstack.sdk.ticket.entity.ArchiveTicketInventory", "org.zstack.ticket.entity.ArchiveTicketInventory"); + put("org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory"); + put("org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory", "org.zstack.ticket.entity.TicketFlowCollectionInventory"); + put("org.zstack.sdk.ticket.entity.TicketFlowInventory", "org.zstack.ticket.entity.TicketFlowInventory"); + put("org.zstack.sdk.ticket.entity.TicketInventory", "org.zstack.ticket.entity.TicketInventory"); + put("org.zstack.sdk.ticket.entity.TicketRequest", "org.zstack.ticket.entity.TicketRequest"); + put("org.zstack.sdk.ticket.entity.TicketStatus", "org.zstack.ticket.entity.TicketStatus"); + put("org.zstack.sdk.ticket.entity.TicketStatusEvent", "org.zstack.ticket.entity.TicketStatusEvent"); + put("org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory", "org.zstack.ticket.entity.TicketStatusHistoryInventory"); + put("org.zstack.sdk.ticket.entity.TicketTypeInventory", "org.zstack.ticket.entity.TicketTypeInventory"); + put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); + put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory"); + put("org.zstack.sdk.zwatch.alarm.ActionParam", "org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam"); + put("org.zstack.sdk.zwatch.alarm.AlarmActionInventory", "org.zstack.zwatch.alarm.AlarmActionInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory", "org.zstack.zwatch.alarm.AlarmDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmInventory", "org.zstack.zwatch.alarm.AlarmInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmLabelInventory", "org.zstack.zwatch.alarm.AlarmLabelInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmState", "org.zstack.zwatch.alarm.AlarmState"); + put("org.zstack.sdk.zwatch.alarm.AlarmStatus", "org.zstack.zwatch.alarm.AlarmStatus"); + put("org.zstack.sdk.zwatch.alarm.AlertDataAckInventory", "org.zstack.zwatch.alarm.AlertDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.EventDataAckInventory", "org.zstack.zwatch.alarm.EventDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.zwatch.alarm.EventSubscriptionActionInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory", "org.zstack.zwatch.alarm.EventSubscriptionInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.zwatch.alarm.EventSubscriptionLabelInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionState", "org.zstack.zwatch.alarm.EventSubscriptionState"); + put("org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); + put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); + put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); + put("org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory"); + put("org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); + put("org.zstack.sdk.zwatch.api.EventStruct", "org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct"); + put("org.zstack.sdk.zwatch.api.Histogram", "org.zstack.zwatch.api.Histogram"); + put("org.zstack.sdk.zwatch.api.MetricStruct", "org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct"); + put("org.zstack.sdk.zwatch.api.Tag", "org.zstack.zwatch.api.Histogram$Tag"); + put("org.zstack.sdk.zwatch.datatype.AlarmData", "org.zstack.zwatch.datatype.AlarmData"); + put("org.zstack.sdk.zwatch.datatype.AlarmDataV1", "org.zstack.zwatch.datatype.AlarmDataV1"); + put("org.zstack.sdk.zwatch.datatype.AlarmDataV2", "org.zstack.zwatch.datatype.AlarmDataV2"); + put("org.zstack.sdk.zwatch.datatype.AuditType", "org.zstack.zwatch.datatype.AuditType"); + put("org.zstack.sdk.zwatch.datatype.Datapoint", "org.zstack.zwatch.datatype.Datapoint"); + put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EmergencyLevel"); + put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EventFamily$EmergencyLevel"); + put("org.zstack.sdk.zwatch.datatype.EventData", "org.zstack.zwatch.datatype.EventData"); + put("org.zstack.sdk.zwatch.datatype.Label", "org.zstack.zwatch.datatype.Label"); + put("org.zstack.sdk.zwatch.datatype.MetricDatum", "org.zstack.zwatch.datatype.MetricDatum"); + put("org.zstack.sdk.zwatch.datatype.Operator", "org.zstack.zwatch.datatype.Label$Operator"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventData", "org.zstack.zwatch.influxdb.InfluxEventData"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1", "org.zstack.zwatch.influxdb.InfluxEventDataV1"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2", "org.zstack.zwatch.influxdb.InfluxEventDataV2"); + put("org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory"); + put("org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.zwatch.metricpusher.MetricTemplateInventory"); + put("org.zstack.sdk.zwatch.metricpusher.ReceiverState", "org.zstack.zwatch.metricpusher.ReceiverState"); + put("org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.zwatch.migratedb.AlarmRecordsInventory"); + put("org.zstack.sdk.zwatch.migratedb.AuditsInventory", "org.zstack.zwatch.migratedb.AuditsInventory"); + put("org.zstack.sdk.zwatch.migratedb.EventRecordsInventory", "org.zstack.zwatch.migratedb.EventRecordsInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupState"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.zwatch.resnotify.ResNotifySubscriptionState"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifyType", "org.zstack.zwatch.resnotify.ResNotifyType"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory"); + put("org.zstack.sdk.zwatch.ruleengine.ComparisonOperator", "org.zstack.zwatch.ruleengine.ComparisonOperator"); + put("org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); + put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); + put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); } }; } diff --git a/sdk/src/main/java/org/zstack/sdk/NicTO.java b/sdk/src/main/java/org/zstack/sdk/NicTO.java index 6eecb1466a8..c1457f95d4b 100644 --- a/sdk/src/main/java/org/zstack/sdk/NicTO.java +++ b/sdk/src/main/java/org/zstack/sdk/NicTO.java @@ -197,4 +197,20 @@ public java.lang.Boolean getIsolated() { return this.isolated; } + public java.lang.String bridgePortType; + public void setBridgePortType(java.lang.String bridgePortType) { + this.bridgePortType = bridgePortType; + } + public java.lang.String getBridgePortType() { + return this.bridgePortType; + } + + public java.lang.String interfaceId; + public void setInterfaceId(java.lang.String interfaceId) { + this.interfaceId = interfaceId; + } + public java.lang.String getInterfaceId() { + return this.interfaceId; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java new file mode 100644 index 00000000000..37d1eaaa2cc --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java @@ -0,0 +1,131 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class CreateL2GeneveNetworkAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.CreateL2NetworkResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, numberRange = {1L,16777214L}, noTrim = false) + public java.lang.Integer geneveId; + + @Param(required = true, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String name; + + @Param(required = false, maxLength = 2048, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String description; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String zoneUuid; + + @Param(required = false, maxLength = 1024, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String physicalInterface; + + @Param(required = false) + public java.lang.String type; + + @Param(required = false, validValues = {"LinuxBridge","OvsDpdk","MacVlan","OvnDpdk"}, maxLength = 1024, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String vSwitchType = "LinuxBridge"; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.Boolean isolated = false; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = false, noTrim = false) + public java.lang.String pvlan; + + @Param(required = false) + public java.lang.String resourceUuid; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.util.List tagUuids; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.CreateL2NetworkResult value = res.getResult(org.zstack.sdk.CreateL2NetworkResult.class); + ret.value = value == null ? new org.zstack.sdk.CreateL2NetworkResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "POST"; + info.path = "/l2-networks/geneve"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/L2GeneveNetworkInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/L2GeneveNetworkInventory.java new file mode 100644 index 00000000000..3baa9daea19 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/L2GeneveNetworkInventory.java @@ -0,0 +1,23 @@ +package org.zstack.sdk.network.zns; + + + +public class L2GeneveNetworkInventory extends org.zstack.sdk.L2NetworkInventory { + + public java.lang.Integer geneveId; + public void setGeneveId(java.lang.Integer geneveId) { + this.geneveId = geneveId; + } + public java.lang.Integer getGeneveId() { + return this.geneveId; + } + + public java.lang.Integer vni; + public void setVni(java.lang.Integer vni) { + this.vni = vni; + } + public java.lang.Integer getVni() { + return this.vni; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java new file mode 100644 index 00000000000..1dfe3dd174e --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java @@ -0,0 +1,75 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class QueryZnsTenantAction extends QueryAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.network.zns.QueryZnsTenantResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.network.zns.QueryZnsTenantResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsTenantResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "GET"; + info.path = "/sdn-controller/zns/tenants"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantResult.java new file mode 100644 index 00000000000..3f33998de12 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantResult.java @@ -0,0 +1,22 @@ +package org.zstack.sdk.network.zns; + + + +public class QueryZnsTenantResult { + public java.util.List inventories; + public void setInventories(java.util.List inventories) { + this.inventories = inventories; + } + public java.util.List getInventories() { + return this.inventories; + } + + public java.lang.Long total; + public void setTotal(java.lang.Long total) { + this.total = total; + } + public java.lang.Long getTotal() { + return this.total; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java new file mode 100644 index 00000000000..85ebcb6bb30 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java @@ -0,0 +1,75 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class QueryZnsTenantRouterAction extends QueryAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.network.zns.QueryZnsTenantRouterResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.network.zns.QueryZnsTenantRouterResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsTenantRouterResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantRouterResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "GET"; + info.path = "/sdn-controller/zns/tenant-routers"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterResult.java new file mode 100644 index 00000000000..d9981b90e35 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterResult.java @@ -0,0 +1,22 @@ +package org.zstack.sdk.network.zns; + + + +public class QueryZnsTenantRouterResult { + public java.util.List inventories; + public void setInventories(java.util.List inventories) { + this.inventories = inventories; + } + public java.util.List getInventories() { + return this.inventories; + } + + public java.lang.Long total; + public void setTotal(java.lang.Long total) { + this.total = total; + } + public java.lang.Long getTotal() { + return this.total; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsControllerInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsControllerInventory.java new file mode 100644 index 00000000000..ec0431656a3 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsControllerInventory.java @@ -0,0 +1,31 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsControllerInventory extends org.zstack.sdk.SdnControllerInventory { + + public java.util.List transportZones; + public void setTransportZones(java.util.List transportZones) { + this.transportZones = transportZones; + } + public java.util.List getTransportZones() { + return this.transportZones; + } + + public java.util.List tenants; + public void setTenants(java.util.List tenants) { + this.tenants = tenants; + } + public java.util.List getTenants() { + return this.tenants; + } + + public java.util.List tenantRouters; + public void setTenantRouters(java.util.List tenantRouters) { + this.tenantRouters = tenantRouters; + } + public java.util.List getTenantRouters() { + return this.tenantRouters; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantInventory.java new file mode 100644 index 00000000000..def84d31247 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantInventory.java @@ -0,0 +1,63 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsTenantInventory { + + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + + public java.lang.String sdnControllerUuid; + public void setSdnControllerUuid(java.lang.String sdnControllerUuid) { + this.sdnControllerUuid = sdnControllerUuid; + } + public java.lang.String getSdnControllerUuid() { + return this.sdnControllerUuid; + } + + public java.lang.String znsResourceUuid; + public void setZnsResourceUuid(java.lang.String znsResourceUuid) { + this.znsResourceUuid = znsResourceUuid; + } + public java.lang.String getZnsResourceUuid() { + return this.znsResourceUuid; + } + + public java.lang.String name; + public void setName(java.lang.String name) { + this.name = name; + } + public java.lang.String getName() { + return this.name; + } + + public java.lang.String description; + public void setDescription(java.lang.String description) { + this.description = description; + } + public java.lang.String getDescription() { + return this.description; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantRouterInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantRouterInventory.java new file mode 100644 index 00000000000..a4624e92320 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTenantRouterInventory.java @@ -0,0 +1,79 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsTenantRouterInventory { + + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + + public java.lang.String sdnControllerUuid; + public void setSdnControllerUuid(java.lang.String sdnControllerUuid) { + this.sdnControllerUuid = sdnControllerUuid; + } + public java.lang.String getSdnControllerUuid() { + return this.sdnControllerUuid; + } + + public java.lang.String tenantUuid; + public void setTenantUuid(java.lang.String tenantUuid) { + this.tenantUuid = tenantUuid; + } + public java.lang.String getTenantUuid() { + return this.tenantUuid; + } + + public java.lang.String znsResourceUuid; + public void setZnsResourceUuid(java.lang.String znsResourceUuid) { + this.znsResourceUuid = znsResourceUuid; + } + public java.lang.String getZnsResourceUuid() { + return this.znsResourceUuid; + } + + public java.lang.String name; + public void setName(java.lang.String name) { + this.name = name; + } + public java.lang.String getName() { + return this.name; + } + + public java.lang.String description; + public void setDescription(java.lang.String description) { + this.description = description; + } + public java.lang.String getDescription() { + return this.description; + } + + public java.lang.String state; + public void setState(java.lang.String state) { + this.state = state; + } + public java.lang.String getState() { + return this.state; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTransportZoneInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTransportZoneInventory.java new file mode 100644 index 00000000000..890e452aa04 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsTransportZoneInventory.java @@ -0,0 +1,95 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsTransportZoneInventory { + + public java.lang.String uuid; + public void setUuid(java.lang.String uuid) { + this.uuid = uuid; + } + public java.lang.String getUuid() { + return this.uuid; + } + + public java.lang.String name; + public void setName(java.lang.String name) { + this.name = name; + } + public java.lang.String getName() { + return this.name; + } + + public java.lang.String description; + public void setDescription(java.lang.String description) { + this.description = description; + } + public java.lang.String getDescription() { + return this.description; + } + + public java.lang.String type; + public void setType(java.lang.String type) { + this.type = type; + } + public java.lang.String getType() { + return this.type; + } + + public java.lang.String physicalNetwork; + public void setPhysicalNetwork(java.lang.String physicalNetwork) { + this.physicalNetwork = physicalNetwork; + } + public java.lang.String getPhysicalNetwork() { + return this.physicalNetwork; + } + + public java.lang.String status; + public void setStatus(java.lang.String status) { + this.status = status; + } + public java.lang.String getStatus() { + return this.status; + } + + public boolean isDefault; + public void setIsDefault(boolean isDefault) { + this.isDefault = isDefault; + } + public boolean getIsDefault() { + return this.isDefault; + } + + public java.lang.String tags; + public void setTags(java.lang.String tags) { + this.tags = tags; + } + public java.lang.String getTags() { + return this.tags; + } + + public java.lang.String znsSdnControllerUuid; + public void setZnsSdnControllerUuid(java.lang.String znsSdnControllerUuid) { + this.znsSdnControllerUuid = znsSdnControllerUuid; + } + public java.lang.String getZnsSdnControllerUuid() { + return this.znsSdnControllerUuid; + } + + public java.sql.Timestamp createDate; + public void setCreateDate(java.sql.Timestamp createDate) { + this.createDate = createDate; + } + public java.sql.Timestamp getCreateDate() { + return this.createDate; + } + + public java.sql.Timestamp lastOpDate; + public void setLastOpDate(java.sql.Timestamp lastOpDate) { + this.lastOpDate = lastOpDate; + } + public java.sql.Timestamp getLastOpDate() { + return this.lastOpDate; + } + +} diff --git a/search/src/main/java/org/zstack/zql/ast/ZQLMetadata.java b/search/src/main/java/org/zstack/zql/ast/ZQLMetadata.java index 40141fd9a5b..cdcbb094a91 100755 --- a/search/src/main/java/org/zstack/zql/ast/ZQLMetadata.java +++ b/search/src/main/java/org/zstack/zql/ast/ZQLMetadata.java @@ -110,7 +110,7 @@ public boolean hasInventoryField(String fname) { public void errorIfNoField(String fname) { if (!hasInventoryField(fname)) { - throw new CloudRuntimeException(String.format("inventory[${selfInventoryClass}] has no field[%s]", fname)); + throw new CloudRuntimeException(String.format("inventory[%s] has no field[%s]", simpleInventoryName(), fname)); } } diff --git a/test/src/test/resources/springConfigXml/Kvm.xml b/test/src/test/resources/springConfigXml/Kvm.xml index b5c509ebad7..53cd7f06540 100755 --- a/test/src/test/resources/springConfigXml/Kvm.xml +++ b/test/src/test/resources/springConfigXml/Kvm.xml @@ -90,6 +90,12 @@ + + + + + + diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 93ba3d61d03..f8f0c5c50bd 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -14,27 +14,27 @@ abstract class ApiHelper { return res.value } } - + def createBareMetal2InstanceFromVmBackup(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.heder.storage.volume.backup.CreateBareMetal2InstanceFromVmBackupAction.class) Closure c) { def a = new org.zstack.heder.storage.volume.backup.CreateBareMetal2InstanceFromVmBackupAction() a.sessionId = Test.currentEnvSpec?.session?.uuid c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48,20 +48,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -75,20 +75,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -102,20 +102,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -129,20 +129,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -156,20 +156,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -183,20 +183,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -210,20 +210,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -237,20 +237,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -264,20 +264,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -291,20 +291,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -318,7 +318,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -326,14 +326,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -347,20 +347,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -374,20 +374,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -401,20 +401,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -428,20 +428,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -455,20 +455,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -482,20 +482,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -509,20 +509,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -536,20 +536,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -563,20 +563,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -590,20 +590,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -617,20 +617,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -644,20 +644,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -671,20 +671,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -698,20 +698,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -725,20 +725,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -752,20 +752,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -779,20 +779,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -806,20 +806,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -833,20 +833,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -860,20 +860,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -887,20 +887,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -914,20 +914,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -941,20 +941,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -968,20 +968,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -995,20 +995,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1022,20 +1022,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1049,20 +1049,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1076,20 +1076,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1103,20 +1103,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1130,20 +1130,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1157,20 +1157,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1184,20 +1184,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1211,20 +1211,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1238,20 +1238,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1265,20 +1265,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1292,20 +1292,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1319,20 +1319,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1346,20 +1346,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1373,20 +1373,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1400,20 +1400,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1427,20 +1427,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1454,20 +1454,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1481,20 +1481,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1508,20 +1508,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1535,20 +1535,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1562,20 +1562,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1589,20 +1589,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1616,20 +1616,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1643,20 +1643,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1670,20 +1670,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1697,20 +1697,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1724,20 +1724,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1751,20 +1751,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1778,20 +1778,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1805,20 +1805,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1832,20 +1832,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1859,20 +1859,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1886,20 +1886,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1913,20 +1913,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1940,20 +1940,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1967,20 +1967,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -1994,20 +1994,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2021,20 +2021,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2048,20 +2048,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2075,20 +2075,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2102,20 +2102,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2129,20 +2129,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2156,20 +2156,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2183,20 +2183,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2210,20 +2210,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2237,20 +2237,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2264,20 +2264,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2291,20 +2291,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2318,20 +2318,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2345,20 +2345,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2372,20 +2372,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2399,20 +2399,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2426,20 +2426,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2453,20 +2453,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2480,20 +2480,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2507,20 +2507,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2534,20 +2534,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2561,20 +2561,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2588,20 +2588,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2615,20 +2615,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2642,20 +2642,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2669,20 +2669,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2696,20 +2696,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2723,20 +2723,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2750,20 +2750,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2777,20 +2777,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2804,20 +2804,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2831,20 +2831,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2858,20 +2858,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2885,20 +2885,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2912,20 +2912,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2939,20 +2939,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2966,20 +2966,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -2993,20 +2993,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3020,20 +3020,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3047,20 +3047,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3074,20 +3074,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3101,20 +3101,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3128,20 +3128,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3155,20 +3155,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3182,20 +3182,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3209,20 +3209,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3236,20 +3236,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3263,20 +3263,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3290,20 +3290,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3317,20 +3317,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3344,20 +3344,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3371,20 +3371,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3398,20 +3398,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3425,20 +3425,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3452,20 +3452,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3479,20 +3479,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3506,20 +3506,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3533,20 +3533,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3560,20 +3560,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3587,20 +3587,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3614,20 +3614,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3641,20 +3641,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3668,20 +3668,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3695,20 +3695,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3722,20 +3722,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3749,20 +3749,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3776,20 +3776,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3803,20 +3803,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3830,20 +3830,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3857,20 +3857,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3884,20 +3884,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3911,20 +3911,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3938,20 +3938,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3965,20 +3965,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -3992,20 +3992,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4019,20 +4019,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4046,20 +4046,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4073,20 +4073,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4100,20 +4100,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4127,20 +4127,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4154,20 +4154,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4181,20 +4181,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4208,20 +4208,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4235,20 +4235,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4262,20 +4262,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4289,20 +4289,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4316,20 +4316,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4343,20 +4343,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4370,20 +4370,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4397,20 +4397,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4424,20 +4424,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4451,20 +4451,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4478,20 +4478,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4505,20 +4505,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4532,20 +4532,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4559,20 +4559,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4586,20 +4586,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4613,20 +4613,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4640,20 +4640,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4667,20 +4667,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4694,20 +4694,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4721,20 +4721,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4748,20 +4748,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4775,20 +4775,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4802,20 +4802,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4829,20 +4829,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4856,20 +4856,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4883,20 +4883,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4910,20 +4910,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4937,20 +4937,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4964,20 +4964,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -4991,20 +4991,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5018,20 +5018,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5045,20 +5045,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5072,20 +5072,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5099,20 +5099,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5126,20 +5126,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5153,20 +5153,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5180,20 +5180,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5207,20 +5207,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5234,20 +5234,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5261,20 +5261,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5288,20 +5288,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5315,20 +5315,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5342,20 +5342,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5369,20 +5369,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5396,20 +5396,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5423,20 +5423,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5450,20 +5450,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5477,20 +5477,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5504,20 +5504,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5531,20 +5531,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5558,20 +5558,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5585,20 +5585,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5612,20 +5612,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5639,20 +5639,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5666,20 +5666,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5693,20 +5693,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5720,20 +5720,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5747,20 +5747,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5774,20 +5774,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5801,20 +5801,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5828,20 +5828,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5855,20 +5855,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5882,20 +5882,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5909,20 +5909,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5936,20 +5936,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5963,20 +5963,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -5990,20 +5990,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6017,20 +6017,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6044,20 +6044,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6071,20 +6071,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6098,20 +6098,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6125,20 +6125,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6152,20 +6152,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6179,20 +6179,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6206,20 +6206,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6233,20 +6233,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6260,20 +6260,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6287,20 +6287,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6314,20 +6314,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6341,20 +6341,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6368,20 +6368,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6395,20 +6395,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6422,20 +6422,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6449,20 +6449,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6476,20 +6476,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6503,20 +6503,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6530,20 +6530,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6557,20 +6557,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6584,20 +6584,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6611,20 +6611,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6638,20 +6638,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6665,20 +6665,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6692,20 +6692,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6719,20 +6719,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6746,20 +6746,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6773,20 +6773,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6800,20 +6800,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6827,20 +6827,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6854,20 +6854,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6881,20 +6881,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6908,20 +6908,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6935,20 +6935,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6962,20 +6962,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -6989,20 +6989,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7016,20 +7016,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7043,20 +7043,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7070,20 +7070,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7097,20 +7097,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7124,20 +7124,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7151,20 +7151,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7178,20 +7178,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7205,20 +7205,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7232,20 +7232,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7259,20 +7259,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7286,20 +7286,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7313,20 +7313,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7340,20 +7340,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7367,20 +7367,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7394,20 +7394,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7421,20 +7421,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7448,20 +7448,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7475,20 +7475,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7502,20 +7502,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7529,20 +7529,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7556,20 +7556,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7583,20 +7583,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7610,20 +7610,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7637,20 +7637,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7664,20 +7664,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7691,20 +7691,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7718,20 +7718,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7745,20 +7745,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7772,20 +7772,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7799,20 +7799,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7826,20 +7826,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7853,20 +7853,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7880,20 +7880,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7907,20 +7907,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7934,20 +7934,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7961,20 +7961,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -7988,20 +7988,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8015,20 +8015,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8042,20 +8042,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8069,20 +8069,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8096,20 +8096,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8123,20 +8123,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8150,20 +8150,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8177,20 +8177,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8204,20 +8204,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8231,20 +8231,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8258,20 +8258,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8285,20 +8285,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8312,20 +8312,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8339,20 +8339,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8366,20 +8366,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8393,20 +8393,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8420,20 +8420,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8443,24 +8443,24 @@ abstract class ApiHelper { def createBareMetal2IpmiChassisHardwareInfo(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.CreateBareMetal2IpmiChassisHardwareInfoAction.class) Closure c) { def a = new org.zstack.sdk.CreateBareMetal2IpmiChassisHardwareInfoAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8474,20 +8474,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8501,20 +8501,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8528,20 +8528,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8555,20 +8555,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8582,20 +8582,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8609,20 +8609,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8636,20 +8636,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8663,20 +8663,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8690,20 +8690,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8717,20 +8717,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8744,20 +8744,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8771,20 +8771,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8798,20 +8798,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8825,20 +8825,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8852,20 +8852,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8879,20 +8879,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8906,20 +8906,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8933,20 +8933,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8960,20 +8960,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -8987,20 +8987,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9014,20 +9014,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9041,20 +9041,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9068,20 +9068,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9095,20 +9095,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9122,20 +9122,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9149,20 +9149,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9176,20 +9176,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9203,20 +9203,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9230,20 +9230,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9257,20 +9257,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9284,20 +9284,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9311,20 +9311,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9338,20 +9338,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9365,20 +9365,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9392,20 +9392,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9419,20 +9419,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9446,20 +9446,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9473,20 +9473,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9500,20 +9500,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9527,20 +9527,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9554,20 +9554,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9581,20 +9581,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9608,20 +9608,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9635,20 +9635,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9662,20 +9662,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9689,20 +9689,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9716,20 +9716,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9743,20 +9743,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9770,20 +9770,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9797,20 +9797,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9824,20 +9824,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9851,20 +9851,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9878,20 +9878,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9905,20 +9905,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9932,20 +9932,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9959,20 +9959,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -9986,20 +9986,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10013,20 +10013,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10040,20 +10040,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10067,20 +10067,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10094,20 +10094,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10121,20 +10121,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10148,20 +10148,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10175,20 +10175,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10202,20 +10202,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10229,20 +10229,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10256,20 +10256,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10283,20 +10283,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10310,20 +10310,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10337,20 +10337,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10364,20 +10364,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10391,20 +10391,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10418,20 +10418,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10445,20 +10445,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10472,20 +10472,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10499,20 +10499,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10526,20 +10526,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10553,20 +10553,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10580,20 +10580,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10607,20 +10607,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10634,20 +10634,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10661,20 +10661,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10688,20 +10688,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10715,20 +10715,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10742,20 +10742,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10769,20 +10769,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10796,20 +10796,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10823,20 +10823,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10850,20 +10850,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10877,20 +10877,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10904,20 +10904,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10931,20 +10931,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10958,20 +10958,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -10985,20 +10985,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11012,20 +11012,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11039,20 +11039,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11066,20 +11066,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11093,20 +11093,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11120,20 +11120,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11147,20 +11147,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11174,20 +11174,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11201,20 +11201,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11228,20 +11228,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11255,20 +11255,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11282,20 +11282,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11309,20 +11309,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11336,20 +11336,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11363,20 +11363,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11390,20 +11390,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11417,20 +11417,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11444,20 +11444,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11471,20 +11471,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11498,20 +11498,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11525,20 +11525,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11552,20 +11552,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11579,20 +11579,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11606,20 +11606,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11633,20 +11633,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11660,20 +11660,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11687,20 +11687,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11714,20 +11714,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11741,20 +11741,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11768,20 +11768,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11795,20 +11795,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11822,20 +11822,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11849,20 +11849,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11876,20 +11876,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11903,20 +11903,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11930,20 +11930,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11957,20 +11957,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -11984,20 +11984,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12011,20 +12011,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12038,20 +12038,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12065,20 +12065,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12092,20 +12092,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12119,20 +12119,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12146,20 +12146,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12173,20 +12173,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12200,20 +12200,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12227,20 +12227,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12254,20 +12254,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12281,20 +12281,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12308,20 +12308,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12335,20 +12335,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12362,20 +12362,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12389,20 +12389,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12416,20 +12416,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12443,20 +12443,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12470,20 +12470,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12497,20 +12497,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12524,20 +12524,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12551,20 +12551,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12578,20 +12578,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12605,20 +12605,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12632,20 +12632,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12659,20 +12659,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12686,20 +12686,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12713,20 +12713,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12740,20 +12740,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12767,20 +12767,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12794,20 +12794,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12821,20 +12821,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12848,20 +12848,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12875,20 +12875,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12902,20 +12902,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12929,20 +12929,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12956,20 +12956,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -12983,20 +12983,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13010,20 +13010,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13037,20 +13037,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13064,20 +13064,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13091,20 +13091,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13118,20 +13118,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13145,20 +13145,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13172,20 +13172,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13199,20 +13199,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13226,20 +13226,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13253,20 +13253,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13280,20 +13280,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13307,20 +13307,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13334,20 +13334,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13361,20 +13361,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13388,20 +13388,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13415,20 +13415,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13442,20 +13442,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13469,20 +13469,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13496,20 +13496,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13523,20 +13523,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13550,20 +13550,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13577,20 +13577,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13604,20 +13604,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13631,20 +13631,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13658,20 +13658,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13685,20 +13685,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13712,20 +13712,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13739,20 +13739,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13766,20 +13766,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13793,20 +13793,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13820,20 +13820,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13847,20 +13847,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13874,20 +13874,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13901,20 +13901,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13928,20 +13928,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13955,20 +13955,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -13982,20 +13982,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14009,20 +14009,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14036,20 +14036,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14063,20 +14063,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14090,20 +14090,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14117,20 +14117,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14144,20 +14144,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14171,20 +14171,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14198,20 +14198,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14225,20 +14225,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14252,20 +14252,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14279,20 +14279,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14306,20 +14306,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14333,20 +14333,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14360,20 +14360,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14387,20 +14387,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14414,20 +14414,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14441,20 +14441,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14468,20 +14468,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14495,20 +14495,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14522,20 +14522,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14549,20 +14549,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14576,20 +14576,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14603,20 +14603,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14630,20 +14630,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14657,20 +14657,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14684,20 +14684,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14711,20 +14711,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14738,20 +14738,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14765,20 +14765,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14792,20 +14792,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14819,20 +14819,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14846,20 +14846,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14873,20 +14873,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14900,20 +14900,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14927,20 +14927,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14954,20 +14954,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -14981,20 +14981,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15008,20 +15008,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15035,20 +15035,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15062,20 +15062,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15089,20 +15089,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15116,20 +15116,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15143,20 +15143,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15170,20 +15170,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15197,20 +15197,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15224,20 +15224,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15251,20 +15251,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15278,20 +15278,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15305,20 +15305,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15332,20 +15332,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15359,20 +15359,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15386,20 +15386,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15413,20 +15413,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15440,20 +15440,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15467,20 +15467,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15494,20 +15494,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15521,20 +15521,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15548,20 +15548,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15575,20 +15575,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15602,20 +15602,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15629,20 +15629,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15656,20 +15656,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15683,20 +15683,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15710,20 +15710,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15737,20 +15737,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15764,20 +15764,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15791,20 +15791,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15818,20 +15818,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15845,20 +15845,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15872,20 +15872,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15899,20 +15899,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15926,20 +15926,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15953,20 +15953,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -15980,20 +15980,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16007,20 +16007,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16034,20 +16034,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16061,20 +16061,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16088,20 +16088,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16115,20 +16115,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16142,20 +16142,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16169,20 +16169,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16196,20 +16196,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16223,20 +16223,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16250,20 +16250,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16277,20 +16277,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16304,20 +16304,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16331,20 +16331,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16358,20 +16358,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16385,20 +16385,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16412,20 +16412,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16439,20 +16439,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16466,20 +16466,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16493,20 +16493,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16520,20 +16520,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16547,20 +16547,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16574,20 +16574,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16601,20 +16601,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16628,20 +16628,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16655,20 +16655,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16682,20 +16682,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16709,20 +16709,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16736,20 +16736,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16763,20 +16763,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16790,20 +16790,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16817,20 +16817,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16844,20 +16844,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16871,20 +16871,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16898,20 +16898,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16925,20 +16925,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16952,20 +16952,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -16979,20 +16979,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17006,20 +17006,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17033,20 +17033,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17060,20 +17060,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17087,20 +17087,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17114,20 +17114,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17141,20 +17141,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17168,20 +17168,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17195,20 +17195,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17222,20 +17222,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17249,20 +17249,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17276,20 +17276,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17303,20 +17303,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17330,20 +17330,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17357,20 +17357,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17384,20 +17384,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17411,20 +17411,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17438,20 +17438,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17465,20 +17465,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17492,20 +17492,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17519,20 +17519,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17546,20 +17546,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17573,20 +17573,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17600,20 +17600,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17627,20 +17627,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17654,20 +17654,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17681,20 +17681,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17708,20 +17708,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17735,20 +17735,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17762,20 +17762,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17789,20 +17789,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17816,20 +17816,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17843,20 +17843,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17870,20 +17870,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17897,20 +17897,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17924,20 +17924,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17951,20 +17951,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -17978,20 +17978,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18005,20 +18005,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18032,20 +18032,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18059,20 +18059,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18086,20 +18086,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18113,20 +18113,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18140,20 +18140,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18167,20 +18167,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18194,20 +18194,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18221,20 +18221,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18248,20 +18248,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18275,20 +18275,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18302,20 +18302,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18329,20 +18329,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18356,20 +18356,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18383,20 +18383,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18410,20 +18410,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18437,20 +18437,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18464,20 +18464,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18491,20 +18491,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18518,20 +18518,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18545,20 +18545,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18572,20 +18572,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18599,20 +18599,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18626,20 +18626,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18653,20 +18653,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18680,20 +18680,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18707,20 +18707,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18734,20 +18734,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18761,20 +18761,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18788,20 +18788,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18815,20 +18815,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18842,20 +18842,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18869,20 +18869,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18896,20 +18896,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18923,20 +18923,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18950,20 +18950,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -18977,20 +18977,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19004,20 +19004,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19031,20 +19031,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19058,20 +19058,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19085,20 +19085,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19112,20 +19112,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19139,20 +19139,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19166,20 +19166,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19193,20 +19193,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19220,20 +19220,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19247,20 +19247,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19274,20 +19274,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19301,20 +19301,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19328,20 +19328,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19355,20 +19355,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19382,20 +19382,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19409,20 +19409,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19436,20 +19436,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19463,20 +19463,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19490,20 +19490,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19517,20 +19517,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19544,20 +19544,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19571,20 +19571,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19598,20 +19598,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19625,20 +19625,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19652,20 +19652,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19679,20 +19679,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19706,20 +19706,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19733,20 +19733,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19760,20 +19760,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19787,20 +19787,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19814,20 +19814,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19841,20 +19841,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19868,20 +19868,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19895,20 +19895,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19922,20 +19922,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19949,20 +19949,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -19976,20 +19976,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20003,20 +20003,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20030,20 +20030,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20057,20 +20057,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20084,20 +20084,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20111,20 +20111,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20138,20 +20138,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20165,20 +20165,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20192,20 +20192,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20219,20 +20219,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20246,20 +20246,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20273,20 +20273,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20300,20 +20300,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20327,20 +20327,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20354,20 +20354,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20381,20 +20381,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20408,20 +20408,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20435,20 +20435,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20462,20 +20462,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20489,20 +20489,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20516,20 +20516,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20543,20 +20543,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20570,20 +20570,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20597,20 +20597,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20624,20 +20624,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20651,20 +20651,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20678,20 +20678,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20705,20 +20705,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20732,20 +20732,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20759,20 +20759,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20786,20 +20786,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20813,20 +20813,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20840,20 +20840,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20867,20 +20867,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20894,20 +20894,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20921,20 +20921,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20948,20 +20948,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -20975,20 +20975,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21002,20 +21002,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21029,20 +21029,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21056,20 +21056,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21083,20 +21083,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21110,20 +21110,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21137,20 +21137,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21164,20 +21164,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21191,20 +21191,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21218,20 +21218,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21245,20 +21245,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21272,20 +21272,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21299,20 +21299,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21326,20 +21326,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21353,20 +21353,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21380,20 +21380,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21407,20 +21407,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21434,20 +21434,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21461,20 +21461,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21488,20 +21488,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21515,20 +21515,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21542,20 +21542,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21569,20 +21569,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21596,20 +21596,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21623,20 +21623,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21650,20 +21650,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21677,20 +21677,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21704,20 +21704,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21731,20 +21731,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21758,20 +21758,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21785,20 +21785,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21812,20 +21812,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21839,20 +21839,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21866,20 +21866,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21893,20 +21893,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21920,20 +21920,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21947,20 +21947,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -21974,20 +21974,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22001,20 +22001,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22028,20 +22028,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22055,20 +22055,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22082,20 +22082,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22109,20 +22109,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22136,20 +22136,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22163,20 +22163,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22186,24 +22186,24 @@ abstract class ApiHelper { def getCurrentTime(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetCurrentTimeAction.class) Closure c) { def a = new org.zstack.sdk.GetCurrentTimeAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22217,20 +22217,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22244,20 +22244,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22271,20 +22271,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22298,20 +22298,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22325,20 +22325,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22352,20 +22352,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22379,20 +22379,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22406,20 +22406,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22433,20 +22433,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22460,20 +22460,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22487,20 +22487,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22514,20 +22514,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22541,20 +22541,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22568,20 +22568,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22595,20 +22595,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22622,20 +22622,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22649,20 +22649,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22676,20 +22676,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22703,20 +22703,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22730,20 +22730,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22757,20 +22757,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22784,20 +22784,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22811,20 +22811,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22838,20 +22838,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22865,20 +22865,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22892,20 +22892,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22919,20 +22919,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22946,20 +22946,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -22973,20 +22973,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23000,20 +23000,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23027,20 +23027,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23054,20 +23054,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23081,20 +23081,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23108,20 +23108,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23135,20 +23135,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23162,20 +23162,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23189,20 +23189,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23216,20 +23216,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23243,20 +23243,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23270,20 +23270,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23297,20 +23297,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23324,20 +23324,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23351,20 +23351,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23378,20 +23378,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23405,20 +23405,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23432,20 +23432,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23459,20 +23459,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23486,20 +23486,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23513,20 +23513,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23540,20 +23540,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23567,20 +23567,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23594,20 +23594,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23621,20 +23621,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23644,24 +23644,24 @@ abstract class ApiHelper { def getLicenseAddOns(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetLicenseAddOnsAction.class) Closure c) { def a = new org.zstack.sdk.GetLicenseAddOnsAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23675,20 +23675,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23698,24 +23698,24 @@ abstract class ApiHelper { def getLicenseInfo(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetLicenseInfoAction.class) Closure c) { def a = new org.zstack.sdk.GetLicenseInfoAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23725,24 +23725,24 @@ abstract class ApiHelper { def getLicenseRecords(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetLicenseRecordsAction.class) Closure c) { def a = new org.zstack.sdk.GetLicenseRecordsAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23756,20 +23756,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23783,20 +23783,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23810,20 +23810,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23837,20 +23837,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23864,20 +23864,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23891,20 +23891,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23914,24 +23914,24 @@ abstract class ApiHelper { def getLoginCaptcha(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetLoginCaptchaAction.class) Closure c) { def a = new org.zstack.sdk.GetLoginCaptchaAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23941,24 +23941,24 @@ abstract class ApiHelper { def getLoginProcedures(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetLoginProceduresAction.class) Closure c) { def a = new org.zstack.sdk.GetLoginProceduresAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23972,20 +23972,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -23995,24 +23995,24 @@ abstract class ApiHelper { def getManagementNodeArch(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetManagementNodeArchAction.class) Closure c) { def a = new org.zstack.sdk.GetManagementNodeArchAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24022,24 +24022,24 @@ abstract class ApiHelper { def getManagementNodeOS(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetManagementNodeOSAction.class) Closure c) { def a = new org.zstack.sdk.GetManagementNodeOSAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24053,20 +24053,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24080,20 +24080,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24107,20 +24107,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24134,20 +24134,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24161,20 +24161,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24188,20 +24188,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24215,20 +24215,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24242,20 +24242,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24269,20 +24269,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24296,20 +24296,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24323,20 +24323,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24350,20 +24350,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24377,20 +24377,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24404,20 +24404,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24431,20 +24431,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24458,20 +24458,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24485,20 +24485,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24512,20 +24512,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24539,20 +24539,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24566,20 +24566,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24593,20 +24593,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24620,20 +24620,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24647,20 +24647,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24674,20 +24674,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24701,20 +24701,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24728,20 +24728,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24755,20 +24755,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24782,20 +24782,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24809,20 +24809,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24836,20 +24836,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24863,20 +24863,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24890,20 +24890,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24917,20 +24917,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24944,20 +24944,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24971,20 +24971,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -24998,20 +24998,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25021,24 +25021,24 @@ abstract class ApiHelper { def getSSOClient(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetSSOClientAction.class) Closure c) { def a = new org.zstack.sdk.GetSSOClientAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25052,20 +25052,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25079,20 +25079,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25106,20 +25106,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25129,24 +25129,24 @@ abstract class ApiHelper { def getSignatureServerEncryptPublicKey(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetSignatureServerEncryptPublicKeyAction.class) Closure c) { def a = new org.zstack.sdk.GetSignatureServerEncryptPublicKeyAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25160,20 +25160,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25183,24 +25183,24 @@ abstract class ApiHelper { def getSupportAPIs(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetSupportAPIsAction.class) Closure c) { def a = new org.zstack.sdk.GetSupportAPIsAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25214,20 +25214,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25237,24 +25237,24 @@ abstract class ApiHelper { def getSupportedIdentityModels(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetSupportedIdentityModelsAction.class) Closure c) { def a = new org.zstack.sdk.GetSupportedIdentityModelsAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25268,20 +25268,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25295,20 +25295,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25322,20 +25322,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25345,24 +25345,24 @@ abstract class ApiHelper { def getTwoFactorAuthenticationSecret(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetTwoFactorAuthenticationSecretAction.class) Closure c) { def a = new org.zstack.sdk.GetTwoFactorAuthenticationSecretAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25372,24 +25372,24 @@ abstract class ApiHelper { def getTwoFactorAuthenticationState(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetTwoFactorAuthenticationStateAction.class) Closure c) { def a = new org.zstack.sdk.GetTwoFactorAuthenticationStateAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25403,20 +25403,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25430,20 +25430,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25457,20 +25457,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25484,20 +25484,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25511,20 +25511,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25538,20 +25538,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25565,20 +25565,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25588,24 +25588,24 @@ abstract class ApiHelper { def getVersion(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetVersionAction.class) Closure c) { def a = new org.zstack.sdk.GetVersionAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25619,20 +25619,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25646,20 +25646,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25673,20 +25673,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25700,20 +25700,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25727,20 +25727,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25754,20 +25754,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25781,20 +25781,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25808,20 +25808,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25835,20 +25835,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25862,20 +25862,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25889,20 +25889,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25916,20 +25916,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25943,20 +25943,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25970,20 +25970,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -25997,20 +25997,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26024,20 +26024,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26051,20 +26051,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26078,20 +26078,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26105,20 +26105,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26132,20 +26132,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26159,20 +26159,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26186,20 +26186,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26213,20 +26213,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26240,20 +26240,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26267,20 +26267,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26294,20 +26294,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26321,20 +26321,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26348,20 +26348,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26375,20 +26375,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26402,20 +26402,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26429,20 +26429,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26456,20 +26456,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26483,20 +26483,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26510,20 +26510,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26537,20 +26537,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26564,20 +26564,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26591,20 +26591,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26618,20 +26618,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26645,20 +26645,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26672,20 +26672,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26699,20 +26699,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26726,20 +26726,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26753,20 +26753,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26780,20 +26780,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26807,20 +26807,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26834,20 +26834,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26861,20 +26861,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26888,20 +26888,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26915,20 +26915,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26942,20 +26942,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26969,20 +26969,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -26996,20 +26996,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27023,20 +27023,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27050,20 +27050,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27077,20 +27077,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27104,20 +27104,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27131,20 +27131,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27158,20 +27158,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27185,20 +27185,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27212,20 +27212,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27239,20 +27239,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27266,20 +27266,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27289,24 +27289,24 @@ abstract class ApiHelper { def isOpensourceVersion(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.IsOpensourceVersionAction.class) Closure c) { def a = new org.zstack.sdk.IsOpensourceVersionAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27316,24 +27316,24 @@ abstract class ApiHelper { def isReadyToGo(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.IsReadyToGoAction.class) Closure c) { def a = new org.zstack.sdk.IsReadyToGoAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27347,20 +27347,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27374,20 +27374,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27401,20 +27401,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27428,20 +27428,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27455,20 +27455,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27482,20 +27482,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27509,20 +27509,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27536,20 +27536,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27563,20 +27563,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27586,24 +27586,24 @@ abstract class ApiHelper { def logIn(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LogInAction.class) Closure c) { def a = new org.zstack.sdk.LogInAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27613,24 +27613,24 @@ abstract class ApiHelper { def logInByAccount(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LogInByAccountAction.class) Closure c) { def a = new org.zstack.sdk.LogInByAccountAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27640,24 +27640,24 @@ abstract class ApiHelper { def logInByLdap(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LogInByLdapAction.class) Closure c) { def a = new org.zstack.sdk.LogInByLdapAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27667,24 +27667,24 @@ abstract class ApiHelper { def logInByUser(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LogInByUserAction.class) Closure c) { def a = new org.zstack.sdk.LogInByUserAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27694,24 +27694,24 @@ abstract class ApiHelper { def logOut(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LogOutAction.class) Closure c) { def a = new org.zstack.sdk.LogOutAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27721,24 +27721,24 @@ abstract class ApiHelper { def loginByCas(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LoginByCasAction.class) Closure c) { def a = new org.zstack.sdk.LoginByCasAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27748,24 +27748,24 @@ abstract class ApiHelper { def loginIAM2VirtualIDWithLdap(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.LoginIAM2VirtualIDWithLdapAction.class) Closure c) { def a = new org.zstack.sdk.LoginIAM2VirtualIDWithLdapAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27779,20 +27779,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27806,20 +27806,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27833,20 +27833,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27860,20 +27860,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27887,20 +27887,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27914,20 +27914,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27941,20 +27941,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27968,20 +27968,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -27995,20 +27995,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28022,20 +28022,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28049,20 +28049,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28076,20 +28076,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28103,20 +28103,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28130,20 +28130,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28157,20 +28157,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28184,20 +28184,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28211,20 +28211,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28238,20 +28238,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28265,20 +28265,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28292,20 +28292,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28319,20 +28319,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28346,20 +28346,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28373,20 +28373,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28400,20 +28400,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28427,20 +28427,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28454,20 +28454,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28481,20 +28481,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28508,20 +28508,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28535,20 +28535,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28562,20 +28562,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28589,20 +28589,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28616,20 +28616,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28643,20 +28643,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28670,20 +28670,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28697,7 +28697,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28705,14 +28705,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28726,7 +28726,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28734,14 +28734,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28755,7 +28755,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28763,14 +28763,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28784,7 +28784,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28792,14 +28792,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28813,7 +28813,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28821,14 +28821,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28842,7 +28842,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28850,14 +28850,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28871,7 +28871,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28879,14 +28879,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28900,7 +28900,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28908,14 +28908,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28929,7 +28929,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28937,14 +28937,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28958,7 +28958,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28966,14 +28966,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -28987,7 +28987,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -28995,14 +28995,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29016,7 +29016,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29024,14 +29024,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29045,7 +29045,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29053,14 +29053,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29074,7 +29074,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29082,14 +29082,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29103,7 +29103,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29111,14 +29111,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29132,7 +29132,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29140,14 +29140,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29161,7 +29161,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29169,14 +29169,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29190,7 +29190,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29198,14 +29198,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29219,7 +29219,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29227,14 +29227,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29248,7 +29248,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29256,14 +29256,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29277,7 +29277,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29285,14 +29285,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29306,7 +29306,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29314,14 +29314,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29335,7 +29335,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29343,14 +29343,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29364,7 +29364,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29372,14 +29372,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29393,7 +29393,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29401,14 +29401,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29422,7 +29422,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29430,14 +29430,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29451,7 +29451,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29459,14 +29459,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29480,7 +29480,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29488,14 +29488,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29509,7 +29509,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29517,14 +29517,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29538,7 +29538,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29546,14 +29546,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29567,7 +29567,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29575,14 +29575,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29596,7 +29596,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29604,14 +29604,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29625,7 +29625,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29633,14 +29633,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29654,7 +29654,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29662,14 +29662,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29683,7 +29683,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29691,14 +29691,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29712,7 +29712,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29720,14 +29720,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29741,7 +29741,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29749,14 +29749,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29770,7 +29770,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29778,14 +29778,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29799,7 +29799,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29807,14 +29807,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29828,7 +29828,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29836,14 +29836,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29857,7 +29857,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29865,14 +29865,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29886,7 +29886,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29894,14 +29894,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29915,7 +29915,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29923,14 +29923,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29944,7 +29944,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29952,14 +29952,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -29973,7 +29973,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -29981,14 +29981,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30002,7 +30002,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30010,14 +30010,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30031,7 +30031,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30039,14 +30039,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30060,7 +30060,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30068,14 +30068,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30089,7 +30089,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30097,14 +30097,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30118,7 +30118,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30126,14 +30126,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30147,7 +30147,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30155,14 +30155,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30176,7 +30176,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30184,14 +30184,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30205,7 +30205,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30213,14 +30213,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30234,7 +30234,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30242,14 +30242,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30263,7 +30263,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30271,14 +30271,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30292,7 +30292,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30300,14 +30300,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30321,7 +30321,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30329,14 +30329,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30350,7 +30350,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30358,14 +30358,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30379,7 +30379,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30387,14 +30387,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30408,7 +30408,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30416,14 +30416,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30437,7 +30437,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30445,14 +30445,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30466,7 +30466,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30474,14 +30474,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30495,7 +30495,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30503,14 +30503,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30524,7 +30524,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30532,14 +30532,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30553,7 +30553,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30561,14 +30561,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30582,7 +30582,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30590,14 +30590,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30611,7 +30611,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30619,14 +30619,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30640,7 +30640,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30648,14 +30648,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30669,7 +30669,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30677,14 +30677,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30698,7 +30698,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30706,14 +30706,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30727,7 +30727,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30735,14 +30735,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30756,7 +30756,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30764,14 +30764,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30785,7 +30785,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30793,14 +30793,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30814,7 +30814,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30822,14 +30822,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30843,7 +30843,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30851,14 +30851,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30872,7 +30872,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30880,14 +30880,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30901,7 +30901,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30909,14 +30909,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30930,7 +30930,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30938,14 +30938,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30959,7 +30959,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30967,14 +30967,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -30988,7 +30988,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -30996,14 +30996,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31017,7 +31017,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31025,14 +31025,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31046,7 +31046,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31054,14 +31054,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31075,7 +31075,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31083,14 +31083,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31104,7 +31104,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31112,14 +31112,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31133,7 +31133,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31141,14 +31141,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31162,7 +31162,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31170,14 +31170,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31191,7 +31191,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31199,14 +31199,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31220,7 +31220,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31228,14 +31228,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31249,7 +31249,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31257,14 +31257,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31278,7 +31278,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31286,14 +31286,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31307,7 +31307,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31315,14 +31315,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31336,7 +31336,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31344,14 +31344,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31365,7 +31365,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31373,14 +31373,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31394,7 +31394,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31402,14 +31402,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31423,7 +31423,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31431,14 +31431,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31452,7 +31452,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31460,14 +31460,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31481,7 +31481,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31489,14 +31489,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31510,7 +31510,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31518,14 +31518,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31539,7 +31539,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31547,14 +31547,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31568,7 +31568,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31576,14 +31576,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31597,7 +31597,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31605,14 +31605,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31626,7 +31626,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31634,14 +31634,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31655,7 +31655,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31663,14 +31663,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31684,7 +31684,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31692,14 +31692,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31713,7 +31713,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31721,14 +31721,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31742,7 +31742,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31750,14 +31750,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31771,7 +31771,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31779,14 +31779,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31800,7 +31800,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31808,14 +31808,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31829,7 +31829,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31837,14 +31837,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31858,7 +31858,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31866,14 +31866,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31887,7 +31887,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31895,14 +31895,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31916,7 +31916,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31924,14 +31924,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31945,7 +31945,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31953,14 +31953,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -31974,7 +31974,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -31982,14 +31982,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32003,7 +32003,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32011,14 +32011,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32032,7 +32032,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32040,14 +32040,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32061,7 +32061,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32069,14 +32069,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32090,7 +32090,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32098,14 +32098,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32119,7 +32119,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32127,14 +32127,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32148,7 +32148,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32156,14 +32156,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32177,7 +32177,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32185,14 +32185,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32206,7 +32206,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32214,14 +32214,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32235,7 +32235,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32243,14 +32243,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32264,7 +32264,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32272,14 +32272,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32293,7 +32293,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32301,14 +32301,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32322,7 +32322,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32330,14 +32330,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32351,7 +32351,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32359,14 +32359,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32380,7 +32380,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32388,14 +32388,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32409,7 +32409,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32417,14 +32417,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32438,7 +32438,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32446,14 +32446,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32467,7 +32467,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32475,14 +32475,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32496,7 +32496,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32504,14 +32504,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32525,7 +32525,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32533,14 +32533,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32554,7 +32554,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32562,14 +32562,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32583,7 +32583,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32591,14 +32591,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32612,7 +32612,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32620,14 +32620,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32641,7 +32641,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32649,14 +32649,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32670,7 +32670,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32678,14 +32678,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32699,7 +32699,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32707,14 +32707,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32728,7 +32728,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32736,14 +32736,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32757,7 +32757,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32765,14 +32765,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32786,7 +32786,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32794,14 +32794,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32815,7 +32815,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32823,14 +32823,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32844,7 +32844,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32852,14 +32852,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32873,7 +32873,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32881,14 +32881,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32902,7 +32902,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32910,14 +32910,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32931,7 +32931,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32939,14 +32939,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32960,7 +32960,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32968,14 +32968,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -32989,7 +32989,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -32997,14 +32997,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33018,7 +33018,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33026,14 +33026,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33047,7 +33047,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33055,14 +33055,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33076,7 +33076,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33084,14 +33084,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33105,7 +33105,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33113,14 +33113,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33134,7 +33134,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33142,14 +33142,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33163,7 +33163,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33171,14 +33171,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33192,7 +33192,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33200,14 +33200,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33221,7 +33221,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33229,14 +33229,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33250,7 +33250,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33258,14 +33258,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33279,7 +33279,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33287,14 +33287,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33308,7 +33308,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33316,14 +33316,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33337,7 +33337,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33345,14 +33345,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33366,7 +33366,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33374,14 +33374,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33395,7 +33395,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33403,14 +33403,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33424,7 +33424,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33432,14 +33432,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33453,7 +33453,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33461,14 +33461,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33482,7 +33482,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33490,14 +33490,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33511,7 +33511,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33519,14 +33519,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33540,7 +33540,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33548,14 +33548,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33569,7 +33569,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33577,14 +33577,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33598,7 +33598,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33606,14 +33606,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33627,7 +33627,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33635,14 +33635,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33656,7 +33656,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33664,14 +33664,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33685,7 +33685,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33693,14 +33693,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33714,7 +33714,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33722,14 +33722,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33743,7 +33743,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33751,14 +33751,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33772,7 +33772,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33780,14 +33780,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33801,7 +33801,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33809,14 +33809,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33830,7 +33830,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33838,14 +33838,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33859,7 +33859,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33867,14 +33867,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33888,7 +33888,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33896,14 +33896,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33917,7 +33917,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33925,14 +33925,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33946,7 +33946,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33954,14 +33954,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -33975,7 +33975,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -33983,14 +33983,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34004,7 +34004,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34012,14 +34012,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34033,7 +34033,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34041,14 +34041,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34062,7 +34062,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34070,14 +34070,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34091,7 +34091,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34099,14 +34099,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34120,7 +34120,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34128,14 +34128,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34149,7 +34149,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34157,14 +34157,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34178,7 +34178,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34186,14 +34186,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34207,7 +34207,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34215,14 +34215,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34236,7 +34236,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34244,14 +34244,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34265,7 +34265,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34273,14 +34273,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34294,7 +34294,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34302,14 +34302,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34323,7 +34323,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34331,14 +34331,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34352,7 +34352,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34360,14 +34360,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34381,7 +34381,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34389,14 +34389,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34410,7 +34410,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34418,14 +34418,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34439,7 +34439,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34447,14 +34447,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34468,7 +34468,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34476,14 +34476,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34497,7 +34497,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34505,14 +34505,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34526,7 +34526,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34534,14 +34534,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34555,7 +34555,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34563,14 +34563,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34584,7 +34584,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34592,14 +34592,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34613,7 +34613,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34621,14 +34621,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34642,7 +34642,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34650,14 +34650,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34671,7 +34671,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34679,14 +34679,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34700,7 +34700,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34708,14 +34708,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34729,7 +34729,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34737,14 +34737,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34758,7 +34758,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34766,14 +34766,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34787,7 +34787,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34795,14 +34795,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34816,7 +34816,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34824,14 +34824,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34845,7 +34845,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34853,14 +34853,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34874,7 +34874,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34882,14 +34882,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34903,7 +34903,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34911,14 +34911,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34932,7 +34932,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34940,14 +34940,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34961,7 +34961,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34969,14 +34969,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -34990,7 +34990,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -34998,14 +34998,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35019,7 +35019,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35027,14 +35027,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35048,7 +35048,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35056,14 +35056,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35077,7 +35077,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35085,14 +35085,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35106,7 +35106,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35114,14 +35114,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35135,7 +35135,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35143,14 +35143,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35164,7 +35164,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35172,14 +35172,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35193,7 +35193,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35201,14 +35201,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35222,7 +35222,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35230,14 +35230,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35251,7 +35251,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35259,14 +35259,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35280,7 +35280,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35288,14 +35288,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35309,7 +35309,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35317,14 +35317,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35338,7 +35338,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35346,14 +35346,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35367,7 +35367,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35375,14 +35375,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35396,7 +35396,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35404,14 +35404,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35425,7 +35425,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35433,14 +35433,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35454,7 +35454,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35462,14 +35462,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35483,7 +35483,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35491,14 +35491,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35512,7 +35512,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35520,14 +35520,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35541,7 +35541,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35549,14 +35549,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35570,7 +35570,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35578,14 +35578,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35599,7 +35599,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35607,14 +35607,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35628,7 +35628,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35636,14 +35636,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35657,7 +35657,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35665,14 +35665,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35686,7 +35686,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35694,14 +35694,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35715,7 +35715,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35723,14 +35723,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35744,7 +35744,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35752,14 +35752,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35773,7 +35773,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35781,14 +35781,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35802,7 +35802,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35810,14 +35810,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35831,7 +35831,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35839,14 +35839,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35860,7 +35860,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35868,14 +35868,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35889,7 +35889,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35897,14 +35897,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35918,7 +35918,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35926,14 +35926,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35947,7 +35947,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35955,14 +35955,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -35976,7 +35976,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -35984,14 +35984,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36005,7 +36005,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36013,14 +36013,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36034,7 +36034,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36042,14 +36042,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36063,7 +36063,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36071,14 +36071,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36092,7 +36092,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36100,14 +36100,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36121,7 +36121,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36129,14 +36129,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36150,7 +36150,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36158,14 +36158,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36179,7 +36179,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36187,14 +36187,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36208,7 +36208,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36216,14 +36216,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36237,7 +36237,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36245,14 +36245,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36266,7 +36266,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36274,14 +36274,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36295,7 +36295,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36303,14 +36303,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36324,7 +36324,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36332,14 +36332,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36353,7 +36353,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36361,14 +36361,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36382,7 +36382,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36390,14 +36390,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36411,7 +36411,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36419,14 +36419,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36440,7 +36440,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36448,14 +36448,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36469,7 +36469,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36477,14 +36477,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36498,7 +36498,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36506,14 +36506,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36527,7 +36527,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36535,14 +36535,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36556,7 +36556,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36564,14 +36564,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36585,7 +36585,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36593,14 +36593,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36614,7 +36614,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36622,14 +36622,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36643,7 +36643,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36651,14 +36651,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36672,7 +36672,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36680,14 +36680,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36701,7 +36701,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36709,14 +36709,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36730,7 +36730,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36738,14 +36738,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36759,7 +36759,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36767,14 +36767,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36788,7 +36788,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36796,14 +36796,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36817,7 +36817,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36825,14 +36825,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36846,7 +36846,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36854,14 +36854,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36875,7 +36875,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36883,14 +36883,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36904,7 +36904,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36912,14 +36912,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36933,7 +36933,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36941,14 +36941,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36962,7 +36962,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36970,14 +36970,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -36991,7 +36991,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -36999,14 +36999,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37020,7 +37020,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37028,14 +37028,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37049,7 +37049,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37057,14 +37057,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37078,7 +37078,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37086,14 +37086,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37107,7 +37107,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37115,14 +37115,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37136,7 +37136,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37144,14 +37144,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37165,7 +37165,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37173,14 +37173,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37194,7 +37194,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37202,14 +37202,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37223,7 +37223,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37231,14 +37231,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37252,7 +37252,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37260,14 +37260,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37281,7 +37281,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37289,14 +37289,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37310,7 +37310,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -37318,14 +37318,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37339,20 +37339,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37366,20 +37366,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37393,20 +37393,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37420,20 +37420,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37447,20 +37447,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37474,20 +37474,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37501,20 +37501,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37528,20 +37528,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37555,20 +37555,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37582,20 +37582,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37609,20 +37609,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37636,20 +37636,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37663,20 +37663,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37690,20 +37690,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37717,20 +37717,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37744,20 +37744,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37771,20 +37771,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37798,20 +37798,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37825,20 +37825,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37852,20 +37852,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37879,20 +37879,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37906,20 +37906,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37933,20 +37933,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37960,20 +37960,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -37987,20 +37987,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38014,20 +38014,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38037,24 +38037,24 @@ abstract class ApiHelper { def refreshCaptcha(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.RefreshCaptchaAction.class) Closure c) { def a = new org.zstack.sdk.RefreshCaptchaAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38068,20 +38068,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38095,20 +38095,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38122,20 +38122,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38149,20 +38149,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38176,20 +38176,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38203,20 +38203,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38230,20 +38230,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38257,20 +38257,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38284,20 +38284,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38311,20 +38311,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38338,20 +38338,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38365,20 +38365,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38392,20 +38392,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38419,20 +38419,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38446,20 +38446,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38473,20 +38473,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38500,20 +38500,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38527,20 +38527,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38554,20 +38554,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38581,20 +38581,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38608,20 +38608,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38635,20 +38635,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38662,20 +38662,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38689,20 +38689,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38716,20 +38716,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38743,20 +38743,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38770,20 +38770,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38797,20 +38797,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38824,20 +38824,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38851,20 +38851,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38878,20 +38878,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38905,20 +38905,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38932,20 +38932,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38959,20 +38959,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -38986,20 +38986,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39013,20 +39013,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39040,20 +39040,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39067,20 +39067,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39094,20 +39094,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39121,20 +39121,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39148,20 +39148,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39175,20 +39175,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39202,20 +39202,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39229,20 +39229,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39256,20 +39256,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39283,20 +39283,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39310,20 +39310,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39337,20 +39337,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39364,20 +39364,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39391,20 +39391,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39418,20 +39418,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39445,20 +39445,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39472,20 +39472,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39499,20 +39499,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39526,20 +39526,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39553,20 +39553,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39580,20 +39580,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39607,20 +39607,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39634,20 +39634,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39661,20 +39661,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39688,20 +39688,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39715,20 +39715,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39742,20 +39742,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39769,20 +39769,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39796,20 +39796,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39823,20 +39823,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39850,20 +39850,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39877,20 +39877,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39904,20 +39904,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39931,20 +39931,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39958,20 +39958,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -39985,20 +39985,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40012,20 +40012,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40039,20 +40039,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40066,20 +40066,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40093,20 +40093,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40120,20 +40120,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40147,20 +40147,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40174,20 +40174,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40201,20 +40201,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40228,20 +40228,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40255,20 +40255,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40282,20 +40282,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40309,20 +40309,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40336,20 +40336,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40363,20 +40363,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40390,20 +40390,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40417,20 +40417,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40444,20 +40444,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40471,20 +40471,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40498,20 +40498,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40525,20 +40525,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40552,20 +40552,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40579,20 +40579,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40606,20 +40606,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40633,20 +40633,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40660,20 +40660,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40687,20 +40687,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40714,20 +40714,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40741,20 +40741,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40768,20 +40768,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40795,20 +40795,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40822,20 +40822,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40849,20 +40849,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40876,20 +40876,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40903,20 +40903,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40930,20 +40930,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40957,20 +40957,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -40984,20 +40984,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41011,20 +41011,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41038,20 +41038,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41065,20 +41065,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41092,20 +41092,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41119,20 +41119,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41146,20 +41146,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41173,20 +41173,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41200,20 +41200,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41227,20 +41227,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41254,20 +41254,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41281,20 +41281,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41308,20 +41308,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41335,20 +41335,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41362,20 +41362,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41389,20 +41389,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41416,20 +41416,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41443,20 +41443,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41470,20 +41470,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41497,20 +41497,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41524,20 +41524,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41551,20 +41551,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41578,20 +41578,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41605,20 +41605,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41632,20 +41632,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41659,20 +41659,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41686,20 +41686,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41713,20 +41713,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41740,20 +41740,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41767,20 +41767,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41794,20 +41794,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41821,20 +41821,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41848,20 +41848,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41875,20 +41875,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41902,20 +41902,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41929,20 +41929,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41956,20 +41956,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -41983,20 +41983,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42010,20 +42010,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42037,20 +42037,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42064,20 +42064,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42091,20 +42091,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42118,20 +42118,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42145,20 +42145,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42172,20 +42172,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42199,20 +42199,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42226,20 +42226,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42253,20 +42253,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42280,20 +42280,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42307,20 +42307,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42334,20 +42334,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42361,20 +42361,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42388,20 +42388,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42415,20 +42415,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42442,20 +42442,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42469,20 +42469,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42496,20 +42496,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42523,20 +42523,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42550,20 +42550,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42573,24 +42573,24 @@ abstract class ApiHelper { def tokenIntrospection(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.TokenIntrospectionAction.class) Closure c) { def a = new org.zstack.sdk.TokenIntrospectionAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42604,20 +42604,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42631,20 +42631,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42658,20 +42658,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42685,20 +42685,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42712,20 +42712,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42739,20 +42739,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42766,20 +42766,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42793,20 +42793,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42820,20 +42820,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42847,20 +42847,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42874,20 +42874,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42901,20 +42901,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42928,20 +42928,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42955,20 +42955,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -42982,20 +42982,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43009,20 +43009,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43036,20 +43036,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43063,20 +43063,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43090,20 +43090,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43117,20 +43117,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43144,20 +43144,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43171,20 +43171,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43198,20 +43198,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43225,20 +43225,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43252,20 +43252,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43279,20 +43279,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43306,20 +43306,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43333,20 +43333,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43360,20 +43360,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43387,20 +43387,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43414,20 +43414,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43441,20 +43441,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43468,20 +43468,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43495,20 +43495,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43522,20 +43522,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43549,20 +43549,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43576,20 +43576,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43603,20 +43603,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43630,20 +43630,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43657,20 +43657,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43684,20 +43684,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43711,20 +43711,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43738,20 +43738,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43765,20 +43765,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43792,20 +43792,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43819,20 +43819,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43846,20 +43846,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43873,20 +43873,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43900,20 +43900,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43927,20 +43927,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43954,20 +43954,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -43981,20 +43981,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44008,20 +44008,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44035,20 +44035,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44062,20 +44062,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44089,20 +44089,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44116,20 +44116,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44143,20 +44143,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44170,20 +44170,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44197,20 +44197,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44224,20 +44224,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44251,20 +44251,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44278,20 +44278,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44305,20 +44305,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44332,20 +44332,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44359,20 +44359,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44386,20 +44386,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44413,20 +44413,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44440,20 +44440,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44467,20 +44467,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44494,20 +44494,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44521,20 +44521,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44548,20 +44548,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44575,20 +44575,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44602,20 +44602,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44629,20 +44629,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44656,20 +44656,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44683,20 +44683,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44710,20 +44710,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44737,20 +44737,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44764,20 +44764,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44791,20 +44791,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44818,20 +44818,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44845,20 +44845,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44872,20 +44872,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44899,20 +44899,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44926,20 +44926,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44953,20 +44953,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -44980,20 +44980,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45007,20 +45007,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45034,20 +45034,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45061,20 +45061,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45088,20 +45088,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45115,20 +45115,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45142,20 +45142,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45169,20 +45169,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45196,20 +45196,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45223,20 +45223,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45250,20 +45250,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45277,20 +45277,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45304,20 +45304,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45331,20 +45331,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45358,20 +45358,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45385,20 +45385,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45412,20 +45412,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45439,20 +45439,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45466,20 +45466,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45493,20 +45493,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45520,20 +45520,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45547,20 +45547,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45574,20 +45574,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45601,20 +45601,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45628,20 +45628,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45655,20 +45655,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45682,20 +45682,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45709,20 +45709,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45736,20 +45736,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45763,20 +45763,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45790,20 +45790,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45817,20 +45817,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45844,20 +45844,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45871,20 +45871,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45898,20 +45898,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45925,20 +45925,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45952,20 +45952,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -45979,20 +45979,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46006,20 +46006,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46033,20 +46033,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46060,20 +46060,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46087,20 +46087,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46114,20 +46114,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46141,20 +46141,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46168,20 +46168,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46195,20 +46195,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46222,20 +46222,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46249,20 +46249,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46276,20 +46276,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46303,20 +46303,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46330,20 +46330,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46357,20 +46357,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46384,20 +46384,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46411,20 +46411,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46438,20 +46438,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46465,20 +46465,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46492,20 +46492,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46519,20 +46519,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46546,20 +46546,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46573,20 +46573,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46600,20 +46600,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46627,20 +46627,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46654,20 +46654,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46681,20 +46681,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46708,20 +46708,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46735,20 +46735,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46762,20 +46762,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46789,20 +46789,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46816,20 +46816,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46843,20 +46843,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46870,20 +46870,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46897,20 +46897,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46924,20 +46924,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46951,20 +46951,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -46978,20 +46978,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47005,20 +47005,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47032,20 +47032,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47059,20 +47059,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47086,20 +47086,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47113,20 +47113,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47140,20 +47140,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47167,20 +47167,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47194,20 +47194,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47221,20 +47221,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47248,20 +47248,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47275,20 +47275,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47302,20 +47302,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47329,20 +47329,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47356,20 +47356,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47383,20 +47383,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47410,20 +47410,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47437,20 +47437,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47464,20 +47464,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47491,20 +47491,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47518,20 +47518,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47545,20 +47545,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47572,20 +47572,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47599,20 +47599,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47626,20 +47626,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47653,20 +47653,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47680,20 +47680,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47707,20 +47707,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47734,20 +47734,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47761,20 +47761,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47788,20 +47788,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47815,20 +47815,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47842,20 +47842,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47869,20 +47869,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47896,20 +47896,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47923,20 +47923,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47950,20 +47950,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -47977,20 +47977,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48004,20 +48004,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48031,20 +48031,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48058,20 +48058,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48085,20 +48085,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48112,20 +48112,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48139,20 +48139,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48166,20 +48166,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48193,20 +48193,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48220,20 +48220,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48247,20 +48247,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48274,20 +48274,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48301,20 +48301,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48328,20 +48328,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48355,20 +48355,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48382,20 +48382,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48409,20 +48409,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48436,20 +48436,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48463,20 +48463,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48490,20 +48490,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48517,20 +48517,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48544,20 +48544,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48571,20 +48571,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48598,20 +48598,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48621,24 +48621,24 @@ abstract class ApiHelper { def validatePassword(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.ValidatePasswordAction.class) Closure c) { def a = new org.zstack.sdk.ValidatePasswordAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48652,20 +48652,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48679,20 +48679,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48702,24 +48702,24 @@ abstract class ApiHelper { def validateSession(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.ValidateSessionAction.class) Closure c) { def a = new org.zstack.sdk.ValidateSessionAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48733,20 +48733,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48760,20 +48760,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48787,20 +48787,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48814,20 +48814,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48841,20 +48841,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48868,20 +48868,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48895,20 +48895,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48922,20 +48922,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48949,7 +48949,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -48957,14 +48957,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -48978,20 +48978,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49005,20 +49005,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49032,20 +49032,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49059,20 +49059,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49086,20 +49086,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49113,20 +49113,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49140,20 +49140,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49167,20 +49167,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49194,20 +49194,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49221,7 +49221,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -49229,14 +49229,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49250,7 +49250,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -49258,14 +49258,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49279,7 +49279,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -49287,14 +49287,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49308,7 +49308,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -49316,14 +49316,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49337,20 +49337,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49364,20 +49364,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49391,20 +49391,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49418,20 +49418,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49445,20 +49445,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49472,20 +49472,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49499,20 +49499,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49526,20 +49526,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49553,20 +49553,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49580,20 +49580,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49607,20 +49607,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49634,20 +49634,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49661,20 +49661,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49688,20 +49688,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49715,20 +49715,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49742,20 +49742,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49769,20 +49769,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49796,20 +49796,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49823,20 +49823,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49850,20 +49850,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49877,20 +49877,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49904,20 +49904,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49931,20 +49931,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49958,20 +49958,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -49985,20 +49985,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50012,20 +50012,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50039,20 +50039,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50066,20 +50066,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50093,20 +50093,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50120,20 +50120,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50147,20 +50147,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50174,20 +50174,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50201,20 +50201,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50228,20 +50228,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50255,20 +50255,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50282,20 +50282,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50309,20 +50309,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50336,20 +50336,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50363,20 +50363,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50390,20 +50390,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50417,20 +50417,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50444,20 +50444,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50471,20 +50471,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50498,20 +50498,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50525,20 +50525,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50548,24 +50548,24 @@ abstract class ApiHelper { def loginIAM2VirtualID(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.iam2.api.LoginIAM2VirtualIDAction.class) Closure c) { def a = new org.zstack.sdk.iam2.api.LoginIAM2VirtualIDAction() - + c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50579,7 +50579,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50587,14 +50587,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50608,7 +50608,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50616,14 +50616,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50637,7 +50637,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50645,14 +50645,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50666,7 +50666,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50674,14 +50674,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50695,7 +50695,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50703,14 +50703,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50724,7 +50724,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50732,14 +50732,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50753,7 +50753,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50761,14 +50761,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50782,7 +50782,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50790,14 +50790,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50811,7 +50811,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50819,14 +50819,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50840,7 +50840,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50848,14 +50848,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50869,7 +50869,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50877,14 +50877,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50898,7 +50898,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -50906,14 +50906,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50927,20 +50927,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50954,20 +50954,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -50981,20 +50981,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51008,20 +51008,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51035,20 +51035,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51062,20 +51062,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51089,20 +51089,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51116,20 +51116,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51143,20 +51143,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51170,20 +51170,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51197,20 +51197,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51224,20 +51224,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51251,20 +51251,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51278,20 +51278,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51305,20 +51305,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51332,20 +51332,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51359,20 +51359,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51386,20 +51386,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51413,20 +51413,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51440,20 +51440,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51467,20 +51467,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51494,20 +51494,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51521,20 +51521,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51548,20 +51548,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51575,20 +51575,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51602,20 +51602,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51629,20 +51629,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51656,20 +51656,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51683,20 +51683,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51710,20 +51710,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51737,20 +51737,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51764,20 +51764,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51791,20 +51791,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51818,20 +51818,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51845,20 +51845,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51872,20 +51872,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51899,20 +51899,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51926,20 +51926,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51953,20 +51953,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -51980,20 +51980,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52007,20 +52007,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52034,7 +52034,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52042,14 +52042,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52063,20 +52063,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52090,20 +52090,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52117,20 +52117,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52144,20 +52144,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52171,20 +52171,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52198,20 +52198,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52225,7 +52225,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52233,14 +52233,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52254,20 +52254,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52281,20 +52281,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52308,20 +52308,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52335,20 +52335,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52362,20 +52362,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52389,20 +52389,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52416,20 +52416,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52443,20 +52443,105 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + + def createL2GeneveNetwork(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.CreateL2GeneveNetworkAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.CreateL2GeneveNetworkAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + + return out + } else { + return errorOut(a.call()) + } + } + + + def queryZnsTenant(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.QueryZnsTenantAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.QueryZnsTenantAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + a.conditions = a.conditions.collect { it.toString() } + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + + return out + } else { + return errorOut(a.call()) + } + } + + + def queryZnsTenantRouter(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.QueryZnsTenantRouterAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.QueryZnsTenantRouterAction() + a.sessionId = Test.currentEnvSpec?.session?.uuid + c.resolveStrategy = Closure.OWNER_FIRST + c.delegate = a + c() + + a.conditions = a.conditions.collect { it.toString() } + + + if (System.getProperty("apipath") != null) { + if (a.apiId == null) { + a.apiId = Platform.uuid + } + + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(a.call()) + def path = tracker.getApiPath() + if (!path.isEmpty()) { + Test.apiPaths[a.class.name] = path.join(" --->\n") + } + return out } else { return errorOut(a.call()) @@ -52470,20 +52555,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52497,20 +52582,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52524,20 +52609,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52551,20 +52636,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52578,20 +52663,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52605,20 +52690,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52632,20 +52717,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52659,20 +52744,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52686,7 +52771,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52694,14 +52779,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52715,7 +52800,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52723,14 +52808,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52744,7 +52829,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52752,14 +52837,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52773,7 +52858,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52781,14 +52866,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52802,7 +52887,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -52810,14 +52895,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52831,20 +52916,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52858,20 +52943,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52885,20 +52970,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52912,20 +52997,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52939,20 +53024,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52966,20 +53051,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -52993,20 +53078,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53020,20 +53105,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53047,20 +53132,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53074,20 +53159,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53101,7 +53186,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53109,14 +53194,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53130,7 +53215,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53138,14 +53223,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53159,20 +53244,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53186,20 +53271,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53213,20 +53298,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53240,20 +53325,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53267,20 +53352,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53294,20 +53379,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53321,20 +53406,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53348,20 +53433,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53375,7 +53460,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53383,14 +53468,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53404,7 +53489,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53412,14 +53497,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53433,7 +53518,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53441,14 +53526,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53462,20 +53547,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53489,20 +53574,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53516,20 +53601,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53543,20 +53628,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53570,20 +53655,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53597,7 +53682,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53605,14 +53690,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53626,7 +53711,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53634,14 +53719,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53655,20 +53740,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53682,20 +53767,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53709,20 +53794,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53736,20 +53821,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53763,20 +53848,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53790,7 +53875,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53798,14 +53883,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53819,20 +53904,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53846,20 +53931,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53873,20 +53958,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53900,7 +53985,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -53908,14 +53993,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53929,20 +54014,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53956,20 +54041,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53983,20 +54068,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54010,7 +54095,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54018,14 +54103,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54039,20 +54124,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54066,20 +54151,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54093,7 +54178,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54101,14 +54186,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54122,20 +54207,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54149,20 +54234,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54176,20 +54261,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54203,7 +54288,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54211,14 +54296,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54232,20 +54317,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54259,20 +54344,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54286,20 +54371,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54313,20 +54398,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54340,7 +54425,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54348,14 +54433,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54369,7 +54454,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54377,14 +54462,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54398,20 +54483,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54425,20 +54510,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54452,20 +54537,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54479,20 +54564,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54506,20 +54591,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54533,20 +54618,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54560,20 +54645,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54587,20 +54672,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54614,20 +54699,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54641,20 +54726,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54668,7 +54753,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54676,14 +54761,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54697,7 +54782,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54705,14 +54790,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54726,7 +54811,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54734,14 +54819,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54755,7 +54840,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54763,14 +54848,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54784,7 +54869,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54792,14 +54877,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54813,7 +54898,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54821,14 +54906,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54842,7 +54927,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -54850,14 +54935,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54871,20 +54956,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54898,20 +54983,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54925,20 +55010,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54952,20 +55037,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -54979,20 +55064,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55006,20 +55091,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55033,20 +55118,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55060,20 +55145,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55087,20 +55172,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55114,20 +55199,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55141,20 +55226,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55168,20 +55253,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55195,20 +55280,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55222,20 +55307,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55249,20 +55334,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55276,20 +55361,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55303,20 +55388,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55330,20 +55415,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55357,7 +55442,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55365,14 +55450,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55386,7 +55471,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55394,14 +55479,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55415,7 +55500,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55423,14 +55508,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55444,20 +55529,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55471,20 +55556,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55498,20 +55583,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55525,20 +55610,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55552,20 +55637,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55579,20 +55664,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55606,20 +55691,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55633,20 +55718,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55660,20 +55745,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55687,20 +55772,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55714,20 +55799,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55741,20 +55826,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55768,20 +55853,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55795,7 +55880,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55803,14 +55888,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55824,7 +55909,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55832,14 +55917,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55853,20 +55938,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55880,20 +55965,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55907,20 +55992,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55934,7 +56019,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -55942,14 +56027,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55963,20 +56048,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -55990,20 +56075,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56017,7 +56102,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56025,14 +56110,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56046,20 +56131,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56073,20 +56158,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56100,20 +56185,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56127,20 +56212,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56154,20 +56239,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56181,20 +56266,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56208,20 +56293,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56235,20 +56320,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56262,20 +56347,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56289,20 +56374,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56316,20 +56401,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56343,20 +56428,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56370,20 +56455,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56397,20 +56482,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56424,20 +56509,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56451,20 +56536,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56478,20 +56563,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56505,7 +56590,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56513,14 +56598,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56534,7 +56619,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56542,14 +56627,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56563,7 +56648,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56571,14 +56656,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56592,7 +56677,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56600,14 +56685,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56621,7 +56706,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56629,14 +56714,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56650,20 +56735,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56677,20 +56762,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56704,20 +56789,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56731,20 +56816,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56758,20 +56843,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56785,20 +56870,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56812,20 +56897,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56839,20 +56924,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56866,20 +56951,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56893,20 +56978,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56920,20 +57005,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56947,20 +57032,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56974,20 +57059,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57001,7 +57086,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57009,14 +57094,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57030,7 +57115,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57038,14 +57123,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57059,7 +57144,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57067,14 +57152,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57088,7 +57173,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57096,14 +57181,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57117,7 +57202,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57125,14 +57210,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57146,7 +57231,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57154,14 +57239,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57175,7 +57260,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57183,14 +57268,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57204,7 +57289,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57212,14 +57297,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57233,20 +57318,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57260,20 +57345,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57287,20 +57372,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57314,20 +57399,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57341,20 +57426,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57368,20 +57453,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57395,20 +57480,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57422,7 +57507,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57430,14 +57515,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57451,20 +57536,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57478,20 +57563,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57505,20 +57590,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57532,20 +57617,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57559,7 +57644,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57567,14 +57652,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57588,7 +57673,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57596,14 +57681,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57617,7 +57702,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -57625,14 +57710,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57646,20 +57731,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -57673,20 +57758,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) diff --git a/testlib/src/main/java/org/zstack/testlib/SdnControllerSpec.groovy b/testlib/src/main/java/org/zstack/testlib/SdnControllerSpec.groovy index 25b24d7f412..cb05661c4f5 100644 --- a/testlib/src/main/java/org/zstack/testlib/SdnControllerSpec.groovy +++ b/testlib/src/main/java/org/zstack/testlib/SdnControllerSpec.groovy @@ -1,8 +1,10 @@ package org.zstack.testlib +import org.springframework.http.HttpEntity import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity import org.zstack.sdk.SdnControllerInventory +import org.zstack.utils.gson.JSONObjectUtil import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands.LoginReply import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands.LoginRsp @@ -15,7 +17,6 @@ import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands.GetH3cTenantsRsp import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands.H3cTenantStruct import org.zstack.sdnController.h3cVcfc.H3cVcfcCommands.GetH3cTeamLederIpReply import org.zstack.sdnController.h3cVcfc.H3cVcfcV2Commands -import org.springframework.http.HttpEntity import org.zstack.sugonSdnController.controller.SugonSdnControllerConstant import org.zstack.sugonSdnController.controller.api.ApiSerializer import org.zstack.sugonSdnController.controller.api.TfCommands @@ -58,9 +59,9 @@ class SdnControllerSpec extends Spec implements HasSession { } postCreate { - inventory = querySdnController { + inventory = JSONObjectUtil.rehashObject(querySdnController { conditions=["uuid=${inventory.uuid}".toString()] - }[0] + }[0], SdnControllerInventory.class) } return id(name, inventory.uuid) diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index 31d73e6f33a..ace4537921c 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12023,6 +12023,114 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_OVN_10084 = "ORG_ZSTACK_NETWORK_OVN_10084"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10000 = "ORG_ZSTACK_NETWORK_ZNS_10000"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10001 = "ORG_ZSTACK_NETWORK_ZNS_10001"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10002 = "ORG_ZSTACK_NETWORK_ZNS_10002"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10003 = "ORG_ZSTACK_NETWORK_ZNS_10003"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10004 = "ORG_ZSTACK_NETWORK_ZNS_10004"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10005 = "ORG_ZSTACK_NETWORK_ZNS_10005"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10006 = "ORG_ZSTACK_NETWORK_ZNS_10006"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10007 = "ORG_ZSTACK_NETWORK_ZNS_10007"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10008 = "ORG_ZSTACK_NETWORK_ZNS_10008"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10009 = "ORG_ZSTACK_NETWORK_ZNS_10009"; + + // ZNS error-code semantic mapping: + // 10000 ZNS async API returned unexpected status (not 200/202) + // 10001 ZNS API returned HTTP error status + // 10002 ZNS API I/O/connection error + // 10003 ZNS API unexpected exception + // 10004 ZNS sync GET failed (without query params) + // 10005 ZNS sync GET failed (with query params) + // 10006 failed to resolve ZNS SdnController for an L2 network + // 10007 failed to resolve ZNS SdnControllerL2 for an L2 network + // 10008 reserved + // 10009 VM NIC cannot change between ZNS and non-ZNS networks + // 10010 unsupported API for ZNS controller + // 10011 ZNS L2 only supports L3BasicNetwork + // 10012 duplicate ZNS L2NoVlan creation under same controller + // 10013 invalid ZNS L2 target type in create/change-vlan flow + // 10014 duplicate/invalid Geneve change (or non-Geneve target from Geneve) + // 10015 VM NIC cannot move across different ZNS controllers + // 10016 duplicate Geneve VNI under same controller + // 10017 non-ZNS L2 cannot change to Geneve type + // 10018 ZNS non-Geneve L2 cannot change to L2GeneveNetwork + // 10019 only one L3 network is allowed per ZNS L2 network + public static final String ORG_ZSTACK_NETWORK_ZNS_10010 = "ORG_ZSTACK_NETWORK_ZNS_10010"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10011 = "ORG_ZSTACK_NETWORK_ZNS_10011"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10012 = "ORG_ZSTACK_NETWORK_ZNS_10012"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10013 = "ORG_ZSTACK_NETWORK_ZNS_10013"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10014 = "ORG_ZSTACK_NETWORK_ZNS_10014"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10015 = "ORG_ZSTACK_NETWORK_ZNS_10015"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10016 = "ORG_ZSTACK_NETWORK_ZNS_10016"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10017 = "ORG_ZSTACK_NETWORK_ZNS_10017"; + + public static final String ORG_ZSTACK_NETWORK_ZNS_10018 = "ORG_ZSTACK_NETWORK_ZNS_10018"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10019 = "ORG_ZSTACK_NETWORK_ZNS_10019"; + + // ZNS DHCP + // 10020 ZNS DHCP enable/check failed due to invalid L3/segment state + // 10021 ZNS compute manager not found on controller + // 10022 ZNS reconnect: compute manager UUID missing + // 10023 reserved + // 10024 unsupported legacy SdnControllerDhcp path for ZNS L3 + public static final String ORG_ZSTACK_NETWORK_ZNS_10020 = "ORG_ZSTACK_NETWORK_ZNS_10020"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10021 = "ORG_ZSTACK_NETWORK_ZNS_10021"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10022 = "ORG_ZSTACK_NETWORK_ZNS_10022"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10023 = "ORG_ZSTACK_NETWORK_ZNS_10023"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10024 = "ORG_ZSTACK_NETWORK_ZNS_10024"; + + // ZNS Wave 4 operation error codes + // 10025 ZNS create segment failed + // 10026 ZNS patch segment failed (e.g. CIDR/gateway sync) + // 10027 ZNS attach router to segment failed + // 10028 ZNS detach router from segment failed + // 10029 ZNS patch DHCP config on segment failed + // 10030 ZNS patch segment MTU failed + // 10031 duplicate IpRange ip_version on same ZNS L3 network + // 10032 ZNS L2 has sub-resources, cannot delete + // 10033 ZNS VPC L3 missing znsTenantRouterUuid system tag + public static final String ORG_ZSTACK_NETWORK_ZNS_10025 = "ORG_ZSTACK_NETWORK_ZNS_10025"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10026 = "ORG_ZSTACK_NETWORK_ZNS_10026"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10027 = "ORG_ZSTACK_NETWORK_ZNS_10027"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10028 = "ORG_ZSTACK_NETWORK_ZNS_10028"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10029 = "ORG_ZSTACK_NETWORK_ZNS_10029"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10030 = "ORG_ZSTACK_NETWORK_ZNS_10030"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10031 = "ORG_ZSTACK_NETWORK_ZNS_10031"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10032 = "ORG_ZSTACK_NETWORK_ZNS_10032"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10033 = "ORG_ZSTACK_NETWORK_ZNS_10033"; + // 10034 ZNS API returned HTTP 409 Conflict (sub-resources still exist) + public static final String ORG_ZSTACK_NETWORK_ZNS_10034 = "ORG_ZSTACK_NETWORK_ZNS_10034"; + // 10035 ZNS returned an IP version that Cloud did not allocate + // 10036 ZNS returned IP does not match Cloud allocated IP + // 10037 ZNS returned IP is outside Cloud L3 IP range + // 10038 ZNS returned IP is already used by another NIC + // 10039 ZNS did not return any IPs + // 10040 ZNS did not return Cloud allocated IP version + // 10041 VM NIC MAC update is not supported for ZNS NICs + public static final String ORG_ZSTACK_NETWORK_ZNS_10035 = "ORG_ZSTACK_NETWORK_ZNS_10035"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10036 = "ORG_ZSTACK_NETWORK_ZNS_10036"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10037 = "ORG_ZSTACK_NETWORK_ZNS_10037"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10038 = "ORG_ZSTACK_NETWORK_ZNS_10038"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10039 = "ORG_ZSTACK_NETWORK_ZNS_10039"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10040 = "ORG_ZSTACK_NETWORK_ZNS_10040"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10041 = "ORG_ZSTACK_NETWORK_ZNS_10041"; + public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; public static final String ORG_ZSTACK_ALIYUN_NAS_STORAGE_PRIMARY_IMAGESTORE_10000 = "ORG_ZSTACK_ALIYUN_NAS_STORAGE_PRIMARY_IMAGESTORE_10000"; @@ -15452,6 +15560,12 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_SDNCONTROLLER_10030 = "ORG_ZSTACK_SDNCONTROLLER_10030"; + public static final String ORG_ZSTACK_SDNCONTROLLER_10031 = "ORG_ZSTACK_SDNCONTROLLER_10031"; + + public static final String ORG_ZSTACK_SDNCONTROLLER_10032 = "ORG_ZSTACK_SDNCONTROLLER_10032"; + + public static final String ORG_ZSTACK_SDNCONTROLLER_10033 = "ORG_ZSTACK_SDNCONTROLLER_10033"; + public static final String ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_ZSV_SNAPSHOT_10000 = "ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_ZSV_SNAPSHOT_10000"; public static final String ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_ZSV_SNAPSHOT_10001 = "ORG_ZSTACK_TEST_INTEGRATION_PREMIUM_ZSV_SNAPSHOT_10001"; From 0848933c4ca80fba43d959417bac6aa93581e41e Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Fri, 24 Apr 2026 09:43:03 +0800 Subject: [PATCH 37/56] [iam2]: add ZIAM provider name constant (P1) Resolves: ZCF-3009 Change-Id: I734d872432d519d4a04fade5d24a9eee040f160f --- .../java/org/zstack/abstraction/sso/OAuth2PluginConstants.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java b/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java index 087bbd5129e..70f13ad02b8 100644 --- a/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java +++ b/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java @@ -46,4 +46,6 @@ public interface OAuth2PluginConstants { String ZF_PROVIDER_NAME = "zf"; String ALI_PROVIDER_NAME = "ali_idaas_private"; String MAX_KEY_PROVIDER_NAME = "max_key"; + String ZIAM_PROVIDER_NAME = "ziam"; + String LOGIN_TYPE_IAM2_ROPC = "iam2_ropc"; } From 11443667b38c05782c7ae8ebb9294ea5510648de Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Sat, 25 Apr 2026 01:24:35 +0800 Subject: [PATCH 38/56] [iam2]: add ZIAM_DEFAULT_SCOPE constant Add ZIAM_DEFAULT_SCOPE = "openid profile email" to OAuth2PluginConstants for use by IAM2RopcLoginBackend instead of hardcoded string. Resolves: ZCF-3009 Change-Id: I7638e4bb3231fa75b1ad3460863040d43970d9f5 --- .../java/org/zstack/abstraction/sso/OAuth2PluginConstants.java | 1 + 1 file changed, 1 insertion(+) diff --git a/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java b/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java index 70f13ad02b8..1c89436ae41 100644 --- a/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java +++ b/abstraction/src/main/java/org/zstack/abstraction/sso/OAuth2PluginConstants.java @@ -48,4 +48,5 @@ public interface OAuth2PluginConstants { String MAX_KEY_PROVIDER_NAME = "max_key"; String ZIAM_PROVIDER_NAME = "ziam"; String LOGIN_TYPE_IAM2_ROPC = "iam2_ropc"; + String ZIAM_DEFAULT_SCOPE = "openid profile email"; } From f34f0b505a1784b9dd6742e2f11cb03c782aeb69 Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Sun, 8 Mar 2026 23:58:36 -0700 Subject: [PATCH 39/56] [sdk]: fix Go SDK generator for Delete-via-POST and Get patterns 1. Delete-via-POST: detect actionType=="Delete" with httpMethod==POST and generate PostWithRespKey with empty responseKey instead of Post with hardcoded "inventory" key. Handles URL placeholders via buildFullPath. 2. Get-with-inventories: when reply has "inventories" (List) instead of "inventory" (single), use the response struct directly with GetWithRespKey and empty responseKey to unmarshal the full response. Resolves: ZCF-0 Change-Id: I708245d6bd49172fd27488a506dec57d2bfd73ee --- .../resources/scripts/GoApiTemplate.groovy | 87 +++++++++++++++++-- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git a/rest/src/main/resources/scripts/GoApiTemplate.groovy b/rest/src/main/resources/scripts/GoApiTemplate.groovy index fefe945ba3c..43684decfc5 100644 --- a/rest/src/main/resources/scripts/GoApiTemplate.groovy +++ b/rest/src/main/resources/scripts/GoApiTemplate.groovy @@ -431,8 +431,12 @@ class GoApiTemplate implements SdkTemplate { // First check HTTP method from annotation, then fall back to actionType-based logic if (httpMethod == "POST") { - // POST operations (Create/Add) - builder.append(generateCreateMethod(apiPath, viewStructName, false, responseStructName, goInventoryFieldName)) + // POST operations: Delete-via-POST needs special handling + if (actionType == "Delete") { + builder.append(generateDeleteViaPostMethod(apiPath, responseStructName)) + } else { + builder.append(generateCreateMethod(apiPath, viewStructName, false, responseStructName, goInventoryFieldName)) + } } else if (httpMethod == "GET") { // GET operations (Get/Query) builder.append(generateGetMethod(apiPath, viewStructName, unwrapForGet, responseStructName, goInventoryFieldName)) @@ -677,13 +681,17 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } } else { + // Not unwrapping: use responseStructName when it differs from viewStructName + // This handles cases like GetSSOClient where response is {"inventories": [...]} + // and the response wrapper (GetSSOClientView) must be used instead of the element type (SSOClientInventoryView) + String actualViewStruct = (viewStructName != responseStructName) ? responseStructName : viewStructName if (!useSpec) { // Check if there are any placeholders if (placeholders.size() == 0) { // No placeholder: no uuid parameter needed // Use GetWithRespKey with empty responseKey to parse whole response - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { -\tvar resp view.${viewStructName} + return """func (cli *ZSClient) ${clzName}() (*view.${actualViewStruct}, error) { +\tvar resp view.${actualViewStruct} \tif err := cli.GetWithRespKey("${cleanPath}", "", "", nil, &resp); err != nil { \t\treturn nil, err \t} @@ -692,8 +700,8 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } else { // Single placeholder: use GetWithRespKey with uuid - return """func (cli *ZSClient) ${clzName}(uuid string) (*view.${viewStructName}, error) { -\tvar resp view.${viewStructName} + return """func (cli *ZSClient) ${clzName}(uuid string) (*view.${actualViewStruct}, error) { +\tvar resp view.${actualViewStruct} \tif err := cli.GetWithRespKey("${cleanPath}", uuid, "", nil, &resp); err != nil { \t\treturn nil, err \t} @@ -709,8 +717,8 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}) (*view.${viewStructName}, error) { -\tvar resp view.${viewStructName} + return """func (cli *ZSClient) ${clzName}(${params}) (*view.${actualViewStruct}, error) { +\tvar resp view.${actualViewStruct} \terr := cli.GetWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", nil, &resp) \tif err != nil { \t\treturn nil, err @@ -938,6 +946,69 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } } + /** + * Generate Delete-via-POST method. + * Some Delete APIs use POST instead of DELETE (e.g. APIDeleteSSOClientMsg). + * These return an Event with {"success": true} and no "inventory" key, + * so we must use PostWithRespKey with empty responseKey to avoid "key not found". + * + * Handles URL placeholders (e.g. /cdp-task/{uuid}/data) by extracting them + * as function parameters and building the full path with fmt.Sprintf. + */ + private String generateDeleteViaPostMethod(String apiPath, String responseStructName) { + boolean hasParams = hasApiParams() + def placeholders = extractUrlPlaceholders(apiPath) + String cleanPath = removePlaceholders(apiPath) + + if (placeholders.size() >= 1) { + // Path has URL placeholders (e.g. /cdp-task/{uuid}/data) + // Build full URL with fmt.Sprintf and add placeholders as function parameters + String fullPath = buildFullPath(placeholders) + String placeholderParams = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") + + if (!hasParams) { + return """func (cli *ZSClient) ${clzName}(${placeholderParams}) (*view.${responseStructName}, error) { +\tresp := view.${responseStructName}{} +\tif err := cli.PostWithRespKey(${fullPath}, "", map[string]interface{}{}, &resp); err != nil { +\t\treturn nil, err +\t} +\treturn &resp, nil +} +""" + } + + return """func (cli *ZSClient) ${clzName}(${placeholderParams}, params param.${clzName}Param) (*view.${responseStructName}, error) { +\tresp := view.${responseStructName}{} +\tif err := cli.PostWithRespKey(${fullPath}, "", params, &resp); err != nil { +\t\treturn nil, err +\t} +\treturn &resp, nil +} +""" + } + + // No placeholders (e.g. /delete/sso/client) + if (!hasParams) { + return """func (cli *ZSClient) ${clzName}() (*view.${responseStructName}, error) { +\tresp := view.${responseStructName}{} +\tif err := cli.PostWithRespKey("${cleanPath}", "", map[string]interface{}{}, &resp); err != nil { +\t\treturn nil, err +\t} +\treturn &resp, nil +} +""" + } + + return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${responseStructName}, error) { +\tresp := view.${responseStructName}{} +\tif err := cli.PostWithRespKey("${cleanPath}", "", params, &resp); err != nil { +\t\treturn nil, err +\t} +\treturn &resp, nil +} +""" + } + private String generateDeleteMethod(String apiPath) { // Extract URL placeholders def placeholders = extractUrlPlaceholders(apiPath) From c928b0329c3777b140f437949d352bc11ef1d74d Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Fri, 27 Mar 2026 13:55:31 +0800 Subject: [PATCH 40/56] [rest]: port Go SDK generator bug fixes from ZSV-11399 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port critical Go SDK generation fixes from MR !9249 (ZSV-11399): GoApiTemplate.groovy: - Add context.Context parameter to all generated Go method signatures - Add allTo response key extraction for PostWithRespKey - Add valid flag + isValid() for safe template initialization - Add reset() to prevent stale state across repeated SDK generation - Add getApiOptPath() for optional path handling - Fix pluralization: only replace y→ies after consonants - Pass allTo to GetWithSpec for correct response unwrapping GoInventory.groovy: - Add reset() + call GoApiTemplate.reset() at start of generation - Use template.isValid() instead of template.at != null - Fix time.Now → time.Now() in generated Go code (4 occurrences) - Remove deprecated generateClientFile() (~400 lines of dead code) base_param_types.go.template: - Fix time.Now → time.Now() (missing parentheses) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../resources/scripts/GoApiTemplate.groovy | 223 ++++++---- .../main/resources/scripts/GoInventory.groovy | 416 +----------------- .../templates/base_param_types.go.template | 2 +- 3 files changed, 150 insertions(+), 491 deletions(-) diff --git a/rest/src/main/resources/scripts/GoApiTemplate.groovy b/rest/src/main/resources/scripts/GoApiTemplate.groovy index 43684decfc5..1c6ab4375b4 100644 --- a/rest/src/main/resources/scripts/GoApiTemplate.groovy +++ b/rest/src/main/resources/scripts/GoApiTemplate.groovy @@ -2,6 +2,8 @@ package scripts import org.zstack.header.query.APIQueryMessage import org.zstack.header.rest.RestRequest +import org.zstack.header.rest.SDK +import org.zstack.header.rest.RestResponse import org.zstack.rest.sdk.SdkFile import org.zstack.rest.sdk.SdkTemplate import org.zstack.utils.Utils @@ -20,6 +22,7 @@ class GoApiTemplate implements SdkTemplate { private RestRequest at private String path private Class responseClass + private String allTo; private String replyName private SdkTemplate inventoryGenerator @@ -54,6 +57,9 @@ class GoApiTemplate implements SdkTemplate { // Track APIs that should be skipped during generation private static Set skippedApis = new HashSet<>() + // Flag to indicate if the template was successfully initialized + private boolean valid = false + GoApiTemplate(Class apiMsgClass, SdkTemplate inventoryGenerator) { try { apiMsgClazz = apiMsgClass @@ -85,6 +91,12 @@ class GoApiTemplate implements SdkTemplate { } } + allTo = "" + if (responseClass != null) { + RestResponse restResponse = responseClass.getAnnotation(RestResponse) + allTo = restResponse != null ? restResponse.allTo() : "" + } + if (responseClass != null) { replyName = responseClass.simpleName.replaceAll('^API', '').replaceAll('Reply$', '').replaceAll('Event$', '') } else { @@ -103,6 +115,7 @@ class GoApiTemplate implements SdkTemplate { queryInventoryClass = findInventoryClass() logger.warn("[GoSDK] Processing API: " + clzName + " -> action=" + actionType + ", resource=" + resourceName + ", response=" + responseClass?.simpleName) + valid = true } catch (Throwable e) { logger.error("[GoSDK] CRITICAL ERROR constructing GoApiTemplate for ${apiMsgClass.name}: ${e.class.name}: ${e.message}", e) throw e @@ -113,6 +126,14 @@ class GoApiTemplate implements SdkTemplate { return at } + /** + * Check if the template was successfully initialized. + * Templates without @RestRequest annotation are invalid. + */ + boolean isValid() { + return valid + } + String getActionType() { return actionType } @@ -184,6 +205,21 @@ class GoApiTemplate implements SdkTemplate { logger.warn("[GoSDK] Registered ${mappings.size()} LongJob mappings") } + /** + * Reset all static state for clean re-generation. + * Should be called at the beginning of generate() or before each SDK generation run. + */ + static void reset() { + generatedParamFiles.clear() + generatedActionFiles.clear() + generatedViewFiles.clear() + knownInventoryClasses = null + groupedApiNames.clear() + longJobMappings.clear() + skippedApis.clear() + logger.warn("[GoSDK] Reset all static state") + } + /** * Check if current API supports async operation */ @@ -373,6 +409,13 @@ class GoApiTemplate implements SdkTemplate { return "v1/" + path } + private String getApiOptPath(String optPath) { + if (optPath.startsWith("/")) { + return "v1" + optPath + } + return "v1/" + optPath + } + List generate() { return [] } @@ -513,18 +556,18 @@ class GoApiTemplate implements SdkTemplate { if (!hasParams) { // No params: don't require user to pass params, use empty map internally if (unwrap) { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Post("${apiPath}", map[string]interface{}{}, &resp); err != nil { +\tif err := cli.Post(ctx, "${apiPath}", map[string]interface{}{}, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil } """ } else { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.Post("${apiPath}", map[string]interface{}{}, &resp); err != nil { +\tif err := cli.Post(ctx, "${apiPath}", map[string]interface{}{}, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -535,18 +578,18 @@ class GoApiTemplate implements SdkTemplate { // Has params: require user to pass params if (unwrap) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Post("${apiPath}", params, &resp); err != nil { +\tif err := cli.Post(ctx, "${apiPath}", params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil } """ } else { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.Post("${apiPath}", params, &resp); err != nil { +\tif err := cli.Post(ctx, "${apiPath}", params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -556,9 +599,9 @@ class GoApiTemplate implements SdkTemplate { } private String generateQueryMethod(String apiPath, String viewStructName) { - return """func (cli *ZSClient) ${clzName}(params *param.QueryParam) ([]view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params *param.QueryParam) ([]view.${viewStructName}, error) { \tvar resp []view.${viewStructName} -\treturn resp, cli.List("${apiPath}", params, &resp) +\treturn resp, cli.List(ctx, "${apiPath}", params, &resp) } """ } @@ -570,7 +613,7 @@ class GoApiTemplate implements SdkTemplate { private String generatePageMethod(String apiPath, String viewStructName) { String pageMethodName = clzName.replaceFirst('^Query', 'Page') String varName = resourceName.substring(0, 1).toLowerCase() + resourceName.substring(1) - if (varName.endsWith("y")) { + if (varName.endsWith("y") && varName.length() > 1 && !"aeiou".contains(varName.charAt(varName.length() - 2).toString())) { varName = varName.substring(0, varName.length() - 1) + "ies" } else if (!varName.endsWith("s")) { varName = varName + "s" @@ -578,9 +621,9 @@ class GoApiTemplate implements SdkTemplate { return """ // ${pageMethodName} Pagination -func (cli *ZSClient) ${pageMethodName}(params *param.QueryParam) ([]view.${viewStructName}, int, error) { +func (cli *ZSClient) ${pageMethodName}(ctx context.Context, params *param.QueryParam) ([]view.${viewStructName}, int, error) { \tvar ${varName} []view.${viewStructName} -\ttotal, err := cli.Page("${apiPath}", params, &${varName}) +\ttotal, err := cli.Page(ctx, "${apiPath}", params, &${varName}) \treturn ${varName}, total, err } """ @@ -606,9 +649,9 @@ func (cli *ZSClient) ${pageMethodName}(params *param.QueryParam) ([]view.${viewS String spec = buildSpecPath(remainingPlaceholders) return """ -func (cli *ZSClient) ${getMethodName}(${params}) (*view.${viewStructName}, error) { +func (cli *ZSClient) ${getMethodName}(ctx context.Context, ${params}) (*view.${viewStructName}, error) { \tvar resp view.${viewStructName} -\terr := cli.GetWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", nil, &resp) +\terr := cli.GetWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "${allTo}", nil, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -619,9 +662,9 @@ func (cli *ZSClient) ${getMethodName}(${params}) (*view.${viewStructName}, error // Standard case: single uuid parameter return """ -func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, error) { +func (cli *ZSClient) ${getMethodName}(ctx context.Context, uuid string) (*view.${viewStructName}, error) { \tvar resp view.${viewStructName} -\tif err := cli.Get("${cleanPath}", uuid, nil, &resp); err != nil { +\tif err := cli.Get(ctx, "${cleanPath}", uuid, nil, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -643,9 +686,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err if (placeholders.size() == 0) { // No placeholder: no uuid parameter needed // Use GetWithRespKey to extract the inventory field - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.GetWithRespKey("${cleanPath}", "", "inventory", nil, &resp); err != nil { +\tif err := cli.GetWithRespKey(ctx, "${cleanPath}", "", "inventory", nil, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil @@ -653,9 +696,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } else { // Single placeholder: use GetWithRespKey with uuid to extract inventory - return """func (cli *ZSClient) ${clzName}(uuid string) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.GetWithRespKey("${cleanPath}", uuid, "inventory", nil, &resp); err != nil { +\tif err := cli.GetWithRespKey(ctx, "${cleanPath}", uuid, "inventory", nil, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil @@ -670,9 +713,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\terr := cli.GetWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", nil, &resp) +\terr := cli.GetWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "", nil, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -690,9 +733,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err if (placeholders.size() == 0) { // No placeholder: no uuid parameter needed // Use GetWithRespKey with empty responseKey to parse whole response - return """func (cli *ZSClient) ${clzName}() (*view.${actualViewStruct}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${actualViewStruct}, error) { \tvar resp view.${actualViewStruct} -\tif err := cli.GetWithRespKey("${cleanPath}", "", "", nil, &resp); err != nil { +\tif err := cli.GetWithRespKey(ctx, "${cleanPath}", "", "", nil, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -700,9 +743,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } else { // Single placeholder: use GetWithRespKey with uuid - return """func (cli *ZSClient) ${clzName}(uuid string) (*view.${actualViewStruct}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string) (*view.${actualViewStruct}, error) { \tvar resp view.${actualViewStruct} -\tif err := cli.GetWithRespKey("${cleanPath}", uuid, "", nil, &resp); err != nil { +\tif err := cli.GetWithRespKey(ctx, "${cleanPath}", uuid, "", nil, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -717,9 +760,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}) (*view.${actualViewStruct}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}) (*view.${actualViewStruct}, error) { \tvar resp view.${actualViewStruct} -\terr := cli.GetWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", nil, &resp) +\terr := cli.GetWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "${allTo}", nil, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -764,9 +807,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String paramName = toSafeGoParamName(placeholders[0]) if (isActionApi) { // Action APIs wrap params.Params inside a map - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", ${paramName}, map[string]interface{}{ +\tif err := cli.Put(ctx, "${cleanPath}", ${paramName}, map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp); err != nil { \t\treturn nil, err @@ -775,9 +818,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", ${paramName}, params, &resp); err != nil { +\tif err := cli.Put(ctx, "${cleanPath}", ${paramName}, params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil @@ -789,9 +832,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err if (!hasParams) { // No params: don't require user input if (isActionApi) { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", "", map[string]interface{}{ +\tif err := cli.Put(ctx, "${cleanPath}", "", map[string]interface{}{ \t\t"${actionKey}": map[string]interface{}{}, \t}, &resp); err != nil { \t\treturn nil, err @@ -800,9 +843,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", "", map[string]interface{}{}, &resp); err != nil { +\tif err := cli.Put(ctx, "${cleanPath}", "", map[string]interface{}{}, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil @@ -810,9 +853,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } } else if (isActionApi) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", "", map[string]interface{}{ +\tif err := cli.Put(ctx, "${cleanPath}", "", map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp); err != nil { \t\treturn nil, err @@ -821,9 +864,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}(uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\tif err := cli.Put("${cleanPath}", uuid, params, &resp); err != nil { +\tif err := cli.Put(ctx, "${cleanPath}", uuid, params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp.${fieldName}, nil @@ -839,9 +882,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp view.${responseStructName} -\terr := cli.PutWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) +\terr := cli.PutWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -858,9 +901,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String paramName = toSafeGoParamName(placeholders[0]) if (isActionApi) { // Action APIs wrap params.Params inside a map - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", ${paramName}, "", map[string]interface{}{ +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", ${paramName}, "", map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp); err != nil { \t\treturn nil, err @@ -869,9 +912,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", ${paramName}, "", params, &resp); err != nil { +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", ${paramName}, "", params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -883,9 +926,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err if (!hasParams) { // No params: don't require user input if (isActionApi) { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", "", "", map[string]interface{}{ +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", "", "", map[string]interface{}{ \t\t"${actionKey}": map[string]interface{}{}, \t}, &resp); err != nil { \t\treturn nil, err @@ -894,9 +937,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", "", "", map[string]interface{}{}, &resp); err != nil { +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", "", "", map[string]interface{}{}, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -904,9 +947,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """ } } else if (isActionApi) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", "", "", map[string]interface{}{ +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", "", "", map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp); err != nil { \t\treturn nil, err @@ -915,9 +958,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } """ } else { - return """func (cli *ZSClient) ${clzName}(uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\tif err := cli.PutWithRespKey("${cleanPath}", uuid, "", params, &resp); err != nil { +\tif err := cli.PutWithRespKey(ctx, "${cleanPath}", uuid, "", params, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil @@ -933,9 +976,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \tresp := view.${viewStructName}{} -\terr := cli.PutWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) +\terr := cli.PutWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -1019,8 +1062,8 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err if (!useSpec) { // Single or no placeholder: use the standard Delete method - return """func (cli *ZSClient) ${clzName}(uuid string, deleteMode param.DeleteMode) error { -\treturn cli.Delete("${cleanPath}", uuid, string(deleteMode)) + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string, deleteMode param.DeleteMode) error { +\treturn cli.Delete(ctx, "${cleanPath}", uuid, string(deleteMode)) } """ } else { @@ -1032,8 +1075,8 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String spec = buildSpecPath(remainingPlaceholders) String paramsStr = "fmt.Sprintf(\"deleteMode=%s\", deleteMode)" - return """func (cli *ZSClient) ${clzName}(${params}, deleteMode param.DeleteMode) error { -\treturn cli.DeleteWithSpec("${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, deleteMode param.DeleteMode) error { +\treturn cli.DeleteWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) } """ } @@ -1056,11 +1099,11 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err // Build parameter key, for example expungeImage String paramKey = clzName.substring(0, 1).toLowerCase() + clzName.substring(1) - return """func (cli *ZSClient) ${clzName}(uuid string) error { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string) error { \tparams := map[string]interface{}{ \t\t"${paramKey}": map[string]interface{}{}, \t} -\treturn cli.Put("${cleanPath}", uuid, params, nil) +\treturn cli.Put(ctx, "${cleanPath}", uuid, params, nil) } """ } @@ -1096,9 +1139,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err switch (httpMethod) { case "GET": if (!useSpec) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp ${respType} -\tif err := cli.Get("${cleanPath}", "", params, &resp); err != nil { +\tif err := cli.Get(ctx, "${cleanPath}", "", params, &resp); err != nil { \t\treturn nil, err \t} \t${returnStmt} @@ -1107,9 +1150,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } else { String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String pathSpec = buildPathSpec(placeholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \tvar resp ${respType} -\terr := cli.GetWithSpec("${cleanPath}", ${pathSpec}, "", "", params, &resp) +\terr := cli.GetWithSpec(ctx, "${cleanPath}", ${pathSpec}, "", "${allTo}", params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -1119,9 +1162,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } case "POST": if (!useSpec) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} -\tif err := cli.Post("${cleanPath}", params, &resp); err != nil { +\tif err := cli.Post(ctx, "${cleanPath}", params, &resp); err != nil { \t\treturn nil, err \t} \t${returnStmt} @@ -1131,9 +1174,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err // POST lacks *WithSpec helpers; build the full URL manually String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String fullPath = buildFullPath(placeholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} -\terr := cli.Post(${fullPath}, params, &resp) +\terr := cli.Post(ctx, ${fullPath}, params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -1158,7 +1201,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """("${cleanPath}", ${paramName}, "", map[string]interface{}{ \t\t"${actionKey}": map[string]interface{}{}, \t}, &resp)""" - return """func (cli *ZSClient) ${clzName}(${paramName} string) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1171,7 +1214,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String putArgs = unwrap ? """("${cleanPath}", ${paramName}, map[string]interface{}{}, &resp)""" : """("${cleanPath}", ${paramName}, "", map[string]interface{}{}, &resp)""" - return """func (cli *ZSClient) ${clzName}(${paramName} string) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1190,7 +1233,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """("${cleanPath}", ${paramName}, "", map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp)""" - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1203,7 +1246,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String putArgs = unwrap ? """("${cleanPath}", ${paramName}, params, &resp)""" : """("${cleanPath}", ${paramName}, "", params, &resp)""" - return """func (cli *ZSClient) ${clzName}(${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${paramName} string, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1225,7 +1268,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """("${cleanPath}", "", "", map[string]interface{}{ \t\t"${actionKey}": map[string]interface{}{}, \t}, &resp)""" - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1238,7 +1281,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String putArgs = unwrap ? """("${cleanPath}", "", map[string]interface{}{}, &resp)""" : """("${cleanPath}", "", "", map[string]interface{}{}, &resp)""" - return """func (cli *ZSClient) ${clzName}() (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1256,7 +1299,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err """("${cleanPath}", "", "", map[string]interface{}{ \t\t"${actionKey}": params.Params, \t}, &resp)""" - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1269,7 +1312,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String putArgs = unwrap ? """("${cleanPath}", uuid, params, &resp)""" : """("${cleanPath}", uuid, "", params, &resp)""" - return """func (cli *ZSClient) ${clzName}(uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} \tif err := ${putMethod}${putArgs}; err != nil { \t\treturn nil, err @@ -1286,9 +1329,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String spec = buildSpecPath(remainingPlaceholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} -\terr := cli.PutWithSpec("${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) +\terr := cli.PutWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, "", params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -1298,8 +1341,8 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err } case "DELETE": if (!useSpec) { - return """func (cli *ZSClient) ${clzName}(uuid string, deleteMode param.DeleteMode) error { -\treturn cli.Delete("${cleanPath}", uuid, string(deleteMode)) + return """func (cli *ZSClient) ${clzName}(ctx context.Context, uuid string, deleteMode param.DeleteMode) error { +\treturn cli.Delete(ctx, "${cleanPath}", uuid, string(deleteMode)) } """ } else { @@ -1310,16 +1353,16 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err String spec = buildSpecPath(remainingPlaceholders) String paramsStr = "fmt.Sprintf(\"deleteMode=%s\", deleteMode)" - return """func (cli *ZSClient) ${clzName}(${params}, deleteMode param.DeleteMode) error { - return cli.DeleteWithSpec("${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, deleteMode param.DeleteMode) error { + return cli.DeleteWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) } """ } default: if (!useSpec) { - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} -\tif err := cli.Post("${cleanPath}", params, &resp); err != nil { +\tif err := cli.Post(ctx, "${cleanPath}", params, &resp); err != nil { \t\treturn nil, err \t} \t${returnStmt} @@ -1329,9 +1372,9 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err // POST lacks *WithSpec helpers; build the full URL manually String params = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") String fullPath = buildFullPath(placeholders) - return """func (cli *ZSClient) ${clzName}(${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { + return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, params param.${clzName}Param) (*view.${viewStructName}, error) { \t${respDecl} -\terr := cli.Post(${fullPath}, params, &resp) +\terr := cli.Post(ctx, ${fullPath}, params, &resp) \tif err != nil { \t\treturn nil, err \t} @@ -1362,7 +1405,7 @@ func (cli *ZSClient) ${getMethodName}(uuid string) (*view.${viewStructName}, err def builder = new StringBuilder() builder.append("\n// ${asyncMethodName} Async\n") - builder.append("func (cli *ZSClient) ${asyncMethodName}(params param.${clzName}Param) (string, error) {\n") + builder.append("func (cli *ZSClient) ${asyncMethodName}(ctx context.Context, params param.${clzName}Param) (string, error) {\n") builder.append("\n") builder.append("\tresource := \"${resource}\"\n") builder.append("\tresponseKey := \"\"\n") diff --git a/rest/src/main/resources/scripts/GoInventory.groovy b/rest/src/main/resources/scripts/GoInventory.groovy index c31e44149c6..335260e671d 100644 --- a/rest/src/main/resources/scripts/GoInventory.groovy +++ b/rest/src/main/resources/scripts/GoInventory.groovy @@ -106,6 +106,14 @@ class GoInventory implements SdkTemplate { return longJobMappings } + /** + * Reset all static state for clean re-generation. + */ + static void reset() { + longJobMappings.clear() + logger.warn("[GoSDK] Reset GoInventory static state") + } + /** * Pre-analyze all API classes once and cache metadata. * This avoids expensive re-instantiation of GoApiTemplate and redundant logging. @@ -124,7 +132,7 @@ class GoInventory implements SdkTemplate { try { GoApiTemplate template = new GoApiTemplate(apiClass, this) // If it's a valid template (has @RestRequest) - if (template.at != null) { + if (template.isValid()) { allApiTemplates.add(template) } } catch (Throwable e) { @@ -160,6 +168,9 @@ class GoInventory implements SdkTemplate { List generate() { def files = [] + GoApiTemplate.reset() + reset() + logger.warn("[GoSDK] ===== GoInventory.generate() START =====") logger.warn("[GoSDK] GoInventory.generate() starting...") @@ -296,7 +307,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package view\n\n") content.append("import \"time\"\n\n") - content.append("var _ = time.Now // avoid unused import\n\n") + content.append("var _ = time.Now() // avoid unused import\n\n") classes.each { Class clz -> String structName = getViewStructName(clz) @@ -314,401 +325,6 @@ class GoInventory implements SdkTemplate { return files } - /** - * Generate ZSClient base file - * @deprecated client.go is manually maintained, this method should not be used - */ - @Deprecated - private SdkFile generateClientFile() { - def sdkFile = new SdkFile() - sdkFile.subPath = "/pkg/client/" - sdkFile.fileName = "client.go" - - def content = new StringBuilder() - content.append("// Copyright (c) ZStack.io, Inc.\n\n") - content.append("package client\n\n") - content.append("import (\n") - content.append("\t\"bytes\"\n") - content.append("\t\"crypto/sha512\"\n") - content.append("\t\"encoding/hex\"\n") - content.append("\t\"encoding/json\"\n") - content.append("\t\"fmt\"\n") - content.append("\t\"io\"\n") - content.append("\t\"net/http\"\n") - content.append("\t\"net/url\"\n") - content.append("\t\"strconv\"\n") - content.append("\t\"strings\"\n") - content.append("\t\"github.com/zstackio/zstack-sdk-go-v2/pkg/param\"\n") - content.append("\t\"time\"\n") - content.append(")\n\n") - content.append("// AuthType authentication type\n") - content.append("type AuthType string\n\n") - content.append("const (\n") - content.append("\tAuthTypeAccessKey AuthType = \"accesskey\"\n") - content.append("\tAuthTypeLogin AuthType = \"login\"\n") - content.append(")\n\n") - content.append("const (\n") - content.append("\tdefaultZStackPort = 8080\n") - content.append(")\n\n") - content.append("// ZSConfig client configuration\n") - content.append("type ZSConfig struct {\n") - content.append("\thostname string\n") - content.append("\tport int\n") - content.append("\tcontextPath string\n") - content.append("\taccessKeyId string\n") - content.append("\taccessKeySecret string\n") - content.append("\tusername string\n") - content.append("\tpassword string\n") - content.append("\tauthType AuthType\n") - content.append("\tdebug bool\n") - content.append("\ttimeout time.Duration\n") - content.append("}\n\n") - content.append("// NewZSConfig creates a new configuration\n") - content.append("func NewZSConfig(hostname string, port int, contextPath string) *ZSConfig {\n") - content.append("\treturn &ZSConfig{\n") - content.append("\t\thostname: hostname,\n") - content.append("\t\tport: port,\n") - content.append("\t\tcontextPath: contextPath,\n") - content.append("\t\ttimeout: 30 * time.Second,\n") - content.append("\t}\n") - content.append("}\n\n") - content.append("// DefaultZSConfig creates a default configuration\n") - content.append("func DefaultZSConfig(hostname, contextPath string) *ZSConfig {\n") - content.append("\treturn NewZSConfig(hostname, defaultZStackPort, contextPath)\n") - content.append("}\n\n") - content.append("// AccessKey sets access key authentication\n") - content.append("func (config *ZSConfig) AccessKey(id, secret string) *ZSConfig {\n") - content.append("\tconfig.accessKeyId = id\n") - content.append("\tconfig.accessKeySecret = secret\n") - content.append("\tconfig.authType = AuthTypeAccessKey\n") - content.append("\treturn config\n") - content.append("}\n\n") - content.append("// Login sets login authentication\n") - content.append("func (config *ZSConfig) Login(username, password string) *ZSConfig {\n") - content.append("\tconfig.username = username\n") - content.append("\tconfig.password = password\n") - content.append("\tconfig.authType = AuthTypeLogin\n") - content.append("\treturn config\n") - content.append("}\n\n") - content.append("// Debug enables debug mode\n") - content.append("func (config *ZSConfig) Debug(debug bool) *ZSConfig {\n") - content.append("\tconfig.debug = debug\n") - content.append("\treturn config\n") - content.append("}\n\n") - content.append("// ZSClient ZStack API client\n") - content.append("type ZSClient struct {\n") - content.append("\tconfig *ZSConfig\n") - content.append("\thttpClient *http.Client\n") - content.append("\tsessionId string\n") - content.append("}\n\n") - content.append("// JobView job inventory view\n") - content.append("type JobView struct {\n") - content.append("\tUUID string `json:\"uuid\"`\n") - content.append("\tState string `json:\"state\"`\n") - content.append("\tResult interface{} `json:\"result,omitempty\"`\n") - content.append("\tError interface{} `json:\"error,omitempty\"`\n") - content.append("\tCreateDate string `json:\"createDate\"`\n") - content.append("}\n\n") - content.append("const (\n") - content.append("\tJobStateProcessing = \"Processing\"\n") - content.append("\tJobStateSucceeded = \"Succeeded\"\n") - content.append("\tJobStateFailed = \"Failed\"\n") - content.append(")\n\n") - content.append("// NewZSClient creates a new ZStack client\n") - content.append("func NewZSClient(config *ZSConfig) *ZSClient {\n") - content.append("\t// Auto-encrypt password for login authentication\n") - content.append("\tif config.authType == AuthTypeLogin && config.password != \"\" {\n") - content.append("\t\tconfig.password = hashPasswordSHA512(config.password)\n") - content.append("\t\tif config.debug {\n") - content.append("\t\t\tfmt.Printf(\"[DEBUG] Password hashed: %s...\\n\", config.password[:16])\n") - content.append("\t\t}\n") - content.append("\t}\n") - content.append("\treturn &ZSClient{\n") - content.append("\t\tconfig: config,\n") - content.append("\t\thttpClient: &http.Client{\n") - content.append("\t\t\tTimeout: config.timeout,\n") - content.append("\t\t},\n") - content.append("\t}\n") - content.append("}\n\n") - content.append("// hashPasswordSHA512 encrypts password using SHA512\n") - content.append("func hashPasswordSHA512(password string) string {\n") - content.append("\thash := sha512.Sum512([]byte(password))\n") - content.append("\treturn hex.EncodeToString(hash[:])\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) baseURL() string {\n") - content.append("\treturn fmt.Sprintf(\"http://%s:%d%s\", cli.config.hostname, cli.config.port, cli.config.contextPath)\n") - content.append("}\n\n") - content.append("// Get performs a GET request\n") - content.append("func (cli *ZSClient) Get(path string, uuid string, params interface{}, result interface{}) error {\n") - content.append("\turl := fmt.Sprintf(\"%s/%s\", cli.baseURL(), path)\n") - content.append("\tif uuid != \"\" {\n") - content.append("\t\turl = fmt.Sprintf(\"%s/%s\", url, uuid)\n") - content.append("\t}\n") - content.append("\treturn cli.doRequest(\"GET\", url, nil, result)\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) QueryJob(uuid string) (*JobView, error) {\n") - content.append("\tvar resp JobView\n") - content.append("\turl := fmt.Sprintf(\"%s/v1/api-jobs/%s\", cli.baseURL(), uuid)\n") - content.append("\terr := cli.doRequest(\"GET\", url, nil, &resp)\n") - content.append("\treturn &resp, err\n") - content.append("}\n\n") - content.append("// List performs a list query\n") - content.append("func (cli *ZSClient) List(path string, params interface{}, result interface{}) error {\n") - content.append("\tbaseURL := cli.baseURL()\n") - content.append("\trequestURL := fmt.Sprintf(\"%s/%s\", baseURL, path)\n") - content.append("\n") - content.append("\tif params != nil {\n") - content.append("\t\tif queryParam, ok := params.(*param.QueryParam); ok {\n") - content.append("\t\t\tqueryString := cli.buildQueryString(queryParam)\n") - content.append("\t\t\tif queryString != \"\" {\n") - content.append("\t\t\t\trequestURL = fmt.Sprintf(\"%s?%s\", requestURL, queryString)\n") - content.append("\t\t\t}\n") - content.append("\t\t}\n") - content.append("\t}\n") - content.append("\n") - content.append("\t// Unmarshal response into wrapper with inventories field\n") - content.append("\tvar wrapper struct {\n") - content.append("\t\tInventories interface{} `json:\"inventories\"`\n") - content.append("\t\tInventory interface{} `json:\"inventory\"`\n") - content.append("\t}\n") - content.append("\n") - content.append("\tif err := cli.doRequest(\"GET\", requestURL, nil, &wrapper); err != nil {\n") - content.append("\t\treturn err\n") - content.append("\t}\n") - content.append("\n") - content.append("\t// Try inventories first (plural), then inventory (singular)\n") - content.append("\tvar data interface{}\n") - content.append("\tif wrapper.Inventories != nil {\n") - content.append("\t\tdata = wrapper.Inventories\n") - content.append("\t} else if wrapper.Inventory != nil {\n") - content.append("\t\tdata = wrapper.Inventory\n") - content.append("\t}\n") - content.append("\n") - content.append("\t// Re-marshal and unmarshal into the actual result type\n") - content.append("\tif data != nil {\n") - content.append("\t\tdataBytes, err := json.Marshal(data)\n") - content.append("\t\tif err != nil {\n") - content.append("\t\t\treturn fmt.Errorf(\"failed to marshal data: %v\", err)\n") - content.append("\t\t}\n") - content.append("\t\tif cli.config.debug {\n") - content.append("\t\t\tfmt.Printf(\"[DEBUG] Received %d bytes of inventory data\\n\", len(dataBytes))\n") - content.append("\t\t}\n") - content.append("\t\terr = json.Unmarshal(dataBytes, result)\n") - content.append("\t\tif err != nil {\n") - content.append("\t\t\treturn fmt.Errorf(\"failed to unmarshal data into result: %v\", err)\n") - content.append("\t\t}\n") - content.append("\t\treturn nil\n") - content.append("\t}\n") - content.append("\tif cli.config.debug {\n") - content.append("\t\tfmt.Println(\"[DEBUG] Both inventories and inventory are nil, returning empty result\")\n") - content.append("\t}\n") - content.append("\treturn nil\n") - content.append("}\n\n") - content.append("// Post performs a POST request\n") - content.append("func (cli *ZSClient) Post(path string, params interface{}, result interface{}) error {\n") - content.append("\turl := fmt.Sprintf(\"%s/%s\", cli.baseURL(), path)\n") - content.append("\treturn cli.doRequest(\"POST\", url, params, result)\n") - content.append("}\n\n") - content.append("// Put performs a PUT request\n") - content.append("func (cli *ZSClient) Put(path string, uuid string, params interface{}, result interface{}) error {\n") - content.append("\turl := fmt.Sprintf(\"%s/%s/%s\", cli.baseURL(), path, uuid)\n") - content.append("\treturn cli.doRequest(\"PUT\", url, params, result)\n") - content.append("}\n\n") - content.append("// Delete performs a DELETE request\n") - content.append("func (cli *ZSClient) Delete(path string, uuid string, deleteMode string) error {\n") - content.append("\turl := fmt.Sprintf(\"%s/%s/%s?deleteMode=%s\", cli.baseURL(), path, uuid, deleteMode)\n") - content.append("\treturn cli.doRequest(\"DELETE\", url, nil, nil)\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) doRequest(method, url string, body interface{}, result interface{}) error {\n") - content.append("\t// Auto-login if using login auth and no session yet\n") - content.append("\tif cli.config.authType == AuthTypeLogin && cli.sessionId == \"\" && !strings.HasSuffix(url, \"/accounts/login\") {\n") - content.append("\t\terr := cli.Login(cli.config.username, cli.config.password)\n") - content.append("\t\tif err != nil {\n") - content.append("\t\t\treturn fmt.Errorf(\"auto-login failed: %v\", err)\n") - content.append("\t\t}\n") - content.append("\t}\n\n") - content.append("\tvar bodyReader io.Reader\n") - content.append("\tvar bodyBytes []byte\n") - content.append("\tif body != nil {\n") - content.append("\t\tvar err error\n") - content.append("\t\tbodyBytes, err = json.Marshal(body)\n") - content.append("\t\tif err != nil {\n") - content.append("\t\t\treturn err\n") - content.append("\t\t}\n") - content.append("\t\tbodyReader = bytes.NewBuffer(bodyBytes)\n") - content.append("\t}\n\n") - content.append("\treq, err := http.NewRequest(method, url, bodyReader)\n") - content.append("\tif err != nil {\n") - content.append("\t\treturn err\n") - content.append("\t}\n\n") - content.append("\treq.Header.Set(\"Content-Type\", \"application/json\")\n") - content.append("\tcli.addAuthHeaders(req)\n\n") - content.append("\tif cli.config.debug && bodyBytes != nil {\n") - content.append("\t\tfmt.Printf(\"[DEBUG] %s %s\\n\", method, url)\n") - content.append("\t\tfmt.Printf(\"[DEBUG] Body: %s\\n\", string(bodyBytes))\n") - content.append("\t\tfmt.Printf(\"[DEBUG] Headers: Authorization=%s\\n\", req.Header.Get(\"Authorization\"))\n") - content.append("\t}\n\n") - content.append("\tresp, err := cli.httpClient.Do(req)\n") - content.append("\tif err != nil {\n") - content.append("\t\treturn err\n") - content.append("\t}\n") - content.append("\tdefer resp.Body.Close()\n\n") - content.append("\tif resp.StatusCode == 202 {\n") - content.append("\t\tvar location struct {\n") - content.append("\t\t\tLocation string `json:\"location\"`\n") - content.append("\t\t\tUuid string `json:\"org.zstack.header.rest.APIEvent/uuid\"`\n") - content.append("\t\t}\n") - content.append("\t\tif err := json.NewDecoder(resp.Body).Decode(&location); err != nil {\n") - content.append("\t\t\treturn fmt.Errorf(\"failed to decode 202 response: %v\", err)\n") - content.append("\t\t}\n") - content.append("\t\tjobUUID := location.Uuid\n") - content.append("\t\tif jobUUID == \"\" {\n") - content.append("\t\t\tparts := bytes.Split([]byte(location.Location), []byte(\"/\"))\n") - content.append("\t\t\tif len(parts) > 0 {\n") - content.append("\t\t\t\tjobUUID = string(parts[len(parts)-1])\n") - content.append("\t\t\t}\n") - content.append("\t\t}\n") - content.append("\n") - content.append("\t\tif jobUUID == \"\" {\n") - content.append("\t\t\treturn fmt.Errorf(\"failed to extract job uuid from 202 response\")\n") - content.append("\t\t}\n") - content.append("\n") - content.append("\t\treturn cli.waitForJob(jobUUID, result)\n") - content.append("\t}\n\n") - content.append("\tif resp.StatusCode >= 400 {\n") - content.append("\t\trespBody, _ := io.ReadAll(resp.Body)\n") - content.append("\t\terrMsg := fmt.Sprintf(\"API error: %s %s returned status code %d\\n\", method, url, resp.StatusCode)\n") - content.append("\t\terrMsg += fmt.Sprintf(\"Authorization: %s\\n\", req.Header.Get(\"Authorization\"))\n") - content.append("\t\terrMsg += fmt.Sprintf(\"Response: %s\", string(respBody))\n") - content.append("\t\treturn fmt.Errorf(errMsg)\n") - content.append("\t}\n\n") - content.append("\tif result != nil {\n") - content.append("\t\treturn json.NewDecoder(resp.Body).Decode(result)\n") - content.append("\t}\n") - content.append("\treturn nil\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) waitForJob(jobUUID string, result interface{}) error {\n") - content.append("\tticker := time.NewTicker(500 * time.Millisecond)\n") - content.append("\tdefer ticker.Stop()\n") - content.append("\n") - content.append("\ttimeout := time.After(30 * time.Minute)\n") - content.append("\n") - content.append("\tfor {\n") - content.append("\t\tselect {\n") - content.append("\t\tcase <-timeout:\n") - content.append("\t\t\treturn fmt.Errorf(\"job %s timeout\", jobUUID)\n") - content.append("\t\tcase <-ticker.C:\n") - content.append("\t\t\tjob, err := cli.QueryJob(jobUUID)\n") - content.append("\t\t\tif err != nil {\n") - content.append("\t\t\t\tcontinue\n") - content.append("\t\t\t}\n") - content.append("\n") - content.append("\t\t\tif job.State == JobStateSucceeded {\n") - content.append("\t\t\t\tif result != nil && job.Result != nil {\n") - content.append("\t\t\t\t\tdata, err := json.Marshal(job.Result)\n") - content.append("\t\t\t\t\tif err != nil {\n") - content.append("\t\t\t\t\t\treturn fmt.Errorf(\"failed to marshal job result: %v\", err)\n") - content.append("\t\t\t\t\t}\n") - content.append("\t\t\t\t\treturn json.Unmarshal(data, result)\n") - content.append("\t\t\t\t}\n") - content.append("\t\t\t\treturn nil\n") - content.append("\t\t\t}\n") - content.append("\n") - content.append("\t\t\tif job.State == JobStateFailed {\n") - content.append("\t\t\t\treturn fmt.Errorf(\"job failed: %v\", job.Error)\n") - content.append("\t\t\t}\n") - content.append("\t\t}\n") - content.append("\t}\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) buildQueryString(params *param.QueryParam) string {\n") - content.append("\tif params == nil {\n") - content.append("\t\treturn \"\"\n") - content.append("\t}\n") - content.append("\tu := url.Values{}\n") - content.append("\n") - content.append("\tfor _, q := range params.Conditions {\n") - content.append("\t\tif q.Name != \"\" && q.Op != \"\" {\n") - content.append("\t\t\tu.Add(\"q\", fmt.Sprintf(\"%s%s%s\", q.Name, q.Op, q.Value))\n") - content.append("\t\t} else if q.Value != \"\" {\n") - content.append("\t\t\tu.Add(\"q\", q.Value)\n") - content.append("\t\t}\n") - content.append("\t}\n") - content.append("\n") - content.append("\tif params.LimitNum != nil {\n") - content.append("\t\tu.Set(\"limit\", strconv.Itoa(*params.LimitNum))\n") - content.append("\t}\n") - content.append("\tif params.StartNum != nil {\n") - content.append("\t\tu.Set(\"start\", strconv.Itoa(*params.StartNum))\n") - content.append("\t}\n") - content.append("\tif params.Count {\n") - content.append("\t\tu.Set(\"count\", \"true\")\n") - content.append("\t}\n") - content.append("\tif params.ReplyWithCount {\n") - content.append("\t\tu.Set(\"replyWithCount\", \"true\")\n") - content.append("\t}\n") - content.append("\tif params.GroupBy != \"\" {\n") - content.append("\t\tu.Set(\"groupBy\", params.GroupBy)\n") - content.append("\t}\n") - content.append("\tif params.SortBy != \"\" {\n") - content.append("\t\tu.Set(\"sortBy\", params.SortBy)\n") - content.append("\t}\n") - content.append("\tif params.SortDirection != \"\" {\n") - content.append("\t\tu.Set(\"sortDirection\", params.SortDirection)\n") - content.append("\t}\n") - content.append("\tfor _, f := range params.Fields {\n") - content.append("\t\tu.Add(\"fields\", f)\n") - content.append("\t}\n") - content.append("\n") - content.append("\treturn u.Encode()\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) addAuthHeaders(req *http.Request) {\n") - content.append("\tif cli.config.authType == AuthTypeAccessKey {\n") - content.append("\t\treq.Header.Set(\"X-Access-Key-Id\", cli.config.accessKeyId)\n") - content.append("\t\treq.Header.Set(\"X-Access-Key-Secret\", cli.config.accessKeySecret)\n") - content.append("\t} else if cli.sessionId != \"\" {\n") - content.append("\t\treq.Header.Set(\"Authorization\", \"OAuth \"+cli.sessionId)\n") - content.append("\t}\n") - content.append("}\n\n") - content.append("// Login authenticates with username and password\n") - content.append("func (cli *ZSClient) Login(username, password string) error {\n") - content.append("\tif cli.config.authType != AuthTypeLogin {\n") - content.append("\t\treturn fmt.Errorf(\"client is not configured for login authentication\")\n") - content.append("\t}\n\n") - content.append("\tvar loginReq = map[string]map[string]string{\n") - content.append("\t\t\"logInByAccount\": {\n") - content.append("\t\t\t\"accountName\": username,\n") - content.append("\t\t\t\"password\": password, // Already hashed in NewZSClient\n") - content.append("\t\t},\n") - content.append("\t}\n\n") - content.append("\tvar loginResp struct {\n") - content.append("\t\tInventory struct {\n") - content.append("\t\t\tUUID string `json:\"uuid\"`\n") - content.append("\t\t} `json:\"inventory\"`\n") - content.append("\t}\n\n") - content.append("\turl := fmt.Sprintf(\"%s/v1/accounts/login\", cli.baseURL())\n") - content.append("\terr := cli.doRequest(\"PUT\", url, loginReq, &loginResp)\n") - content.append("\tif err != nil {\n") - content.append("\t\treturn fmt.Errorf(\"login failed: %v\", err)\n") - content.append("\t}\n\n") - content.append("\tcli.sessionId = loginResp.Inventory.UUID\n") - content.append("\tif cli.config.debug {\n") - content.append("\t\tfmt.Printf(\"[DEBUG] Login successful, sessionId=%s\\n\", cli.sessionId)\n") - content.append("\t}\n") - content.append("\treturn nil\n") - content.append("}\n\n") - content.append("func (cli *ZSClient) Logout() error {\n") - content.append("\tif cli.sessionId == \"\" {\n") - content.append("\t\treturn nil\n") - content.append("\t}\n\n") - content.append("\turl := fmt.Sprintf(\"%s/v1/accounts/sessions/%s\", cli.baseURL(), cli.sessionId)\n") - content.append("\terr := cli.doRequest(\"DELETE\", url, nil, nil)\n") - content.append("\tcli.sessionId = \"\"\n") - content.append("\treturn err\n") - content.append("}\n") - - sdkFile.content = content.toString() - return sdkFile - } /** * Generate base view file @@ -1760,7 +1376,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package view\n\n") content.append("import \"time\"\n\n") - content.append("var _ = time.Now // avoid unused import\n\n") + content.append("var _ = time.Now() // avoid unused import\n\n") int addedCount = 0 Set processedViews = new HashSet<>() @@ -1912,7 +1528,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package view\n\n") content.append("import \"time\"\n\n") - content.append("var _ = time.Now // avoid unused import\n\n") + content.append("var _ = time.Now() // avoid unused import\n\n") logger.warn("[GoSDK] Generating new view file for: ${structName} (${fileName})") } @@ -2086,7 +1702,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package param\n\n") content.append("import \"time\"\n\n") - content.append("var _ = time.Now // avoid unused import\n\n") + content.append("var _ = time.Now() // avoid unused import\n\n") boolean hasParams = false allApiTemplates.each { GoApiTemplate template -> diff --git a/rest/src/main/resources/scripts/templates/base_param_types.go.template b/rest/src/main/resources/scripts/templates/base_param_types.go.template index 962ccda910b..1c3e8ec9ffa 100644 --- a/rest/src/main/resources/scripts/templates/base_param_types.go.template +++ b/rest/src/main/resources/scripts/templates/base_param_types.go.template @@ -4,7 +4,7 @@ package param import "time" -var _ = time.Now // avoid unused import +var _ = time.Now() // avoid unused import type DeleteMode string From abc1ecea27545b892a75b86c58580eafb54fe065 Mon Sep 17 00:00:00 2001 From: "ye.zou" Date: Fri, 27 Mar 2026 14:29:31 +0800 Subject: [PATCH 41/56] [rest]: GoInventory.reset() must clear all instance caches The previous reset() only cleared longJobMappings (static), leaving instance-level caches (allApiTemplates, generatedViewStructs, generatedParamStructs, generatedClientMethods, additionalClasses, etc.) intact across repeated generate() calls on the same instance. This caused skipped or duplicate output when TestGenerateGoSDK ran more than once in the same JVM. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../main/resources/scripts/GoInventory.groovy | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/rest/src/main/resources/scripts/GoInventory.groovy b/rest/src/main/resources/scripts/GoInventory.groovy index 335260e671d..b38ae30a412 100644 --- a/rest/src/main/resources/scripts/GoInventory.groovy +++ b/rest/src/main/resources/scripts/GoInventory.groovy @@ -107,11 +107,24 @@ class GoInventory implements SdkTemplate { } /** - * Reset all static state for clean re-generation. + * Reset all static and instance state for clean re-generation. + * Must be called before each generate() to avoid stale caches + * causing skipped or duplicate output across repeated runs. */ - static void reset() { + void reset() { longJobMappings.clear() - logger.warn("[GoSDK] Reset GoInventory static state") + allApiTemplates.clear() + inventories.clear() + markedInventories.clear() + additionalClasses.clear() + generatedViewStructs.clear() + generatedViewFiles.clear() + paramNestedTypes.clear() + generatedParamStructs.clear() + generatedClientMethods.clear() + generatingForParam = false + currentGeneratingClass = null + logger.warn("[GoSDK] Reset GoInventory state (static + instance)") } /** From 64805eb7ba0f93074e11da4e49b36f6d7b105a4e Mon Sep 17 00:00:00 2001 From: lianghy Date: Sat, 9 May 2026 11:01:06 +0800 Subject: [PATCH 42/56] [sdk]: fix Go SDK POST path generation Generate POST APIs with URL placeholders as explicit Go method parameters and build the request path with fmt.Sprintf. Also use PostWithRespKey for POST responses so APIs returning plain Event/Reply without inventory are unmarshaled from the full response body. This fixes AddIAM2VirtualIDsToGroup and other POST APIs whose REST path contains placeholders such as {uuid}, {groupUuid}, or multiple path args. Resolves: ZCF-0 --- .../resources/scripts/GoApiTemplate.groovy | 121 +++++++----------- 1 file changed, 45 insertions(+), 76 deletions(-) diff --git a/rest/src/main/resources/scripts/GoApiTemplate.groovy b/rest/src/main/resources/scripts/GoApiTemplate.groovy index 1c6ab4375b4..28b93c866b5 100644 --- a/rest/src/main/resources/scripts/GoApiTemplate.groovy +++ b/rest/src/main/resources/scripts/GoApiTemplate.groovy @@ -552,50 +552,49 @@ class GoApiTemplate implements SdkTemplate { private String generateCreateMethod(String apiPath, String viewStructName, boolean unwrap, String responseStructName, String fieldName) { boolean hasParams = hasApiParams() - - if (!hasParams) { - // No params: don't require user to pass params, use empty map internally - if (unwrap) { - return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { -\tvar resp view.${responseStructName} -\tif err := cli.Post(ctx, "${apiPath}", map[string]interface{}{}, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp.${fieldName}, nil -} -""" - } else { - return """func (cli *ZSClient) ${clzName}(ctx context.Context) (*view.${viewStructName}, error) { -\tresp := view.${viewStructName}{} -\tif err := cli.Post(ctx, "${apiPath}", map[string]interface{}{}, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp, nil -} -""" - } + def placeholders = extractUrlPlaceholders(apiPath) + String pathExpr = placeholders.isEmpty() ? "\"${apiPath}\"" : buildFullPath(placeholders) + String placeholderParams = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") + String methodParams = "ctx context.Context" + if (!placeholderParams.isEmpty()) { + methodParams = "${methodParams}, ${placeholderParams}" } - - // Has params: require user to pass params + if (hasParams) { + methodParams = "${methodParams}, params param.${clzName}Param" + } + + String bodyExpr = hasParams ? "params" : "map[string]interface{}{}" + String responseKey = getPostResponseKey(viewStructName, responseStructName) + + String retViewStructName = viewStructName + String respDecl + String returnStmt if (unwrap) { - return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { -\tvar resp view.${responseStructName} -\tif err := cli.Post(ctx, "${apiPath}", params, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp.${fieldName}, nil -} -""" + respDecl = "var resp view.${responseStructName}" + returnStmt = "return &resp.${fieldName}, nil" } else { - return """func (cli *ZSClient) ${clzName}(ctx context.Context, params param.${clzName}Param) (*view.${viewStructName}, error) { -\tresp := view.${viewStructName}{} -\tif err := cli.Post(ctx, "${apiPath}", params, &resp); err != nil { + respDecl = "resp := view.${viewStructName}{}" + returnStmt = "return &resp, nil" + } + + return """func (cli *ZSClient) ${clzName}(${methodParams}) (*view.${retViewStructName}, error) { +\t${respDecl} +\tif err := cli.PostWithRespKey(ctx, ${pathExpr}, "${responseKey}", ${bodyExpr}, &resp); err != nil { \t\treturn nil, err \t} -\treturn &resp, nil +\t${returnStmt} } """ + } + + private String getPostResponseKey(String viewStructName, String responseStructName) { + if (allTo != null && !allTo.isEmpty()) { + return allTo } + if (inventoryFieldName != null && !inventoryFieldName.isEmpty() && viewStructName != responseStructName) { + return inventoryFieldName + } + return "" } private String generateQueryMethod(String apiPath, String viewStructName) { @@ -1001,50 +1000,20 @@ func (cli *ZSClient) ${getMethodName}(ctx context.Context, uuid string) (*view.$ private String generateDeleteViaPostMethod(String apiPath, String responseStructName) { boolean hasParams = hasApiParams() def placeholders = extractUrlPlaceholders(apiPath) - String cleanPath = removePlaceholders(apiPath) - - if (placeholders.size() >= 1) { - // Path has URL placeholders (e.g. /cdp-task/{uuid}/data) - // Build full URL with fmt.Sprintf and add placeholders as function parameters - String fullPath = buildFullPath(placeholders) - String placeholderParams = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") - - if (!hasParams) { - return """func (cli *ZSClient) ${clzName}(${placeholderParams}) (*view.${responseStructName}, error) { -\tresp := view.${responseStructName}{} -\tif err := cli.PostWithRespKey(${fullPath}, "", map[string]interface{}{}, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp, nil -} -""" - } - - return """func (cli *ZSClient) ${clzName}(${placeholderParams}, params param.${clzName}Param) (*view.${responseStructName}, error) { -\tresp := view.${responseStructName}{} -\tif err := cli.PostWithRespKey(${fullPath}, "", params, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp, nil -} -""" + String pathExpr = placeholders.isEmpty() ? "\"${removePlaceholders(apiPath)}\"" : buildFullPath(placeholders) + String placeholderParams = placeholders.collect { "${toSafeGoParamName(it)} string" }.join(", ") + String methodParams = "ctx context.Context" + if (!placeholderParams.isEmpty()) { + methodParams = "${methodParams}, ${placeholderParams}" } - - // No placeholders (e.g. /delete/sso/client) - if (!hasParams) { - return """func (cli *ZSClient) ${clzName}() (*view.${responseStructName}, error) { -\tresp := view.${responseStructName}{} -\tif err := cli.PostWithRespKey("${cleanPath}", "", map[string]interface{}{}, &resp); err != nil { -\t\treturn nil, err -\t} -\treturn &resp, nil -} -""" + if (hasParams) { + methodParams = "${methodParams}, params param.${clzName}Param" } + String bodyExpr = hasParams ? "params" : "map[string]interface{}{}" - return """func (cli *ZSClient) ${clzName}(params param.${clzName}Param) (*view.${responseStructName}, error) { + return """func (cli *ZSClient) ${clzName}(${methodParams}) (*view.${responseStructName}, error) { \tresp := view.${responseStructName}{} -\tif err := cli.PostWithRespKey("${cleanPath}", "", params, &resp); err != nil { +\tif err := cli.PostWithRespKey(ctx, ${pathExpr}, "", ${bodyExpr}, &resp); err != nil { \t\treturn nil, err \t} \treturn &resp, nil From 8f432a4674a80d50071866fdcbc3f5518f0fc1f0 Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Mon, 11 May 2026 14:47:02 +0800 Subject: [PATCH 43/56] [identity]: keep login user type in session Resolves: ZCF-3309 Change-Id: I8803a939fa2b125bccf9a2b0c7925e5173f8ee08 --- .../main/java/org/zstack/identity/login/LoginManagerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/identity/src/main/java/org/zstack/identity/login/LoginManagerImpl.java b/identity/src/main/java/org/zstack/identity/login/LoginManagerImpl.java index 45086320dba..b7cf5370ba6 100644 --- a/identity/src/main/java/org/zstack/identity/login/LoginManagerImpl.java +++ b/identity/src/main/java/org/zstack/identity/login/LoginManagerImpl.java @@ -267,6 +267,7 @@ private SessionInventory processSession(LoginSessionInfo info) { session.setUserType(info.getUserType()); } else { session = Session.login(info.getAccountUuid(), info.getUserUuid()); + session.setUserType(info.getUserType()); } return session; From 39bfd0b7af4f26f8bbdd95b00030cd5e789f5d55 Mon Sep 17 00:00:00 2001 From: lianghy Date: Mon, 11 May 2026 16:06:00 +0800 Subject: [PATCH 44/56] [sdk]: add context import for Go SDK actions Generated Go SDK action methods use context.Context, so generated client action files must import context. Resolves: ZCF-3385 --- rest/src/main/resources/scripts/GoInventory.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest/src/main/resources/scripts/GoInventory.groovy b/rest/src/main/resources/scripts/GoInventory.groovy index b38ae30a412..e14cba4f679 100644 --- a/rest/src/main/resources/scripts/GoInventory.groovy +++ b/rest/src/main/resources/scripts/GoInventory.groovy @@ -1357,6 +1357,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package client\n\n") content.append("import (\n") + content.append("\t\"context\"\n") if (needsFmt) { content.append("\t\"fmt\"\n") } @@ -1677,6 +1678,7 @@ class GoInventory implements SdkTemplate { content.append("// Copyright (c) ZStack.io, Inc.\n\n") content.append("package client\n\n") content.append("import (\n") + content.append("\t\"context\"\n") if (needsFmt) { content.append("\t\"fmt\"\n") } From 995fff9e2697a15d5e94ccfc8b1d1f5a44731ad5 Mon Sep 17 00:00:00 2001 From: lianghy Date: Mon, 11 May 2026 17:22:36 +0800 Subject: [PATCH 45/56] [sdk]: pass context to async Go SDK calls ZCF-3385 --- rest/src/main/resources/scripts/GoApiTemplate.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest/src/main/resources/scripts/GoApiTemplate.groovy b/rest/src/main/resources/scripts/GoApiTemplate.groovy index 28b93c866b5..b35256b3581 100644 --- a/rest/src/main/resources/scripts/GoApiTemplate.groovy +++ b/rest/src/main/resources/scripts/GoApiTemplate.groovy @@ -1380,7 +1380,7 @@ func (cli *ZSClient) ${getMethodName}(ctx context.Context, uuid string) (*view.$ builder.append("\tresponseKey := \"\"\n") builder.append("\tvar retVal interface{}\n") builder.append("\n") - builder.append("\tapiId, err := cli.PostWithAsync(resource, responseKey, params, retVal, true)\n") + builder.append("\tapiId, err := cli.PostWithAsync(ctx, resource, responseKey, params, retVal, true)\n") builder.append("\tif err != nil {\n") builder.append("\t\treturn \"\", err\n") builder.append("\t}\n") From 7f3792215878d036d3580ea4f049a6c8fed9f435 Mon Sep 17 00:00:00 2001 From: lianghy Date: Wed, 13 May 2026 10:05:19 +0800 Subject: [PATCH 46/56] [sdnController]: move ZNS API config Keep premium-only ZNS tenant-router query API registration out of the base sdnController service config so root unit tests do not load premium classes. Resolves: ZCF-3527 Change-Id: I66eeffc20a68768d7ad10319fb801b07410853f3 --- conf/serviceConfig/sdnController.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/conf/serviceConfig/sdnController.xml b/conf/serviceConfig/sdnController.xml index c1ee0e649de..2ae849eb987 100644 --- a/conf/serviceConfig/sdnController.xml +++ b/conf/serviceConfig/sdnController.xml @@ -40,11 +40,6 @@ query - - org.zstack.network.zns.APIQueryZnsTenantRouterMsg - query - - org.zstack.sdnController.header.APIPullSdnControllerTenantMsg query From 2cfc6518c2539217fdd3fada248915133257d0bd Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 02:48:24 +0800 Subject: [PATCH 47/56] [zcf]: fix cherry-pick whitespace Normalize whitespace introduced by cherry-picked SDK generator code. Change-Id: I1d0b17f7bf229be8c4db9505568ca5c09d773343 --- rest/src/main/resources/scripts/GoApiTemplate.groovy | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rest/src/main/resources/scripts/GoApiTemplate.groovy b/rest/src/main/resources/scripts/GoApiTemplate.groovy index b35256b3581..eb207e67ac4 100644 --- a/rest/src/main/resources/scripts/GoApiTemplate.groovy +++ b/rest/src/main/resources/scripts/GoApiTemplate.groovy @@ -1323,7 +1323,7 @@ func (cli *ZSClient) ${getMethodName}(ctx context.Context, uuid string) (*view.$ String paramsStr = "fmt.Sprintf(\"deleteMode=%s\", deleteMode)" return """func (cli *ZSClient) ${clzName}(ctx context.Context, ${params}, deleteMode param.DeleteMode) error { - return cli.DeleteWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) + return cli.DeleteWithSpec(ctx, "${cleanPath}", ${firstParam}, ${spec}, ${paramsStr}, nil) } """ } @@ -1534,4 +1534,3 @@ func (cli *ZSClient) ${getMethodName}(ctx context.Context, uuid string) (*view.$ return "fmt.Sprintf(\"${formatStr}\", ${params})" } } - From 51719995a3fe01f660e7d4d65aae50bbfa292c51 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 03:00:32 +0800 Subject: [PATCH 48/56] [zns]: address review comments Handle review feedback for ZNS NIC rollback. Propagate SDN release failures before local DB mutation. Refresh VM snapshots and reject conflicting znsNicMode tags. Use non-zero timestamp defaults in V5.5.22 upgrade SQL. Resolves: ZCF-1936 Change-Id: I27c3292ce4346caf3d27e2c2eb80d649d1dbcd31 --- .../zstack/compute/vm/VmAllocateNicFlow.java | 17 +++-- .../zstack/compute/vm/VmDetachNicFlow.java | 14 ++-- .../org/zstack/compute/vm/VmInstanceBase.java | 38 +++++++++- .../compute/vm/VmNicLifecycleManager.java | 72 +++++++++++-------- .../zstack/compute/vm/VmNicManagerImpl.java | 15 +++- .../compute/vm/VmReturnReleaseNicFlow.java | 36 ++++++---- conf/db/upgrade/V5.5.22__schema.sql | 24 +++---- 7 files changed, 146 insertions(+), 70 deletions(-) diff --git a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java index 4ab5d0235df..0e307a30b5c 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -100,7 +100,8 @@ public void run(final FlowTrigger trigger, final Map data) { int deviceId = deviceIdBitmap.nextClearBit(0); deviceIdBitmap.set(deviceId); MacOperator mo = new MacOperator(); - final String mac = allocateMac(mo, spec, nw, deviceId); + final String customMac = mo.getMac(spec.getVmInventory().getUuid(), nw.getUuid()); + final String mac = allocateMac(customMac, deviceId); CustomNicOperator nicOperator = new CustomNicOperator(spec.getVmInventory().getUuid(),nw.getUuid()); final String customNicUuid = nicOperator.getCustomNicId(); @@ -136,11 +137,20 @@ protected void scripts() { addVmNicConfig(updated, spec, nicSpec); } }.execute(); + if (customMac != null) { + mo.deleteCustomMacSystemTag(spec.getVmInventory().getUuid(), nw.getUuid(), customMac); + } wcomp.done(); } @Override public void fail(ErrorCode errorCode) { + try { + dbf.removeByPrimaryKey(nicVO.getUuid(), VmNicVO.class); + } catch (Throwable t) { + logger.warn(String.format("failed to remove VmNicVO[uuid:%s] after before allocate extension failure", + nicVO.getUuid()), t); + } errs.add(errorCode); wcomp.allDone(); } @@ -158,11 +168,8 @@ public void done(ErrorCodeList errorCodeList) { }); } - private String allocateMac(MacOperator mo, VmInstanceSpec spec, L3NetworkInventory nw, int deviceId) { - String vmUuid = spec.getVmInventory().getUuid(); - String customMac = mo.getMac(vmUuid, nw.getUuid()); + private String allocateMac(String customMac, int deviceId) { if (customMac != null) { - mo.deleteCustomMacSystemTag(vmUuid, nw.getUuid(), customMac); return customMac.toLowerCase(); } return MacOperator.generateMacWithDeviceId((short) deviceId); diff --git a/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java index 6c1d886af71..c42fac771ea 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java @@ -107,10 +107,7 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics failed for nic[uuid:%s]: %s, continue", - nic.getUuid(), errorCode)); - dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class); - trigger.next(); + trigger.fail(errorCode); } }); } @@ -133,14 +130,19 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); + logger.warn(String.format("releaseSdnNics extension failed: %s", errorCode)); + wcomp.addError(errorCode); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - completion.success(); + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } } }); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index ced9f7e6dc4..9ea61d5e758 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -99,6 +99,7 @@ public class VmInstanceBase extends AbstractVmInstance { protected static final CLogger logger = Utils.getLogger(VmInstanceBase.class); + private static final String ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS = "AttachCreatedVmSystemTagUuids"; @Autowired protected CloudBus bus; @@ -1297,7 +1298,12 @@ public void handle(ErrorCode errCode, Map data) { } private void notifyVmIpChanged(String vmNicUuid, Map oldIpMap, Map newIpMap) { - final VmInstanceInventory vm = getSelfInventory(); + VmInstanceVO latestVm = dbf.findByUuid(self.getUuid(), VmInstanceVO.class); + if (latestVm == null) { + return; + } + self = latestVm; + final VmInstanceInventory vm = VmInstanceInventory.valueOf(latestVm); VmNicVO latestNic = dbf.findByUuid(vmNicUuid, VmNicVO.class); if (latestNic == null) { return; @@ -2192,7 +2198,8 @@ public String getName() { @Deferred @SuppressWarnings({"rawtypes", "unchecked"}) - private void attachNic(final Message msg, final List l3Uuids, final ReturnValueCompletion completion) { + private void attachNic(final Message msg, final List l3Uuids, final Map outerFlowData, + final ReturnValueCompletion completion) { refreshVO(); ErrorCode allowed = validateOperationByState(msg, self.getState(), SysErrors.OPERATION_ERROR); if (allowed != null) { @@ -2288,6 +2295,12 @@ void rollback() { tagMgr.deleteSystemTag(tag.getUuid()); } } + + List getCreatedTagUuids() { + return createdTags.stream() + .map(SystemTagInventory::getUuid) + .collect(Collectors.toList()); + } } class SetCustomMacSystemTag { @@ -2322,6 +2335,9 @@ void rollback() { final SetVmSystemTags setSystemTag = new SetVmSystemTags(); setSystemTag.set(); Defer.guard(setSystemTag::rollback); + if (outerFlowData != null && !setSystemTag.getCreatedTagUuids().isEmpty()) { + outerFlowData.put(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS, setSystemTag.getCreatedTagUuids()); + } final SetCustomMacSystemTag setCustomMacSystemTag = new SetCustomMacSystemTag(); setCustomMacSystemTag.set(); @@ -2400,6 +2416,19 @@ public void handle(final ErrorCode errCode, Map data) { }).start(); } + @SuppressWarnings("unchecked") + private void rollbackAttachCreatedVmSystemTags(Map data) { + Object tagUuids = data.get(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS); + if (!(tagUuids instanceof List)) { + return; + } + + for (String tagUuid : (List) tagUuids) { + tagMgr.deleteSystemTag(tagUuid); + } + data.remove(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS); + } + private void attachNic(final APIAttachVmNicToVmMsg msg, final ReturnValueCompletion completion) { thdf.chainSubmit(new ChainTask(completion) { @Override @@ -2584,7 +2613,7 @@ public void run(final SyncTaskChain chain) { public void run(FlowTrigger trigger, Map data) { List l3Uuids = new ArrayList<>(); l3Uuids.add(l3Uuid); - attachNic((Message) msg, l3Uuids, new ReturnValueCompletion(trigger) { + attachNic((Message) msg, l3Uuids, data, new ReturnValueCompletion(trigger) { @Override public void success(VmNicInventory returnValue) { data.put(vmNicInvKey, returnValue); @@ -2610,11 +2639,13 @@ public void rollback(FlowRollback trigger, Map data) { doDetachNic(nic, true, true, new Completion(trigger) { @Override public void success() { + rollbackAttachCreatedVmSystemTags(data); trigger.rollback(); } @Override public void fail(ErrorCode errorCode) { + rollbackAttachCreatedVmSystemTags(data); trigger.rollback(); } }); @@ -2658,6 +2689,7 @@ public void handle(Map data) { }).error(new FlowErrorHandler(completion) { @Override public void handle(ErrorCode errCode, Map data) { + rollbackAttachCreatedVmSystemTags(data); completion.fail(errCode); chain.next(); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java index fc342f5395f..2a7348c416e 100644 --- a/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicLifecycleManager.java @@ -77,22 +77,28 @@ private void runSetup(VmNicLifecycleContext context, Iterator it, @@ -117,22 +123,28 @@ private void runPreMigrate(Iterator it, } long start = System.currentTimeMillis(); - ext.preMigrate(srcHostUuid, destHostUuid, nics, new Completion(completion) { - @Override - public void success() { - logger.debug(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s, nics=%d) " + - "completed in %dms", ext.getClass().getSimpleName(), - srcHostUuid, destHostUuid, nics.size(), System.currentTimeMillis() - start)); - runPreMigrate(it, srcHostUuid, destHostUuid, allNics, completion); - } + try { + ext.preMigrate(srcHostUuid, destHostUuid, nics, new Completion(completion) { + @Override + public void success() { + logger.debug(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s, nics=%d) " + + "completed in %dms", ext.getClass().getSimpleName(), + srcHostUuid, destHostUuid, nics.size(), System.currentTimeMillis() - start)); + runPreMigrate(it, srcHostUuid, destHostUuid, allNics, completion); + } - @Override - public void fail(ErrorCode errorCode) { - logger.warn(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s) failed: %s", - ext.getClass().getSimpleName(), srcHostUuid, destHostUuid, errorCode)); - completion.fail(errorCode); - } - }); + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("[VmNicLifecycle] %s.preMigrate(src=%s, dest=%s) failed: %s", + ext.getClass().getSimpleName(), srcHostUuid, destHostUuid, errorCode)); + completion.fail(errorCode); + } + }); + } catch (Throwable t) { + completion.fail(Platform.err(SysErrors.OPERATION_ERROR.toString(), SysErrors.OPERATION_ERROR, + "%s.preMigrate(src=%s, dest=%s) threw exception: %s", + ext.getClass().getSimpleName(), srcHostUuid, destHostUuid, t.getMessage())); + } } // ===================== fail-logged serial runner (cleanup / postMigrate / failedMigrate) ===================== diff --git a/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java b/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java index 906d3953c8b..50382ad85c7 100644 --- a/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java @@ -306,7 +306,13 @@ public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw, List VmSystemTags.ZNS_NIC_MODE.getTokenByTag(tag, VmSystemTags.ZNS_NIC_MODE_TOKEN)) .collect(Collectors.toList())); - for (String mode : znsNicModes) { + List normalizedModes = znsNicModes.stream() + .filter(Objects::nonNull) + .map(String::trim) + .distinct() + .collect(Collectors.toList()); + + for (String mode : normalizedModes) { if (!VmInstanceConstant.ZNS_NIC_MODE_DPDK.equals(mode) && !VmInstanceConstant.ZNS_NIC_MODE_KERNEL.equals(mode)) { throw new OperationFailureException(argerr(ORG_ZSTACK_COMPUTE_VM_10257, "invalid znsNicMode[%s], valid values are [%s, %s]", @@ -314,7 +320,12 @@ public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw, List 1) { + throw new OperationFailureException(argerr(ORG_ZSTACK_COMPUTE_VM_10257, + "conflicting znsNicMode tags %s, only one mode is allowed", normalizedModes)); + } + + boolean enableZnsDpdk = normalizedModes.contains(VmInstanceConstant.ZNS_NIC_MODE_DPDK); logger.debug(String.format("create %s on zns l3 network[uuid:%s] inside VmAllocateNicFlow", enableZnsDpdk ? "dpdk vhostuser nic" : "vnic", l3nw.getUuid())); return vSwitchType.getVmNicType(enableZnsDpdk ? VmNicType.VmNicSubType.VHOSTUSER : VmNicType.VmNicSubType.NONE); diff --git a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java index 7279d7e8af5..986a955cd10 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java @@ -85,17 +85,14 @@ public void run(MessageReply reply) { public void done(ErrorCodeList errorCodeList) { List releasedNics = new ArrayList<>(); List nicsToDelete = new ArrayList<>(); + List nicsToReleaseIp = new ArrayList<>(); for (VmNicInventory nic : spec.getVmInventory().getVmNics()) { VmNicVO vo = dbf.findByUuid(nic.getUuid(), VmNicVO.class); if (VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType())) { if (deletionPolicy == VmInstanceDeletionPolicy.Direct) { nicsToDelete.add(vo); } else { - vo.setUsedIpUuid(null); - vo.setIp(null); - vo.setGateway(null); - vo.setNetmask(null); - dbf.update(vo); + nicsToReleaseIp.add(vo); } } else { nicsToDelete.add(vo); @@ -106,15 +103,20 @@ public void done(ErrorCodeList errorCodeList) { Completion releaseDone = new Completion(chain) { @Override public void success() { + for (VmNicVO vo : nicsToReleaseIp) { + vo.setUsedIpUuid(null); + vo.setIp(null); + vo.setGateway(null); + vo.setNetmask(null); + dbf.update(vo); + } nicsToDelete.forEach(dbf::remove); chain.next(); } @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics failed: %s, continue anyway", errorCode)); - nicsToDelete.forEach(dbf::remove); - chain.next(); + chain.fail(errorCode); } }; @@ -148,14 +150,19 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseNicIps extension failed: %s, continue", errorCode)); + logger.warn(String.format("releaseNicIps extension failed: %s", errorCode)); + wcomp.addError(errorCode); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - completion.success(); + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } } }); } @@ -176,14 +183,19 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); + logger.warn(String.format("releaseSdnNics extension failed: %s", errorCode)); + wcomp.addError(errorCode); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - completion.success(); + if (errorCodeList.getCauses().isEmpty()) { + completion.success(); + } else { + completion.fail(errorCodeList.getCauses().get(0)); + } } }); } diff --git a/conf/db/upgrade/V5.5.22__schema.sql b/conf/db/upgrade/V5.5.22__schema.sql index f965b698ef2..857f73bf09e 100644 --- a/conf/db/upgrade/V5.5.22__schema.sql +++ b/conf/db/upgrade/V5.5.22__schema.sql @@ -40,8 +40,8 @@ CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupVO` ( `type` VARCHAR(128) NOT NULL, `minAvailableCount` INT(10) NOT NULL DEFAULT 1, `state` VARCHAR(32) NOT NULL DEFAULT 'Enabled', - `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00', PRIMARY KEY (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -49,8 +49,8 @@ CREATE TABLE IF NOT EXISTS `zstack`.`HaNetworkGroupL3NetworkRefVO` ( `uuid` VARCHAR(32) NOT NULL UNIQUE COMMENT 'uuid', `haNetworkGroupUuid` VARCHAR(32) NOT NULL, `l3NetworkUuid` VARCHAR(32) NOT NULL, - `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00', PRIMARY KEY (`uuid`), INDEX `idxHaNetworkGroupL3NetworkRefVOhaNetworkGroupUuid` (`haNetworkGroupUuid`), UNIQUE INDEX `ukHaNetworkGroupL3NetworkRefVOl3NetworkUuid` (`l3NetworkUuid`), @@ -63,8 +63,8 @@ CREATE TABLE IF NOT EXISTS `zstack`.`HostHaNetworkGroupStatusVO` ( `hostUuid` VARCHAR(32) NOT NULL, `networkGroupUuid` VARCHAR(32) NOT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'Unknown', - `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00', PRIMARY KEY (`uuid`), UNIQUE INDEX `ukHostHaNetworkGroupStatusVOHostUuidNetworkGroupUuid` (`hostUuid`, `networkGroupUuid`), INDEX `idxHostHaNetworkGroupStatusVOhostUuid` (`hostUuid`), @@ -108,8 +108,8 @@ CREATE TABLE IF NOT EXISTS `ZnsTransportZoneVO` ( `isDefault` tinyint(1) NOT NULL DEFAULT 0, `tags` text DEFAULT NULL, `znsSdnControllerUuid` varchar(32) NOT NULL, - `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', - `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uuid`), UNIQUE KEY `uk_zns_tz_resource` (`znsSdnControllerUuid`, `znsResourceUuid`), CONSTRAINT `fkZnsTransportZoneVOSdnControllerVO` FOREIGN KEY (`znsSdnControllerUuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE @@ -124,8 +124,8 @@ CREATE TABLE IF NOT EXISTS `ZnsTenantVO` ( `znsResourceUuid` VARCHAR(64) NOT NULL, `name` VARCHAR(255) NOT NULL, `description` TEXT DEFAULT NULL, - `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', PRIMARY KEY (`uuid`), UNIQUE KEY `uk_zns_tenant_resource` (`sdnControllerUuid`, `znsResourceUuid`), CONSTRAINT `fk_zns_tenant_sdn` FOREIGN KEY (`sdnControllerUuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE @@ -139,8 +139,8 @@ CREATE TABLE IF NOT EXISTS `ZnsTenantRouterVO` ( `name` VARCHAR(255) NOT NULL, `description` TEXT DEFAULT NULL, `state` VARCHAR(32) DEFAULT NULL COMMENT 'Active / Inactive', - `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + `createDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', PRIMARY KEY (`uuid`), UNIQUE KEY `uk_zns_tr_resource` (`sdnControllerUuid`, `znsResourceUuid`), KEY `idx_zns_tr_tenant` (`tenantUuid`), From 0a307e76e36075d6f1eb7ddcab938ad3a4123421 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 07:24:54 +0800 Subject: [PATCH 49/56] [zns]: address review notes Handle MR 9894 review comments for VNI validation, docs, and lifecycle cleanup. Resolves: ZCF-1936 Change-Id: Iad843ca905a198ef1d58f3adc7a8715e3b9d93f7 --- docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md | 6 +++--- .../header/vm/AfterAllocateVmNicIpExtensionPoint.java | 6 ++++++ .../zstack/header/vm/AfterReleaseVmNicExtensionPoint.java | 6 ++++++ .../java/org/zstack/network/l2/L2NetworkApiInterceptor.java | 6 +++--- .../main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java | 4 ++-- .../java/org/zstack/sdnController/SdnControllerBase.java | 1 + 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md b/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md index 64ae52f58b8..e6b6a26a834 100644 --- a/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md +++ b/docs/design/zns-pivot/ZCF-2133-zns-pivot-detailed-design.md @@ -39,7 +39,7 @@ ### 2.2 范围 本文档覆盖 ZNS 插件目录: -``` +```text zstack/premium/plugin-premium/zns/src/main/java/org/zstack/network/zns/ ``` 以及关联的 KVM 插件改动(DPDK NIC 命令)和 VM NIC 类型计算改动。 @@ -337,7 +337,7 @@ class AddComputeManagerHandler { 在 `ZnsSdnController.initSdnController` 中,删除 Flow 5 `create-l2-l3-from-segments`。 **变更前**(5 个 Flow): -``` +```text Flow 1: sync-compute-collections Flow 2: fetch-discovered-nodes Flow 3: derive-vswitch-and-create-host-refs @@ -346,7 +346,7 @@ Flow 5: create-l2-l3-from-segments ← 删除此 Flow ``` **变更后**(4 个 Flow): -``` +```text Flow 1: sync-compute-collections Flow 2: fetch-discovered-nodes Flow 3: derive-vswitch-and-create-host-refs diff --git a/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java index 0afba727a42..7ff132bdc9c 100644 --- a/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/vm/AfterAllocateVmNicIpExtensionPoint.java @@ -15,5 +15,11 @@ * VmAllocateNicIpFlow.rollback (returns IPs) → VmAllocateNicFlow.rollback (deletes NICs). */ public interface AfterAllocateVmNicIpExtensionPoint { + /** + * Runs after VM NIC IPs are allocated and persisted. + * + * @param spec VM allocation spec containing the latest destination NIC inventories + * @param completion must be completed by the implementation + */ void afterAllocateVmNicIp(VmInstanceSpec spec, Completion completion); } diff --git a/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java index 102114111ca..8375f1df87e 100644 --- a/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/vm/AfterReleaseVmNicExtensionPoint.java @@ -8,5 +8,11 @@ * Cloud DB deletion must succeed before this extension point is invoked. */ public interface AfterReleaseVmNicExtensionPoint { + /** + * Runs after the VM NIC has been deleted from Cloud DB. + * + * @param nic inventory snapshot of the deleted NIC + * @param completion must be completed by the implementation + */ void afterReleaseVmNic(VmNicInventory nic, Completion completion); } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java index 29f0a245f19..9b4ab106303 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkApiInterceptor.java @@ -268,14 +268,14 @@ private void validate(APIChangeL2NetworkVlanIdMsg msg) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10020, "There has been a l2Network attached to cluster that has physical interface[%s]. Failed to change l2Network[uuid:%s]", l2.getPhysicalInterface(), l2.getUuid())); } - } else if (targetIsGeneve) { + } else if (targetIsGeneve || targetIsVxlan) { if (msg.getVlan() == null) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10016, "vni is required for " + "ChangeL2NetworkVlanId with type[%s]", msg.getType())); } - if (msg.getVlan() < 1 || msg.getVlan() > 16777215) { + if (!NetworkUtils.isValidVni(msg.getVlan())) { throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_NETWORK_L2_10017, "invalid vni[%d] for " + - "ChangeL2NetworkVlanId, must be between 1 and 16777215", msg.getVlan())); + "ChangeL2NetworkVlanId, must be between 1 and %d", msg.getVlan(), L2NetworkConstant.VXLAN_ID_MAX)); } } } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java b/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java index 9a2816da90f..c1ecdd4c716 100644 --- a/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/VmNicLifecycleKvmBridge.java @@ -96,11 +96,11 @@ public void done() { } } }); - } catch (Throwable t) { + } catch (Exception e) { if (completed.compareAndSet(false, true)) { receipt.cancel(); logger.warn(String.format("[VmNicLifecycle] %s.reconcileOnHost(host=%s) " + - "threw exception", ext.getClass().getSimpleName(), hostUuid), t); + "threw exception", ext.getClass().getSimpleName(), hostUuid), e); whileCompletion.done(); } } diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java index 029f618f020..848c962b2e3 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java @@ -205,6 +205,7 @@ public void run(FlowTrigger trigger, Map data) { if (changed) { String newUsername = self.getUsername(); String newPassword = self.getPassword(); + // Keep concurrent DB changes while applying the credential update. self = dbf.reload(self); self.setUsername(newUsername); self.setPassword(newPassword); From 1013db385f1fb137e316b3d1e700b66ecc57a508 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 07:30:58 +0800 Subject: [PATCH 50/56] [compute]: avoid duplicate tag cleanup Defer attach system tag handoff until attachNic succeeds. Resolves: ZCF-1936 Change-Id: I06577a647e642f7699ae5255818b0a5b47528bdc --- .../main/java/org/zstack/compute/vm/VmInstanceBase.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index 9ea61d5e758..7ac254bd6f5 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -2335,9 +2335,6 @@ void rollback() { final SetVmSystemTags setSystemTag = new SetVmSystemTags(); setSystemTag.set(); Defer.guard(setSystemTag::rollback); - if (outerFlowData != null && !setSystemTag.getCreatedTagUuids().isEmpty()) { - outerFlowData.put(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS, setSystemTag.getCreatedTagUuids()); - } final SetCustomMacSystemTag setCustomMacSystemTag = new SetCustomMacSystemTag(); setCustomMacSystemTag.set(); @@ -2401,6 +2398,9 @@ public void handle(Map data) { CollectionUtils.safeForEach(pluginRgty.getExtensionList(VmAfterAttachL3NetworkExtensionPoint.class), arg -> l3s.forEach(l3 -> arg.vmAfterAttachL3Network(vm, l3))); VmNicInventory nic = spec.getDestNics().get(0); + if (outerFlowData != null && !setSystemTag.getCreatedTagUuids().isEmpty()) { + outerFlowData.put(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS, setSystemTag.getCreatedTagUuids()); + } completion.success(nic); } }).error(new FlowErrorHandler(completion) { @@ -2411,6 +2411,9 @@ public void handle(final ErrorCode errCode, Map data) { setDefaultL3Network.rollback(); setStaticIp.rollback(); setSystemTag.rollback(); + if (outerFlowData != null) { + outerFlowData.remove(ATTACH_CREATED_VM_SYSTEM_TAG_UUIDS); + } completion.fail(errCode); } }).start(); From 34ffd7c8293ef31f507689fa07dd270f1551ec68 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 08:07:10 +0800 Subject: [PATCH 51/56] [compute]: preserve local nic cleanup Keep original ZStack local NIC cleanup semantics when SDN release fails. Resolves: ZCF-1936 Change-Id: I0625a0660eef8d7f3b0c0b2f7c3979c1d4c2ca9c --- .../zstack/compute/vm/VmDetachNicFlow.java | 14 ++++---- .../compute/vm/VmReturnReleaseNicFlow.java | 36 +++++++------------ 2 files changed, 18 insertions(+), 32 deletions(-) diff --git a/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java index c42fac771ea..6c1d886af71 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java @@ -107,7 +107,10 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - trigger.fail(errorCode); + logger.warn(String.format("releaseSdnNics failed for nic[uuid:%s]: %s, continue", + nic.getUuid(), errorCode)); + dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class); + trigger.next(); } }); } @@ -130,19 +133,14 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics extension failed: %s", errorCode)); - wcomp.addError(errorCode); + logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - if (errorCodeList.getCauses().isEmpty()) { - completion.success(); - } else { - completion.fail(errorCodeList.getCauses().get(0)); - } + completion.success(); } }); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java index 986a955cd10..7279d7e8af5 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java @@ -85,14 +85,17 @@ public void run(MessageReply reply) { public void done(ErrorCodeList errorCodeList) { List releasedNics = new ArrayList<>(); List nicsToDelete = new ArrayList<>(); - List nicsToReleaseIp = new ArrayList<>(); for (VmNicInventory nic : spec.getVmInventory().getVmNics()) { VmNicVO vo = dbf.findByUuid(nic.getUuid(), VmNicVO.class); if (VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType())) { if (deletionPolicy == VmInstanceDeletionPolicy.Direct) { nicsToDelete.add(vo); } else { - nicsToReleaseIp.add(vo); + vo.setUsedIpUuid(null); + vo.setIp(null); + vo.setGateway(null); + vo.setNetmask(null); + dbf.update(vo); } } else { nicsToDelete.add(vo); @@ -103,20 +106,15 @@ public void done(ErrorCodeList errorCodeList) { Completion releaseDone = new Completion(chain) { @Override public void success() { - for (VmNicVO vo : nicsToReleaseIp) { - vo.setUsedIpUuid(null); - vo.setIp(null); - vo.setGateway(null); - vo.setNetmask(null); - dbf.update(vo); - } nicsToDelete.forEach(dbf::remove); chain.next(); } @Override public void fail(ErrorCode errorCode) { - chain.fail(errorCode); + logger.warn(String.format("releaseSdnNics failed: %s, continue anyway", errorCode)); + nicsToDelete.forEach(dbf::remove); + chain.next(); } }; @@ -150,19 +148,14 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseNicIps extension failed: %s", errorCode)); - wcomp.addError(errorCode); + logger.warn(String.format("releaseNicIps extension failed: %s, continue", errorCode)); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - if (errorCodeList.getCauses().isEmpty()) { - completion.success(); - } else { - completion.fail(errorCodeList.getCauses().get(0)); - } + completion.success(); } }); } @@ -183,19 +176,14 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - logger.warn(String.format("releaseSdnNics extension failed: %s", errorCode)); - wcomp.addError(errorCode); + logger.warn(String.format("releaseSdnNics extension failed: %s, continue", errorCode)); wcomp.done(); } }); }).run(new WhileDoneCompletion(completion) { @Override public void done(ErrorCodeList errorCodeList) { - if (errorCodeList.getCauses().isEmpty()) { - completion.success(); - } else { - completion.fail(errorCodeList.getCauses().get(0)); - } + completion.success(); } }); } From 315dabe6a3fcb371a02f08b1d79c60ff1833459d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 17 May 2026 08:30:26 +0800 Subject: [PATCH 52/56] [sdk]: update source class map Commit generated SDK SourceClassMap changes. Resolves: ZCF-1936 Change-Id: If390fcea08110d40242e8e12ea6669c2f4f8a32f --- sdk/src/main/java/SourceClassMap.java | 3588 ++++++++--------- .../zns/CreateL2GeneveNetworkAction.java | 8 +- .../sdk/network/zns/QueryZnsTenantAction.java | 8 +- .../zns/QueryZnsTenantRouterAction.java | 8 +- 4 files changed, 1806 insertions(+), 1806 deletions(-) diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 8d80a6bc7df..4719de1c0c9 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -5,1805 +5,1805 @@ public class SourceClassMap { public final static HashMap srcToDstMapping = new HashMap() { { - put("org.zstack.abstraction.OptionType", "org.zstack.sdk.OptionType"); - put("org.zstack.abstraction.OptionType$InputType", "org.zstack.sdk.InputType"); - put("org.zstack.accessKey.AccessKeyInventory", "org.zstack.sdk.AccessKeyInventory"); - put("org.zstack.accessKey.AccessKeyState", "org.zstack.sdk.AccessKeyState"); - put("org.zstack.accessKey.AccessKeyType", "org.zstack.sdk.AccessKeyType"); - put("org.zstack.ai.NginxRedirectRule", "org.zstack.sdk.NginxRedirectRule"); - put("org.zstack.ai.entity.ApplicationDevelopmentServiceInventory", "org.zstack.sdk.ApplicationDevelopmentServiceInventory"); - put("org.zstack.ai.entity.DatasetInventory", "org.zstack.sdk.DatasetInventory"); - put("org.zstack.ai.entity.ModelCenterCapacityInventory", "org.zstack.sdk.ModelCenterCapacityInventory"); - put("org.zstack.ai.entity.ModelCenterInventory", "org.zstack.sdk.ModelCenterInventory"); - put("org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory", "org.zstack.sdk.ModelEvalServiceInstanceGroupInventory"); - put("org.zstack.ai.entity.ModelEvaluationTaskInventory", "org.zstack.sdk.ModelEvaluationTaskInventory"); - put("org.zstack.ai.entity.ModelInventory", "org.zstack.sdk.ModelInventory"); - put("org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory", "org.zstack.sdk.ModelServiceGroupDatasetRefInventory"); - put("org.zstack.ai.entity.ModelServiceInstanceGroupInventory", "org.zstack.sdk.ModelServiceInstanceGroupInventory"); - put("org.zstack.ai.entity.ModelServiceInstanceInventory", "org.zstack.sdk.ModelServiceInstanceInventory"); - put("org.zstack.ai.entity.ModelServiceInventory", "org.zstack.sdk.ModelServiceInventory"); - put("org.zstack.ai.entity.ModelServiceRefInventory", "org.zstack.sdk.ModelServiceRefInventory"); - put("org.zstack.ai.entity.ModelServiceTemplateInventory", "org.zstack.sdk.ModelServiceTemplateInventory"); - put("org.zstack.ai.entity.TrainedModelRecordInventory", "org.zstack.sdk.TrainedModelRecordInventory"); - put("org.zstack.ai.entity.VmModelMountInventory", "org.zstack.sdk.VmModelMountInventory"); - put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); - put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); - put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); - put("org.zstack.ai.message.MatchEvidence", "org.zstack.sdk.MatchEvidence"); - put("org.zstack.ai.message.MatchedStep", "org.zstack.sdk.MatchedStep"); - put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); - put("org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService", "org.zstack.sdk.MetaServerService"); - put("org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus", "org.zstack.sdk.ServiceStatus"); - put("org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService", "org.zstack.sdk.ZdfsService"); - put("org.zstack.ai.message.ModelService", "org.zstack.sdk.ModelService"); - put("org.zstack.ai.message.ModelServiceMatchEntry", "org.zstack.sdk.ModelServiceMatchEntry"); - put("org.zstack.ai.message.ModelServiceMatchEntryName", "org.zstack.sdk.ModelServiceMatchEntryName"); - put("org.zstack.ai.message.ModelServiceMatchStatus", "org.zstack.sdk.ModelServiceMatchStatus"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory", "org.zstack.sdk.AliyunNasAccessGroupInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory", "org.zstack.sdk.AliyunNasAccessRuleInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory", "org.zstack.sdk.AliyunNasFileSystemInventory"); - put("org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory", "org.zstack.sdk.AliyunNasMountTargetInventory"); - put("org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty", "org.zstack.sdk.AliyunNasAccessGroupProperty"); - put("org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty", "org.zstack.sdk.AliyunNasFileSystemProperty"); - put("org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty", "org.zstack.sdk.AliyunNasMountTargetProperty"); - put("org.zstack.aliyun.pangu.AliyunPanguPartitionInventory", "org.zstack.sdk.AliyunPanguPartitionInventory"); - put("org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory", "org.zstack.sdk.AliyunProxyVSwitchInventory"); - put("org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory", "org.zstack.sdk.AliyunProxyVpcInventory"); - put("org.zstack.appliancevm.ApplianceVmInventory", "org.zstack.sdk.ApplianceVmInventory"); - put("org.zstack.autoscaling.group.AutoScalingGroupInventory", "org.zstack.sdk.AutoScalingGroupInventory"); - put("org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory", "org.zstack.sdk.AutoScalingGroupActivityInventory"); - put("org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory", "org.zstack.sdk.AutoScalingGroupInstanceInventory"); - put("org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory", "org.zstack.sdk.AddingNewVmRuleInventory"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleInventory", "org.zstack.sdk.AutoScalingRuleInventory"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleState", "org.zstack.sdk.AutoScalingRuleState"); - put("org.zstack.autoscaling.group.rule.AutoScalingRuleStatus", "org.zstack.sdk.AutoScalingRuleStatus"); - put("org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory", "org.zstack.sdk.RemovalInstanceRuleInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory", "org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory"); - put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory", "org.zstack.sdk.AutoScalingRuleTriggerInventory"); - put("org.zstack.autoscaling.template.AutoScalingTemplateInventory", "org.zstack.sdk.AutoScalingTemplateInventory"); - put("org.zstack.autoscaling.template.AutoScalingVmTemplateInventory", "org.zstack.sdk.AutoScalingVmTemplateInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2BondingInventory", "org.zstack.sdk.BareMetal2BondingInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory", "org.zstack.sdk.BareMetal2BondingNicRefInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory", "org.zstack.sdk.BareMetal2ChassisDiskInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory", "org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisInventory", "org.zstack.sdk.BareMetal2ChassisInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory", "org.zstack.sdk.BareMetal2ChassisNicInventory"); - put("org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory", "org.zstack.sdk.BareMetal2ChassisPciDeviceInventory"); - put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig", "org.zstack.sdk.BareMetal2DpuChassisConfig"); - put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory", "org.zstack.sdk.BareMetal2DpuChassisInventory"); - put("org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory", "org.zstack.sdk.BareMetal2IpmiChassisInventory"); - put("org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory", "org.zstack.sdk.BareMetal2ChassisOfferingInventory"); - put("org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory", "org.zstack.sdk.BareMetal2DpuHostInventory"); - put("org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig", "org.zstack.sdk.YuccaBareMetal2DpuChassisConfig"); - put("org.zstack.baremetal2.gateway.BareMetal2GatewayInventory", "org.zstack.sdk.BareMetal2GatewayInventory"); - put("org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory", "org.zstack.sdk.BareMetal2GatewayProvisionNicInventory"); - put("org.zstack.baremetal2.instance.BareMetal2InstanceInventory", "org.zstack.sdk.BareMetal2InstanceInventory"); - put("org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory", "org.zstack.sdk.BareMetal2InstanceProvisionNicInventory"); - put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory", "org.zstack.sdk.BareMetal2ProvisionNetworkInventory"); - put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity"); - put("org.zstack.billing.Pagination", "org.zstack.sdk.Pagination"); - put("org.zstack.billing.PriceInventory", "org.zstack.sdk.PriceInventory"); - put("org.zstack.billing.ResourceSpending", "org.zstack.sdk.ResourceSpending"); - put("org.zstack.billing.Spending", "org.zstack.sdk.Spending"); - put("org.zstack.billing.SpendingDetails", "org.zstack.sdk.SpendingDetails"); - put("org.zstack.billing.generator.BillingInventory", "org.zstack.sdk.BillingInventory"); - put("org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory", "org.zstack.sdk.BareMetal2BillingInventory"); - put("org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory", "org.zstack.sdk.PciDeviceBillingInventory"); - put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory", "org.zstack.sdk.PubIpVipBandwidthInBillingInventory"); - put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVipBandwidthOutBillingInventory"); - put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory"); - put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory"); - put("org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory", "org.zstack.sdk.VmCPUBillingInventory"); - put("org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory", "org.zstack.sdk.VmMemoryBillingInventory"); - put("org.zstack.billing.generator.volume.data.DataVolumeBillingInventory", "org.zstack.sdk.DataVolumeBillingInventory"); - put("org.zstack.billing.generator.volume.root.RootVolumeBillingInventory", "org.zstack.sdk.RootVolumeBillingInventory"); - put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending", "org.zstack.sdk.BareMetal2Spending"); - put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails", "org.zstack.sdk.BareMetal2SpendingDetails"); - put("org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory"); - put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending", "org.zstack.sdk.PciDeviceSpending"); - put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory", "org.zstack.sdk.PciDeviceSpendingInventory"); - put("org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory", "org.zstack.sdk.PricePciDeviceOfferingRefInventory"); - put("org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory", "org.zstack.sdk.SnapShotSpendingInventory"); - put("org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending", "org.zstack.sdk.SnapshotSpending"); - put("org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending", "org.zstack.sdk.PubIpVipBandwidthSpending"); - put("org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails", "org.zstack.sdk.VipBandwidthSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails", "org.zstack.sdk.VmCPUSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails", "org.zstack.sdk.VmMemorySpendingDetails"); - put("org.zstack.billing.spendingcalculator.vm.VmSpending", "org.zstack.sdk.VmSpending"); - put("org.zstack.billing.spendingcalculator.vm.VmSpendingDetails", "org.zstack.sdk.VmSpendingDetails"); - put("org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending", "org.zstack.sdk.PubIpVmNicBandwidthSpending"); - put("org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails", "org.zstack.sdk.VmNicBandwidthSpendingDetails"); - put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending", "org.zstack.sdk.DataVolumeSpending"); - put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory", "org.zstack.sdk.DataVolumeSpendingInventory"); - put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending", "org.zstack.sdk.RootVolumeSpending"); - put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory", "org.zstack.sdk.RootVolumeSpendingInventory"); - put("org.zstack.billing.table.APICreatePriceTableMsg$Price", "org.zstack.sdk.Price"); - put("org.zstack.billing.table.AccountPriceTableRefInventory", "org.zstack.sdk.AccountPriceTableRefInventory"); - put("org.zstack.billing.table.PriceTableInventory", "org.zstack.sdk.PriceTableInventory"); - put("org.zstack.cloudformation.template.struct.ActionStruct", "org.zstack.sdk.ActionStruct"); - put("org.zstack.cloudformation.template.struct.ResourceStruct", "org.zstack.sdk.ResourceStruct"); - put("org.zstack.cloudformation.template.struct.ResourceType", "org.zstack.sdk.ResourceType"); - put("org.zstack.container.ContainerBackupStorageInventory", "org.zstack.sdk.ContainerBackupStorageInventory"); - put("org.zstack.container.ContainerUsage", "org.zstack.sdk.ContainerUsage"); - put("org.zstack.container.entity.ContainerImageInventory", "org.zstack.sdk.ContainerImageInventory"); - put("org.zstack.container.entity.ContainerImageTagInventory", "org.zstack.sdk.ContainerImageTagInventory"); - put("org.zstack.container.entity.ContainerManagementEndpointInventory", "org.zstack.sdk.ContainerManagementEndpointInventory"); - put("org.zstack.container.entity.NativeClusterInventory", "org.zstack.sdk.NativeClusterInventory"); - put("org.zstack.container.entity.NativeHostInventory", "org.zstack.sdk.NativeHostInventory"); - put("org.zstack.container.entity.PodInventory", "org.zstack.sdk.PodInventory"); - put("org.zstack.container.entity.ProjectRepositoryInventory", "org.zstack.sdk.ProjectRepositoryInventory"); - put("org.zstack.container.entity.ZakuImageInventory", "org.zstack.sdk.ZakuImageInventory"); - put("org.zstack.core.config.GlobalConfigInventory", "org.zstack.sdk.GlobalConfigInventory"); - put("org.zstack.core.config.GlobalConfigOptions", "org.zstack.sdk.GlobalConfigOptions"); - put("org.zstack.core.config.GuestOsCharacterInventory", "org.zstack.sdk.GuestOsCharacterInventory"); - put("org.zstack.core.errorcode.ElaborationCategory", "org.zstack.sdk.ElaborationCategory"); - put("org.zstack.core.errorcode.ElaborationCheckResult", "org.zstack.sdk.ElaborationCheckResult"); - put("org.zstack.core.errorcode.ElaborationContent", "org.zstack.sdk.ElaborationContent"); - put("org.zstack.core.eventlog.EventLogInventory", "org.zstack.sdk.EventLogInventory"); - put("org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder", "org.zstack.sdk.ExternalServiceCapabilitiesBuilder"); - put("org.zstack.core.gc.GarbageCollectorInventory", "org.zstack.sdk.GarbageCollectorInventory"); - put("org.zstack.core.jsonlabel.JsonLabelInventory", "org.zstack.sdk.JsonLabelInventory"); - put("org.zstack.core.upgrade.AgentVersionInventory", "org.zstack.sdk.AgentVersionInventory"); - put("org.zstack.crypto.ccs.CCSCertificateInventory", "org.zstack.sdk.CCSCertificateInventory"); - put("org.zstack.crypto.ccs.CCSCertificateUserRefInventory", "org.zstack.sdk.CCSCertificateUserRefInventory"); - put("org.zstack.crypto.ccs.CCSCertificateUserState", "org.zstack.sdk.CCSCertificateUserState"); - put("org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory", "org.zstack.sdk.AiSiNoSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory", "org.zstack.sdk.CSPSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory", "org.zstack.sdk.FiSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory", "org.zstack.sdk.FiSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory", "org.zstack.sdk.FlkSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory", "org.zstack.sdk.FlkSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory", "org.zstack.sdk.HaiTaiSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory", "org.zstack.sdk.InfoSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory", "org.zstack.sdk.InfoSecSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory", "org.zstack.sdk.JitSecurityMachineInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory", "org.zstack.sdk.KoAlSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory", "org.zstack.sdk.PluginSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory", "org.zstack.sdk.SanSecSecretResourcePoolInventory"); - put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory", "org.zstack.sdk.SanSecSecurityMachineInventory"); - put("org.zstack.directory.DirectoryInventory", "org.zstack.sdk.DirectoryInventory"); - put("org.zstack.drs.api.HostLoad", "org.zstack.sdk.HostLoad"); - put("org.zstack.drs.api.Threshold", "org.zstack.sdk.Threshold"); - put("org.zstack.drs.entity.ClusterDRSInventory", "org.zstack.sdk.ClusterDRSInventory"); - put("org.zstack.drs.entity.DRSAdviceInventory", "org.zstack.sdk.DRSAdviceInventory"); - put("org.zstack.drs.entity.DRSVmMigrationActivityInventory", "org.zstack.sdk.DRSVmMigrationActivityInventory"); - put("org.zstack.externalbackup.BackupStorageExternalBackupInfo", "org.zstack.sdk.BackupStorageExternalBackupInfo"); - put("org.zstack.externalbackup.ExternalBackupInventory", "org.zstack.sdk.ExternalBackupInventory"); - put("org.zstack.externalbackup.ExternalBackupState", "org.zstack.sdk.ExternalBackupState"); - put("org.zstack.externalbackup.ResourceBackupState", "org.zstack.sdk.ResourceBackupState"); - put("org.zstack.externalbackup.ResourceExternalBackupInfo", "org.zstack.sdk.ResourceExternalBackupInfo"); - put("org.zstack.externalbackup.VmExternalBackupInfo", "org.zstack.sdk.VmExternalBackupInfo"); - put("org.zstack.externalbackup.VolumeExternalBackupInfo", "org.zstack.sdk.VolumeExternalBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxBackupInventory", "org.zstack.sdk.ZBoxBackupInventory"); - put("org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo", "org.zstack.sdk.ZBoxBackupStorageBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxVmBackupInfo", "org.zstack.sdk.ZBoxVmBackupInfo"); - put("org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo", "org.zstack.sdk.ZBoxVolumeBackupInfo"); - put("org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory", "org.zstack.sdk.FaultToleranceVmGroupInventory"); - put("org.zstack.guesttools.GuestToolsInventory", "org.zstack.sdk.GuestToolsInventory"); - put("org.zstack.guesttools.GuestToolsStateInventory", "org.zstack.sdk.GuestToolsStateInventory"); - put("org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory"); - put("org.zstack.guesttools.GuestVmScriptExecutedRecordInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordInventory"); - put("org.zstack.guesttools.GuestVmScriptInventory", "org.zstack.sdk.GuestVmScriptInventory"); - put("org.zstack.guesttools.InvocationRecord", "org.zstack.sdk.InvocationRecord"); - put("org.zstack.guesttools.InvocationRecordDetail", "org.zstack.sdk.InvocationRecordDetail"); - put("org.zstack.ha.HaNetworkGroupInventory", "org.zstack.sdk.HaNetworkGroupInventory"); - put("org.zstack.ha.HaStrategyConditionInventory", "org.zstack.sdk.HaStrategyConditionInventory"); - put("org.zstack.header.acl.AccessControlListEntryInventory", "org.zstack.sdk.AccessControlListEntryInventory"); - put("org.zstack.header.acl.AccessControlListInventory", "org.zstack.sdk.AccessControlListInventory"); - put("org.zstack.header.affinitygroup.AffinityGroupInventory", "org.zstack.sdk.AffinityGroupInventory"); - put("org.zstack.header.affinitygroup.AffinityGroupUsageInventory", "org.zstack.sdk.AffinityGroupUsageInventory"); - put("org.zstack.header.aliyun.AliyunOssException", "org.zstack.sdk.AliyunOssException"); - put("org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory", "org.zstack.sdk.AliyunEbsBackupStorageInventory"); - put("org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory", "org.zstack.sdk.AliyunEbsPrimaryStorageInventory"); - put("org.zstack.header.aliyun.ecs.EcsInstanceInventory", "org.zstack.sdk.EcsInstanceInventory"); - put("org.zstack.header.aliyun.ecs.EcsInstanceType", "org.zstack.sdk.EcsInstanceType"); - put("org.zstack.header.aliyun.errorCode.AliyunErrorCode", "org.zstack.sdk.AliyunErrorCode"); - put("org.zstack.header.aliyun.image.EcsImageInventory", "org.zstack.sdk.EcsImageInventory"); - put("org.zstack.header.aliyun.image.ProgressProperty", "org.zstack.sdk.ProgressProperty"); - put("org.zstack.header.aliyun.network.HybridConnectionType", "org.zstack.sdk.HybridConnectionType"); - put("org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory", "org.zstack.sdk.AliyunRouterInterfaceInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory", "org.zstack.sdk.ConnectionAccessPointInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory", "org.zstack.sdk.ConnectionRelationShipInventory"); - put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty", "org.zstack.sdk.ConnectionRelationShipProperty"); - put("org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory", "org.zstack.sdk.VirtualBorderRouterInventory"); - put("org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory", "org.zstack.sdk.EcsSecurityGroupInventory"); - put("org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory", "org.zstack.sdk.EcsSecurityGroupRuleInventory"); - put("org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory", "org.zstack.sdk.EcsVSwitchInventory"); - put("org.zstack.header.aliyun.network.vpc.EcsVpcInventory", "org.zstack.sdk.EcsVpcInventory"); - put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory", "org.zstack.sdk.VpcVirtualRouteEntryInventory"); - put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory", "org.zstack.sdk.VpcVirtualRouterInventory"); - put("org.zstack.header.aliyun.oss.OssBucketInventory", "org.zstack.sdk.OssBucketInventory"); - put("org.zstack.header.aliyun.oss.OssBucketProperty", "org.zstack.sdk.OssBucketProperty"); - put("org.zstack.header.aliyun.storage.disk.AliyunDiskInventory", "org.zstack.sdk.AliyunDiskInventory"); - put("org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory", "org.zstack.sdk.AliyunSnapshotInventory"); - put("org.zstack.header.allocator.datatypes.CpuMemoryCapacityData", "org.zstack.sdk.CpuMemoryCapacityData"); - put("org.zstack.header.appcenter.PublishAppInventory", "org.zstack.sdk.PublishAppInventory"); - put("org.zstack.header.appcenter.PublishAppResourceStruct", "org.zstack.sdk.PublishAppResourceStruct"); - put("org.zstack.header.baremetal.BaremetalException", "org.zstack.sdk.BaremetalException"); - put("org.zstack.header.baremetal.chassis.BaremetalChassisInventory", "org.zstack.sdk.BaremetalChassisInventory"); - put("org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory", "org.zstack.sdk.BaremetalHardwareInfoInventory"); - put("org.zstack.header.baremetal.instance.BaremetalInstanceInventory", "org.zstack.sdk.BaremetalInstanceInventory"); - put("org.zstack.header.baremetal.network.BaremetalBondingInventory", "org.zstack.sdk.BaremetalBondingInventory"); - put("org.zstack.header.baremetal.network.BaremetalNicInventory", "org.zstack.sdk.BaremetalNicInventory"); - put("org.zstack.header.baremetal.network.BaremetalVlanNicInventory", "org.zstack.sdk.BaremetalVlanNicInventory"); - put("org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory", "org.zstack.sdk.PreconfigurationTemplateInventory"); - put("org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory", "org.zstack.sdk.BaremetalPxeServerInventory"); - put("org.zstack.header.bootstrap.MiniCandidateHostStruct", "org.zstack.sdk.MiniCandidateHostStruct"); - put("org.zstack.header.bootstrap.MiniHostInfo", "org.zstack.sdk.MiniHostInfo"); - put("org.zstack.header.bootstrap.MiniNetworkConfigStruct", "org.zstack.sdk.MiniNetworkConfigStruct"); - put("org.zstack.header.buildapp.BuildAppExportHistoryInventory", "org.zstack.sdk.BuildAppExportHistoryInventory"); - put("org.zstack.header.buildapp.BuildApplicationInventory", "org.zstack.sdk.BuildApplicationInventory"); - put("org.zstack.header.buildsystem.AppBuildSystemInventory", "org.zstack.sdk.AppBuildSystemInventory"); - put("org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory", "org.zstack.sdk.AppBuildSystemZoneRefInventory"); - put("org.zstack.header.cbt.CbtTaskInventory", "org.zstack.sdk.CbtTaskInventory"); - put("org.zstack.header.cbt.CbtTaskResourceRefInventory", "org.zstack.sdk.CbtTaskResourceRefInventory"); - put("org.zstack.header.cbt.CbtTaskStatus", "org.zstack.sdk.CbtTaskStatus"); - put("org.zstack.header.cbt.VolumeCbtBackupInfo", "org.zstack.sdk.VolumeCbtBackupInfo"); - put("org.zstack.header.cloudformation.CloudFormationStackEventInventory", "org.zstack.sdk.CloudFormationStackEventInventory"); - put("org.zstack.header.cloudformation.PreviewResourceStruct", "org.zstack.sdk.PreviewResourceStruct"); - put("org.zstack.header.cloudformation.ResourceStackInventory", "org.zstack.sdk.ResourceStackInventory"); - put("org.zstack.header.cloudformation.StackParameters", "org.zstack.sdk.StackParameters"); - put("org.zstack.header.cloudformation.StackTemplateInventory", "org.zstack.sdk.StackTemplateInventory"); - put("org.zstack.header.cloudformation.SupportedResourceStruct", "org.zstack.sdk.SupportedResourceStruct"); - put("org.zstack.header.cluster.ClusterInventory", "org.zstack.sdk.ClusterInventory"); - put("org.zstack.header.cluster.PowerOffHardwareResult", "org.zstack.sdk.PowerOffHardwareResult"); - put("org.zstack.header.configuration.DiskOfferingInventory", "org.zstack.sdk.DiskOfferingInventory"); - put("org.zstack.header.configuration.InstanceOfferingInventory", "org.zstack.sdk.InstanceOfferingInventory"); - put("org.zstack.header.console.ConsoleInventory", "org.zstack.sdk.ConsoleInventory"); - put("org.zstack.header.console.ConsoleProxyAgentInventory", "org.zstack.sdk.ConsoleProxyAgentInventory"); - put("org.zstack.header.core.external.plugin.PluginDriverInventory", "org.zstack.sdk.PluginDriverInventory"); - put("org.zstack.header.core.external.service.ExternalServiceCapabilities", "org.zstack.sdk.ExternalServiceCapabilities"); - put("org.zstack.header.core.external.service.ExternalServiceConfigurationInventory", "org.zstack.sdk.ExternalServiceConfigurationInventory"); - put("org.zstack.header.core.external.service.ExternalServiceInventory", "org.zstack.sdk.ExternalServiceInventory"); - put("org.zstack.header.core.progress.ChainInfo", "org.zstack.sdk.ChainInfo"); - put("org.zstack.header.core.progress.LongJobProgressDetail", "org.zstack.sdk.LongJobProgressDetail"); - put("org.zstack.header.core.progress.PendingTaskInfo", "org.zstack.sdk.PendingTaskInfo"); - put("org.zstack.header.core.progress.RunningTaskInfo", "org.zstack.sdk.RunningTaskInfo"); - put("org.zstack.header.core.progress.TaskInfo", "org.zstack.sdk.TaskInfo"); - put("org.zstack.header.core.progress.TaskProgressInventory", "org.zstack.sdk.TaskProgressInventory"); - put("org.zstack.header.core.trash.CleanTrashResult", "org.zstack.sdk.CleanTrashResult"); - put("org.zstack.header.core.trash.InstallPathRecycleInventory", "org.zstack.sdk.InstallPathRecycleInventory"); - put("org.zstack.header.core.trash.TrashCleanupResult", "org.zstack.sdk.TrashCleanupResult"); - put("org.zstack.header.core.webhooks.WebhookInventory", "org.zstack.sdk.WebhookInventory"); - put("org.zstack.header.datacenter.DataCenterInventory", "org.zstack.sdk.DataCenterInventory"); - put("org.zstack.header.datacenter.DataCenterProperty", "org.zstack.sdk.DataCenterProperty"); - put("org.zstack.header.errorcode.ErrorCode", "org.zstack.sdk.ErrorCode"); - put("org.zstack.header.errorcode.ErrorCodeList", "org.zstack.sdk.ErrorCodeList"); - put("org.zstack.header.flowMeter.FlowCollectorInventory", "org.zstack.sdk.FlowCollectorInventory"); - put("org.zstack.header.flowMeter.FlowCounter", "org.zstack.sdk.FlowCounter"); - put("org.zstack.header.flowMeter.FlowMeterInventory", "org.zstack.sdk.FlowMeterInventory"); - put("org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory", "org.zstack.sdk.NetworkRouterFlowMeterRefInventory"); - put("org.zstack.header.host.AddHostFromFileResult", "org.zstack.sdk.AddHostFromFileResult"); - put("org.zstack.header.host.CpuArchitecture", "org.zstack.sdk.CpuArchitecture"); - put("org.zstack.header.host.HostInventory", "org.zstack.sdk.HostInventory"); - put("org.zstack.header.host.HostIpmiInventory", "org.zstack.sdk.HostIpmiInventory"); - put("org.zstack.header.host.HostNUMANode", "org.zstack.sdk.HostNUMANode"); - put("org.zstack.header.host.HostNetworkBondingServiceRefInventory", "org.zstack.sdk.HostNetworkBondingServiceRefInventory"); - put("org.zstack.header.host.HostNetworkInterfaceServiceRefInventory", "org.zstack.sdk.HostNetworkInterfaceServiceRefInventory"); - put("org.zstack.header.host.HostNetworkLabelInventory", "org.zstack.sdk.HostNetworkLabelInventory"); - put("org.zstack.header.host.HostPhysicalMemoryInventory", "org.zstack.sdk.HostPhysicalMemoryInventory"); - put("org.zstack.header.host.HwMonitorStatus", "org.zstack.sdk.HwMonitorStatus"); - put("org.zstack.header.host.ServiceTypeStatisticData", "org.zstack.sdk.ServiceTypeStatisticData"); - put("org.zstack.header.hybrid.network.eip.HybridEipAddressInventory", "org.zstack.sdk.HybridEipAddressInventory"); - put("org.zstack.header.hybrid.network.eip.HybridEipStatus", "org.zstack.sdk.HybridEipStatus"); - put("org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory", "org.zstack.sdk.VpcUserVpnGatewayInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory", "org.zstack.sdk.VpcVpnConnectionInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory", "org.zstack.sdk.VpcVpnGatewayInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory", "org.zstack.sdk.VpcVpnIkeConfigInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct", "org.zstack.sdk.VpcVpnIkeConfigStruct"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory", "org.zstack.sdk.VpcVpnIpSecConfigInventory"); - put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct", "org.zstack.sdk.VpcVpnIpSecConfigStruct"); - put("org.zstack.header.identity.AccountInventory", "org.zstack.sdk.AccountInventory"); - put("org.zstack.header.identity.AccountResourceRefInventory", "org.zstack.sdk.AccountResourceRefInventory"); - put("org.zstack.header.identity.PolicyInventory", "org.zstack.sdk.PolicyInventory"); - put("org.zstack.header.identity.PolicyStatement", "org.zstack.sdk.PolicyStatement"); - put("org.zstack.header.identity.PolicyStatementEffect", "org.zstack.sdk.PolicyStatementEffect"); - put("org.zstack.header.identity.Quota$QuotaUsage", "org.zstack.sdk.QuotaUsage"); - put("org.zstack.header.identity.QuotaInventory", "org.zstack.sdk.QuotaInventory"); - put("org.zstack.header.identity.SessionInventory", "org.zstack.sdk.SessionInventory"); - put("org.zstack.header.identity.SharedResourceInventory", "org.zstack.sdk.SharedResourceInventory"); - put("org.zstack.header.identity.UserGroupInventory", "org.zstack.sdk.UserGroupInventory"); - put("org.zstack.header.identity.UserInventory", "org.zstack.sdk.UserInventory"); - put("org.zstack.header.identity.login.LoginAuthenticationProcedureDesc", "org.zstack.sdk.LoginAuthenticationProcedureDesc"); - put("org.zstack.header.identity.role.RoleInventory", "org.zstack.sdk.identity.role.RoleInventory"); - put("org.zstack.header.identity.role.RolePolicyRefInventory", "org.zstack.sdk.identity.role.RolePolicyRefInventory"); - put("org.zstack.header.identity.role.RolePolicyStatementInventory", "org.zstack.sdk.identity.role.RolePolicyStatementInventory"); - put("org.zstack.header.identity.role.RoleState", "org.zstack.sdk.identity.role.RoleState"); - put("org.zstack.header.identity.role.RoleStateEvent", "org.zstack.sdk.identity.role.RoleStateEvent"); - put("org.zstack.header.identity.role.RoleType", "org.zstack.sdk.identity.role.RoleType"); - put("org.zstack.header.identityzone.IdentityZoneInventory", "org.zstack.sdk.IdentityZoneInventory"); - put("org.zstack.header.identityzone.IdentityZoneProperty", "org.zstack.sdk.IdentityZoneProperty"); - put("org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure"); - put("org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure"); - put("org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails", "org.zstack.sdk.JobDetails"); - put("org.zstack.header.image.ImageBackupStorageRefInventory", "org.zstack.sdk.ImageBackupStorageRefInventory"); - put("org.zstack.header.image.ImageGroupInventory", "org.zstack.sdk.ImageGroupInventory"); - put("org.zstack.header.image.ImageGroupRefInventory", "org.zstack.sdk.ImageGroupRefInventory"); - put("org.zstack.header.image.ImageInventory", "org.zstack.sdk.ImageInventory"); - put("org.zstack.header.longjob.LongJobInventory", "org.zstack.sdk.LongJobInventory"); - put("org.zstack.header.longjob.LongJobState", "org.zstack.sdk.LongJobState"); - put("org.zstack.header.managementnode.ManagementNodeInventory", "org.zstack.sdk.ManagementNodeInventory"); - put("org.zstack.header.network.l2.L2NetworkData", "org.zstack.sdk.L2NetworkData"); - put("org.zstack.header.network.l2.L2NetworkInventory", "org.zstack.sdk.L2NetworkInventory"); - put("org.zstack.header.network.l2.L2VlanNetworkInventory", "org.zstack.sdk.L2VlanNetworkInventory"); - put("org.zstack.header.network.l3.AddressPoolInventory", "org.zstack.sdk.AddressPoolInventory"); - put("org.zstack.header.network.l3.FreeIpInventory", "org.zstack.sdk.FreeIpInventory"); - put("org.zstack.header.network.l3.IpRangeInventory", "org.zstack.sdk.IpRangeInventory"); - put("org.zstack.header.network.l3.IpRangeType", "org.zstack.sdk.IpRangeType"); - put("org.zstack.header.network.l3.L3NetworkHostRouteInventory", "org.zstack.sdk.L3NetworkHostRouteInventory"); - put("org.zstack.header.network.l3.L3NetworkInventory", "org.zstack.sdk.L3NetworkInventory"); - put("org.zstack.header.network.l3.NormalIpRangeInventory", "org.zstack.sdk.NormalIpRangeInventory"); - put("org.zstack.header.network.l3.ReservedIpRangeInventory", "org.zstack.sdk.ReservedIpRangeInventory"); - put("org.zstack.header.network.l3.UsedIpInventory", "org.zstack.sdk.UsedIpInventory"); - put("org.zstack.header.network.l3.datatypes.IpCapacityData", "org.zstack.sdk.IpCapacityData"); - put("org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory", "org.zstack.sdk.SdnControllerHostRefInventory"); - put("org.zstack.header.network.sdncontroller.SdnControllerInventory", "org.zstack.sdk.SdnControllerInventory"); - put("org.zstack.header.network.sdncontroller.SdnControllerStatus", "org.zstack.sdk.SdnControllerStatus"); - put("org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory", "org.zstack.sdk.NetworkServiceL3NetworkRefInventory"); - put("org.zstack.header.network.service.NetworkServiceProviderInventory", "org.zstack.sdk.NetworkServiceProviderInventory"); - put("org.zstack.header.portMirror.MirrorNetworkUsedIpInventory", "org.zstack.sdk.MirrorNetworkUsedIpInventory"); - put("org.zstack.header.portMirror.PortMirrorInventory", "org.zstack.sdk.PortMirrorInventory"); - put("org.zstack.header.portMirror.PortMirrorSessionInventory", "org.zstack.sdk.PortMirrorSessionInventory"); - put("org.zstack.header.portMirror.PortMirrorState", "org.zstack.sdk.PortMirrorState"); - put("org.zstack.header.portMirror.SessionStatus", "org.zstack.sdk.SessionStatus"); - put("org.zstack.header.portMirror.SessionType", "org.zstack.sdk.SessionType"); - put("org.zstack.header.protocol.Neighbor", "org.zstack.sdk.Neighbor"); - put("org.zstack.header.protocol.NetworkRouterAreaRefInventory", "org.zstack.sdk.NetworkRouterAreaRefInventory"); - put("org.zstack.header.protocol.RouterAreaInventory", "org.zstack.sdk.RouterAreaInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupInventory", "org.zstack.sdk.SchedulerJobGroupInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory", "org.zstack.sdk.SchedulerJobGroupJobRefInventory"); - put("org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory"); - put("org.zstack.header.scheduler.SchedulerJobHistoryInventory", "org.zstack.sdk.SchedulerJobHistoryInventory"); - put("org.zstack.header.scheduler.SchedulerJobInventory", "org.zstack.sdk.SchedulerJobInventory"); - put("org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory", "org.zstack.sdk.SchedulerJobSchedulerTriggerInventory"); - put("org.zstack.header.scheduler.SchedulerTriggerInventory", "org.zstack.sdk.SchedulerTriggerInventory"); - put("org.zstack.header.securitymachine.SecretResourcePoolInventory", "org.zstack.sdk.SecretResourcePoolInventory"); - put("org.zstack.header.securitymachine.SecurityMachineInventory", "org.zstack.sdk.SecurityMachineInventory"); - put("org.zstack.header.simulator.SimulatorHostInventory", "org.zstack.sdk.SimulatorHostInventory"); - put("org.zstack.header.sriov.EthernetVfPciDeviceInventory", "org.zstack.sdk.EthernetVfPciDeviceInventory"); - put("org.zstack.header.sriov.EthernetVfStatus", "org.zstack.sdk.EthernetVfStatus"); - put("org.zstack.header.sriov.VmVfNicInventory", "org.zstack.sdk.VmVfNicInventory"); - put("org.zstack.header.sshkeypair.SshKeyPairInventory", "org.zstack.sdk.SshKeyPairInventory"); - put("org.zstack.header.sshkeypair.SshPrivateKeyPairInventory", "org.zstack.sdk.SshPrivateKeyPairInventory"); - put("org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory", "org.zstack.sdk.ExternalBackupStorageInventory"); - put("org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory", "org.zstack.sdk.ExternalPrimaryStorageInventory"); - put("org.zstack.header.storage.backup.BackupMode", "org.zstack.sdk.BackupMode"); - put("org.zstack.header.storage.backup.BackupStorageInventory", "org.zstack.sdk.BackupStorageInventory"); - put("org.zstack.header.storage.backup.SyncBackupResult", "org.zstack.sdk.SyncBackupResult"); - put("org.zstack.header.storage.backup.VolumeBackupInventory", "org.zstack.sdk.VolumeBackupInventory"); - put("org.zstack.header.storage.backup.VolumeBackupStorageRefInventory", "org.zstack.sdk.VolumeBackupStorageRefInventory"); - put("org.zstack.header.storage.cdp.CdpPolicyInventory", "org.zstack.sdk.CdpPolicyInventory"); - put("org.zstack.header.storage.cdp.CdpPolicyState", "org.zstack.sdk.CdpPolicyState"); - put("org.zstack.header.storage.cdp.CdpTaskInventory", "org.zstack.sdk.CdpTaskInventory"); - put("org.zstack.header.storage.cdp.CdpTaskResourceRefInventory", "org.zstack.sdk.CdpTaskResourceRefInventory"); - put("org.zstack.header.storage.cdp.CdpTaskState", "org.zstack.sdk.CdpTaskState"); - put("org.zstack.header.storage.cdp.CdpTaskStatus", "org.zstack.sdk.CdpTaskStatus"); - put("org.zstack.header.storage.cdp.CdpTaskType", "org.zstack.sdk.CdpTaskType"); - put("org.zstack.header.storage.database.backup.DatabaseBackupInventory", "org.zstack.sdk.databasebackup.DatabaseBackupInventory"); - put("org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory", "org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory"); - put("org.zstack.header.storage.database.backup.DatabaseBackupStruct", "org.zstack.sdk.databasebackup.DatabaseBackupStruct"); - put("org.zstack.header.storage.database.backup.DatabaseType", "org.zstack.sdk.databasebackup.DatabaseType"); - put("org.zstack.header.storage.primary.ImageCacheInventory", "org.zstack.sdk.ImageCacheInventory"); - put("org.zstack.header.storage.primary.PrimaryStorageHostStatus", "org.zstack.sdk.PrimaryStorageHostStatus"); - put("org.zstack.header.storage.primary.PrimaryStorageInventory", "org.zstack.sdk.PrimaryStorageInventory"); - put("org.zstack.header.storage.primary.UsageReport", "org.zstack.sdk.UsageReport"); - put("org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct", "org.zstack.sdk.BatchDeleteVolumeSnapshotStruct"); - put("org.zstack.header.storage.snapshot.ShrinkResult", "org.zstack.sdk.ShrinkResult"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory", "org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotInventory", "org.zstack.sdk.VolumeSnapshotInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory", "org.zstack.sdk.SnapshotLeafInventory"); - put("org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory", "org.zstack.sdk.VolumeSnapshotTreeInventory"); - put("org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult", "org.zstack.sdk.DeleteSnapshotGroupResult"); - put("org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult", "org.zstack.sdk.RevertSnapshotGroupResult"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability", "org.zstack.sdk.VolumeSnapshotGroupAvailability"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory", "org.zstack.sdk.VolumeSnapshotGroupInventory"); - put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory", "org.zstack.sdk.VolumeSnapshotGroupRefInventory"); - put("org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory", "org.zstack.sdk.VolumeSnapshotReferenceTreeInventory"); - put("org.zstack.header.storageDevice.LunInventory", "org.zstack.sdk.LunInventory"); - put("org.zstack.header.storageDevice.ScsiLunClusterStatusInventory", "org.zstack.sdk.ScsiLunClusterStatusInventory"); - put("org.zstack.header.storageDevice.ScsiLunHostRefInventory", "org.zstack.sdk.ScsiLunHostRefInventory"); - put("org.zstack.header.storageDevice.ScsiLunInventory", "org.zstack.sdk.ScsiLunInventory"); - put("org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory", "org.zstack.sdk.ScsiLunVmInstanceRefInventory"); - put("org.zstack.header.tag.SystemTagInventory", "org.zstack.sdk.SystemTagInventory"); - put("org.zstack.header.tag.TagInventory", "org.zstack.sdk.TagInventory"); - put("org.zstack.header.tag.TagPatternInventory", "org.zstack.sdk.TagPatternInventory"); - put("org.zstack.header.tag.TagPatternType", "org.zstack.sdk.TagPatternType"); - put("org.zstack.header.tag.UserTagInventory", "org.zstack.sdk.UserTagInventory"); - put("org.zstack.header.vdpa.VmVdpaNicInventory", "org.zstack.sdk.VmVdpaNicInventory"); - put("org.zstack.header.vipQos.VipQosInventory", "org.zstack.sdk.VipQosInventory"); - put("org.zstack.header.vipQos.VpcSharedQosInventory", "org.zstack.sdk.VpcSharedQosInventory"); - put("org.zstack.header.vipQos.VpcSharedQosRefVipInventory", "org.zstack.sdk.VpcSharedQosRefVipInventory"); - put("org.zstack.header.vm.CloneVmInstanceInventory", "org.zstack.sdk.CloneVmInstanceInventory"); - put("org.zstack.header.vm.CloneVmInstanceResults", "org.zstack.sdk.CloneVmInstanceResults"); - put("org.zstack.header.vm.VdiPortInfo", "org.zstack.sdk.VdiPortInfo"); - put("org.zstack.header.vm.VirtualizerInfo", "org.zstack.sdk.VirtualizerInfo"); - put("org.zstack.header.vm.VirtualizerInfoInventory", "org.zstack.sdk.VirtualizerInfoInventory"); - put("org.zstack.header.vm.VmCapabilities", "org.zstack.sdk.VmCapabilities"); - put("org.zstack.header.vm.VmInstanceInventory", "org.zstack.sdk.VmInstanceInventory"); - put("org.zstack.header.vm.VmNicInventory", "org.zstack.sdk.VmNicInventory"); - put("org.zstack.header.vm.VmPriorityConfigInventory", "org.zstack.sdk.VmPriorityConfigInventory"); - put("org.zstack.header.vm.VmPriorityLevel", "org.zstack.sdk.VmPriorityLevel"); - put("org.zstack.header.vm.VmSchedHistoryInventory", "org.zstack.sdk.VmSchedHistoryInventory"); - put("org.zstack.header.vm.cdrom.VmCdRomInventory", "org.zstack.sdk.VmCdRomInventory"); - put("org.zstack.header.vm.devices.DeviceAddress", "org.zstack.sdk.DeviceAddress"); - put("org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory", "org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory"); - put("org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory", "org.zstack.sdk.VmInstanceDeviceAddressGroupInventory"); - put("org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory", "org.zstack.sdk.HostSchedulingRuleGroupInventory"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState", "org.zstack.sdk.VmSchedulingRuleExecuteState"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory", "org.zstack.sdk.VmSchedulingRuleGroupInventory"); - put("org.zstack.header.vmscheduling.VmSchedulingRuleInventory", "org.zstack.sdk.VmSchedulingRuleInventory"); - put("org.zstack.header.vo.ResourceInventory", "org.zstack.sdk.ResourceInventory"); - put("org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct", "org.zstack.sdk.VolumeFormatReplyStruct"); - put("org.zstack.header.volume.VolumeInventory", "org.zstack.sdk.VolumeInventory"); - put("org.zstack.header.volume.block.AccessPathInfo", "org.zstack.sdk.AccessPathInfo"); - put("org.zstack.header.volume.block.BlockVolumeInventory", "org.zstack.sdk.BlockVolumeInventory"); - put("org.zstack.header.volume.block.ExponBlockVolumeInventory", "org.zstack.sdk.ExponBlockVolumeInventory"); - put("org.zstack.header.volume.block.XskyBlockVolumeInventory", "org.zstack.sdk.XskyBlockVolumeInventory"); - put("org.zstack.header.vpc.VpcRouterDnsInventory", "org.zstack.sdk.VpcRouterDnsInventory"); - put("org.zstack.header.vpc.VpcRouterVmInventory", "org.zstack.sdk.VpcRouterVmInventory"); - put("org.zstack.header.vpc.VpcSnatStateInventory", "org.zstack.sdk.VpcSnatStateInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory", "org.zstack.sdk.VpcHaGroupApplianceVmRefInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupInventory", "org.zstack.sdk.VpcHaGroupInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory", "org.zstack.sdk.VpcHaGroupMonitorIpInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory", "org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory"); - put("org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory", "org.zstack.sdk.VpcHaGroupVipRefInventory"); - put("org.zstack.header.zdfs.StorageType", "org.zstack.sdk.StorageType"); - put("org.zstack.header.zdfs.ZdfsInventory", "org.zstack.sdk.ZdfsInventory"); - put("org.zstack.header.zdfs.ZdfsStorageInventory", "org.zstack.sdk.ZdfsStorageInventory"); - put("org.zstack.header.zone.ZoneInventory", "org.zstack.sdk.ZoneInventory"); - put("org.zstack.header.zwatch.AuditData", "org.zstack.sdk.AuditData"); - put("org.zstack.header.zwatch.AuditDataV1", "org.zstack.sdk.AuditDataV1"); - put("org.zstack.header.zwatch.AuditDataV2", "org.zstack.sdk.AuditDataV2"); - put("org.zstack.hybrid.account.HybridAccountInventory", "org.zstack.sdk.HybridAccountInventory"); - put("org.zstack.hybrid.core.HybridType", "org.zstack.sdk.HybridType"); - put("org.zstack.hygon.HygonCcpDeviceInventory", "org.zstack.sdk.HygonCcpDeviceInventory"); - put("org.zstack.hygon.HygonDeviceState", "org.zstack.sdk.HygonDeviceState"); - put("org.zstack.hygon.HygonDeviceType", "org.zstack.sdk.HygonDeviceType"); - put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct", "org.zstack.sdk.iam2.api.APIPermissionStruct"); - put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission", "org.zstack.sdk.iam2.api.Permission"); - put("org.zstack.iam2.api.Attribute", "org.zstack.sdk.iam2.api.Attribute"); - put("org.zstack.iam2.api.ErrorResult", "org.zstack.sdk.iam2.api.ErrorResult"); - put("org.zstack.iam2.container.ContainerClusterInventory", "org.zstack.sdk.iam2.container.ContainerClusterInventory"); - put("org.zstack.iam2.entity.AttributeType", "org.zstack.sdk.iam2.entity.AttributeType"); - put("org.zstack.iam2.entity.IAM2AttributeInventory", "org.zstack.sdk.iam2.entity.IAM2AttributeInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationInventory"); - put("org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory"); - put("org.zstack.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory"); - put("org.zstack.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory"); - put("org.zstack.iam2.entity.IAM2ProjectInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectInventory"); - put("org.zstack.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory"); - put("org.zstack.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory"); - put("org.zstack.iam2.entity.IAM2State", "org.zstack.sdk.iam2.entity.IAM2State"); - put("org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory"); - put("org.zstack.iam2.entity.IAM2VirtualIDInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory"); - put("org.zstack.iam2.entity.OrganizationType", "org.zstack.sdk.iam2.entity.OrganizationType"); - put("org.zstack.iam2.entity.ProjectState", "org.zstack.sdk.iam2.entity.ProjectState"); - put("org.zstack.iam2.entity.StateEvent", "org.zstack.sdk.iam2.entity.StateEvent"); - put("org.zstack.iam2.project.template.Template", "org.zstack.sdk.iam2.project.template.Template"); - put("org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory"); - put("org.zstack.imagereplicator.ImageReplicationGroupInventory", "org.zstack.sdk.ImageReplicationGroupInventory"); - put("org.zstack.imagereplicator.ReplicationGroupState", "org.zstack.sdk.ReplicationGroupState"); - put("org.zstack.ipsec.IPsecConnectionInventory", "org.zstack.sdk.IPsecConnectionInventory"); - put("org.zstack.ipsec.IPsecL3NetworkRefInventory", "org.zstack.sdk.IPsecL3NetworkRefInventory"); - put("org.zstack.ipsec.IPsecPeerCidrInventory", "org.zstack.sdk.IPsecPeerCidrInventory"); - put("org.zstack.kvm.APIKvmRunShellEvent$ShellResult", "org.zstack.sdk.ShellResult"); - put("org.zstack.kvm.BaseVirtualDeviceTO", "org.zstack.sdk.BaseVirtualDeviceTO"); - put("org.zstack.kvm.KVMAgentCommands$CdRomTO", "org.zstack.sdk.CdRomTO"); - put("org.zstack.kvm.KVMAgentCommands$IsoTO", "org.zstack.sdk.IsoTO"); - put("org.zstack.kvm.KVMAgentCommands$NicTO", "org.zstack.sdk.NicTO"); - put("org.zstack.kvm.KVMAgentCommands$VHostAddOn", "org.zstack.sdk.VHostAddOn"); - put("org.zstack.kvm.KVMHostInventory", "org.zstack.sdk.KVMHostInventory"); - put("org.zstack.kvm.KVMIsoTO", "org.zstack.sdk.KVMIsoTO"); - put("org.zstack.kvm.VolumeTO", "org.zstack.sdk.VolumeTO"); - put("org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory", "org.zstack.sdk.HostOsCategoryInventory"); - put("org.zstack.kvm.hypervisor.datatype.HypervisorVersionState", "org.zstack.sdk.HypervisorVersionState"); - put("org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory", "org.zstack.sdk.KvmHostHypervisorMetadataInventory"); - put("org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory", "org.zstack.sdk.KvmHypervisorInfoInventory"); - put("org.zstack.kvm.xmlhook.XmlHookInventory", "org.zstack.sdk.XmlHookInventory"); - put("org.zstack.kvm.xmlhook.XmlHookType", "org.zstack.sdk.XmlHookType"); - put("org.zstack.ldap.LdapAccountRefInventory", "org.zstack.sdk.LdapAccountRefInventory"); - put("org.zstack.ldap.LdapServerInventory", "org.zstack.sdk.LdapServerInventory"); - put("org.zstack.license.AdditionalLicenseInfo", "org.zstack.sdk.AdditionalLicenseInfo"); - put("org.zstack.license.AdditionalLicenseType", "org.zstack.sdk.AdditionalLicenseType"); - put("org.zstack.license.LicenseAddOnInventory", "org.zstack.sdk.LicenseAddOnInventory"); - put("org.zstack.license.LicenseInventory", "org.zstack.sdk.LicenseInventory"); - put("org.zstack.license.UKeyInventory", "org.zstack.sdk.UKeyInventory"); - put("org.zstack.license.UKeyStatus", "org.zstack.sdk.UKeyStatus"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView"); - put("org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); - put("org.zstack.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory"); - put("org.zstack.license.header.server.LicenseUsageDetailView", "org.zstack.sdk.license.header.server.LicenseUsageDetailView"); - put("org.zstack.license.header.server.LicenseUsageView", "org.zstack.sdk.license.header.server.LicenseUsageView"); - put("org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView"); - put("org.zstack.log.server.LogCategory", "org.zstack.sdk.LogCategory"); - put("org.zstack.log.server.LogLevel", "org.zstack.sdk.LogLevel"); - put("org.zstack.log.server.LogServerInventory", "org.zstack.sdk.LogServerInventory"); - put("org.zstack.log.server.LogType", "org.zstack.sdk.LogType"); - put("org.zstack.login.entity.LdapResourceRefInventory", "org.zstack.sdk.LdapResourceRefInventory"); - put("org.zstack.loginControl.entity.AccessControlRuleInventory", "org.zstack.sdk.AccessControlRuleInventory"); - put("org.zstack.loginControl.entity.ControlStrategy", "org.zstack.sdk.ControlStrategy"); - put("org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory", "org.zstack.sdk.ShareableVolumeVmInstanceRefInventory"); - put("org.zstack.monitoring.AlertInventory", "org.zstack.sdk.AlertInventory"); - put("org.zstack.monitoring.MonitorTriggerInventory", "org.zstack.sdk.MonitorTriggerInventory"); - put("org.zstack.monitoring.actions.EmailTriggerActionInventory", "org.zstack.sdk.EmailTriggerActionInventory"); - put("org.zstack.monitoring.actions.MonitorTriggerActionInventory", "org.zstack.sdk.MonitorTriggerActionInventory"); - put("org.zstack.monitoring.items.ItemInventory", "org.zstack.sdk.ItemInventory"); - put("org.zstack.monitoring.media.EmailMediaInventory", "org.zstack.sdk.EmailMediaInventory"); - put("org.zstack.monitoring.media.MediaInventory", "org.zstack.sdk.MediaInventory"); - put("org.zstack.mttyDevice.MttyDeviceInventory", "org.zstack.sdk.MttyDeviceInventory"); - put("org.zstack.mttyDevice.MttyDeviceState", "org.zstack.sdk.MttyDeviceState"); - put("org.zstack.mttyDevice.MttyDeviceType", "org.zstack.sdk.MttyDeviceType"); - put("org.zstack.mttyDevice.MttyDeviceVirtStatus", "org.zstack.sdk.MttyDeviceVirtStatus"); - put("org.zstack.multicast.router.header.MulticastRouteInventory", "org.zstack.sdk.MulticastRouteInventory"); - put("org.zstack.multicast.router.header.MulticastRouterInventory", "org.zstack.sdk.MulticastRouterInventory"); - put("org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory", "org.zstack.sdk.MulticastRouterRendezvousPointInventory"); - put("org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory", "org.zstack.sdk.MulticastRouterVpcVRouterRefInventory"); - put("org.zstack.nas.NasFileSystemInventory", "org.zstack.sdk.NasFileSystemInventory"); - put("org.zstack.nas.NasMountTargetInventory", "org.zstack.sdk.NasMountTargetInventory"); - put("org.zstack.nas.NasProtocolType", "org.zstack.sdk.NasProtocolType"); - put("org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory", "org.zstack.sdk.HostNetworkBondingInventory"); - put("org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory", "org.zstack.sdk.HostNetworkInterfaceInventory"); - put("org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory", "org.zstack.sdk.PhysicalSwitchInventory"); - put("org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory", "org.zstack.sdk.PhysicalSwitchPortInventory"); - put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory", "org.zstack.sdk.HostNetworkInterfaceLldpInventory"); - put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory", "org.zstack.sdk.HostNetworkInterfaceLldpRefInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory"); - put("org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory"); - put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory", "org.zstack.sdk.L2PortGroupNetworkInventory"); - put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode", "org.zstack.sdk.L2PortGroupVlanMode"); - put("org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory", "org.zstack.sdk.L2VirtualSwitchNetworkInventory"); - put("org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory", "org.zstack.sdk.RemoteVtepInventory"); - put("org.zstack.network.l2.vxlan.vtep.VtepInventory", "org.zstack.sdk.VtepInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory", "org.zstack.sdk.L2VxlanNetworkInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory", "org.zstack.sdk.L2VxlanNetworkPoolInventory"); - put("org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory", "org.zstack.sdk.VniRangeInventory"); - put("org.zstack.network.ovn.OvnControllerInventory", "org.zstack.sdk.OvnControllerInventory"); - put("org.zstack.network.ovn.OvnControllerVmInstanceInventory", "org.zstack.sdk.OvnControllerVmInstanceInventory"); - put("org.zstack.network.ovn.OvnControllerVmOfferingInventory", "org.zstack.sdk.OvnControllerVmOfferingInventory"); - put("org.zstack.network.securitygroup.SecurityGroupIngressRuleTO", "org.zstack.sdk.SecurityGroupIngressRuleTO"); - put("org.zstack.network.securitygroup.SecurityGroupInventory", "org.zstack.sdk.SecurityGroupInventory"); - put("org.zstack.network.securitygroup.SecurityGroupRuleInventory", "org.zstack.sdk.SecurityGroupRuleInventory"); - put("org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory", "org.zstack.sdk.VmNicSecurityGroupRefInventory"); - put("org.zstack.network.securitygroup.VmNicSecurityPolicyInventory", "org.zstack.sdk.VmNicSecurityPolicyInventory"); - put("org.zstack.network.service.eip.EipInventory", "org.zstack.sdk.EipInventory"); - put("org.zstack.network.service.flat.IpStatisticData", "org.zstack.sdk.IpStatisticData"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus", "org.zstack.sdk.NfvInstClusterStatus"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory", "org.zstack.sdk.NfvInstGroupConfigTaskInventory"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType", "org.zstack.sdk.FuncType"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType", "org.zstack.sdk.InstType"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode", "org.zstack.sdk.NfvInstGroupOperationMode"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus", "org.zstack.sdk.NfvInstGroupStatus"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstInventory", "org.zstack.sdk.NfvInstInventory"); - put("org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory", "org.zstack.sdk.NfvInstOfferingInventory"); - put("org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl", "org.zstack.sdk.LoadBalancerListerAcl"); - put("org.zstack.network.service.lb.CertificateInventory", "org.zstack.sdk.CertificateInventory"); - put("org.zstack.network.service.lb.LoadBalancerInventory", "org.zstack.sdk.LoadBalancerInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory", "org.zstack.sdk.LoadBalancerListenerACLRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory", "org.zstack.sdk.LoadBalancerListenerCertificateRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerInventory", "org.zstack.sdk.LoadBalancerListenerInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory", "org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory", "org.zstack.sdk.LoadBalancerListenerVmNicRefInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupInventory", "org.zstack.sdk.LoadBalancerServerGroupInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory", "org.zstack.sdk.LoadBalancerServerGroupServerIpInventory"); - put("org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory", "org.zstack.sdk.NfvInstGroupInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory", "org.zstack.sdk.NfvInstGroupL3NetworkRefInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory", "org.zstack.sdk.NfvInstGroupMonitorIpInventory"); - put("org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory", "org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory"); - put("org.zstack.network.service.portforwarding.PortForwardingRuleInventory", "org.zstack.sdk.PortForwardingRuleInventory"); - put("org.zstack.network.service.slb.SlbGroupInventory", "org.zstack.sdk.SlbGroupInventory"); - put("org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory", "org.zstack.sdk.SlbGroupL3NetworkRefInventory"); - put("org.zstack.network.service.slb.SlbGroupMonitorIpInventory", "org.zstack.sdk.SlbGroupMonitorIpInventory"); - put("org.zstack.network.service.slb.SlbLoadBalancerInventory", "org.zstack.sdk.SlbLoadBalancerInventory"); - put("org.zstack.network.service.slb.SlbOfferingInventory", "org.zstack.sdk.SlbOfferingInventory"); - put("org.zstack.network.service.slb.SlbVmInstanceInventory", "org.zstack.sdk.SlbVmInstanceInventory"); - put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory", "org.zstack.sdk.SlbVmInstanceConfigTaskInventory"); - put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus", "org.zstack.sdk.SlbVmInstanceConfigTaskStatus"); - put("org.zstack.network.service.vip.VipInventory", "org.zstack.sdk.VipInventory"); - put("org.zstack.network.service.vip.VipNetworkServicesRefInventory", "org.zstack.sdk.VipNetworkServicesRefInventory"); - put("org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory", "org.zstack.sdk.VipPortRangeInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory", "org.zstack.sdk.VirtualRouterOfferingInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory", "org.zstack.sdk.VirtualRouterSoftwareVersionInventory"); - put("org.zstack.network.service.virtualrouter.VirtualRouterVmInventory", "org.zstack.sdk.VirtualRouterVmInventory"); - put("org.zstack.network.zns.L2GeneveNetworkInventory", "org.zstack.sdk.network.zns.L2GeneveNetworkInventory"); - put("org.zstack.network.zns.ZnsControllerInventory", "org.zstack.sdk.network.zns.ZnsControllerInventory"); - put("org.zstack.network.zns.ZnsTenantInventory", "org.zstack.sdk.network.zns.ZnsTenantInventory"); - put("org.zstack.network.zns.ZnsTenantRouterInventory", "org.zstack.sdk.network.zns.ZnsTenantRouterInventory"); - put("org.zstack.network.zns.ZnsTransportZoneInventory", "org.zstack.sdk.network.zns.ZnsTransportZoneInventory"); - put("org.zstack.observabilityServer.ObservabilityServerOfferingInventory", "org.zstack.sdk.ObservabilityServerOfferingInventory"); - put("org.zstack.observabilityServer.ObservabilityServerVmInventory", "org.zstack.sdk.ObservabilityServerVmInventory"); - put("org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory", "org.zstack.sdk.ObservabilityServerServiceDataInventory"); - put("org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory", "org.zstack.sdk.LoadBalancerDataInventory"); - put("org.zstack.ovf.datatype.ImagePackageInventory", "org.zstack.sdk.ImagePackageInventory"); - put("org.zstack.ovf.datatype.ImagePackageState", "org.zstack.sdk.ImagePackageState"); - put("org.zstack.ovf.datatype.OvfCdDriverInfo", "org.zstack.sdk.OvfCdDriverInfo"); - put("org.zstack.ovf.datatype.OvfCpuInfo", "org.zstack.sdk.OvfCpuInfo"); - put("org.zstack.ovf.datatype.OvfDiskInfo", "org.zstack.sdk.OvfDiskInfo"); - put("org.zstack.ovf.datatype.OvfEthernetAdapterInfo", "org.zstack.sdk.OvfEthernetAdapterInfo"); - put("org.zstack.ovf.datatype.OvfInfo", "org.zstack.sdk.OvfInfo"); - put("org.zstack.ovf.datatype.OvfMemoryInfo", "org.zstack.sdk.OvfMemoryInfo"); - put("org.zstack.ovf.datatype.OvfNetworkInfo", "org.zstack.sdk.OvfNetworkInfo"); - put("org.zstack.ovf.datatype.OvfOSInfo", "org.zstack.sdk.OvfOSInfo"); - put("org.zstack.ovf.datatype.OvfSystemInfo", "org.zstack.sdk.OvfSystemInfo"); - put("org.zstack.ovf.datatype.OvfVolumeInfo", "org.zstack.sdk.OvfVolumeInfo"); - put("org.zstack.pciDevice.HostIommuStateType", "org.zstack.sdk.HostIommuStateType"); - put("org.zstack.pciDevice.HostIommuStatusType", "org.zstack.sdk.HostIommuStatusType"); - put("org.zstack.pciDevice.PciDeviceChooser", "org.zstack.sdk.PciDeviceChooser"); - put("org.zstack.pciDevice.PciDeviceInventory", "org.zstack.sdk.PciDeviceInventory"); - put("org.zstack.pciDevice.PciDeviceMetaData", "org.zstack.sdk.PciDeviceMetaData"); - put("org.zstack.pciDevice.PciDeviceMetaDataEntry", "org.zstack.sdk.PciDeviceMetaDataEntry"); - put("org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator", "org.zstack.sdk.PciDeviceMetaDataOperator"); - put("org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory"); - put("org.zstack.pciDevice.PciDeviceOfferingInventory", "org.zstack.sdk.PciDeviceOfferingInventory"); - put("org.zstack.pciDevice.PciDeviceOfferingType", "org.zstack.sdk.PciDeviceOfferingType"); - put("org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory", "org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory"); - put("org.zstack.pciDevice.PciDeviceState", "org.zstack.sdk.PciDeviceState"); - put("org.zstack.pciDevice.PciDeviceStatus", "org.zstack.sdk.PciDeviceStatus"); - put("org.zstack.pciDevice.PciDeviceType", "org.zstack.sdk.PciDeviceType"); - put("org.zstack.pciDevice.gpu.GpuAllocateStatus", "org.zstack.sdk.GpuAllocateStatus"); - put("org.zstack.pciDevice.gpu.GpuDeviceInventory", "org.zstack.sdk.GpuDeviceInventory"); - put("org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory", "org.zstack.sdk.GpuDeviceSpecCandidateInventory"); - put("org.zstack.pciDevice.gpu.GpuDeviceSpecInventory", "org.zstack.sdk.GpuDeviceSpecInventory"); - put("org.zstack.pciDevice.gpu.GpuVendor", "org.zstack.sdk.GpuVendor"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory", "org.zstack.sdk.DGpuDeviceInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory", "org.zstack.sdk.DGpuProfileInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory", "org.zstack.sdk.DGpuSpecStatsInventory"); - put("org.zstack.pciDevice.gpu.dgpu.DGpuStatus", "org.zstack.sdk.DGpuStatus"); - put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory", "org.zstack.sdk.MdevDeviceSpecInventory"); - put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState", "org.zstack.sdk.MdevDeviceSpecState"); - put("org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory", "org.zstack.sdk.PciDeviceMdevSpecRefInventory"); - put("org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory"); - put("org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory", "org.zstack.sdk.PciDeviceSpecInventory"); - put("org.zstack.pciDevice.specification.pci.PciDeviceSpecState", "org.zstack.sdk.PciDeviceSpecState"); - put("org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory", "org.zstack.sdk.VmInstancePciDeviceSpecRefInventory"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtMode", "org.zstack.sdk.PciDeviceVirtMode"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtState", "org.zstack.sdk.PciDeviceVirtState"); - put("org.zstack.pciDevice.virtual.PciDeviceVirtStatus", "org.zstack.sdk.PciDeviceVirtStatus"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser", "org.zstack.sdk.MdevDeviceChooser"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory", "org.zstack.sdk.MdevDeviceInventory"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState", "org.zstack.sdk.MdevDeviceState"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus", "org.zstack.sdk.MdevDeviceStatus"); - put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType", "org.zstack.sdk.MdevDeviceType"); - put("org.zstack.policyRoute.PolicyRouteRuleInventory", "org.zstack.sdk.PolicyRouteRuleInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleProtocol", "org.zstack.sdk.PolicyRouteRuleProtocol"); - put("org.zstack.policyRoute.PolicyRouteRuleSetInventory", "org.zstack.sdk.PolicyRouteRuleSetInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory", "org.zstack.sdk.PolicyRouteRuleSetL3RefInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory"); - put("org.zstack.policyRoute.PolicyRouteRuleState", "org.zstack.sdk.PolicyRouteRuleState"); - put("org.zstack.policyRoute.PolicyRouteTableInventory", "org.zstack.sdk.PolicyRouteTableInventory"); - put("org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory", "org.zstack.sdk.PolicyRouteTableRouteEntryInventory"); - put("org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory", "org.zstack.sdk.PolicyRouteTableVRouterRefInventory"); - put("org.zstack.proxy.UserProxyConfigInventory", "org.zstack.sdk.UserProxyConfigInventory"); - put("org.zstack.proxy.UserProxyConfigResourceRefInventory", "org.zstack.sdk.UserProxyConfigResourceRefInventory"); - put("org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct", "org.zstack.sdk.ResourceBindableConfigStruct"); - put("org.zstack.resourceconfig.ResourceConfigInventory", "org.zstack.sdk.ResourceConfigInventory"); - put("org.zstack.resourceconfig.ResourceConfigStruct", "org.zstack.sdk.ResourceConfigStruct"); - put("org.zstack.sdnController.header.H3cSdnControllerTenantInventory", "org.zstack.sdk.H3cSdnControllerTenantInventory"); - put("org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory", "org.zstack.sdk.HardwareL2VxlanNetworkInventory"); - put("org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory"); - put("org.zstack.sdnController.header.SdnVlanRange", "org.zstack.sdk.SdnVlanRange"); - put("org.zstack.snmp.agent.SnmpAgentInventory", "org.zstack.sdk.SnmpAgentInventory"); - put("org.zstack.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory"); - put("org.zstack.sns.SNSApplicationEndpointInventory", "org.zstack.sdk.sns.SNSApplicationEndpointInventory"); - put("org.zstack.sns.SNSApplicationPlatformInventory", "org.zstack.sdk.sns.SNSApplicationPlatformInventory"); - put("org.zstack.sns.SNSSmsReceiverInventory", "org.zstack.sdk.sns.SNSSmsReceiverInventory"); - put("org.zstack.sns.SNSSubscriberInventory", "org.zstack.sdk.sns.SNSSubscriberInventory"); - put("org.zstack.sns.SNSTopicInventory", "org.zstack.sdk.sns.SNSTopicInventory"); - put("org.zstack.sns.SmsReceiverType", "org.zstack.sdk.sns.SmsReceiverType"); - put("org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); - put("org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); - put("org.zstack.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory"); - put("org.zstack.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory"); - put("org.zstack.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory"); - put("org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory"); - put("org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory"); - put("org.zstack.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory"); - put("org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); - put("org.zstack.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory"); - put("org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory"); - put("org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); - put("org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); - put("org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory"); - put("org.zstack.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory"); - put("org.zstack.sso.header.AttributePurpose", "org.zstack.sdk.AttributePurpose"); - put("org.zstack.sso.header.CasClientInventory", "org.zstack.sdk.CasClientInventory"); - put("org.zstack.sso.header.CasState", "org.zstack.sdk.CasState"); - put("org.zstack.sso.header.ExtendedAttribute", "org.zstack.sdk.ExtendedAttribute"); - put("org.zstack.sso.header.OAuth2ClientInventory", "org.zstack.sdk.OAuth2ClientInventory"); - put("org.zstack.sso.header.OAuth2TokenInventory", "org.zstack.sdk.OAuth2TokenInventory"); - put("org.zstack.sso.header.RedirectUrlTemplate", "org.zstack.sdk.RedirectUrlTemplate"); - put("org.zstack.sso.header.RuleAttributeType", "org.zstack.sdk.RuleAttributeType"); - put("org.zstack.sso.header.SAML2ClientInventory", "org.zstack.sdk.SAML2ClientInventory"); - put("org.zstack.sso.header.SAML2State", "org.zstack.sdk.SAML2State"); - put("org.zstack.sso.header.SSOClientAttributeInventory", "org.zstack.sdk.SSOClientAttributeInventory"); - put("org.zstack.sso.header.SSOClientInventory", "org.zstack.sdk.SSOClientInventory"); - put("org.zstack.sso.header.SSORedirectTemplateInventory", "org.zstack.sdk.SSORedirectTemplateInventory"); - put("org.zstack.sso.header.SSOServerTokenInventory", "org.zstack.sdk.SSOServerTokenInventory"); - put("org.zstack.sso.header.SSOTokenInventory", "org.zstack.sdk.SSOTokenInventory"); - put("org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory", "org.zstack.sdk.ImageStoreBackupStorageInventory"); - put("org.zstack.storage.backup.imagestore.ImageStoreGcResult", "org.zstack.sdk.ImageStoreGcResult"); - put("org.zstack.storage.backup.imagestore.ImageStoreImageStruct", "org.zstack.sdk.ImageStoreImageStruct"); - put("org.zstack.storage.backup.sftp.SftpBackupStorageInventory", "org.zstack.sdk.SftpBackupStorageInventory"); - put("org.zstack.storage.ceph.backup.CephBackupStorageInventory", "org.zstack.sdk.CephBackupStorageInventory"); - put("org.zstack.storage.ceph.backup.CephBackupStorageMonInventory", "org.zstack.sdk.CephBackupStorageMonInventory"); - put("org.zstack.storage.ceph.primary.CephOsdGroupInventory", "org.zstack.sdk.CephOsdGroupInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStorageInventory", "org.zstack.sdk.CephPrimaryStorageInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory", "org.zstack.sdk.CephPrimaryStorageMonInventory"); - put("org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory", "org.zstack.sdk.CephPrimaryStoragePoolInventory"); - put("org.zstack.storage.ceph.primary.KVMCephVolumeTO", "org.zstack.sdk.KVMCephVolumeTO"); - put("org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.ceph.primary.KvmCephCdRomTO", "org.zstack.sdk.KvmCephCdRomTO"); - put("org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.ceph.primary.KvmCephIsoTO", "org.zstack.sdk.KvmCephIsoTO"); - put("org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo", "org.zstack.sdk.MonInfo"); - put("org.zstack.storage.device.fibreChannel.FiberChannelLunInventory", "org.zstack.sdk.FiberChannelLunInventory"); - put("org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory", "org.zstack.sdk.FiberChannelStorageInventory"); - put("org.zstack.storage.device.hba.FcHbaDeviceInventory", "org.zstack.sdk.FcHbaDeviceInventory"); - put("org.zstack.storage.device.hba.HbaDeviceInventory", "org.zstack.sdk.HbaDeviceInventory"); - put("org.zstack.storage.device.iscsi.IscsiLunInventory", "org.zstack.sdk.IscsiLunInventory"); - put("org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory", "org.zstack.sdk.IscsiServerClusterRefInventory"); - put("org.zstack.storage.device.iscsi.IscsiServerInventory", "org.zstack.sdk.IscsiServerInventory"); - put("org.zstack.storage.device.iscsi.IscsiTargetInventory", "org.zstack.sdk.IscsiTargetInventory"); - put("org.zstack.storage.device.localRaid.LocateStatus", "org.zstack.sdk.LocateStatus"); - put("org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory"); - put("org.zstack.storage.device.localRaid.RaidControllerInventory", "org.zstack.sdk.RaidControllerInventory"); - put("org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory", "org.zstack.sdk.RaidPhysicalDriveInventory"); - put("org.zstack.storage.device.localRaid.RunningState", "org.zstack.sdk.RunningState"); - put("org.zstack.storage.device.localRaid.SmartDataStruct", "org.zstack.sdk.SmartDataStruct"); - put("org.zstack.storage.device.multipath.DeviceTO", "org.zstack.sdk.DeviceTO"); - put("org.zstack.storage.device.multipath.MultipathTopologyStruct", "org.zstack.sdk.MultipathTopologyStruct"); - put("org.zstack.storage.device.nvme.NvmeLunHostRefInventory", "org.zstack.sdk.NvmeLunHostRefInventory"); - put("org.zstack.storage.device.nvme.NvmeLunInventory", "org.zstack.sdk.NvmeLunInventory"); - put("org.zstack.storage.device.nvme.NvmeServerClusterRefInventory", "org.zstack.sdk.NvmeServerClusterRefInventory"); - put("org.zstack.storage.device.nvme.NvmeServerInventory", "org.zstack.sdk.NvmeServerInventory"); - put("org.zstack.storage.device.nvme.NvmeTargetInventory", "org.zstack.sdk.NvmeTargetInventory"); - put("org.zstack.storage.primary.block.BlockPrimaryStorageInventory", "org.zstack.sdk.BlockPrimaryStorageInventory"); - put("org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity", "org.zstack.sdk.HostDiskCapacity"); - put("org.zstack.storage.primary.local.LocalStorageResourceRefInventory", "org.zstack.sdk.LocalStorageResourceRefInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory", "org.zstack.sdk.MiniStorageHostRefInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageInventory", "org.zstack.sdk.MiniStorageInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory", "org.zstack.sdk.MiniStorageResourceReplicationInventory"); - put("org.zstack.storage.primary.ministorage.MiniStorageType", "org.zstack.sdk.MiniStorageType"); - put("org.zstack.storage.primary.ministorage.ReplicationDiskStatus", "org.zstack.sdk.ReplicationDiskStatus"); - put("org.zstack.storage.primary.ministorage.ReplicationNetworkStatus", "org.zstack.sdk.ReplicationNetworkStatus"); - put("org.zstack.storage.primary.ministorage.ReplicationRole", "org.zstack.sdk.ReplicationRole"); - put("org.zstack.storage.primary.ministorage.ReplicationState", "org.zstack.sdk.ReplicationState"); - put("org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct", "org.zstack.sdk.SharedBlockCandidateStruct"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockGroupType", "org.zstack.sdk.SharedBlockGroupType"); - put("org.zstack.storage.primary.sharedblock.SharedBlockInventory", "org.zstack.sdk.SharedBlockInventory"); - put("org.zstack.storage.primary.sharedblock.SharedBlockState", "org.zstack.sdk.SharedBlockState"); - put("org.zstack.storage.primary.sharedblock.SharedBlockStatus", "org.zstack.sdk.SharedBlockStatus"); - put("org.zstack.storage.primary.sharedblock.SharedBlockType", "org.zstack.sdk.SharedBlockType"); - put("org.zstack.tag2.AttachTagResult", "org.zstack.sdk.AttachTagResult"); - put("org.zstack.templateConfig.GlobalConfigTemplateInventory", "org.zstack.sdk.GlobalConfigTemplateInventory"); - put("org.zstack.templateConfig.TemplateConfigInventory", "org.zstack.sdk.TemplateConfigInventory"); - put("org.zstack.ticket.entity.ArchiveTicketInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketInventory"); - put("org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory"); - put("org.zstack.ticket.entity.TicketFlowCollectionInventory", "org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory"); - put("org.zstack.ticket.entity.TicketFlowInventory", "org.zstack.sdk.ticket.entity.TicketFlowInventory"); - put("org.zstack.ticket.entity.TicketInventory", "org.zstack.sdk.ticket.entity.TicketInventory"); - put("org.zstack.ticket.entity.TicketRequest", "org.zstack.sdk.ticket.entity.TicketRequest"); - put("org.zstack.ticket.entity.TicketStatus", "org.zstack.sdk.ticket.entity.TicketStatus"); - put("org.zstack.ticket.entity.TicketStatusEvent", "org.zstack.sdk.ticket.entity.TicketStatusEvent"); - put("org.zstack.ticket.entity.TicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory"); - put("org.zstack.ticket.entity.TicketTypeInventory", "org.zstack.sdk.ticket.entity.TicketTypeInventory"); - put("org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); - put("org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory", "org.zstack.sdk.TwoFactorAuthenticationInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory", "org.zstack.sdk.TwoFactorAuthenticationSecretInventory"); - put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus", "org.zstack.sdk.TwoFactorAuthenticationSecretStatus"); - put("org.zstack.usbDevice.UsbDeviceInventory", "org.zstack.sdk.UsbDeviceInventory"); - put("org.zstack.usbDevice.UsbDeviceState", "org.zstack.sdk.UsbDeviceState"); - put("org.zstack.v2v.V2VConversionHostInventory", "org.zstack.sdk.V2VConversionHostInventory"); - put("org.zstack.vmware.ESXHostInventory", "org.zstack.sdk.ESXHostInventory"); - put("org.zstack.vmware.VCenterBackupStorageInventory", "org.zstack.sdk.VCenterBackupStorageInventory"); - put("org.zstack.vmware.VCenterClusterInventory", "org.zstack.sdk.VCenterClusterInventory"); - put("org.zstack.vmware.VCenterDatacenterInventory", "org.zstack.sdk.VCenterDatacenterInventory"); - put("org.zstack.vmware.VCenterInventory", "org.zstack.sdk.VCenterInventory"); - put("org.zstack.vmware.VCenterPrimaryStorageInventory", "org.zstack.sdk.VCenterPrimaryStorageInventory"); - put("org.zstack.vmware.VCenterResourcePoolInventory", "org.zstack.sdk.VCenterResourcePoolInventory"); - put("org.zstack.vmware.VCenterResourcePoolUsageInventory", "org.zstack.sdk.VCenterResourcePoolUsageInventory"); - put("org.zstack.vpcfirewall.entity.ActionType", "org.zstack.sdk.ActionType"); - put("org.zstack.vpcfirewall.entity.FirewallRuleState", "org.zstack.sdk.FirewallRuleState"); - put("org.zstack.vpcfirewall.entity.IpSetType", "org.zstack.sdk.IpSetType"); - put("org.zstack.vpcfirewall.entity.PacketsForwardType", "org.zstack.sdk.PacketsForwardType"); - put("org.zstack.vpcfirewall.entity.ProtocolType", "org.zstack.sdk.ProtocolType"); - put("org.zstack.vpcfirewall.entity.VpcFirewallInventory", "org.zstack.sdk.VpcFirewallInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory", "org.zstack.sdk.VpcFirewallIpSetTemplateInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory", "org.zstack.sdk.VpcFirewallRuleInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory", "org.zstack.sdk.VpcFirewallRuleSetInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory", "org.zstack.sdk.VpcFirewallRuleSetL3RefInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory", "org.zstack.sdk.VpcFirewallRuleTemplateInventory"); - put("org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory", "org.zstack.sdk.VpcFirewallVRouterRefInventory"); - put("org.zstack.vrouterRoute.VRouterRouteEntryAO", "org.zstack.sdk.VRouterRouteEntryAO"); - put("org.zstack.vrouterRoute.VRouterRouteEntryInventory", "org.zstack.sdk.VRouterRouteEntryInventory"); - put("org.zstack.vrouterRoute.VRouterRouteEntryType", "org.zstack.sdk.VRouterRouteEntryType"); - put("org.zstack.vrouterRoute.VRouterRouteTableInventory", "org.zstack.sdk.VRouterRouteTableInventory"); - put("org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory"); - put("org.zstack.xdragon.XDragonHostInventory", "org.zstack.sdk.XDragonHostInventory"); - put("org.zstack.zbox.ZBoxInventory", "org.zstack.sdk.ZBoxInventory"); - put("org.zstack.zbox.ZBoxLocationRefInventory", "org.zstack.sdk.ZBoxLocationRefInventory"); - put("org.zstack.zbox.ZBoxState", "org.zstack.sdk.ZBoxState"); - put("org.zstack.zbox.ZBoxStatus", "org.zstack.sdk.ZBoxStatus"); - put("org.zstack.zops.ChronyServerInfo", "org.zstack.sdk.ChronyServerInfo"); - put("org.zstack.zops.ChronyServerInfoPair", "org.zstack.sdk.ChronyServerInfoPair"); - put("org.zstack.zops.HostConnectedStatus", "org.zstack.sdk.HostConnectedStatus"); - put("org.zstack.zops.NetworkReachablePair", "org.zstack.sdk.NetworkReachablePair"); - put("org.zstack.zql.ZQLQueryReturn", "org.zstack.sdk.ZQLQueryReturn"); - put("org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam", "org.zstack.sdk.zwatch.alarm.ActionParam"); - put("org.zstack.zwatch.alarm.AlarmActionInventory", "org.zstack.sdk.zwatch.alarm.AlarmActionInventory"); - put("org.zstack.zwatch.alarm.AlarmDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory"); - put("org.zstack.zwatch.alarm.AlarmInventory", "org.zstack.sdk.zwatch.alarm.AlarmInventory"); - put("org.zstack.zwatch.alarm.AlarmLabelInventory", "org.zstack.sdk.zwatch.alarm.AlarmLabelInventory"); - put("org.zstack.zwatch.alarm.AlarmState", "org.zstack.sdk.zwatch.alarm.AlarmState"); - put("org.zstack.zwatch.alarm.AlarmStatus", "org.zstack.sdk.zwatch.alarm.AlarmStatus"); - put("org.zstack.zwatch.alarm.AlertDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlertDataAckInventory"); - put("org.zstack.zwatch.alarm.EventDataAckInventory", "org.zstack.sdk.zwatch.alarm.EventDataAckInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory"); - put("org.zstack.zwatch.alarm.EventSubscriptionState", "org.zstack.sdk.zwatch.alarm.EventSubscriptionState"); - put("org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); - put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); - put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); - put("org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory"); - put("org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); - put("org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct", "org.zstack.sdk.zwatch.api.EventStruct"); - put("org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct", "org.zstack.sdk.zwatch.api.MetricStruct"); - put("org.zstack.zwatch.api.Histogram", "org.zstack.sdk.zwatch.api.Histogram"); - put("org.zstack.zwatch.api.Histogram$Tag", "org.zstack.sdk.zwatch.api.Tag"); - put("org.zstack.zwatch.datatype.AlarmData", "org.zstack.sdk.zwatch.datatype.AlarmData"); - put("org.zstack.zwatch.datatype.AlarmDataV1", "org.zstack.sdk.zwatch.datatype.AlarmDataV1"); - put("org.zstack.zwatch.datatype.AlarmDataV2", "org.zstack.sdk.zwatch.datatype.AlarmDataV2"); - put("org.zstack.zwatch.datatype.AuditType", "org.zstack.sdk.zwatch.datatype.AuditType"); - put("org.zstack.zwatch.datatype.Datapoint", "org.zstack.sdk.zwatch.datatype.Datapoint"); - put("org.zstack.zwatch.datatype.EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); - put("org.zstack.zwatch.datatype.EventData", "org.zstack.sdk.zwatch.datatype.EventData"); - put("org.zstack.zwatch.datatype.EventFamily$EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); - put("org.zstack.zwatch.datatype.Label", "org.zstack.sdk.zwatch.datatype.Label"); - put("org.zstack.zwatch.datatype.Label$Operator", "org.zstack.sdk.zwatch.datatype.Operator"); - put("org.zstack.zwatch.datatype.MetricDatum", "org.zstack.sdk.zwatch.datatype.MetricDatum"); - put("org.zstack.zwatch.influxdb.InfluxEventData", "org.zstack.sdk.zwatch.influxdb.InfluxEventData"); - put("org.zstack.zwatch.influxdb.InfluxEventDataV1", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1"); - put("org.zstack.zwatch.influxdb.InfluxEventDataV2", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2"); - put("org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory"); - put("org.zstack.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory"); - put("org.zstack.zwatch.metricpusher.ReceiverState", "org.zstack.sdk.zwatch.metricpusher.ReceiverState"); - put("org.zstack.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory"); - put("org.zstack.zwatch.migratedb.AuditsInventory", "org.zstack.sdk.zwatch.migratedb.AuditsInventory"); - put("org.zstack.zwatch.migratedb.EventRecordsInventory", "org.zstack.sdk.zwatch.migratedb.EventRecordsInventory"); - put("org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); - put("org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory"); - put("org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory"); - put("org.zstack.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState"); - put("org.zstack.zwatch.resnotify.ResNotifyType", "org.zstack.sdk.zwatch.resnotify.ResNotifyType"); - put("org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory"); - put("org.zstack.zwatch.ruleengine.ComparisonOperator", "org.zstack.sdk.zwatch.ruleengine.ComparisonOperator"); - put("org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); - put("org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); - put("org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); + put("org.zstack.abstraction.OptionType", "org.zstack.sdk.OptionType"); + put("org.zstack.abstraction.OptionType$InputType", "org.zstack.sdk.InputType"); + put("org.zstack.accessKey.AccessKeyInventory", "org.zstack.sdk.AccessKeyInventory"); + put("org.zstack.accessKey.AccessKeyState", "org.zstack.sdk.AccessKeyState"); + put("org.zstack.accessKey.AccessKeyType", "org.zstack.sdk.AccessKeyType"); + put("org.zstack.ai.NginxRedirectRule", "org.zstack.sdk.NginxRedirectRule"); + put("org.zstack.ai.entity.ApplicationDevelopmentServiceInventory", "org.zstack.sdk.ApplicationDevelopmentServiceInventory"); + put("org.zstack.ai.entity.DatasetInventory", "org.zstack.sdk.DatasetInventory"); + put("org.zstack.ai.entity.ModelCenterCapacityInventory", "org.zstack.sdk.ModelCenterCapacityInventory"); + put("org.zstack.ai.entity.ModelCenterInventory", "org.zstack.sdk.ModelCenterInventory"); + put("org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory", "org.zstack.sdk.ModelEvalServiceInstanceGroupInventory"); + put("org.zstack.ai.entity.ModelEvaluationTaskInventory", "org.zstack.sdk.ModelEvaluationTaskInventory"); + put("org.zstack.ai.entity.ModelInventory", "org.zstack.sdk.ModelInventory"); + put("org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory", "org.zstack.sdk.ModelServiceGroupDatasetRefInventory"); + put("org.zstack.ai.entity.ModelServiceInstanceGroupInventory", "org.zstack.sdk.ModelServiceInstanceGroupInventory"); + put("org.zstack.ai.entity.ModelServiceInstanceInventory", "org.zstack.sdk.ModelServiceInstanceInventory"); + put("org.zstack.ai.entity.ModelServiceInventory", "org.zstack.sdk.ModelServiceInventory"); + put("org.zstack.ai.entity.ModelServiceRefInventory", "org.zstack.sdk.ModelServiceRefInventory"); + put("org.zstack.ai.entity.ModelServiceTemplateInventory", "org.zstack.sdk.ModelServiceTemplateInventory"); + put("org.zstack.ai.entity.TrainedModelRecordInventory", "org.zstack.sdk.TrainedModelRecordInventory"); + put("org.zstack.ai.entity.VmModelMountInventory", "org.zstack.sdk.VmModelMountInventory"); + put("org.zstack.ai.entity.VmModelMountStatus", "org.zstack.sdk.VmModelMountStatus"); + put("org.zstack.ai.message.ArchitectureImageMapping", "org.zstack.sdk.ArchitectureImageMapping"); + put("org.zstack.ai.message.MaaSUsage", "org.zstack.sdk.MaaSUsage"); + put("org.zstack.ai.message.MatchEvidence", "org.zstack.sdk.MatchEvidence"); + put("org.zstack.ai.message.MatchedStep", "org.zstack.sdk.MatchedStep"); + put("org.zstack.ai.message.ModelCenterServiceInventory", "org.zstack.sdk.ModelCenterServiceInventory"); + put("org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService", "org.zstack.sdk.MetaServerService"); + put("org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus", "org.zstack.sdk.ServiceStatus"); + put("org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService", "org.zstack.sdk.ZdfsService"); + put("org.zstack.ai.message.ModelService", "org.zstack.sdk.ModelService"); + put("org.zstack.ai.message.ModelServiceMatchEntry", "org.zstack.sdk.ModelServiceMatchEntry"); + put("org.zstack.ai.message.ModelServiceMatchEntryName", "org.zstack.sdk.ModelServiceMatchEntryName"); + put("org.zstack.ai.message.ModelServiceMatchStatus", "org.zstack.sdk.ModelServiceMatchStatus"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory", "org.zstack.sdk.AliyunNasAccessGroupInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory", "org.zstack.sdk.AliyunNasAccessRuleInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory", "org.zstack.sdk.AliyunNasFileSystemInventory"); + put("org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory", "org.zstack.sdk.AliyunNasMountTargetInventory"); + put("org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty", "org.zstack.sdk.AliyunNasAccessGroupProperty"); + put("org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty", "org.zstack.sdk.AliyunNasFileSystemProperty"); + put("org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty", "org.zstack.sdk.AliyunNasMountTargetProperty"); + put("org.zstack.aliyun.pangu.AliyunPanguPartitionInventory", "org.zstack.sdk.AliyunPanguPartitionInventory"); + put("org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory", "org.zstack.sdk.AliyunProxyVSwitchInventory"); + put("org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory", "org.zstack.sdk.AliyunProxyVpcInventory"); + put("org.zstack.appliancevm.ApplianceVmInventory", "org.zstack.sdk.ApplianceVmInventory"); + put("org.zstack.autoscaling.group.AutoScalingGroupInventory", "org.zstack.sdk.AutoScalingGroupInventory"); + put("org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory", "org.zstack.sdk.AutoScalingGroupActivityInventory"); + put("org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory", "org.zstack.sdk.AutoScalingGroupInstanceInventory"); + put("org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory", "org.zstack.sdk.AddingNewVmRuleInventory"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleInventory", "org.zstack.sdk.AutoScalingRuleInventory"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleState", "org.zstack.sdk.AutoScalingRuleState"); + put("org.zstack.autoscaling.group.rule.AutoScalingRuleStatus", "org.zstack.sdk.AutoScalingRuleStatus"); + put("org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory", "org.zstack.sdk.RemovalInstanceRuleInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory", "org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory"); + put("org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory", "org.zstack.sdk.AutoScalingRuleTriggerInventory"); + put("org.zstack.autoscaling.template.AutoScalingTemplateInventory", "org.zstack.sdk.AutoScalingTemplateInventory"); + put("org.zstack.autoscaling.template.AutoScalingVmTemplateInventory", "org.zstack.sdk.AutoScalingVmTemplateInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2BondingInventory", "org.zstack.sdk.BareMetal2BondingInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory", "org.zstack.sdk.BareMetal2BondingNicRefInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory", "org.zstack.sdk.BareMetal2ChassisDiskInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory", "org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisInventory", "org.zstack.sdk.BareMetal2ChassisInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory", "org.zstack.sdk.BareMetal2ChassisNicInventory"); + put("org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory", "org.zstack.sdk.BareMetal2ChassisPciDeviceInventory"); + put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig", "org.zstack.sdk.BareMetal2DpuChassisConfig"); + put("org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory", "org.zstack.sdk.BareMetal2DpuChassisInventory"); + put("org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory", "org.zstack.sdk.BareMetal2IpmiChassisInventory"); + put("org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory", "org.zstack.sdk.BareMetal2ChassisOfferingInventory"); + put("org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory", "org.zstack.sdk.BareMetal2DpuHostInventory"); + put("org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig", "org.zstack.sdk.YuccaBareMetal2DpuChassisConfig"); + put("org.zstack.baremetal2.gateway.BareMetal2GatewayInventory", "org.zstack.sdk.BareMetal2GatewayInventory"); + put("org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory", "org.zstack.sdk.BareMetal2GatewayProvisionNicInventory"); + put("org.zstack.baremetal2.instance.BareMetal2InstanceInventory", "org.zstack.sdk.BareMetal2InstanceInventory"); + put("org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory", "org.zstack.sdk.BareMetal2InstanceProvisionNicInventory"); + put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory", "org.zstack.sdk.BareMetal2ProvisionNetworkInventory"); + put("org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity"); + put("org.zstack.billing.Pagination", "org.zstack.sdk.Pagination"); + put("org.zstack.billing.PriceInventory", "org.zstack.sdk.PriceInventory"); + put("org.zstack.billing.ResourceSpending", "org.zstack.sdk.ResourceSpending"); + put("org.zstack.billing.Spending", "org.zstack.sdk.Spending"); + put("org.zstack.billing.SpendingDetails", "org.zstack.sdk.SpendingDetails"); + put("org.zstack.billing.generator.BillingInventory", "org.zstack.sdk.BillingInventory"); + put("org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory", "org.zstack.sdk.BareMetal2BillingInventory"); + put("org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory", "org.zstack.sdk.PciDeviceBillingInventory"); + put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory", "org.zstack.sdk.PubIpVipBandwidthInBillingInventory"); + put("org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVipBandwidthOutBillingInventory"); + put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory"); + put("org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory"); + put("org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory", "org.zstack.sdk.VmCPUBillingInventory"); + put("org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory", "org.zstack.sdk.VmMemoryBillingInventory"); + put("org.zstack.billing.generator.volume.data.DataVolumeBillingInventory", "org.zstack.sdk.DataVolumeBillingInventory"); + put("org.zstack.billing.generator.volume.root.RootVolumeBillingInventory", "org.zstack.sdk.RootVolumeBillingInventory"); + put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending", "org.zstack.sdk.BareMetal2Spending"); + put("org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails", "org.zstack.sdk.BareMetal2SpendingDetails"); + put("org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory"); + put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending", "org.zstack.sdk.PciDeviceSpending"); + put("org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory", "org.zstack.sdk.PciDeviceSpendingInventory"); + put("org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory", "org.zstack.sdk.PricePciDeviceOfferingRefInventory"); + put("org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory", "org.zstack.sdk.SnapShotSpendingInventory"); + put("org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending", "org.zstack.sdk.SnapshotSpending"); + put("org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending", "org.zstack.sdk.PubIpVipBandwidthSpending"); + put("org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails", "org.zstack.sdk.VipBandwidthSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails", "org.zstack.sdk.VmCPUSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails", "org.zstack.sdk.VmMemorySpendingDetails"); + put("org.zstack.billing.spendingcalculator.vm.VmSpending", "org.zstack.sdk.VmSpending"); + put("org.zstack.billing.spendingcalculator.vm.VmSpendingDetails", "org.zstack.sdk.VmSpendingDetails"); + put("org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending", "org.zstack.sdk.PubIpVmNicBandwidthSpending"); + put("org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails", "org.zstack.sdk.VmNicBandwidthSpendingDetails"); + put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending", "org.zstack.sdk.DataVolumeSpending"); + put("org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory", "org.zstack.sdk.DataVolumeSpendingInventory"); + put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending", "org.zstack.sdk.RootVolumeSpending"); + put("org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory", "org.zstack.sdk.RootVolumeSpendingInventory"); + put("org.zstack.billing.table.APICreatePriceTableMsg$Price", "org.zstack.sdk.Price"); + put("org.zstack.billing.table.AccountPriceTableRefInventory", "org.zstack.sdk.AccountPriceTableRefInventory"); + put("org.zstack.billing.table.PriceTableInventory", "org.zstack.sdk.PriceTableInventory"); + put("org.zstack.cloudformation.template.struct.ActionStruct", "org.zstack.sdk.ActionStruct"); + put("org.zstack.cloudformation.template.struct.ResourceStruct", "org.zstack.sdk.ResourceStruct"); + put("org.zstack.cloudformation.template.struct.ResourceType", "org.zstack.sdk.ResourceType"); + put("org.zstack.container.ContainerBackupStorageInventory", "org.zstack.sdk.ContainerBackupStorageInventory"); + put("org.zstack.container.ContainerUsage", "org.zstack.sdk.ContainerUsage"); + put("org.zstack.container.entity.ContainerImageInventory", "org.zstack.sdk.ContainerImageInventory"); + put("org.zstack.container.entity.ContainerImageTagInventory", "org.zstack.sdk.ContainerImageTagInventory"); + put("org.zstack.container.entity.ContainerManagementEndpointInventory", "org.zstack.sdk.ContainerManagementEndpointInventory"); + put("org.zstack.container.entity.NativeClusterInventory", "org.zstack.sdk.NativeClusterInventory"); + put("org.zstack.container.entity.NativeHostInventory", "org.zstack.sdk.NativeHostInventory"); + put("org.zstack.container.entity.PodInventory", "org.zstack.sdk.PodInventory"); + put("org.zstack.container.entity.ProjectRepositoryInventory", "org.zstack.sdk.ProjectRepositoryInventory"); + put("org.zstack.container.entity.ZakuImageInventory", "org.zstack.sdk.ZakuImageInventory"); + put("org.zstack.core.config.GlobalConfigInventory", "org.zstack.sdk.GlobalConfigInventory"); + put("org.zstack.core.config.GlobalConfigOptions", "org.zstack.sdk.GlobalConfigOptions"); + put("org.zstack.core.config.GuestOsCharacterInventory", "org.zstack.sdk.GuestOsCharacterInventory"); + put("org.zstack.core.errorcode.ElaborationCategory", "org.zstack.sdk.ElaborationCategory"); + put("org.zstack.core.errorcode.ElaborationCheckResult", "org.zstack.sdk.ElaborationCheckResult"); + put("org.zstack.core.errorcode.ElaborationContent", "org.zstack.sdk.ElaborationContent"); + put("org.zstack.core.eventlog.EventLogInventory", "org.zstack.sdk.EventLogInventory"); + put("org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder", "org.zstack.sdk.ExternalServiceCapabilitiesBuilder"); + put("org.zstack.core.gc.GarbageCollectorInventory", "org.zstack.sdk.GarbageCollectorInventory"); + put("org.zstack.core.jsonlabel.JsonLabelInventory", "org.zstack.sdk.JsonLabelInventory"); + put("org.zstack.core.upgrade.AgentVersionInventory", "org.zstack.sdk.AgentVersionInventory"); + put("org.zstack.crypto.ccs.CCSCertificateInventory", "org.zstack.sdk.CCSCertificateInventory"); + put("org.zstack.crypto.ccs.CCSCertificateUserRefInventory", "org.zstack.sdk.CCSCertificateUserRefInventory"); + put("org.zstack.crypto.ccs.CCSCertificateUserState", "org.zstack.sdk.CCSCertificateUserState"); + put("org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory", "org.zstack.sdk.AiSiNoSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory", "org.zstack.sdk.CSPSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory", "org.zstack.sdk.FiSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory", "org.zstack.sdk.FiSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory", "org.zstack.sdk.FlkSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory", "org.zstack.sdk.FlkSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory", "org.zstack.sdk.HaiTaiSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory", "org.zstack.sdk.InfoSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory", "org.zstack.sdk.InfoSecSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory", "org.zstack.sdk.JitSecurityMachineInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory", "org.zstack.sdk.KoAlSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory", "org.zstack.sdk.PluginSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory", "org.zstack.sdk.SanSecSecretResourcePoolInventory"); + put("org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory", "org.zstack.sdk.SanSecSecurityMachineInventory"); + put("org.zstack.directory.DirectoryInventory", "org.zstack.sdk.DirectoryInventory"); + put("org.zstack.drs.api.HostLoad", "org.zstack.sdk.HostLoad"); + put("org.zstack.drs.api.Threshold", "org.zstack.sdk.Threshold"); + put("org.zstack.drs.entity.ClusterDRSInventory", "org.zstack.sdk.ClusterDRSInventory"); + put("org.zstack.drs.entity.DRSAdviceInventory", "org.zstack.sdk.DRSAdviceInventory"); + put("org.zstack.drs.entity.DRSVmMigrationActivityInventory", "org.zstack.sdk.DRSVmMigrationActivityInventory"); + put("org.zstack.externalbackup.BackupStorageExternalBackupInfo", "org.zstack.sdk.BackupStorageExternalBackupInfo"); + put("org.zstack.externalbackup.ExternalBackupInventory", "org.zstack.sdk.ExternalBackupInventory"); + put("org.zstack.externalbackup.ExternalBackupState", "org.zstack.sdk.ExternalBackupState"); + put("org.zstack.externalbackup.ResourceBackupState", "org.zstack.sdk.ResourceBackupState"); + put("org.zstack.externalbackup.ResourceExternalBackupInfo", "org.zstack.sdk.ResourceExternalBackupInfo"); + put("org.zstack.externalbackup.VmExternalBackupInfo", "org.zstack.sdk.VmExternalBackupInfo"); + put("org.zstack.externalbackup.VolumeExternalBackupInfo", "org.zstack.sdk.VolumeExternalBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxBackupInventory", "org.zstack.sdk.ZBoxBackupInventory"); + put("org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo", "org.zstack.sdk.ZBoxBackupStorageBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxVmBackupInfo", "org.zstack.sdk.ZBoxVmBackupInfo"); + put("org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo", "org.zstack.sdk.ZBoxVolumeBackupInfo"); + put("org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory", "org.zstack.sdk.FaultToleranceVmGroupInventory"); + put("org.zstack.guesttools.GuestToolsInventory", "org.zstack.sdk.GuestToolsInventory"); + put("org.zstack.guesttools.GuestToolsStateInventory", "org.zstack.sdk.GuestToolsStateInventory"); + put("org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory"); + put("org.zstack.guesttools.GuestVmScriptExecutedRecordInventory", "org.zstack.sdk.GuestVmScriptExecutedRecordInventory"); + put("org.zstack.guesttools.GuestVmScriptInventory", "org.zstack.sdk.GuestVmScriptInventory"); + put("org.zstack.guesttools.InvocationRecord", "org.zstack.sdk.InvocationRecord"); + put("org.zstack.guesttools.InvocationRecordDetail", "org.zstack.sdk.InvocationRecordDetail"); + put("org.zstack.ha.HaNetworkGroupInventory", "org.zstack.sdk.HaNetworkGroupInventory"); + put("org.zstack.ha.HaStrategyConditionInventory", "org.zstack.sdk.HaStrategyConditionInventory"); + put("org.zstack.header.acl.AccessControlListEntryInventory", "org.zstack.sdk.AccessControlListEntryInventory"); + put("org.zstack.header.acl.AccessControlListInventory", "org.zstack.sdk.AccessControlListInventory"); + put("org.zstack.header.affinitygroup.AffinityGroupInventory", "org.zstack.sdk.AffinityGroupInventory"); + put("org.zstack.header.affinitygroup.AffinityGroupUsageInventory", "org.zstack.sdk.AffinityGroupUsageInventory"); + put("org.zstack.header.aliyun.AliyunOssException", "org.zstack.sdk.AliyunOssException"); + put("org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory", "org.zstack.sdk.AliyunEbsBackupStorageInventory"); + put("org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory", "org.zstack.sdk.AliyunEbsPrimaryStorageInventory"); + put("org.zstack.header.aliyun.ecs.EcsInstanceInventory", "org.zstack.sdk.EcsInstanceInventory"); + put("org.zstack.header.aliyun.ecs.EcsInstanceType", "org.zstack.sdk.EcsInstanceType"); + put("org.zstack.header.aliyun.errorCode.AliyunErrorCode", "org.zstack.sdk.AliyunErrorCode"); + put("org.zstack.header.aliyun.image.EcsImageInventory", "org.zstack.sdk.EcsImageInventory"); + put("org.zstack.header.aliyun.image.ProgressProperty", "org.zstack.sdk.ProgressProperty"); + put("org.zstack.header.aliyun.network.HybridConnectionType", "org.zstack.sdk.HybridConnectionType"); + put("org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory", "org.zstack.sdk.AliyunRouterInterfaceInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory", "org.zstack.sdk.ConnectionAccessPointInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory", "org.zstack.sdk.ConnectionRelationShipInventory"); + put("org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty", "org.zstack.sdk.ConnectionRelationShipProperty"); + put("org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory", "org.zstack.sdk.VirtualBorderRouterInventory"); + put("org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory", "org.zstack.sdk.EcsSecurityGroupInventory"); + put("org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory", "org.zstack.sdk.EcsSecurityGroupRuleInventory"); + put("org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory", "org.zstack.sdk.EcsVSwitchInventory"); + put("org.zstack.header.aliyun.network.vpc.EcsVpcInventory", "org.zstack.sdk.EcsVpcInventory"); + put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory", "org.zstack.sdk.VpcVirtualRouteEntryInventory"); + put("org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory", "org.zstack.sdk.VpcVirtualRouterInventory"); + put("org.zstack.header.aliyun.oss.OssBucketInventory", "org.zstack.sdk.OssBucketInventory"); + put("org.zstack.header.aliyun.oss.OssBucketProperty", "org.zstack.sdk.OssBucketProperty"); + put("org.zstack.header.aliyun.storage.disk.AliyunDiskInventory", "org.zstack.sdk.AliyunDiskInventory"); + put("org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory", "org.zstack.sdk.AliyunSnapshotInventory"); + put("org.zstack.header.allocator.datatypes.CpuMemoryCapacityData", "org.zstack.sdk.CpuMemoryCapacityData"); + put("org.zstack.header.appcenter.PublishAppInventory", "org.zstack.sdk.PublishAppInventory"); + put("org.zstack.header.appcenter.PublishAppResourceStruct", "org.zstack.sdk.PublishAppResourceStruct"); + put("org.zstack.header.baremetal.BaremetalException", "org.zstack.sdk.BaremetalException"); + put("org.zstack.header.baremetal.chassis.BaremetalChassisInventory", "org.zstack.sdk.BaremetalChassisInventory"); + put("org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory", "org.zstack.sdk.BaremetalHardwareInfoInventory"); + put("org.zstack.header.baremetal.instance.BaremetalInstanceInventory", "org.zstack.sdk.BaremetalInstanceInventory"); + put("org.zstack.header.baremetal.network.BaremetalBondingInventory", "org.zstack.sdk.BaremetalBondingInventory"); + put("org.zstack.header.baremetal.network.BaremetalNicInventory", "org.zstack.sdk.BaremetalNicInventory"); + put("org.zstack.header.baremetal.network.BaremetalVlanNicInventory", "org.zstack.sdk.BaremetalVlanNicInventory"); + put("org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory", "org.zstack.sdk.PreconfigurationTemplateInventory"); + put("org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory", "org.zstack.sdk.BaremetalPxeServerInventory"); + put("org.zstack.header.bootstrap.MiniCandidateHostStruct", "org.zstack.sdk.MiniCandidateHostStruct"); + put("org.zstack.header.bootstrap.MiniHostInfo", "org.zstack.sdk.MiniHostInfo"); + put("org.zstack.header.bootstrap.MiniNetworkConfigStruct", "org.zstack.sdk.MiniNetworkConfigStruct"); + put("org.zstack.header.buildapp.BuildAppExportHistoryInventory", "org.zstack.sdk.BuildAppExportHistoryInventory"); + put("org.zstack.header.buildapp.BuildApplicationInventory", "org.zstack.sdk.BuildApplicationInventory"); + put("org.zstack.header.buildsystem.AppBuildSystemInventory", "org.zstack.sdk.AppBuildSystemInventory"); + put("org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory", "org.zstack.sdk.AppBuildSystemZoneRefInventory"); + put("org.zstack.header.cbt.CbtTaskInventory", "org.zstack.sdk.CbtTaskInventory"); + put("org.zstack.header.cbt.CbtTaskResourceRefInventory", "org.zstack.sdk.CbtTaskResourceRefInventory"); + put("org.zstack.header.cbt.CbtTaskStatus", "org.zstack.sdk.CbtTaskStatus"); + put("org.zstack.header.cbt.VolumeCbtBackupInfo", "org.zstack.sdk.VolumeCbtBackupInfo"); + put("org.zstack.header.cloudformation.CloudFormationStackEventInventory", "org.zstack.sdk.CloudFormationStackEventInventory"); + put("org.zstack.header.cloudformation.PreviewResourceStruct", "org.zstack.sdk.PreviewResourceStruct"); + put("org.zstack.header.cloudformation.ResourceStackInventory", "org.zstack.sdk.ResourceStackInventory"); + put("org.zstack.header.cloudformation.StackParameters", "org.zstack.sdk.StackParameters"); + put("org.zstack.header.cloudformation.StackTemplateInventory", "org.zstack.sdk.StackTemplateInventory"); + put("org.zstack.header.cloudformation.SupportedResourceStruct", "org.zstack.sdk.SupportedResourceStruct"); + put("org.zstack.header.cluster.ClusterInventory", "org.zstack.sdk.ClusterInventory"); + put("org.zstack.header.cluster.PowerOffHardwareResult", "org.zstack.sdk.PowerOffHardwareResult"); + put("org.zstack.header.configuration.DiskOfferingInventory", "org.zstack.sdk.DiskOfferingInventory"); + put("org.zstack.header.configuration.InstanceOfferingInventory", "org.zstack.sdk.InstanceOfferingInventory"); + put("org.zstack.header.console.ConsoleInventory", "org.zstack.sdk.ConsoleInventory"); + put("org.zstack.header.console.ConsoleProxyAgentInventory", "org.zstack.sdk.ConsoleProxyAgentInventory"); + put("org.zstack.header.core.external.plugin.PluginDriverInventory", "org.zstack.sdk.PluginDriverInventory"); + put("org.zstack.header.core.external.service.ExternalServiceCapabilities", "org.zstack.sdk.ExternalServiceCapabilities"); + put("org.zstack.header.core.external.service.ExternalServiceConfigurationInventory", "org.zstack.sdk.ExternalServiceConfigurationInventory"); + put("org.zstack.header.core.external.service.ExternalServiceInventory", "org.zstack.sdk.ExternalServiceInventory"); + put("org.zstack.header.core.progress.ChainInfo", "org.zstack.sdk.ChainInfo"); + put("org.zstack.header.core.progress.LongJobProgressDetail", "org.zstack.sdk.LongJobProgressDetail"); + put("org.zstack.header.core.progress.PendingTaskInfo", "org.zstack.sdk.PendingTaskInfo"); + put("org.zstack.header.core.progress.RunningTaskInfo", "org.zstack.sdk.RunningTaskInfo"); + put("org.zstack.header.core.progress.TaskInfo", "org.zstack.sdk.TaskInfo"); + put("org.zstack.header.core.progress.TaskProgressInventory", "org.zstack.sdk.TaskProgressInventory"); + put("org.zstack.header.core.trash.CleanTrashResult", "org.zstack.sdk.CleanTrashResult"); + put("org.zstack.header.core.trash.InstallPathRecycleInventory", "org.zstack.sdk.InstallPathRecycleInventory"); + put("org.zstack.header.core.trash.TrashCleanupResult", "org.zstack.sdk.TrashCleanupResult"); + put("org.zstack.header.core.webhooks.WebhookInventory", "org.zstack.sdk.WebhookInventory"); + put("org.zstack.header.datacenter.DataCenterInventory", "org.zstack.sdk.DataCenterInventory"); + put("org.zstack.header.datacenter.DataCenterProperty", "org.zstack.sdk.DataCenterProperty"); + put("org.zstack.header.errorcode.ErrorCode", "org.zstack.sdk.ErrorCode"); + put("org.zstack.header.errorcode.ErrorCodeList", "org.zstack.sdk.ErrorCodeList"); + put("org.zstack.header.flowMeter.FlowCollectorInventory", "org.zstack.sdk.FlowCollectorInventory"); + put("org.zstack.header.flowMeter.FlowCounter", "org.zstack.sdk.FlowCounter"); + put("org.zstack.header.flowMeter.FlowMeterInventory", "org.zstack.sdk.FlowMeterInventory"); + put("org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory", "org.zstack.sdk.NetworkRouterFlowMeterRefInventory"); + put("org.zstack.header.host.AddHostFromFileResult", "org.zstack.sdk.AddHostFromFileResult"); + put("org.zstack.header.host.CpuArchitecture", "org.zstack.sdk.CpuArchitecture"); + put("org.zstack.header.host.HostInventory", "org.zstack.sdk.HostInventory"); + put("org.zstack.header.host.HostIpmiInventory", "org.zstack.sdk.HostIpmiInventory"); + put("org.zstack.header.host.HostNUMANode", "org.zstack.sdk.HostNUMANode"); + put("org.zstack.header.host.HostNetworkBondingServiceRefInventory", "org.zstack.sdk.HostNetworkBondingServiceRefInventory"); + put("org.zstack.header.host.HostNetworkInterfaceServiceRefInventory", "org.zstack.sdk.HostNetworkInterfaceServiceRefInventory"); + put("org.zstack.header.host.HostNetworkLabelInventory", "org.zstack.sdk.HostNetworkLabelInventory"); + put("org.zstack.header.host.HostPhysicalMemoryInventory", "org.zstack.sdk.HostPhysicalMemoryInventory"); + put("org.zstack.header.host.HwMonitorStatus", "org.zstack.sdk.HwMonitorStatus"); + put("org.zstack.header.host.ServiceTypeStatisticData", "org.zstack.sdk.ServiceTypeStatisticData"); + put("org.zstack.header.hybrid.network.eip.HybridEipAddressInventory", "org.zstack.sdk.HybridEipAddressInventory"); + put("org.zstack.header.hybrid.network.eip.HybridEipStatus", "org.zstack.sdk.HybridEipStatus"); + put("org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory", "org.zstack.sdk.VpcUserVpnGatewayInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory", "org.zstack.sdk.VpcVpnConnectionInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory", "org.zstack.sdk.VpcVpnGatewayInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory", "org.zstack.sdk.VpcVpnIkeConfigInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct", "org.zstack.sdk.VpcVpnIkeConfigStruct"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory", "org.zstack.sdk.VpcVpnIpSecConfigInventory"); + put("org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct", "org.zstack.sdk.VpcVpnIpSecConfigStruct"); + put("org.zstack.header.identity.AccountInventory", "org.zstack.sdk.AccountInventory"); + put("org.zstack.header.identity.AccountResourceRefInventory", "org.zstack.sdk.AccountResourceRefInventory"); + put("org.zstack.header.identity.PolicyInventory", "org.zstack.sdk.PolicyInventory"); + put("org.zstack.header.identity.PolicyStatement", "org.zstack.sdk.PolicyStatement"); + put("org.zstack.header.identity.PolicyStatementEffect", "org.zstack.sdk.PolicyStatementEffect"); + put("org.zstack.header.identity.Quota$QuotaUsage", "org.zstack.sdk.QuotaUsage"); + put("org.zstack.header.identity.QuotaInventory", "org.zstack.sdk.QuotaInventory"); + put("org.zstack.header.identity.SessionInventory", "org.zstack.sdk.SessionInventory"); + put("org.zstack.header.identity.SharedResourceInventory", "org.zstack.sdk.SharedResourceInventory"); + put("org.zstack.header.identity.UserGroupInventory", "org.zstack.sdk.UserGroupInventory"); + put("org.zstack.header.identity.UserInventory", "org.zstack.sdk.UserInventory"); + put("org.zstack.header.identity.login.LoginAuthenticationProcedureDesc", "org.zstack.sdk.LoginAuthenticationProcedureDesc"); + put("org.zstack.header.identity.role.RoleInventory", "org.zstack.sdk.identity.role.RoleInventory"); + put("org.zstack.header.identity.role.RolePolicyRefInventory", "org.zstack.sdk.identity.role.RolePolicyRefInventory"); + put("org.zstack.header.identity.role.RolePolicyStatementInventory", "org.zstack.sdk.identity.role.RolePolicyStatementInventory"); + put("org.zstack.header.identity.role.RoleState", "org.zstack.sdk.identity.role.RoleState"); + put("org.zstack.header.identity.role.RoleStateEvent", "org.zstack.sdk.identity.role.RoleStateEvent"); + put("org.zstack.header.identity.role.RoleType", "org.zstack.sdk.identity.role.RoleType"); + put("org.zstack.header.identityzone.IdentityZoneInventory", "org.zstack.sdk.IdentityZoneInventory"); + put("org.zstack.header.identityzone.IdentityZoneProperty", "org.zstack.sdk.IdentityZoneProperty"); + put("org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure"); + put("org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure", "org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure"); + put("org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails", "org.zstack.sdk.JobDetails"); + put("org.zstack.header.image.ImageBackupStorageRefInventory", "org.zstack.sdk.ImageBackupStorageRefInventory"); + put("org.zstack.header.image.ImageGroupInventory", "org.zstack.sdk.ImageGroupInventory"); + put("org.zstack.header.image.ImageGroupRefInventory", "org.zstack.sdk.ImageGroupRefInventory"); + put("org.zstack.header.image.ImageInventory", "org.zstack.sdk.ImageInventory"); + put("org.zstack.header.longjob.LongJobInventory", "org.zstack.sdk.LongJobInventory"); + put("org.zstack.header.longjob.LongJobState", "org.zstack.sdk.LongJobState"); + put("org.zstack.header.managementnode.ManagementNodeInventory", "org.zstack.sdk.ManagementNodeInventory"); + put("org.zstack.header.network.l2.L2NetworkData", "org.zstack.sdk.L2NetworkData"); + put("org.zstack.header.network.l2.L2NetworkInventory", "org.zstack.sdk.L2NetworkInventory"); + put("org.zstack.header.network.l2.L2VlanNetworkInventory", "org.zstack.sdk.L2VlanNetworkInventory"); + put("org.zstack.header.network.l3.AddressPoolInventory", "org.zstack.sdk.AddressPoolInventory"); + put("org.zstack.header.network.l3.FreeIpInventory", "org.zstack.sdk.FreeIpInventory"); + put("org.zstack.header.network.l3.IpRangeInventory", "org.zstack.sdk.IpRangeInventory"); + put("org.zstack.header.network.l3.IpRangeType", "org.zstack.sdk.IpRangeType"); + put("org.zstack.header.network.l3.L3NetworkHostRouteInventory", "org.zstack.sdk.L3NetworkHostRouteInventory"); + put("org.zstack.header.network.l3.L3NetworkInventory", "org.zstack.sdk.L3NetworkInventory"); + put("org.zstack.header.network.l3.NormalIpRangeInventory", "org.zstack.sdk.NormalIpRangeInventory"); + put("org.zstack.header.network.l3.ReservedIpRangeInventory", "org.zstack.sdk.ReservedIpRangeInventory"); + put("org.zstack.header.network.l3.UsedIpInventory", "org.zstack.sdk.UsedIpInventory"); + put("org.zstack.header.network.l3.datatypes.IpCapacityData", "org.zstack.sdk.IpCapacityData"); + put("org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory", "org.zstack.sdk.SdnControllerHostRefInventory"); + put("org.zstack.header.network.sdncontroller.SdnControllerInventory", "org.zstack.sdk.SdnControllerInventory"); + put("org.zstack.header.network.sdncontroller.SdnControllerStatus", "org.zstack.sdk.SdnControllerStatus"); + put("org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory", "org.zstack.sdk.NetworkServiceL3NetworkRefInventory"); + put("org.zstack.header.network.service.NetworkServiceProviderInventory", "org.zstack.sdk.NetworkServiceProviderInventory"); + put("org.zstack.header.portMirror.MirrorNetworkUsedIpInventory", "org.zstack.sdk.MirrorNetworkUsedIpInventory"); + put("org.zstack.header.portMirror.PortMirrorInventory", "org.zstack.sdk.PortMirrorInventory"); + put("org.zstack.header.portMirror.PortMirrorSessionInventory", "org.zstack.sdk.PortMirrorSessionInventory"); + put("org.zstack.header.portMirror.PortMirrorState", "org.zstack.sdk.PortMirrorState"); + put("org.zstack.header.portMirror.SessionStatus", "org.zstack.sdk.SessionStatus"); + put("org.zstack.header.portMirror.SessionType", "org.zstack.sdk.SessionType"); + put("org.zstack.header.protocol.Neighbor", "org.zstack.sdk.Neighbor"); + put("org.zstack.header.protocol.NetworkRouterAreaRefInventory", "org.zstack.sdk.NetworkRouterAreaRefInventory"); + put("org.zstack.header.protocol.RouterAreaInventory", "org.zstack.sdk.RouterAreaInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupInventory", "org.zstack.sdk.SchedulerJobGroupInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory", "org.zstack.sdk.SchedulerJobGroupJobRefInventory"); + put("org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.header.scheduler.SchedulerJobHistoryInventory", "org.zstack.sdk.SchedulerJobHistoryInventory"); + put("org.zstack.header.scheduler.SchedulerJobInventory", "org.zstack.sdk.SchedulerJobInventory"); + put("org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory", "org.zstack.sdk.SchedulerJobSchedulerTriggerInventory"); + put("org.zstack.header.scheduler.SchedulerTriggerInventory", "org.zstack.sdk.SchedulerTriggerInventory"); + put("org.zstack.header.securitymachine.SecretResourcePoolInventory", "org.zstack.sdk.SecretResourcePoolInventory"); + put("org.zstack.header.securitymachine.SecurityMachineInventory", "org.zstack.sdk.SecurityMachineInventory"); + put("org.zstack.header.simulator.SimulatorHostInventory", "org.zstack.sdk.SimulatorHostInventory"); + put("org.zstack.header.sriov.EthernetVfPciDeviceInventory", "org.zstack.sdk.EthernetVfPciDeviceInventory"); + put("org.zstack.header.sriov.EthernetVfStatus", "org.zstack.sdk.EthernetVfStatus"); + put("org.zstack.header.sriov.VmVfNicInventory", "org.zstack.sdk.VmVfNicInventory"); + put("org.zstack.header.sshkeypair.SshKeyPairInventory", "org.zstack.sdk.SshKeyPairInventory"); + put("org.zstack.header.sshkeypair.SshPrivateKeyPairInventory", "org.zstack.sdk.SshPrivateKeyPairInventory"); + put("org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory", "org.zstack.sdk.ExternalBackupStorageInventory"); + put("org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory", "org.zstack.sdk.ExternalPrimaryStorageInventory"); + put("org.zstack.header.storage.backup.BackupMode", "org.zstack.sdk.BackupMode"); + put("org.zstack.header.storage.backup.BackupStorageInventory", "org.zstack.sdk.BackupStorageInventory"); + put("org.zstack.header.storage.backup.SyncBackupResult", "org.zstack.sdk.SyncBackupResult"); + put("org.zstack.header.storage.backup.VolumeBackupInventory", "org.zstack.sdk.VolumeBackupInventory"); + put("org.zstack.header.storage.backup.VolumeBackupStorageRefInventory", "org.zstack.sdk.VolumeBackupStorageRefInventory"); + put("org.zstack.header.storage.cdp.CdpPolicyInventory", "org.zstack.sdk.CdpPolicyInventory"); + put("org.zstack.header.storage.cdp.CdpPolicyState", "org.zstack.sdk.CdpPolicyState"); + put("org.zstack.header.storage.cdp.CdpTaskInventory", "org.zstack.sdk.CdpTaskInventory"); + put("org.zstack.header.storage.cdp.CdpTaskResourceRefInventory", "org.zstack.sdk.CdpTaskResourceRefInventory"); + put("org.zstack.header.storage.cdp.CdpTaskState", "org.zstack.sdk.CdpTaskState"); + put("org.zstack.header.storage.cdp.CdpTaskStatus", "org.zstack.sdk.CdpTaskStatus"); + put("org.zstack.header.storage.cdp.CdpTaskType", "org.zstack.sdk.CdpTaskType"); + put("org.zstack.header.storage.database.backup.DatabaseBackupInventory", "org.zstack.sdk.databasebackup.DatabaseBackupInventory"); + put("org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory", "org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory"); + put("org.zstack.header.storage.database.backup.DatabaseBackupStruct", "org.zstack.sdk.databasebackup.DatabaseBackupStruct"); + put("org.zstack.header.storage.database.backup.DatabaseType", "org.zstack.sdk.databasebackup.DatabaseType"); + put("org.zstack.header.storage.primary.ImageCacheInventory", "org.zstack.sdk.ImageCacheInventory"); + put("org.zstack.header.storage.primary.PrimaryStorageHostStatus", "org.zstack.sdk.PrimaryStorageHostStatus"); + put("org.zstack.header.storage.primary.PrimaryStorageInventory", "org.zstack.sdk.PrimaryStorageInventory"); + put("org.zstack.header.storage.primary.UsageReport", "org.zstack.sdk.UsageReport"); + put("org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct", "org.zstack.sdk.BatchDeleteVolumeSnapshotStruct"); + put("org.zstack.header.storage.snapshot.ShrinkResult", "org.zstack.sdk.ShrinkResult"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory", "org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotInventory", "org.zstack.sdk.VolumeSnapshotInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory", "org.zstack.sdk.SnapshotLeafInventory"); + put("org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory", "org.zstack.sdk.VolumeSnapshotTreeInventory"); + put("org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult", "org.zstack.sdk.DeleteSnapshotGroupResult"); + put("org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult", "org.zstack.sdk.RevertSnapshotGroupResult"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability", "org.zstack.sdk.VolumeSnapshotGroupAvailability"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory", "org.zstack.sdk.VolumeSnapshotGroupInventory"); + put("org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory", "org.zstack.sdk.VolumeSnapshotGroupRefInventory"); + put("org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory", "org.zstack.sdk.VolumeSnapshotReferenceTreeInventory"); + put("org.zstack.header.storageDevice.LunInventory", "org.zstack.sdk.LunInventory"); + put("org.zstack.header.storageDevice.ScsiLunClusterStatusInventory", "org.zstack.sdk.ScsiLunClusterStatusInventory"); + put("org.zstack.header.storageDevice.ScsiLunHostRefInventory", "org.zstack.sdk.ScsiLunHostRefInventory"); + put("org.zstack.header.storageDevice.ScsiLunInventory", "org.zstack.sdk.ScsiLunInventory"); + put("org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory", "org.zstack.sdk.ScsiLunVmInstanceRefInventory"); + put("org.zstack.header.tag.SystemTagInventory", "org.zstack.sdk.SystemTagInventory"); + put("org.zstack.header.tag.TagInventory", "org.zstack.sdk.TagInventory"); + put("org.zstack.header.tag.TagPatternInventory", "org.zstack.sdk.TagPatternInventory"); + put("org.zstack.header.tag.TagPatternType", "org.zstack.sdk.TagPatternType"); + put("org.zstack.header.tag.UserTagInventory", "org.zstack.sdk.UserTagInventory"); + put("org.zstack.header.vdpa.VmVdpaNicInventory", "org.zstack.sdk.VmVdpaNicInventory"); + put("org.zstack.header.vipQos.VipQosInventory", "org.zstack.sdk.VipQosInventory"); + put("org.zstack.header.vipQos.VpcSharedQosInventory", "org.zstack.sdk.VpcSharedQosInventory"); + put("org.zstack.header.vipQos.VpcSharedQosRefVipInventory", "org.zstack.sdk.VpcSharedQosRefVipInventory"); + put("org.zstack.header.vm.CloneVmInstanceInventory", "org.zstack.sdk.CloneVmInstanceInventory"); + put("org.zstack.header.vm.CloneVmInstanceResults", "org.zstack.sdk.CloneVmInstanceResults"); + put("org.zstack.header.vm.VdiPortInfo", "org.zstack.sdk.VdiPortInfo"); + put("org.zstack.header.vm.VirtualizerInfo", "org.zstack.sdk.VirtualizerInfo"); + put("org.zstack.header.vm.VirtualizerInfoInventory", "org.zstack.sdk.VirtualizerInfoInventory"); + put("org.zstack.header.vm.VmCapabilities", "org.zstack.sdk.VmCapabilities"); + put("org.zstack.header.vm.VmInstanceInventory", "org.zstack.sdk.VmInstanceInventory"); + put("org.zstack.header.vm.VmNicInventory", "org.zstack.sdk.VmNicInventory"); + put("org.zstack.header.vm.VmPriorityConfigInventory", "org.zstack.sdk.VmPriorityConfigInventory"); + put("org.zstack.header.vm.VmPriorityLevel", "org.zstack.sdk.VmPriorityLevel"); + put("org.zstack.header.vm.VmSchedHistoryInventory", "org.zstack.sdk.VmSchedHistoryInventory"); + put("org.zstack.header.vm.cdrom.VmCdRomInventory", "org.zstack.sdk.VmCdRomInventory"); + put("org.zstack.header.vm.devices.DeviceAddress", "org.zstack.sdk.DeviceAddress"); + put("org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory", "org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory"); + put("org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory", "org.zstack.sdk.VmInstanceDeviceAddressGroupInventory"); + put("org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory", "org.zstack.sdk.HostSchedulingRuleGroupInventory"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState", "org.zstack.sdk.VmSchedulingRuleExecuteState"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory", "org.zstack.sdk.VmSchedulingRuleGroupInventory"); + put("org.zstack.header.vmscheduling.VmSchedulingRuleInventory", "org.zstack.sdk.VmSchedulingRuleInventory"); + put("org.zstack.header.vo.ResourceInventory", "org.zstack.sdk.ResourceInventory"); + put("org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct", "org.zstack.sdk.VolumeFormatReplyStruct"); + put("org.zstack.header.volume.VolumeInventory", "org.zstack.sdk.VolumeInventory"); + put("org.zstack.header.volume.block.AccessPathInfo", "org.zstack.sdk.AccessPathInfo"); + put("org.zstack.header.volume.block.BlockVolumeInventory", "org.zstack.sdk.BlockVolumeInventory"); + put("org.zstack.header.volume.block.ExponBlockVolumeInventory", "org.zstack.sdk.ExponBlockVolumeInventory"); + put("org.zstack.header.volume.block.XskyBlockVolumeInventory", "org.zstack.sdk.XskyBlockVolumeInventory"); + put("org.zstack.header.vpc.VpcRouterDnsInventory", "org.zstack.sdk.VpcRouterDnsInventory"); + put("org.zstack.header.vpc.VpcRouterVmInventory", "org.zstack.sdk.VpcRouterVmInventory"); + put("org.zstack.header.vpc.VpcSnatStateInventory", "org.zstack.sdk.VpcSnatStateInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory", "org.zstack.sdk.VpcHaGroupApplianceVmRefInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupInventory", "org.zstack.sdk.VpcHaGroupInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory", "org.zstack.sdk.VpcHaGroupMonitorIpInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory", "org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory"); + put("org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory", "org.zstack.sdk.VpcHaGroupVipRefInventory"); + put("org.zstack.header.zdfs.StorageType", "org.zstack.sdk.StorageType"); + put("org.zstack.header.zdfs.ZdfsInventory", "org.zstack.sdk.ZdfsInventory"); + put("org.zstack.header.zdfs.ZdfsStorageInventory", "org.zstack.sdk.ZdfsStorageInventory"); + put("org.zstack.header.zone.ZoneInventory", "org.zstack.sdk.ZoneInventory"); + put("org.zstack.header.zwatch.AuditData", "org.zstack.sdk.AuditData"); + put("org.zstack.header.zwatch.AuditDataV1", "org.zstack.sdk.AuditDataV1"); + put("org.zstack.header.zwatch.AuditDataV2", "org.zstack.sdk.AuditDataV2"); + put("org.zstack.hybrid.account.HybridAccountInventory", "org.zstack.sdk.HybridAccountInventory"); + put("org.zstack.hybrid.core.HybridType", "org.zstack.sdk.HybridType"); + put("org.zstack.hygon.HygonCcpDeviceInventory", "org.zstack.sdk.HygonCcpDeviceInventory"); + put("org.zstack.hygon.HygonDeviceState", "org.zstack.sdk.HygonDeviceState"); + put("org.zstack.hygon.HygonDeviceType", "org.zstack.sdk.HygonDeviceType"); + put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct", "org.zstack.sdk.iam2.api.APIPermissionStruct"); + put("org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission", "org.zstack.sdk.iam2.api.Permission"); + put("org.zstack.iam2.api.Attribute", "org.zstack.sdk.iam2.api.Attribute"); + put("org.zstack.iam2.api.ErrorResult", "org.zstack.sdk.iam2.api.ErrorResult"); + put("org.zstack.iam2.container.ContainerClusterInventory", "org.zstack.sdk.iam2.container.ContainerClusterInventory"); + put("org.zstack.iam2.entity.AttributeType", "org.zstack.sdk.iam2.entity.AttributeType"); + put("org.zstack.iam2.entity.IAM2AttributeInventory", "org.zstack.sdk.iam2.entity.IAM2AttributeInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationInventory"); + put("org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory"); + put("org.zstack.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory"); + put("org.zstack.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory"); + put("org.zstack.iam2.entity.IAM2ProjectInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectInventory"); + put("org.zstack.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory"); + put("org.zstack.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory"); + put("org.zstack.iam2.entity.IAM2State", "org.zstack.sdk.iam2.entity.IAM2State"); + put("org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory"); + put("org.zstack.iam2.entity.IAM2VirtualIDInventory", "org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory"); + put("org.zstack.iam2.entity.OrganizationType", "org.zstack.sdk.iam2.entity.OrganizationType"); + put("org.zstack.iam2.entity.ProjectState", "org.zstack.sdk.iam2.entity.ProjectState"); + put("org.zstack.iam2.entity.StateEvent", "org.zstack.sdk.iam2.entity.StateEvent"); + put("org.zstack.iam2.project.template.Template", "org.zstack.sdk.iam2.project.template.Template"); + put("org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory"); + put("org.zstack.imagereplicator.ImageReplicationGroupInventory", "org.zstack.sdk.ImageReplicationGroupInventory"); + put("org.zstack.imagereplicator.ReplicationGroupState", "org.zstack.sdk.ReplicationGroupState"); + put("org.zstack.ipsec.IPsecConnectionInventory", "org.zstack.sdk.IPsecConnectionInventory"); + put("org.zstack.ipsec.IPsecL3NetworkRefInventory", "org.zstack.sdk.IPsecL3NetworkRefInventory"); + put("org.zstack.ipsec.IPsecPeerCidrInventory", "org.zstack.sdk.IPsecPeerCidrInventory"); + put("org.zstack.kvm.APIKvmRunShellEvent$ShellResult", "org.zstack.sdk.ShellResult"); + put("org.zstack.kvm.BaseVirtualDeviceTO", "org.zstack.sdk.BaseVirtualDeviceTO"); + put("org.zstack.kvm.KVMAgentCommands$CdRomTO", "org.zstack.sdk.CdRomTO"); + put("org.zstack.kvm.KVMAgentCommands$IsoTO", "org.zstack.sdk.IsoTO"); + put("org.zstack.kvm.KVMAgentCommands$NicTO", "org.zstack.sdk.NicTO"); + put("org.zstack.kvm.KVMAgentCommands$VHostAddOn", "org.zstack.sdk.VHostAddOn"); + put("org.zstack.kvm.KVMHostInventory", "org.zstack.sdk.KVMHostInventory"); + put("org.zstack.kvm.KVMIsoTO", "org.zstack.sdk.KVMIsoTO"); + put("org.zstack.kvm.VolumeTO", "org.zstack.sdk.VolumeTO"); + put("org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory", "org.zstack.sdk.HostOsCategoryInventory"); + put("org.zstack.kvm.hypervisor.datatype.HypervisorVersionState", "org.zstack.sdk.HypervisorVersionState"); + put("org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory", "org.zstack.sdk.KvmHostHypervisorMetadataInventory"); + put("org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory", "org.zstack.sdk.KvmHypervisorInfoInventory"); + put("org.zstack.kvm.xmlhook.XmlHookInventory", "org.zstack.sdk.XmlHookInventory"); + put("org.zstack.kvm.xmlhook.XmlHookType", "org.zstack.sdk.XmlHookType"); + put("org.zstack.ldap.LdapAccountRefInventory", "org.zstack.sdk.LdapAccountRefInventory"); + put("org.zstack.ldap.LdapServerInventory", "org.zstack.sdk.LdapServerInventory"); + put("org.zstack.license.AdditionalLicenseInfo", "org.zstack.sdk.AdditionalLicenseInfo"); + put("org.zstack.license.AdditionalLicenseType", "org.zstack.sdk.AdditionalLicenseType"); + put("org.zstack.license.LicenseAddOnInventory", "org.zstack.sdk.LicenseAddOnInventory"); + put("org.zstack.license.LicenseInventory", "org.zstack.sdk.LicenseInventory"); + put("org.zstack.license.UKeyInventory", "org.zstack.sdk.UKeyInventory"); + put("org.zstack.license.UKeyStatus", "org.zstack.sdk.UKeyStatus"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView"); + put("org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); + put("org.zstack.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory"); + put("org.zstack.license.header.server.LicenseUsageDetailView", "org.zstack.sdk.license.header.server.LicenseUsageDetailView"); + put("org.zstack.license.header.server.LicenseUsageView", "org.zstack.sdk.license.header.server.LicenseUsageView"); + put("org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView"); + put("org.zstack.log.server.LogCategory", "org.zstack.sdk.LogCategory"); + put("org.zstack.log.server.LogLevel", "org.zstack.sdk.LogLevel"); + put("org.zstack.log.server.LogServerInventory", "org.zstack.sdk.LogServerInventory"); + put("org.zstack.log.server.LogType", "org.zstack.sdk.LogType"); + put("org.zstack.login.entity.LdapResourceRefInventory", "org.zstack.sdk.LdapResourceRefInventory"); + put("org.zstack.loginControl.entity.AccessControlRuleInventory", "org.zstack.sdk.AccessControlRuleInventory"); + put("org.zstack.loginControl.entity.ControlStrategy", "org.zstack.sdk.ControlStrategy"); + put("org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory", "org.zstack.sdk.ShareableVolumeVmInstanceRefInventory"); + put("org.zstack.monitoring.AlertInventory", "org.zstack.sdk.AlertInventory"); + put("org.zstack.monitoring.MonitorTriggerInventory", "org.zstack.sdk.MonitorTriggerInventory"); + put("org.zstack.monitoring.actions.EmailTriggerActionInventory", "org.zstack.sdk.EmailTriggerActionInventory"); + put("org.zstack.monitoring.actions.MonitorTriggerActionInventory", "org.zstack.sdk.MonitorTriggerActionInventory"); + put("org.zstack.monitoring.items.ItemInventory", "org.zstack.sdk.ItemInventory"); + put("org.zstack.monitoring.media.EmailMediaInventory", "org.zstack.sdk.EmailMediaInventory"); + put("org.zstack.monitoring.media.MediaInventory", "org.zstack.sdk.MediaInventory"); + put("org.zstack.mttyDevice.MttyDeviceInventory", "org.zstack.sdk.MttyDeviceInventory"); + put("org.zstack.mttyDevice.MttyDeviceState", "org.zstack.sdk.MttyDeviceState"); + put("org.zstack.mttyDevice.MttyDeviceType", "org.zstack.sdk.MttyDeviceType"); + put("org.zstack.mttyDevice.MttyDeviceVirtStatus", "org.zstack.sdk.MttyDeviceVirtStatus"); + put("org.zstack.multicast.router.header.MulticastRouteInventory", "org.zstack.sdk.MulticastRouteInventory"); + put("org.zstack.multicast.router.header.MulticastRouterInventory", "org.zstack.sdk.MulticastRouterInventory"); + put("org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory", "org.zstack.sdk.MulticastRouterRendezvousPointInventory"); + put("org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory", "org.zstack.sdk.MulticastRouterVpcVRouterRefInventory"); + put("org.zstack.nas.NasFileSystemInventory", "org.zstack.sdk.NasFileSystemInventory"); + put("org.zstack.nas.NasMountTargetInventory", "org.zstack.sdk.NasMountTargetInventory"); + put("org.zstack.nas.NasProtocolType", "org.zstack.sdk.NasProtocolType"); + put("org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory", "org.zstack.sdk.HostNetworkBondingInventory"); + put("org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory", "org.zstack.sdk.HostNetworkInterfaceInventory"); + put("org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory", "org.zstack.sdk.PhysicalSwitchInventory"); + put("org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory", "org.zstack.sdk.PhysicalSwitchPortInventory"); + put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory", "org.zstack.sdk.HostNetworkInterfaceLldpInventory"); + put("org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory", "org.zstack.sdk.HostNetworkInterfaceLldpRefInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory"); + put("org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory"); + put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory", "org.zstack.sdk.L2PortGroupNetworkInventory"); + put("org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode", "org.zstack.sdk.L2PortGroupVlanMode"); + put("org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory", "org.zstack.sdk.L2VirtualSwitchNetworkInventory"); + put("org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory", "org.zstack.sdk.RemoteVtepInventory"); + put("org.zstack.network.l2.vxlan.vtep.VtepInventory", "org.zstack.sdk.VtepInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory", "org.zstack.sdk.L2VxlanNetworkInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory", "org.zstack.sdk.L2VxlanNetworkPoolInventory"); + put("org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory", "org.zstack.sdk.VniRangeInventory"); + put("org.zstack.network.ovn.OvnControllerInventory", "org.zstack.sdk.OvnControllerInventory"); + put("org.zstack.network.ovn.OvnControllerVmInstanceInventory", "org.zstack.sdk.OvnControllerVmInstanceInventory"); + put("org.zstack.network.ovn.OvnControllerVmOfferingInventory", "org.zstack.sdk.OvnControllerVmOfferingInventory"); + put("org.zstack.network.securitygroup.SecurityGroupIngressRuleTO", "org.zstack.sdk.SecurityGroupIngressRuleTO"); + put("org.zstack.network.securitygroup.SecurityGroupInventory", "org.zstack.sdk.SecurityGroupInventory"); + put("org.zstack.network.securitygroup.SecurityGroupRuleInventory", "org.zstack.sdk.SecurityGroupRuleInventory"); + put("org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory", "org.zstack.sdk.VmNicSecurityGroupRefInventory"); + put("org.zstack.network.securitygroup.VmNicSecurityPolicyInventory", "org.zstack.sdk.VmNicSecurityPolicyInventory"); + put("org.zstack.network.service.eip.EipInventory", "org.zstack.sdk.EipInventory"); + put("org.zstack.network.service.flat.IpStatisticData", "org.zstack.sdk.IpStatisticData"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus", "org.zstack.sdk.NfvInstClusterStatus"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory", "org.zstack.sdk.NfvInstGroupConfigTaskInventory"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType", "org.zstack.sdk.FuncType"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType", "org.zstack.sdk.InstType"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode", "org.zstack.sdk.NfvInstGroupOperationMode"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus", "org.zstack.sdk.NfvInstGroupStatus"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstInventory", "org.zstack.sdk.NfvInstInventory"); + put("org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory", "org.zstack.sdk.NfvInstOfferingInventory"); + put("org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl", "org.zstack.sdk.LoadBalancerListerAcl"); + put("org.zstack.network.service.lb.CertificateInventory", "org.zstack.sdk.CertificateInventory"); + put("org.zstack.network.service.lb.LoadBalancerInventory", "org.zstack.sdk.LoadBalancerInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory", "org.zstack.sdk.LoadBalancerListenerACLRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory", "org.zstack.sdk.LoadBalancerListenerCertificateRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerInventory", "org.zstack.sdk.LoadBalancerListenerInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory", "org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory", "org.zstack.sdk.LoadBalancerListenerVmNicRefInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupInventory", "org.zstack.sdk.LoadBalancerServerGroupInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory", "org.zstack.sdk.LoadBalancerServerGroupServerIpInventory"); + put("org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory", "org.zstack.sdk.NfvInstGroupInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory", "org.zstack.sdk.NfvInstGroupL3NetworkRefInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory", "org.zstack.sdk.NfvInstGroupMonitorIpInventory"); + put("org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory", "org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory"); + put("org.zstack.network.service.portforwarding.PortForwardingRuleInventory", "org.zstack.sdk.PortForwardingRuleInventory"); + put("org.zstack.network.service.slb.SlbGroupInventory", "org.zstack.sdk.SlbGroupInventory"); + put("org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory", "org.zstack.sdk.SlbGroupL3NetworkRefInventory"); + put("org.zstack.network.service.slb.SlbGroupMonitorIpInventory", "org.zstack.sdk.SlbGroupMonitorIpInventory"); + put("org.zstack.network.service.slb.SlbLoadBalancerInventory", "org.zstack.sdk.SlbLoadBalancerInventory"); + put("org.zstack.network.service.slb.SlbOfferingInventory", "org.zstack.sdk.SlbOfferingInventory"); + put("org.zstack.network.service.slb.SlbVmInstanceInventory", "org.zstack.sdk.SlbVmInstanceInventory"); + put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory", "org.zstack.sdk.SlbVmInstanceConfigTaskInventory"); + put("org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus", "org.zstack.sdk.SlbVmInstanceConfigTaskStatus"); + put("org.zstack.network.service.vip.VipInventory", "org.zstack.sdk.VipInventory"); + put("org.zstack.network.service.vip.VipNetworkServicesRefInventory", "org.zstack.sdk.VipNetworkServicesRefInventory"); + put("org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory", "org.zstack.sdk.VipPortRangeInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory", "org.zstack.sdk.VirtualRouterOfferingInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory", "org.zstack.sdk.VirtualRouterSoftwareVersionInventory"); + put("org.zstack.network.service.virtualrouter.VirtualRouterVmInventory", "org.zstack.sdk.VirtualRouterVmInventory"); + put("org.zstack.network.zns.L2GeneveNetworkInventory", "org.zstack.sdk.network.zns.L2GeneveNetworkInventory"); + put("org.zstack.network.zns.ZnsControllerInventory", "org.zstack.sdk.network.zns.ZnsControllerInventory"); + put("org.zstack.network.zns.ZnsTenantInventory", "org.zstack.sdk.network.zns.ZnsTenantInventory"); + put("org.zstack.network.zns.ZnsTenantRouterInventory", "org.zstack.sdk.network.zns.ZnsTenantRouterInventory"); + put("org.zstack.network.zns.ZnsTransportZoneInventory", "org.zstack.sdk.network.zns.ZnsTransportZoneInventory"); + put("org.zstack.observabilityServer.ObservabilityServerOfferingInventory", "org.zstack.sdk.ObservabilityServerOfferingInventory"); + put("org.zstack.observabilityServer.ObservabilityServerVmInventory", "org.zstack.sdk.ObservabilityServerVmInventory"); + put("org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory", "org.zstack.sdk.ObservabilityServerServiceDataInventory"); + put("org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory", "org.zstack.sdk.LoadBalancerDataInventory"); + put("org.zstack.ovf.datatype.ImagePackageInventory", "org.zstack.sdk.ImagePackageInventory"); + put("org.zstack.ovf.datatype.ImagePackageState", "org.zstack.sdk.ImagePackageState"); + put("org.zstack.ovf.datatype.OvfCdDriverInfo", "org.zstack.sdk.OvfCdDriverInfo"); + put("org.zstack.ovf.datatype.OvfCpuInfo", "org.zstack.sdk.OvfCpuInfo"); + put("org.zstack.ovf.datatype.OvfDiskInfo", "org.zstack.sdk.OvfDiskInfo"); + put("org.zstack.ovf.datatype.OvfEthernetAdapterInfo", "org.zstack.sdk.OvfEthernetAdapterInfo"); + put("org.zstack.ovf.datatype.OvfInfo", "org.zstack.sdk.OvfInfo"); + put("org.zstack.ovf.datatype.OvfMemoryInfo", "org.zstack.sdk.OvfMemoryInfo"); + put("org.zstack.ovf.datatype.OvfNetworkInfo", "org.zstack.sdk.OvfNetworkInfo"); + put("org.zstack.ovf.datatype.OvfOSInfo", "org.zstack.sdk.OvfOSInfo"); + put("org.zstack.ovf.datatype.OvfSystemInfo", "org.zstack.sdk.OvfSystemInfo"); + put("org.zstack.ovf.datatype.OvfVolumeInfo", "org.zstack.sdk.OvfVolumeInfo"); + put("org.zstack.pciDevice.HostIommuStateType", "org.zstack.sdk.HostIommuStateType"); + put("org.zstack.pciDevice.HostIommuStatusType", "org.zstack.sdk.HostIommuStatusType"); + put("org.zstack.pciDevice.PciDeviceChooser", "org.zstack.sdk.PciDeviceChooser"); + put("org.zstack.pciDevice.PciDeviceInventory", "org.zstack.sdk.PciDeviceInventory"); + put("org.zstack.pciDevice.PciDeviceMetaData", "org.zstack.sdk.PciDeviceMetaData"); + put("org.zstack.pciDevice.PciDeviceMetaDataEntry", "org.zstack.sdk.PciDeviceMetaDataEntry"); + put("org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator", "org.zstack.sdk.PciDeviceMetaDataOperator"); + put("org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory"); + put("org.zstack.pciDevice.PciDeviceOfferingInventory", "org.zstack.sdk.PciDeviceOfferingInventory"); + put("org.zstack.pciDevice.PciDeviceOfferingType", "org.zstack.sdk.PciDeviceOfferingType"); + put("org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory", "org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory"); + put("org.zstack.pciDevice.PciDeviceState", "org.zstack.sdk.PciDeviceState"); + put("org.zstack.pciDevice.PciDeviceStatus", "org.zstack.sdk.PciDeviceStatus"); + put("org.zstack.pciDevice.PciDeviceType", "org.zstack.sdk.PciDeviceType"); + put("org.zstack.pciDevice.gpu.GpuAllocateStatus", "org.zstack.sdk.GpuAllocateStatus"); + put("org.zstack.pciDevice.gpu.GpuDeviceInventory", "org.zstack.sdk.GpuDeviceInventory"); + put("org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory", "org.zstack.sdk.GpuDeviceSpecCandidateInventory"); + put("org.zstack.pciDevice.gpu.GpuDeviceSpecInventory", "org.zstack.sdk.GpuDeviceSpecInventory"); + put("org.zstack.pciDevice.gpu.GpuVendor", "org.zstack.sdk.GpuVendor"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory", "org.zstack.sdk.DGpuDeviceInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory", "org.zstack.sdk.DGpuProfileInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory", "org.zstack.sdk.DGpuSpecStatsInventory"); + put("org.zstack.pciDevice.gpu.dgpu.DGpuStatus", "org.zstack.sdk.DGpuStatus"); + put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory", "org.zstack.sdk.MdevDeviceSpecInventory"); + put("org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState", "org.zstack.sdk.MdevDeviceSpecState"); + put("org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory", "org.zstack.sdk.PciDeviceMdevSpecRefInventory"); + put("org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory"); + put("org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory", "org.zstack.sdk.PciDeviceSpecInventory"); + put("org.zstack.pciDevice.specification.pci.PciDeviceSpecState", "org.zstack.sdk.PciDeviceSpecState"); + put("org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory", "org.zstack.sdk.VmInstancePciDeviceSpecRefInventory"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtMode", "org.zstack.sdk.PciDeviceVirtMode"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtState", "org.zstack.sdk.PciDeviceVirtState"); + put("org.zstack.pciDevice.virtual.PciDeviceVirtStatus", "org.zstack.sdk.PciDeviceVirtStatus"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser", "org.zstack.sdk.MdevDeviceChooser"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory", "org.zstack.sdk.MdevDeviceInventory"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState", "org.zstack.sdk.MdevDeviceState"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus", "org.zstack.sdk.MdevDeviceStatus"); + put("org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType", "org.zstack.sdk.MdevDeviceType"); + put("org.zstack.policyRoute.PolicyRouteRuleInventory", "org.zstack.sdk.PolicyRouteRuleInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleProtocol", "org.zstack.sdk.PolicyRouteRuleProtocol"); + put("org.zstack.policyRoute.PolicyRouteRuleSetInventory", "org.zstack.sdk.PolicyRouteRuleSetInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory", "org.zstack.sdk.PolicyRouteRuleSetL3RefInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory"); + put("org.zstack.policyRoute.PolicyRouteRuleState", "org.zstack.sdk.PolicyRouteRuleState"); + put("org.zstack.policyRoute.PolicyRouteTableInventory", "org.zstack.sdk.PolicyRouteTableInventory"); + put("org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory", "org.zstack.sdk.PolicyRouteTableRouteEntryInventory"); + put("org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory", "org.zstack.sdk.PolicyRouteTableVRouterRefInventory"); + put("org.zstack.proxy.UserProxyConfigInventory", "org.zstack.sdk.UserProxyConfigInventory"); + put("org.zstack.proxy.UserProxyConfigResourceRefInventory", "org.zstack.sdk.UserProxyConfigResourceRefInventory"); + put("org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct", "org.zstack.sdk.ResourceBindableConfigStruct"); + put("org.zstack.resourceconfig.ResourceConfigInventory", "org.zstack.sdk.ResourceConfigInventory"); + put("org.zstack.resourceconfig.ResourceConfigStruct", "org.zstack.sdk.ResourceConfigStruct"); + put("org.zstack.sdnController.header.H3cSdnControllerTenantInventory", "org.zstack.sdk.H3cSdnControllerTenantInventory"); + put("org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory", "org.zstack.sdk.HardwareL2VxlanNetworkInventory"); + put("org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory"); + put("org.zstack.sdnController.header.SdnVlanRange", "org.zstack.sdk.SdnVlanRange"); + put("org.zstack.snmp.agent.SnmpAgentInventory", "org.zstack.sdk.SnmpAgentInventory"); + put("org.zstack.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory"); + put("org.zstack.sns.SNSApplicationEndpointInventory", "org.zstack.sdk.sns.SNSApplicationEndpointInventory"); + put("org.zstack.sns.SNSApplicationPlatformInventory", "org.zstack.sdk.sns.SNSApplicationPlatformInventory"); + put("org.zstack.sns.SNSSmsReceiverInventory", "org.zstack.sdk.sns.SNSSmsReceiverInventory"); + put("org.zstack.sns.SNSSubscriberInventory", "org.zstack.sdk.sns.SNSSubscriberInventory"); + put("org.zstack.sns.SNSTopicInventory", "org.zstack.sdk.sns.SNSTopicInventory"); + put("org.zstack.sns.SmsReceiverType", "org.zstack.sdk.sns.SmsReceiverType"); + put("org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); + put("org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); + put("org.zstack.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory"); + put("org.zstack.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory"); + put("org.zstack.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory"); + put("org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory"); + put("org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory"); + put("org.zstack.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory"); + put("org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); + put("org.zstack.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory"); + put("org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory"); + put("org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); + put("org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); + put("org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory"); + put("org.zstack.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory"); + put("org.zstack.sso.header.AttributePurpose", "org.zstack.sdk.AttributePurpose"); + put("org.zstack.sso.header.CasClientInventory", "org.zstack.sdk.CasClientInventory"); + put("org.zstack.sso.header.CasState", "org.zstack.sdk.CasState"); + put("org.zstack.sso.header.ExtendedAttribute", "org.zstack.sdk.ExtendedAttribute"); + put("org.zstack.sso.header.OAuth2ClientInventory", "org.zstack.sdk.OAuth2ClientInventory"); + put("org.zstack.sso.header.OAuth2TokenInventory", "org.zstack.sdk.OAuth2TokenInventory"); + put("org.zstack.sso.header.RedirectUrlTemplate", "org.zstack.sdk.RedirectUrlTemplate"); + put("org.zstack.sso.header.RuleAttributeType", "org.zstack.sdk.RuleAttributeType"); + put("org.zstack.sso.header.SAML2ClientInventory", "org.zstack.sdk.SAML2ClientInventory"); + put("org.zstack.sso.header.SAML2State", "org.zstack.sdk.SAML2State"); + put("org.zstack.sso.header.SSOClientAttributeInventory", "org.zstack.sdk.SSOClientAttributeInventory"); + put("org.zstack.sso.header.SSOClientInventory", "org.zstack.sdk.SSOClientInventory"); + put("org.zstack.sso.header.SSORedirectTemplateInventory", "org.zstack.sdk.SSORedirectTemplateInventory"); + put("org.zstack.sso.header.SSOServerTokenInventory", "org.zstack.sdk.SSOServerTokenInventory"); + put("org.zstack.sso.header.SSOTokenInventory", "org.zstack.sdk.SSOTokenInventory"); + put("org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory", "org.zstack.sdk.ImageStoreBackupStorageInventory"); + put("org.zstack.storage.backup.imagestore.ImageStoreGcResult", "org.zstack.sdk.ImageStoreGcResult"); + put("org.zstack.storage.backup.imagestore.ImageStoreImageStruct", "org.zstack.sdk.ImageStoreImageStruct"); + put("org.zstack.storage.backup.sftp.SftpBackupStorageInventory", "org.zstack.sdk.SftpBackupStorageInventory"); + put("org.zstack.storage.ceph.backup.CephBackupStorageInventory", "org.zstack.sdk.CephBackupStorageInventory"); + put("org.zstack.storage.ceph.backup.CephBackupStorageMonInventory", "org.zstack.sdk.CephBackupStorageMonInventory"); + put("org.zstack.storage.ceph.primary.CephOsdGroupInventory", "org.zstack.sdk.CephOsdGroupInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStorageInventory", "org.zstack.sdk.CephPrimaryStorageInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory", "org.zstack.sdk.CephPrimaryStorageMonInventory"); + put("org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory", "org.zstack.sdk.CephPrimaryStoragePoolInventory"); + put("org.zstack.storage.ceph.primary.KVMCephVolumeTO", "org.zstack.sdk.KVMCephVolumeTO"); + put("org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.ceph.primary.KvmCephCdRomTO", "org.zstack.sdk.KvmCephCdRomTO"); + put("org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.ceph.primary.KvmCephIsoTO", "org.zstack.sdk.KvmCephIsoTO"); + put("org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo", "org.zstack.sdk.MonInfo"); + put("org.zstack.storage.device.fibreChannel.FiberChannelLunInventory", "org.zstack.sdk.FiberChannelLunInventory"); + put("org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory", "org.zstack.sdk.FiberChannelStorageInventory"); + put("org.zstack.storage.device.hba.FcHbaDeviceInventory", "org.zstack.sdk.FcHbaDeviceInventory"); + put("org.zstack.storage.device.hba.HbaDeviceInventory", "org.zstack.sdk.HbaDeviceInventory"); + put("org.zstack.storage.device.iscsi.IscsiLunInventory", "org.zstack.sdk.IscsiLunInventory"); + put("org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory", "org.zstack.sdk.IscsiServerClusterRefInventory"); + put("org.zstack.storage.device.iscsi.IscsiServerInventory", "org.zstack.sdk.IscsiServerInventory"); + put("org.zstack.storage.device.iscsi.IscsiTargetInventory", "org.zstack.sdk.IscsiTargetInventory"); + put("org.zstack.storage.device.localRaid.LocateStatus", "org.zstack.sdk.LocateStatus"); + put("org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory"); + put("org.zstack.storage.device.localRaid.RaidControllerInventory", "org.zstack.sdk.RaidControllerInventory"); + put("org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory", "org.zstack.sdk.RaidPhysicalDriveInventory"); + put("org.zstack.storage.device.localRaid.RunningState", "org.zstack.sdk.RunningState"); + put("org.zstack.storage.device.localRaid.SmartDataStruct", "org.zstack.sdk.SmartDataStruct"); + put("org.zstack.storage.device.multipath.DeviceTO", "org.zstack.sdk.DeviceTO"); + put("org.zstack.storage.device.multipath.MultipathTopologyStruct", "org.zstack.sdk.MultipathTopologyStruct"); + put("org.zstack.storage.device.nvme.NvmeLunHostRefInventory", "org.zstack.sdk.NvmeLunHostRefInventory"); + put("org.zstack.storage.device.nvme.NvmeLunInventory", "org.zstack.sdk.NvmeLunInventory"); + put("org.zstack.storage.device.nvme.NvmeServerClusterRefInventory", "org.zstack.sdk.NvmeServerClusterRefInventory"); + put("org.zstack.storage.device.nvme.NvmeServerInventory", "org.zstack.sdk.NvmeServerInventory"); + put("org.zstack.storage.device.nvme.NvmeTargetInventory", "org.zstack.sdk.NvmeTargetInventory"); + put("org.zstack.storage.primary.block.BlockPrimaryStorageInventory", "org.zstack.sdk.BlockPrimaryStorageInventory"); + put("org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity", "org.zstack.sdk.HostDiskCapacity"); + put("org.zstack.storage.primary.local.LocalStorageResourceRefInventory", "org.zstack.sdk.LocalStorageResourceRefInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory", "org.zstack.sdk.MiniStorageHostRefInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageInventory", "org.zstack.sdk.MiniStorageInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory", "org.zstack.sdk.MiniStorageResourceReplicationInventory"); + put("org.zstack.storage.primary.ministorage.MiniStorageType", "org.zstack.sdk.MiniStorageType"); + put("org.zstack.storage.primary.ministorage.ReplicationDiskStatus", "org.zstack.sdk.ReplicationDiskStatus"); + put("org.zstack.storage.primary.ministorage.ReplicationNetworkStatus", "org.zstack.sdk.ReplicationNetworkStatus"); + put("org.zstack.storage.primary.ministorage.ReplicationRole", "org.zstack.sdk.ReplicationRole"); + put("org.zstack.storage.primary.ministorage.ReplicationState", "org.zstack.sdk.ReplicationState"); + put("org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct", "org.zstack.sdk.SharedBlockCandidateStruct"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory", "org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockGroupType", "org.zstack.sdk.SharedBlockGroupType"); + put("org.zstack.storage.primary.sharedblock.SharedBlockInventory", "org.zstack.sdk.SharedBlockInventory"); + put("org.zstack.storage.primary.sharedblock.SharedBlockState", "org.zstack.sdk.SharedBlockState"); + put("org.zstack.storage.primary.sharedblock.SharedBlockStatus", "org.zstack.sdk.SharedBlockStatus"); + put("org.zstack.storage.primary.sharedblock.SharedBlockType", "org.zstack.sdk.SharedBlockType"); + put("org.zstack.tag2.AttachTagResult", "org.zstack.sdk.AttachTagResult"); + put("org.zstack.templateConfig.GlobalConfigTemplateInventory", "org.zstack.sdk.GlobalConfigTemplateInventory"); + put("org.zstack.templateConfig.TemplateConfigInventory", "org.zstack.sdk.TemplateConfigInventory"); + put("org.zstack.ticket.entity.ArchiveTicketInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketInventory"); + put("org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory"); + put("org.zstack.ticket.entity.TicketFlowCollectionInventory", "org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory"); + put("org.zstack.ticket.entity.TicketFlowInventory", "org.zstack.sdk.ticket.entity.TicketFlowInventory"); + put("org.zstack.ticket.entity.TicketInventory", "org.zstack.sdk.ticket.entity.TicketInventory"); + put("org.zstack.ticket.entity.TicketRequest", "org.zstack.sdk.ticket.entity.TicketRequest"); + put("org.zstack.ticket.entity.TicketStatus", "org.zstack.sdk.ticket.entity.TicketStatus"); + put("org.zstack.ticket.entity.TicketStatusEvent", "org.zstack.sdk.ticket.entity.TicketStatusEvent"); + put("org.zstack.ticket.entity.TicketStatusHistoryInventory", "org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory"); + put("org.zstack.ticket.entity.TicketTypeInventory", "org.zstack.sdk.ticket.entity.TicketTypeInventory"); + put("org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); + put("org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory", "org.zstack.sdk.TwoFactorAuthenticationInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory", "org.zstack.sdk.TwoFactorAuthenticationSecretInventory"); + put("org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus", "org.zstack.sdk.TwoFactorAuthenticationSecretStatus"); + put("org.zstack.usbDevice.UsbDeviceInventory", "org.zstack.sdk.UsbDeviceInventory"); + put("org.zstack.usbDevice.UsbDeviceState", "org.zstack.sdk.UsbDeviceState"); + put("org.zstack.v2v.V2VConversionHostInventory", "org.zstack.sdk.V2VConversionHostInventory"); + put("org.zstack.vmware.ESXHostInventory", "org.zstack.sdk.ESXHostInventory"); + put("org.zstack.vmware.VCenterBackupStorageInventory", "org.zstack.sdk.VCenterBackupStorageInventory"); + put("org.zstack.vmware.VCenterClusterInventory", "org.zstack.sdk.VCenterClusterInventory"); + put("org.zstack.vmware.VCenterDatacenterInventory", "org.zstack.sdk.VCenterDatacenterInventory"); + put("org.zstack.vmware.VCenterInventory", "org.zstack.sdk.VCenterInventory"); + put("org.zstack.vmware.VCenterPrimaryStorageInventory", "org.zstack.sdk.VCenterPrimaryStorageInventory"); + put("org.zstack.vmware.VCenterResourcePoolInventory", "org.zstack.sdk.VCenterResourcePoolInventory"); + put("org.zstack.vmware.VCenterResourcePoolUsageInventory", "org.zstack.sdk.VCenterResourcePoolUsageInventory"); + put("org.zstack.vpcfirewall.entity.ActionType", "org.zstack.sdk.ActionType"); + put("org.zstack.vpcfirewall.entity.FirewallRuleState", "org.zstack.sdk.FirewallRuleState"); + put("org.zstack.vpcfirewall.entity.IpSetType", "org.zstack.sdk.IpSetType"); + put("org.zstack.vpcfirewall.entity.PacketsForwardType", "org.zstack.sdk.PacketsForwardType"); + put("org.zstack.vpcfirewall.entity.ProtocolType", "org.zstack.sdk.ProtocolType"); + put("org.zstack.vpcfirewall.entity.VpcFirewallInventory", "org.zstack.sdk.VpcFirewallInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory", "org.zstack.sdk.VpcFirewallIpSetTemplateInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory", "org.zstack.sdk.VpcFirewallRuleInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory", "org.zstack.sdk.VpcFirewallRuleSetInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory", "org.zstack.sdk.VpcFirewallRuleSetL3RefInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory", "org.zstack.sdk.VpcFirewallRuleTemplateInventory"); + put("org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory", "org.zstack.sdk.VpcFirewallVRouterRefInventory"); + put("org.zstack.vrouterRoute.VRouterRouteEntryAO", "org.zstack.sdk.VRouterRouteEntryAO"); + put("org.zstack.vrouterRoute.VRouterRouteEntryInventory", "org.zstack.sdk.VRouterRouteEntryInventory"); + put("org.zstack.vrouterRoute.VRouterRouteEntryType", "org.zstack.sdk.VRouterRouteEntryType"); + put("org.zstack.vrouterRoute.VRouterRouteTableInventory", "org.zstack.sdk.VRouterRouteTableInventory"); + put("org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory"); + put("org.zstack.xdragon.XDragonHostInventory", "org.zstack.sdk.XDragonHostInventory"); + put("org.zstack.zbox.ZBoxInventory", "org.zstack.sdk.ZBoxInventory"); + put("org.zstack.zbox.ZBoxLocationRefInventory", "org.zstack.sdk.ZBoxLocationRefInventory"); + put("org.zstack.zbox.ZBoxState", "org.zstack.sdk.ZBoxState"); + put("org.zstack.zbox.ZBoxStatus", "org.zstack.sdk.ZBoxStatus"); + put("org.zstack.zops.ChronyServerInfo", "org.zstack.sdk.ChronyServerInfo"); + put("org.zstack.zops.ChronyServerInfoPair", "org.zstack.sdk.ChronyServerInfoPair"); + put("org.zstack.zops.HostConnectedStatus", "org.zstack.sdk.HostConnectedStatus"); + put("org.zstack.zops.NetworkReachablePair", "org.zstack.sdk.NetworkReachablePair"); + put("org.zstack.zql.ZQLQueryReturn", "org.zstack.sdk.ZQLQueryReturn"); + put("org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam", "org.zstack.sdk.zwatch.alarm.ActionParam"); + put("org.zstack.zwatch.alarm.AlarmActionInventory", "org.zstack.sdk.zwatch.alarm.AlarmActionInventory"); + put("org.zstack.zwatch.alarm.AlarmDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory"); + put("org.zstack.zwatch.alarm.AlarmInventory", "org.zstack.sdk.zwatch.alarm.AlarmInventory"); + put("org.zstack.zwatch.alarm.AlarmLabelInventory", "org.zstack.sdk.zwatch.alarm.AlarmLabelInventory"); + put("org.zstack.zwatch.alarm.AlarmState", "org.zstack.sdk.zwatch.alarm.AlarmState"); + put("org.zstack.zwatch.alarm.AlarmStatus", "org.zstack.sdk.zwatch.alarm.AlarmStatus"); + put("org.zstack.zwatch.alarm.AlertDataAckInventory", "org.zstack.sdk.zwatch.alarm.AlertDataAckInventory"); + put("org.zstack.zwatch.alarm.EventDataAckInventory", "org.zstack.sdk.zwatch.alarm.EventDataAckInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory"); + put("org.zstack.zwatch.alarm.EventSubscriptionState", "org.zstack.sdk.zwatch.alarm.EventSubscriptionState"); + put("org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); + put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); + put("org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); + put("org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory"); + put("org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); + put("org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct", "org.zstack.sdk.zwatch.api.EventStruct"); + put("org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct", "org.zstack.sdk.zwatch.api.MetricStruct"); + put("org.zstack.zwatch.api.Histogram", "org.zstack.sdk.zwatch.api.Histogram"); + put("org.zstack.zwatch.api.Histogram$Tag", "org.zstack.sdk.zwatch.api.Tag"); + put("org.zstack.zwatch.datatype.AlarmData", "org.zstack.sdk.zwatch.datatype.AlarmData"); + put("org.zstack.zwatch.datatype.AlarmDataV1", "org.zstack.sdk.zwatch.datatype.AlarmDataV1"); + put("org.zstack.zwatch.datatype.AlarmDataV2", "org.zstack.sdk.zwatch.datatype.AlarmDataV2"); + put("org.zstack.zwatch.datatype.AuditType", "org.zstack.sdk.zwatch.datatype.AuditType"); + put("org.zstack.zwatch.datatype.Datapoint", "org.zstack.sdk.zwatch.datatype.Datapoint"); + put("org.zstack.zwatch.datatype.EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); + put("org.zstack.zwatch.datatype.EventData", "org.zstack.sdk.zwatch.datatype.EventData"); + put("org.zstack.zwatch.datatype.EventFamily$EmergencyLevel", "org.zstack.sdk.zwatch.datatype.EmergencyLevel"); + put("org.zstack.zwatch.datatype.Label", "org.zstack.sdk.zwatch.datatype.Label"); + put("org.zstack.zwatch.datatype.Label$Operator", "org.zstack.sdk.zwatch.datatype.Operator"); + put("org.zstack.zwatch.datatype.MetricDatum", "org.zstack.sdk.zwatch.datatype.MetricDatum"); + put("org.zstack.zwatch.influxdb.InfluxEventData", "org.zstack.sdk.zwatch.influxdb.InfluxEventData"); + put("org.zstack.zwatch.influxdb.InfluxEventDataV1", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1"); + put("org.zstack.zwatch.influxdb.InfluxEventDataV2", "org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2"); + put("org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory"); + put("org.zstack.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory"); + put("org.zstack.zwatch.metricpusher.ReceiverState", "org.zstack.sdk.zwatch.metricpusher.ReceiverState"); + put("org.zstack.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory"); + put("org.zstack.zwatch.migratedb.AuditsInventory", "org.zstack.sdk.zwatch.migratedb.AuditsInventory"); + put("org.zstack.zwatch.migratedb.EventRecordsInventory", "org.zstack.sdk.zwatch.migratedb.EventRecordsInventory"); + put("org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); + put("org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory"); + put("org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory"); + put("org.zstack.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState"); + put("org.zstack.zwatch.resnotify.ResNotifyType", "org.zstack.sdk.zwatch.resnotify.ResNotifyType"); + put("org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory"); + put("org.zstack.zwatch.ruleengine.ComparisonOperator", "org.zstack.sdk.zwatch.ruleengine.ComparisonOperator"); + put("org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); + put("org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); + put("org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); } }; public final static HashMap dstToSrcMapping = new HashMap() { { - put("org.zstack.sdk.AccessControlListEntryInventory", "org.zstack.header.acl.AccessControlListEntryInventory"); - put("org.zstack.sdk.AccessControlListInventory", "org.zstack.header.acl.AccessControlListInventory"); - put("org.zstack.sdk.AccessControlRuleInventory", "org.zstack.loginControl.entity.AccessControlRuleInventory"); - put("org.zstack.sdk.AccessKeyInventory", "org.zstack.accessKey.AccessKeyInventory"); - put("org.zstack.sdk.AccessKeyState", "org.zstack.accessKey.AccessKeyState"); - put("org.zstack.sdk.AccessKeyType", "org.zstack.accessKey.AccessKeyType"); - put("org.zstack.sdk.AccessPathInfo", "org.zstack.header.volume.block.AccessPathInfo"); - put("org.zstack.sdk.AccountInventory", "org.zstack.header.identity.AccountInventory"); - put("org.zstack.sdk.AccountPriceTableRefInventory", "org.zstack.billing.table.AccountPriceTableRefInventory"); - put("org.zstack.sdk.AccountResourceRefInventory", "org.zstack.header.identity.AccountResourceRefInventory"); - put("org.zstack.sdk.ActionStruct", "org.zstack.cloudformation.template.struct.ActionStruct"); - put("org.zstack.sdk.ActionType", "org.zstack.vpcfirewall.entity.ActionType"); - put("org.zstack.sdk.AddHostFromFileResult", "org.zstack.header.host.AddHostFromFileResult"); - put("org.zstack.sdk.AddingNewVmRuleInventory", "org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory"); - put("org.zstack.sdk.AdditionalLicenseInfo", "org.zstack.license.AdditionalLicenseInfo"); - put("org.zstack.sdk.AdditionalLicenseType", "org.zstack.license.AdditionalLicenseType"); - put("org.zstack.sdk.AddressPoolInventory", "org.zstack.header.network.l3.AddressPoolInventory"); - put("org.zstack.sdk.AffinityGroupInventory", "org.zstack.header.affinitygroup.AffinityGroupInventory"); - put("org.zstack.sdk.AffinityGroupUsageInventory", "org.zstack.header.affinitygroup.AffinityGroupUsageInventory"); - put("org.zstack.sdk.AgentVersionInventory", "org.zstack.core.upgrade.AgentVersionInventory"); - put("org.zstack.sdk.AiSiNoSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory"); - put("org.zstack.sdk.AlertInventory", "org.zstack.monitoring.AlertInventory"); - put("org.zstack.sdk.AliyunDiskInventory", "org.zstack.header.aliyun.storage.disk.AliyunDiskInventory"); - put("org.zstack.sdk.AliyunEbsBackupStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory"); - put("org.zstack.sdk.AliyunEbsPrimaryStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory"); - put("org.zstack.sdk.AliyunErrorCode", "org.zstack.header.aliyun.errorCode.AliyunErrorCode"); - put("org.zstack.sdk.AliyunNasAccessGroupInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory"); - put("org.zstack.sdk.AliyunNasAccessGroupProperty", "org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty"); - put("org.zstack.sdk.AliyunNasAccessRuleInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory"); - put("org.zstack.sdk.AliyunNasFileSystemInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory"); - put("org.zstack.sdk.AliyunNasFileSystemProperty", "org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty"); - put("org.zstack.sdk.AliyunNasMountTargetInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory"); - put("org.zstack.sdk.AliyunNasMountTargetProperty", "org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty"); - put("org.zstack.sdk.AliyunOssException", "org.zstack.header.aliyun.AliyunOssException"); - put("org.zstack.sdk.AliyunPanguPartitionInventory", "org.zstack.aliyun.pangu.AliyunPanguPartitionInventory"); - put("org.zstack.sdk.AliyunProxyVSwitchInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory"); - put("org.zstack.sdk.AliyunProxyVpcInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory"); - put("org.zstack.sdk.AliyunRouterInterfaceInventory", "org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory"); - put("org.zstack.sdk.AliyunSnapshotInventory", "org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory"); - put("org.zstack.sdk.AppBuildSystemInventory", "org.zstack.header.buildsystem.AppBuildSystemInventory"); - put("org.zstack.sdk.AppBuildSystemZoneRefInventory", "org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory"); - put("org.zstack.sdk.ApplianceVmInventory", "org.zstack.appliancevm.ApplianceVmInventory"); - put("org.zstack.sdk.ApplicationDevelopmentServiceInventory", "org.zstack.ai.entity.ApplicationDevelopmentServiceInventory"); - put("org.zstack.sdk.ArchitectureImageMapping", "org.zstack.ai.message.ArchitectureImageMapping"); - put("org.zstack.sdk.AttachTagResult", "org.zstack.tag2.AttachTagResult"); - put("org.zstack.sdk.AttributePurpose", "org.zstack.sso.header.AttributePurpose"); - put("org.zstack.sdk.AuditData", "org.zstack.header.zwatch.AuditData"); - put("org.zstack.sdk.AuditDataV1", "org.zstack.header.zwatch.AuditDataV1"); - put("org.zstack.sdk.AuditDataV2", "org.zstack.header.zwatch.AuditDataV2"); - put("org.zstack.sdk.AutoScalingGroupActivityInventory", "org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory"); - put("org.zstack.sdk.AutoScalingGroupInstanceInventory", "org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory"); - put("org.zstack.sdk.AutoScalingGroupInventory", "org.zstack.autoscaling.group.AutoScalingGroupInventory"); - put("org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory"); - put("org.zstack.sdk.AutoScalingRuleInventory", "org.zstack.autoscaling.group.rule.AutoScalingRuleInventory"); - put("org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory"); - put("org.zstack.sdk.AutoScalingRuleState", "org.zstack.autoscaling.group.rule.AutoScalingRuleState"); - put("org.zstack.sdk.AutoScalingRuleStatus", "org.zstack.autoscaling.group.rule.AutoScalingRuleStatus"); - put("org.zstack.sdk.AutoScalingRuleTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory"); - put("org.zstack.sdk.AutoScalingTemplateInventory", "org.zstack.autoscaling.template.AutoScalingTemplateInventory"); - put("org.zstack.sdk.AutoScalingVmTemplateInventory", "org.zstack.autoscaling.template.AutoScalingVmTemplateInventory"); - put("org.zstack.sdk.BackupMode", "org.zstack.header.storage.backup.BackupMode"); - put("org.zstack.sdk.BackupStorageExternalBackupInfo", "org.zstack.externalbackup.BackupStorageExternalBackupInfo"); - put("org.zstack.sdk.BackupStorageInventory", "org.zstack.header.storage.backup.BackupStorageInventory"); - put("org.zstack.sdk.BareMetal2BillingInventory", "org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory"); - put("org.zstack.sdk.BareMetal2BondingInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingInventory"); - put("org.zstack.sdk.BareMetal2BondingNicRefInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory"); - put("org.zstack.sdk.BareMetal2ChassisDiskInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory"); - put("org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory"); - put("org.zstack.sdk.BareMetal2ChassisInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisInventory"); - put("org.zstack.sdk.BareMetal2ChassisNicInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory"); - put("org.zstack.sdk.BareMetal2ChassisOfferingInventory", "org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory"); - put("org.zstack.sdk.BareMetal2ChassisPciDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory"); - put("org.zstack.sdk.BareMetal2DpuChassisConfig", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig"); - put("org.zstack.sdk.BareMetal2DpuChassisInventory", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory"); - put("org.zstack.sdk.BareMetal2DpuHostInventory", "org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory"); - put("org.zstack.sdk.BareMetal2GatewayInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayInventory"); - put("org.zstack.sdk.BareMetal2GatewayProvisionNicInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory"); - put("org.zstack.sdk.BareMetal2InstanceInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceInventory"); - put("org.zstack.sdk.BareMetal2InstanceProvisionNicInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory"); - put("org.zstack.sdk.BareMetal2IpmiChassisInventory", "org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory"); - put("org.zstack.sdk.BareMetal2ProvisionNetworkInventory", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory"); - put("org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity"); - put("org.zstack.sdk.BareMetal2Spending", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending"); - put("org.zstack.sdk.BareMetal2SpendingDetails", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails"); - put("org.zstack.sdk.BaremetalBondingInventory", "org.zstack.header.baremetal.network.BaremetalBondingInventory"); - put("org.zstack.sdk.BaremetalChassisInventory", "org.zstack.header.baremetal.chassis.BaremetalChassisInventory"); - put("org.zstack.sdk.BaremetalException", "org.zstack.header.baremetal.BaremetalException"); - put("org.zstack.sdk.BaremetalHardwareInfoInventory", "org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory"); - put("org.zstack.sdk.BaremetalInstanceInventory", "org.zstack.header.baremetal.instance.BaremetalInstanceInventory"); - put("org.zstack.sdk.BaremetalNicInventory", "org.zstack.header.baremetal.network.BaremetalNicInventory"); - put("org.zstack.sdk.BaremetalPxeServerInventory", "org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory"); - put("org.zstack.sdk.BaremetalVlanNicInventory", "org.zstack.header.baremetal.network.BaremetalVlanNicInventory"); - put("org.zstack.sdk.BaseVirtualDeviceTO", "org.zstack.kvm.BaseVirtualDeviceTO"); - put("org.zstack.sdk.BatchDeleteVolumeSnapshotStruct", "org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct"); - put("org.zstack.sdk.BillingInventory", "org.zstack.billing.generator.BillingInventory"); - put("org.zstack.sdk.BlockPrimaryStorageInventory", "org.zstack.storage.primary.block.BlockPrimaryStorageInventory"); - put("org.zstack.sdk.BlockVolumeInventory", "org.zstack.header.volume.block.BlockVolumeInventory"); - put("org.zstack.sdk.BuildAppExportHistoryInventory", "org.zstack.header.buildapp.BuildAppExportHistoryInventory"); - put("org.zstack.sdk.BuildApplicationInventory", "org.zstack.header.buildapp.BuildApplicationInventory"); - put("org.zstack.sdk.CCSCertificateInventory", "org.zstack.crypto.ccs.CCSCertificateInventory"); - put("org.zstack.sdk.CCSCertificateUserRefInventory", "org.zstack.crypto.ccs.CCSCertificateUserRefInventory"); - put("org.zstack.sdk.CCSCertificateUserState", "org.zstack.crypto.ccs.CCSCertificateUserState"); - put("org.zstack.sdk.CSPSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory"); - put("org.zstack.sdk.CasClientInventory", "org.zstack.sso.header.CasClientInventory"); - put("org.zstack.sdk.CasState", "org.zstack.sso.header.CasState"); - put("org.zstack.sdk.CbtTaskInventory", "org.zstack.header.cbt.CbtTaskInventory"); - put("org.zstack.sdk.CbtTaskResourceRefInventory", "org.zstack.header.cbt.CbtTaskResourceRefInventory"); - put("org.zstack.sdk.CbtTaskStatus", "org.zstack.header.cbt.CbtTaskStatus"); - put("org.zstack.sdk.CdRomTO", "org.zstack.kvm.KVMAgentCommands$CdRomTO"); - put("org.zstack.sdk.CdpPolicyInventory", "org.zstack.header.storage.cdp.CdpPolicyInventory"); - put("org.zstack.sdk.CdpPolicyState", "org.zstack.header.storage.cdp.CdpPolicyState"); - put("org.zstack.sdk.CdpTaskInventory", "org.zstack.header.storage.cdp.CdpTaskInventory"); - put("org.zstack.sdk.CdpTaskResourceRefInventory", "org.zstack.header.storage.cdp.CdpTaskResourceRefInventory"); - put("org.zstack.sdk.CdpTaskState", "org.zstack.header.storage.cdp.CdpTaskState"); - put("org.zstack.sdk.CdpTaskStatus", "org.zstack.header.storage.cdp.CdpTaskStatus"); - put("org.zstack.sdk.CdpTaskType", "org.zstack.header.storage.cdp.CdpTaskType"); - put("org.zstack.sdk.CephBackupStorageInventory", "org.zstack.storage.ceph.backup.CephBackupStorageInventory"); - put("org.zstack.sdk.CephBackupStorageMonInventory", "org.zstack.storage.ceph.backup.CephBackupStorageMonInventory"); - put("org.zstack.sdk.CephOsdGroupInventory", "org.zstack.storage.ceph.primary.CephOsdGroupInventory"); - put("org.zstack.sdk.CephPrimaryStorageInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageInventory"); - put("org.zstack.sdk.CephPrimaryStorageMonInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory"); - put("org.zstack.sdk.CephPrimaryStoragePoolInventory", "org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory"); - put("org.zstack.sdk.CertificateInventory", "org.zstack.network.service.lb.CertificateInventory"); - put("org.zstack.sdk.ChainInfo", "org.zstack.header.core.progress.ChainInfo"); - put("org.zstack.sdk.ChronyServerInfo", "org.zstack.zops.ChronyServerInfo"); - put("org.zstack.sdk.ChronyServerInfoPair", "org.zstack.zops.ChronyServerInfoPair"); - put("org.zstack.sdk.CleanTrashResult", "org.zstack.header.core.trash.CleanTrashResult"); - put("org.zstack.sdk.CloneVmInstanceInventory", "org.zstack.header.vm.CloneVmInstanceInventory"); - put("org.zstack.sdk.CloneVmInstanceResults", "org.zstack.header.vm.CloneVmInstanceResults"); - put("org.zstack.sdk.CloudFormationStackEventInventory", "org.zstack.header.cloudformation.CloudFormationStackEventInventory"); - put("org.zstack.sdk.ClusterDRSInventory", "org.zstack.drs.entity.ClusterDRSInventory"); - put("org.zstack.sdk.ClusterInventory", "org.zstack.header.cluster.ClusterInventory"); - put("org.zstack.sdk.ConnectionAccessPointInventory", "org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory"); - put("org.zstack.sdk.ConnectionRelationShipInventory", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory"); - put("org.zstack.sdk.ConnectionRelationShipProperty", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty"); - put("org.zstack.sdk.ConsoleInventory", "org.zstack.header.console.ConsoleInventory"); - put("org.zstack.sdk.ConsoleProxyAgentInventory", "org.zstack.header.console.ConsoleProxyAgentInventory"); - put("org.zstack.sdk.ContainerBackupStorageInventory", "org.zstack.container.ContainerBackupStorageInventory"); - put("org.zstack.sdk.ContainerImageInventory", "org.zstack.container.entity.ContainerImageInventory"); - put("org.zstack.sdk.ContainerImageTagInventory", "org.zstack.container.entity.ContainerImageTagInventory"); - put("org.zstack.sdk.ContainerManagementEndpointInventory", "org.zstack.container.entity.ContainerManagementEndpointInventory"); - put("org.zstack.sdk.ContainerUsage", "org.zstack.container.ContainerUsage"); - put("org.zstack.sdk.ControlStrategy", "org.zstack.loginControl.entity.ControlStrategy"); - put("org.zstack.sdk.CpuArchitecture", "org.zstack.header.host.CpuArchitecture"); - put("org.zstack.sdk.CpuMemoryCapacityData", "org.zstack.header.allocator.datatypes.CpuMemoryCapacityData"); - put("org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure"); - put("org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure"); - put("org.zstack.sdk.DGpuDeviceInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory"); - put("org.zstack.sdk.DGpuProfileInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory"); - put("org.zstack.sdk.DGpuSpecStatsInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory"); - put("org.zstack.sdk.DGpuStatus", "org.zstack.pciDevice.gpu.dgpu.DGpuStatus"); - put("org.zstack.sdk.DRSAdviceInventory", "org.zstack.drs.entity.DRSAdviceInventory"); - put("org.zstack.sdk.DRSVmMigrationActivityInventory", "org.zstack.drs.entity.DRSVmMigrationActivityInventory"); - put("org.zstack.sdk.DataCenterInventory", "org.zstack.header.datacenter.DataCenterInventory"); - put("org.zstack.sdk.DataCenterProperty", "org.zstack.header.datacenter.DataCenterProperty"); - put("org.zstack.sdk.DataVolumeBillingInventory", "org.zstack.billing.generator.volume.data.DataVolumeBillingInventory"); - put("org.zstack.sdk.DataVolumeSpending", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending"); - put("org.zstack.sdk.DataVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory"); - put("org.zstack.sdk.DatasetInventory", "org.zstack.ai.entity.DatasetInventory"); - put("org.zstack.sdk.DeleteSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult"); - put("org.zstack.sdk.DeviceAddress", "org.zstack.header.vm.devices.DeviceAddress"); - put("org.zstack.sdk.DeviceTO", "org.zstack.storage.device.multipath.DeviceTO"); - put("org.zstack.sdk.DirectoryInventory", "org.zstack.directory.DirectoryInventory"); - put("org.zstack.sdk.DiskOfferingInventory", "org.zstack.header.configuration.DiskOfferingInventory"); - put("org.zstack.sdk.ESXHostInventory", "org.zstack.vmware.ESXHostInventory"); - put("org.zstack.sdk.EcsImageInventory", "org.zstack.header.aliyun.image.EcsImageInventory"); - put("org.zstack.sdk.EcsInstanceInventory", "org.zstack.header.aliyun.ecs.EcsInstanceInventory"); - put("org.zstack.sdk.EcsInstanceType", "org.zstack.header.aliyun.ecs.EcsInstanceType"); - put("org.zstack.sdk.EcsSecurityGroupInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory"); - put("org.zstack.sdk.EcsSecurityGroupRuleInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory"); - put("org.zstack.sdk.EcsVSwitchInventory", "org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory"); - put("org.zstack.sdk.EcsVpcInventory", "org.zstack.header.aliyun.network.vpc.EcsVpcInventory"); - put("org.zstack.sdk.EipInventory", "org.zstack.network.service.eip.EipInventory"); - put("org.zstack.sdk.ElaborationCategory", "org.zstack.core.errorcode.ElaborationCategory"); - put("org.zstack.sdk.ElaborationCheckResult", "org.zstack.core.errorcode.ElaborationCheckResult"); - put("org.zstack.sdk.ElaborationContent", "org.zstack.core.errorcode.ElaborationContent"); - put("org.zstack.sdk.EmailMediaInventory", "org.zstack.monitoring.media.EmailMediaInventory"); - put("org.zstack.sdk.EmailTriggerActionInventory", "org.zstack.monitoring.actions.EmailTriggerActionInventory"); - put("org.zstack.sdk.ErrorCode", "org.zstack.header.errorcode.ErrorCode"); - put("org.zstack.sdk.ErrorCodeList", "org.zstack.header.errorcode.ErrorCodeList"); - put("org.zstack.sdk.EthernetVfPciDeviceInventory", "org.zstack.header.sriov.EthernetVfPciDeviceInventory"); - put("org.zstack.sdk.EthernetVfStatus", "org.zstack.header.sriov.EthernetVfStatus"); - put("org.zstack.sdk.EventLogInventory", "org.zstack.core.eventlog.EventLogInventory"); - put("org.zstack.sdk.ExponBlockVolumeInventory", "org.zstack.header.volume.block.ExponBlockVolumeInventory"); - put("org.zstack.sdk.ExtendedAttribute", "org.zstack.sso.header.ExtendedAttribute"); - put("org.zstack.sdk.ExternalBackupInventory", "org.zstack.externalbackup.ExternalBackupInventory"); - put("org.zstack.sdk.ExternalBackupState", "org.zstack.externalbackup.ExternalBackupState"); - put("org.zstack.sdk.ExternalBackupStorageInventory", "org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory"); - put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); - put("org.zstack.sdk.ExternalServiceCapabilities", "org.zstack.header.core.external.service.ExternalServiceCapabilities"); - put("org.zstack.sdk.ExternalServiceCapabilitiesBuilder", "org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder"); - put("org.zstack.sdk.ExternalServiceConfigurationInventory", "org.zstack.header.core.external.service.ExternalServiceConfigurationInventory"); - put("org.zstack.sdk.ExternalServiceInventory", "org.zstack.header.core.external.service.ExternalServiceInventory"); - put("org.zstack.sdk.FaultToleranceVmGroupInventory", "org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory"); - put("org.zstack.sdk.FcHbaDeviceInventory", "org.zstack.storage.device.hba.FcHbaDeviceInventory"); - put("org.zstack.sdk.FiSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory"); - put("org.zstack.sdk.FiSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory"); - put("org.zstack.sdk.FiberChannelLunInventory", "org.zstack.storage.device.fibreChannel.FiberChannelLunInventory"); - put("org.zstack.sdk.FiberChannelStorageInventory", "org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory"); - put("org.zstack.sdk.FirewallRuleState", "org.zstack.vpcfirewall.entity.FirewallRuleState"); - put("org.zstack.sdk.FlkSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory"); - put("org.zstack.sdk.FlkSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory"); - put("org.zstack.sdk.FlowCollectorInventory", "org.zstack.header.flowMeter.FlowCollectorInventory"); - put("org.zstack.sdk.FlowCounter", "org.zstack.header.flowMeter.FlowCounter"); - put("org.zstack.sdk.FlowMeterInventory", "org.zstack.header.flowMeter.FlowMeterInventory"); - put("org.zstack.sdk.FreeIpInventory", "org.zstack.header.network.l3.FreeIpInventory"); - put("org.zstack.sdk.FuncType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType"); - put("org.zstack.sdk.GarbageCollectorInventory", "org.zstack.core.gc.GarbageCollectorInventory"); - put("org.zstack.sdk.GlobalConfigInventory", "org.zstack.core.config.GlobalConfigInventory"); - put("org.zstack.sdk.GlobalConfigOptions", "org.zstack.core.config.GlobalConfigOptions"); - put("org.zstack.sdk.GlobalConfigTemplateInventory", "org.zstack.templateConfig.GlobalConfigTemplateInventory"); - put("org.zstack.sdk.GpuAllocateStatus", "org.zstack.pciDevice.gpu.GpuAllocateStatus"); - put("org.zstack.sdk.GpuDeviceInventory", "org.zstack.pciDevice.gpu.GpuDeviceInventory"); - put("org.zstack.sdk.GpuDeviceSpecCandidateInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory"); - put("org.zstack.sdk.GpuDeviceSpecInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecInventory"); - put("org.zstack.sdk.GpuVendor", "org.zstack.pciDevice.gpu.GpuVendor"); - put("org.zstack.sdk.GuestOsCharacterInventory", "org.zstack.core.config.GuestOsCharacterInventory"); - put("org.zstack.sdk.GuestToolsInventory", "org.zstack.guesttools.GuestToolsInventory"); - put("org.zstack.sdk.GuestToolsStateInventory", "org.zstack.guesttools.GuestToolsStateInventory"); - put("org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory"); - put("org.zstack.sdk.GuestVmScriptExecutedRecordInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordInventory"); - put("org.zstack.sdk.GuestVmScriptInventory", "org.zstack.guesttools.GuestVmScriptInventory"); - put("org.zstack.sdk.H3cSdnControllerTenantInventory", "org.zstack.sdnController.header.H3cSdnControllerTenantInventory"); - put("org.zstack.sdk.HaNetworkGroupInventory", "org.zstack.ha.HaNetworkGroupInventory"); - put("org.zstack.sdk.HaStrategyConditionInventory", "org.zstack.ha.HaStrategyConditionInventory"); - put("org.zstack.sdk.HaiTaiSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory"); - put("org.zstack.sdk.HardwareL2VxlanNetworkInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory"); - put("org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory"); - put("org.zstack.sdk.HbaDeviceInventory", "org.zstack.storage.device.hba.HbaDeviceInventory"); - put("org.zstack.sdk.HostConnectedStatus", "org.zstack.zops.HostConnectedStatus"); - put("org.zstack.sdk.HostDiskCapacity", "org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity"); - put("org.zstack.sdk.HostInventory", "org.zstack.header.host.HostInventory"); - put("org.zstack.sdk.HostIommuStateType", "org.zstack.pciDevice.HostIommuStateType"); - put("org.zstack.sdk.HostIommuStatusType", "org.zstack.pciDevice.HostIommuStatusType"); - put("org.zstack.sdk.HostIpmiInventory", "org.zstack.header.host.HostIpmiInventory"); - put("org.zstack.sdk.HostLoad", "org.zstack.drs.api.HostLoad"); - put("org.zstack.sdk.HostNUMANode", "org.zstack.header.host.HostNUMANode"); - put("org.zstack.sdk.HostNetworkBondingInventory", "org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory"); - put("org.zstack.sdk.HostNetworkBondingServiceRefInventory", "org.zstack.header.host.HostNetworkBondingServiceRefInventory"); - put("org.zstack.sdk.HostNetworkInterfaceInventory", "org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory"); - put("org.zstack.sdk.HostNetworkInterfaceLldpInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory"); - put("org.zstack.sdk.HostNetworkInterfaceLldpRefInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory"); - put("org.zstack.sdk.HostNetworkInterfaceServiceRefInventory", "org.zstack.header.host.HostNetworkInterfaceServiceRefInventory"); - put("org.zstack.sdk.HostNetworkLabelInventory", "org.zstack.header.host.HostNetworkLabelInventory"); - put("org.zstack.sdk.HostOsCategoryInventory", "org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory"); - put("org.zstack.sdk.HostPhysicalMemoryInventory", "org.zstack.header.host.HostPhysicalMemoryInventory"); - put("org.zstack.sdk.HostSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory"); - put("org.zstack.sdk.HwMonitorStatus", "org.zstack.header.host.HwMonitorStatus"); - put("org.zstack.sdk.HybridAccountInventory", "org.zstack.hybrid.account.HybridAccountInventory"); - put("org.zstack.sdk.HybridConnectionType", "org.zstack.header.aliyun.network.HybridConnectionType"); - put("org.zstack.sdk.HybridEipAddressInventory", "org.zstack.header.hybrid.network.eip.HybridEipAddressInventory"); - put("org.zstack.sdk.HybridEipStatus", "org.zstack.header.hybrid.network.eip.HybridEipStatus"); - put("org.zstack.sdk.HybridType", "org.zstack.hybrid.core.HybridType"); - put("org.zstack.sdk.HygonCcpDeviceInventory", "org.zstack.hygon.HygonCcpDeviceInventory"); - put("org.zstack.sdk.HygonDeviceState", "org.zstack.hygon.HygonDeviceState"); - put("org.zstack.sdk.HygonDeviceType", "org.zstack.hygon.HygonDeviceType"); - put("org.zstack.sdk.HypervisorVersionState", "org.zstack.kvm.hypervisor.datatype.HypervisorVersionState"); - put("org.zstack.sdk.IPsecConnectionInventory", "org.zstack.ipsec.IPsecConnectionInventory"); - put("org.zstack.sdk.IPsecL3NetworkRefInventory", "org.zstack.ipsec.IPsecL3NetworkRefInventory"); - put("org.zstack.sdk.IPsecPeerCidrInventory", "org.zstack.ipsec.IPsecPeerCidrInventory"); - put("org.zstack.sdk.IdentityZoneInventory", "org.zstack.header.identityzone.IdentityZoneInventory"); - put("org.zstack.sdk.IdentityZoneProperty", "org.zstack.header.identityzone.IdentityZoneProperty"); - put("org.zstack.sdk.ImageBackupStorageRefInventory", "org.zstack.header.image.ImageBackupStorageRefInventory"); - put("org.zstack.sdk.ImageCacheInventory", "org.zstack.header.storage.primary.ImageCacheInventory"); - put("org.zstack.sdk.ImageGroupInventory", "org.zstack.header.image.ImageGroupInventory"); - put("org.zstack.sdk.ImageGroupRefInventory", "org.zstack.header.image.ImageGroupRefInventory"); - put("org.zstack.sdk.ImageInventory", "org.zstack.header.image.ImageInventory"); - put("org.zstack.sdk.ImagePackageInventory", "org.zstack.ovf.datatype.ImagePackageInventory"); - put("org.zstack.sdk.ImagePackageState", "org.zstack.ovf.datatype.ImagePackageState"); - put("org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory"); - put("org.zstack.sdk.ImageReplicationGroupInventory", "org.zstack.imagereplicator.ImageReplicationGroupInventory"); - put("org.zstack.sdk.ImageStoreBackupStorageInventory", "org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory"); - put("org.zstack.sdk.ImageStoreGcResult", "org.zstack.storage.backup.imagestore.ImageStoreGcResult"); - put("org.zstack.sdk.ImageStoreImageStruct", "org.zstack.storage.backup.imagestore.ImageStoreImageStruct"); - put("org.zstack.sdk.InfoSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory"); - put("org.zstack.sdk.InfoSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory"); - put("org.zstack.sdk.InputType", "org.zstack.abstraction.OptionType$InputType"); - put("org.zstack.sdk.InstType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType"); - put("org.zstack.sdk.InstallPathRecycleInventory", "org.zstack.header.core.trash.InstallPathRecycleInventory"); - put("org.zstack.sdk.InstanceOfferingInventory", "org.zstack.header.configuration.InstanceOfferingInventory"); - put("org.zstack.sdk.InvocationRecord", "org.zstack.guesttools.InvocationRecord"); - put("org.zstack.sdk.InvocationRecordDetail", "org.zstack.guesttools.InvocationRecordDetail"); - put("org.zstack.sdk.IpCapacityData", "org.zstack.header.network.l3.datatypes.IpCapacityData"); - put("org.zstack.sdk.IpRangeInventory", "org.zstack.header.network.l3.IpRangeInventory"); - put("org.zstack.sdk.IpRangeType", "org.zstack.header.network.l3.IpRangeType"); - put("org.zstack.sdk.IpSetType", "org.zstack.vpcfirewall.entity.IpSetType"); - put("org.zstack.sdk.IpStatisticData", "org.zstack.network.service.flat.IpStatisticData"); - put("org.zstack.sdk.IscsiLunInventory", "org.zstack.storage.device.iscsi.IscsiLunInventory"); - put("org.zstack.sdk.IscsiServerClusterRefInventory", "org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory"); - put("org.zstack.sdk.IscsiServerInventory", "org.zstack.storage.device.iscsi.IscsiServerInventory"); - put("org.zstack.sdk.IscsiTargetInventory", "org.zstack.storage.device.iscsi.IscsiTargetInventory"); - put("org.zstack.sdk.IsoTO", "org.zstack.kvm.KVMAgentCommands$IsoTO"); - put("org.zstack.sdk.ItemInventory", "org.zstack.monitoring.items.ItemInventory"); - put("org.zstack.sdk.JitSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory"); - put("org.zstack.sdk.JobDetails", "org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails"); - put("org.zstack.sdk.JsonLabelInventory", "org.zstack.core.jsonlabel.JsonLabelInventory"); - put("org.zstack.sdk.KVMCephVolumeTO", "org.zstack.storage.ceph.primary.KVMCephVolumeTO"); - put("org.zstack.sdk.KVMHostInventory", "org.zstack.kvm.KVMHostInventory"); - put("org.zstack.sdk.KVMIsoTO", "org.zstack.kvm.KVMIsoTO"); - put("org.zstack.sdk.KoAlSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory"); - put("org.zstack.sdk.KvmCephCdRomTO", "org.zstack.storage.ceph.primary.KvmCephCdRomTO"); - put("org.zstack.sdk.KvmCephIsoTO", "org.zstack.storage.ceph.primary.KvmCephIsoTO"); - put("org.zstack.sdk.KvmHostHypervisorMetadataInventory", "org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory"); - put("org.zstack.sdk.KvmHypervisorInfoInventory", "org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory"); - put("org.zstack.sdk.L2NetworkData", "org.zstack.header.network.l2.L2NetworkData"); - put("org.zstack.sdk.L2NetworkInventory", "org.zstack.header.network.l2.L2NetworkInventory"); - put("org.zstack.sdk.L2PortGroupNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory"); - put("org.zstack.sdk.L2PortGroupVlanMode", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode"); - put("org.zstack.sdk.L2VirtualSwitchNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory"); - put("org.zstack.sdk.L2VlanNetworkInventory", "org.zstack.header.network.l2.L2VlanNetworkInventory"); - put("org.zstack.sdk.L2VxlanNetworkInventory", "org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory"); - put("org.zstack.sdk.L2VxlanNetworkPoolInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory"); - put("org.zstack.sdk.L3NetworkHostRouteInventory", "org.zstack.header.network.l3.L3NetworkHostRouteInventory"); - put("org.zstack.sdk.L3NetworkInventory", "org.zstack.header.network.l3.L3NetworkInventory"); - put("org.zstack.sdk.LdapAccountRefInventory", "org.zstack.ldap.LdapAccountRefInventory"); - put("org.zstack.sdk.LdapResourceRefInventory", "org.zstack.login.entity.LdapResourceRefInventory"); - put("org.zstack.sdk.LdapServerInventory", "org.zstack.ldap.LdapServerInventory"); - put("org.zstack.sdk.LicenseAddOnInventory", "org.zstack.license.LicenseAddOnInventory"); - put("org.zstack.sdk.LicenseInventory", "org.zstack.license.LicenseInventory"); - put("org.zstack.sdk.LoadBalancerDataInventory", "org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory"); - put("org.zstack.sdk.LoadBalancerInventory", "org.zstack.network.service.lb.LoadBalancerInventory"); - put("org.zstack.sdk.LoadBalancerListenerACLRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerCertificateRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerInventory", "org.zstack.network.service.lb.LoadBalancerListenerInventory"); - put("org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory"); - put("org.zstack.sdk.LoadBalancerListenerVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory"); - put("org.zstack.sdk.LoadBalancerListerAcl", "org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl"); - put("org.zstack.sdk.LoadBalancerServerGroupInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupInventory"); - put("org.zstack.sdk.LoadBalancerServerGroupServerIpInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory"); - put("org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory"); - put("org.zstack.sdk.LocalStorageResourceRefInventory", "org.zstack.storage.primary.local.LocalStorageResourceRefInventory"); - put("org.zstack.sdk.LocateStatus", "org.zstack.storage.device.localRaid.LocateStatus"); - put("org.zstack.sdk.LogCategory", "org.zstack.log.server.LogCategory"); - put("org.zstack.sdk.LogLevel", "org.zstack.log.server.LogLevel"); - put("org.zstack.sdk.LogServerInventory", "org.zstack.log.server.LogServerInventory"); - put("org.zstack.sdk.LogType", "org.zstack.log.server.LogType"); - put("org.zstack.sdk.LoginAuthenticationProcedureDesc", "org.zstack.header.identity.login.LoginAuthenticationProcedureDesc"); - put("org.zstack.sdk.LongJobInventory", "org.zstack.header.longjob.LongJobInventory"); - put("org.zstack.sdk.LongJobProgressDetail", "org.zstack.header.core.progress.LongJobProgressDetail"); - put("org.zstack.sdk.LongJobState", "org.zstack.header.longjob.LongJobState"); - put("org.zstack.sdk.LunInventory", "org.zstack.header.storageDevice.LunInventory"); - put("org.zstack.sdk.MaaSUsage", "org.zstack.ai.message.MaaSUsage"); - put("org.zstack.sdk.ManagementNodeInventory", "org.zstack.header.managementnode.ManagementNodeInventory"); - put("org.zstack.sdk.MatchEvidence", "org.zstack.ai.message.MatchEvidence"); - put("org.zstack.sdk.MatchedStep", "org.zstack.ai.message.MatchedStep"); - put("org.zstack.sdk.MdevDeviceChooser", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser"); - put("org.zstack.sdk.MdevDeviceInventory", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory"); - put("org.zstack.sdk.MdevDeviceSpecInventory", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory"); - put("org.zstack.sdk.MdevDeviceSpecState", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState"); - put("org.zstack.sdk.MdevDeviceState", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState"); - put("org.zstack.sdk.MdevDeviceStatus", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus"); - put("org.zstack.sdk.MdevDeviceType", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType"); - put("org.zstack.sdk.MediaInventory", "org.zstack.monitoring.media.MediaInventory"); - put("org.zstack.sdk.MetaServerService", "org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService"); - put("org.zstack.sdk.MiniCandidateHostStruct", "org.zstack.header.bootstrap.MiniCandidateHostStruct"); - put("org.zstack.sdk.MiniHostInfo", "org.zstack.header.bootstrap.MiniHostInfo"); - put("org.zstack.sdk.MiniNetworkConfigStruct", "org.zstack.header.bootstrap.MiniNetworkConfigStruct"); - put("org.zstack.sdk.MiniStorageHostRefInventory", "org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory"); - put("org.zstack.sdk.MiniStorageInventory", "org.zstack.storage.primary.ministorage.MiniStorageInventory"); - put("org.zstack.sdk.MiniStorageResourceReplicationInventory", "org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory"); - put("org.zstack.sdk.MiniStorageType", "org.zstack.storage.primary.ministorage.MiniStorageType"); - put("org.zstack.sdk.MirrorNetworkUsedIpInventory", "org.zstack.header.portMirror.MirrorNetworkUsedIpInventory"); - put("org.zstack.sdk.ModelCenterCapacityInventory", "org.zstack.ai.entity.ModelCenterCapacityInventory"); - put("org.zstack.sdk.ModelCenterInventory", "org.zstack.ai.entity.ModelCenterInventory"); - put("org.zstack.sdk.ModelCenterServiceInventory", "org.zstack.ai.message.ModelCenterServiceInventory"); - put("org.zstack.sdk.ModelEvalServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory"); - put("org.zstack.sdk.ModelEvaluationTaskInventory", "org.zstack.ai.entity.ModelEvaluationTaskInventory"); - put("org.zstack.sdk.ModelInventory", "org.zstack.ai.entity.ModelInventory"); - put("org.zstack.sdk.ModelService", "org.zstack.ai.message.ModelService"); - put("org.zstack.sdk.ModelServiceGroupDatasetRefInventory", "org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory"); - put("org.zstack.sdk.ModelServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelServiceInstanceGroupInventory"); - put("org.zstack.sdk.ModelServiceInstanceInventory", "org.zstack.ai.entity.ModelServiceInstanceInventory"); - put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); - put("org.zstack.sdk.ModelServiceMatchEntry", "org.zstack.ai.message.ModelServiceMatchEntry"); - put("org.zstack.sdk.ModelServiceMatchEntryName", "org.zstack.ai.message.ModelServiceMatchEntryName"); - put("org.zstack.sdk.ModelServiceMatchStatus", "org.zstack.ai.message.ModelServiceMatchStatus"); - put("org.zstack.sdk.ModelServiceRefInventory", "org.zstack.ai.entity.ModelServiceRefInventory"); - put("org.zstack.sdk.ModelServiceTemplateInventory", "org.zstack.ai.entity.ModelServiceTemplateInventory"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo"); - put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo"); - put("org.zstack.sdk.MonitorTriggerActionInventory", "org.zstack.monitoring.actions.MonitorTriggerActionInventory"); - put("org.zstack.sdk.MonitorTriggerInventory", "org.zstack.monitoring.MonitorTriggerInventory"); - put("org.zstack.sdk.MttyDeviceInventory", "org.zstack.mttyDevice.MttyDeviceInventory"); - put("org.zstack.sdk.MttyDeviceState", "org.zstack.mttyDevice.MttyDeviceState"); - put("org.zstack.sdk.MttyDeviceType", "org.zstack.mttyDevice.MttyDeviceType"); - put("org.zstack.sdk.MttyDeviceVirtStatus", "org.zstack.mttyDevice.MttyDeviceVirtStatus"); - put("org.zstack.sdk.MulticastRouteInventory", "org.zstack.multicast.router.header.MulticastRouteInventory"); - put("org.zstack.sdk.MulticastRouterInventory", "org.zstack.multicast.router.header.MulticastRouterInventory"); - put("org.zstack.sdk.MulticastRouterRendezvousPointInventory", "org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory"); - put("org.zstack.sdk.MulticastRouterVpcVRouterRefInventory", "org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory"); - put("org.zstack.sdk.MultipathTopologyStruct", "org.zstack.storage.device.multipath.MultipathTopologyStruct"); - put("org.zstack.sdk.NasFileSystemInventory", "org.zstack.nas.NasFileSystemInventory"); - put("org.zstack.sdk.NasMountTargetInventory", "org.zstack.nas.NasMountTargetInventory"); - put("org.zstack.sdk.NasProtocolType", "org.zstack.nas.NasProtocolType"); - put("org.zstack.sdk.NativeClusterInventory", "org.zstack.container.entity.NativeClusterInventory"); - put("org.zstack.sdk.NativeHostInventory", "org.zstack.container.entity.NativeHostInventory"); - put("org.zstack.sdk.Neighbor", "org.zstack.header.protocol.Neighbor"); - put("org.zstack.sdk.NetworkReachablePair", "org.zstack.zops.NetworkReachablePair"); - put("org.zstack.sdk.NetworkRouterAreaRefInventory", "org.zstack.header.protocol.NetworkRouterAreaRefInventory"); - put("org.zstack.sdk.NetworkRouterFlowMeterRefInventory", "org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory"); - put("org.zstack.sdk.NetworkServiceL3NetworkRefInventory", "org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory"); - put("org.zstack.sdk.NetworkServiceProviderInventory", "org.zstack.header.network.service.NetworkServiceProviderInventory"); - put("org.zstack.sdk.NfvInstClusterStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus"); - put("org.zstack.sdk.NfvInstGroupConfigTaskInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory"); - put("org.zstack.sdk.NfvInstGroupInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory"); - put("org.zstack.sdk.NfvInstGroupL3NetworkRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory"); - put("org.zstack.sdk.NfvInstGroupMonitorIpInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory"); - put("org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory"); - put("org.zstack.sdk.NfvInstGroupOperationMode", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode"); - put("org.zstack.sdk.NfvInstGroupStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus"); - put("org.zstack.sdk.NfvInstInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstInventory"); - put("org.zstack.sdk.NfvInstOfferingInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory"); - put("org.zstack.sdk.NginxRedirectRule", "org.zstack.ai.NginxRedirectRule"); - put("org.zstack.sdk.NicTO", "org.zstack.kvm.KVMAgentCommands$NicTO"); - put("org.zstack.sdk.NormalIpRangeInventory", "org.zstack.header.network.l3.NormalIpRangeInventory"); - put("org.zstack.sdk.NvmeLunHostRefInventory", "org.zstack.storage.device.nvme.NvmeLunHostRefInventory"); - put("org.zstack.sdk.NvmeLunInventory", "org.zstack.storage.device.nvme.NvmeLunInventory"); - put("org.zstack.sdk.NvmeServerClusterRefInventory", "org.zstack.storage.device.nvme.NvmeServerClusterRefInventory"); - put("org.zstack.sdk.NvmeServerInventory", "org.zstack.storage.device.nvme.NvmeServerInventory"); - put("org.zstack.sdk.NvmeTargetInventory", "org.zstack.storage.device.nvme.NvmeTargetInventory"); - put("org.zstack.sdk.OAuth2ClientInventory", "org.zstack.sso.header.OAuth2ClientInventory"); - put("org.zstack.sdk.OAuth2TokenInventory", "org.zstack.sso.header.OAuth2TokenInventory"); - put("org.zstack.sdk.ObservabilityServerOfferingInventory", "org.zstack.observabilityServer.ObservabilityServerOfferingInventory"); - put("org.zstack.sdk.ObservabilityServerServiceDataInventory", "org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory"); - put("org.zstack.sdk.ObservabilityServerVmInventory", "org.zstack.observabilityServer.ObservabilityServerVmInventory"); - put("org.zstack.sdk.OptionType", "org.zstack.abstraction.OptionType"); - put("org.zstack.sdk.OssBucketInventory", "org.zstack.header.aliyun.oss.OssBucketInventory"); - put("org.zstack.sdk.OssBucketProperty", "org.zstack.header.aliyun.oss.OssBucketProperty"); - put("org.zstack.sdk.OvfCdDriverInfo", "org.zstack.ovf.datatype.OvfCdDriverInfo"); - put("org.zstack.sdk.OvfCpuInfo", "org.zstack.ovf.datatype.OvfCpuInfo"); - put("org.zstack.sdk.OvfDiskInfo", "org.zstack.ovf.datatype.OvfDiskInfo"); - put("org.zstack.sdk.OvfEthernetAdapterInfo", "org.zstack.ovf.datatype.OvfEthernetAdapterInfo"); - put("org.zstack.sdk.OvfInfo", "org.zstack.ovf.datatype.OvfInfo"); - put("org.zstack.sdk.OvfMemoryInfo", "org.zstack.ovf.datatype.OvfMemoryInfo"); - put("org.zstack.sdk.OvfNetworkInfo", "org.zstack.ovf.datatype.OvfNetworkInfo"); - put("org.zstack.sdk.OvfOSInfo", "org.zstack.ovf.datatype.OvfOSInfo"); - put("org.zstack.sdk.OvfSystemInfo", "org.zstack.ovf.datatype.OvfSystemInfo"); - put("org.zstack.sdk.OvfVolumeInfo", "org.zstack.ovf.datatype.OvfVolumeInfo"); - put("org.zstack.sdk.OvnControllerInventory", "org.zstack.network.ovn.OvnControllerInventory"); - put("org.zstack.sdk.OvnControllerVmInstanceInventory", "org.zstack.network.ovn.OvnControllerVmInstanceInventory"); - put("org.zstack.sdk.OvnControllerVmOfferingInventory", "org.zstack.network.ovn.OvnControllerVmOfferingInventory"); - put("org.zstack.sdk.PacketsForwardType", "org.zstack.vpcfirewall.entity.PacketsForwardType"); - put("org.zstack.sdk.Pagination", "org.zstack.billing.Pagination"); - put("org.zstack.sdk.PciDeviceBillingInventory", "org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory"); - put("org.zstack.sdk.PciDeviceChooser", "org.zstack.pciDevice.PciDeviceChooser"); - put("org.zstack.sdk.PciDeviceInventory", "org.zstack.pciDevice.PciDeviceInventory"); - put("org.zstack.sdk.PciDeviceMdevSpecRefInventory", "org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory"); - put("org.zstack.sdk.PciDeviceMetaData", "org.zstack.pciDevice.PciDeviceMetaData"); - put("org.zstack.sdk.PciDeviceMetaDataEntry", "org.zstack.pciDevice.PciDeviceMetaDataEntry"); - put("org.zstack.sdk.PciDeviceMetaDataOperator", "org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator"); - put("org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory"); - put("org.zstack.sdk.PciDeviceOfferingInventory", "org.zstack.pciDevice.PciDeviceOfferingInventory"); - put("org.zstack.sdk.PciDeviceOfferingType", "org.zstack.pciDevice.PciDeviceOfferingType"); - put("org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory", "org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory"); - put("org.zstack.sdk.PciDeviceSpecInventory", "org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory"); - put("org.zstack.sdk.PciDeviceSpecState", "org.zstack.pciDevice.specification.pci.PciDeviceSpecState"); - put("org.zstack.sdk.PciDeviceSpending", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending"); - put("org.zstack.sdk.PciDeviceSpendingInventory", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory"); - put("org.zstack.sdk.PciDeviceState", "org.zstack.pciDevice.PciDeviceState"); - put("org.zstack.sdk.PciDeviceStatus", "org.zstack.pciDevice.PciDeviceStatus"); - put("org.zstack.sdk.PciDeviceType", "org.zstack.pciDevice.PciDeviceType"); - put("org.zstack.sdk.PciDeviceVirtMode", "org.zstack.pciDevice.virtual.PciDeviceVirtMode"); - put("org.zstack.sdk.PciDeviceVirtState", "org.zstack.pciDevice.virtual.PciDeviceVirtState"); - put("org.zstack.sdk.PciDeviceVirtStatus", "org.zstack.pciDevice.virtual.PciDeviceVirtStatus"); - put("org.zstack.sdk.PendingTaskInfo", "org.zstack.header.core.progress.PendingTaskInfo"); - put("org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory"); - put("org.zstack.sdk.PhysicalSwitchInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory"); - put("org.zstack.sdk.PhysicalSwitchPortInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory"); - put("org.zstack.sdk.PluginDriverInventory", "org.zstack.header.core.external.plugin.PluginDriverInventory"); - put("org.zstack.sdk.PluginSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory"); - put("org.zstack.sdk.PodInventory", "org.zstack.container.entity.PodInventory"); - put("org.zstack.sdk.PolicyInventory", "org.zstack.header.identity.PolicyInventory"); - put("org.zstack.sdk.PolicyRouteRuleInventory", "org.zstack.policyRoute.PolicyRouteRuleInventory"); - put("org.zstack.sdk.PolicyRouteRuleProtocol", "org.zstack.policyRoute.PolicyRouteRuleProtocol"); - put("org.zstack.sdk.PolicyRouteRuleSetInventory", "org.zstack.policyRoute.PolicyRouteRuleSetInventory"); - put("org.zstack.sdk.PolicyRouteRuleSetL3RefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory"); - put("org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory"); - put("org.zstack.sdk.PolicyRouteRuleState", "org.zstack.policyRoute.PolicyRouteRuleState"); - put("org.zstack.sdk.PolicyRouteTableInventory", "org.zstack.policyRoute.PolicyRouteTableInventory"); - put("org.zstack.sdk.PolicyRouteTableRouteEntryInventory", "org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory"); - put("org.zstack.sdk.PolicyRouteTableVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory"); - put("org.zstack.sdk.PolicyStatement", "org.zstack.header.identity.PolicyStatement"); - put("org.zstack.sdk.PolicyStatementEffect", "org.zstack.header.identity.PolicyStatementEffect"); - put("org.zstack.sdk.PortForwardingRuleInventory", "org.zstack.network.service.portforwarding.PortForwardingRuleInventory"); - put("org.zstack.sdk.PortMirrorInventory", "org.zstack.header.portMirror.PortMirrorInventory"); - put("org.zstack.sdk.PortMirrorSessionInventory", "org.zstack.header.portMirror.PortMirrorSessionInventory"); - put("org.zstack.sdk.PortMirrorState", "org.zstack.header.portMirror.PortMirrorState"); - put("org.zstack.sdk.PowerOffHardwareResult", "org.zstack.header.cluster.PowerOffHardwareResult"); - put("org.zstack.sdk.PreconfigurationTemplateInventory", "org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory"); - put("org.zstack.sdk.PreviewResourceStruct", "org.zstack.header.cloudformation.PreviewResourceStruct"); - put("org.zstack.sdk.Price", "org.zstack.billing.table.APICreatePriceTableMsg$Price"); - put("org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory"); - put("org.zstack.sdk.PriceInventory", "org.zstack.billing.PriceInventory"); - put("org.zstack.sdk.PricePciDeviceOfferingRefInventory", "org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory"); - put("org.zstack.sdk.PriceTableInventory", "org.zstack.billing.table.PriceTableInventory"); - put("org.zstack.sdk.PrimaryStorageHostStatus", "org.zstack.header.storage.primary.PrimaryStorageHostStatus"); - put("org.zstack.sdk.PrimaryStorageInventory", "org.zstack.header.storage.primary.PrimaryStorageInventory"); - put("org.zstack.sdk.ProgressProperty", "org.zstack.header.aliyun.image.ProgressProperty"); - put("org.zstack.sdk.ProjectRepositoryInventory", "org.zstack.container.entity.ProjectRepositoryInventory"); - put("org.zstack.sdk.ProtocolType", "org.zstack.vpcfirewall.entity.ProtocolType"); - put("org.zstack.sdk.PubIpVipBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory"); - put("org.zstack.sdk.PubIpVipBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory"); - put("org.zstack.sdk.PubIpVipBandwidthSpending", "org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending"); - put("org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory"); - put("org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory"); - put("org.zstack.sdk.PubIpVmNicBandwidthSpending", "org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending"); - put("org.zstack.sdk.PublishAppInventory", "org.zstack.header.appcenter.PublishAppInventory"); - put("org.zstack.sdk.PublishAppResourceStruct", "org.zstack.header.appcenter.PublishAppResourceStruct"); - put("org.zstack.sdk.QuotaInventory", "org.zstack.header.identity.QuotaInventory"); - put("org.zstack.sdk.QuotaUsage", "org.zstack.header.identity.Quota$QuotaUsage"); - put("org.zstack.sdk.RaidControllerInventory", "org.zstack.storage.device.localRaid.RaidControllerInventory"); - put("org.zstack.sdk.RaidPhysicalDriveInventory", "org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory"); - put("org.zstack.sdk.RedirectUrlTemplate", "org.zstack.sso.header.RedirectUrlTemplate"); - put("org.zstack.sdk.RemoteVtepInventory", "org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory"); - put("org.zstack.sdk.RemovalInstanceRuleInventory", "org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory"); - put("org.zstack.sdk.ReplicationDiskStatus", "org.zstack.storage.primary.ministorage.ReplicationDiskStatus"); - put("org.zstack.sdk.ReplicationGroupState", "org.zstack.imagereplicator.ReplicationGroupState"); - put("org.zstack.sdk.ReplicationNetworkStatus", "org.zstack.storage.primary.ministorage.ReplicationNetworkStatus"); - put("org.zstack.sdk.ReplicationRole", "org.zstack.storage.primary.ministorage.ReplicationRole"); - put("org.zstack.sdk.ReplicationState", "org.zstack.storage.primary.ministorage.ReplicationState"); - put("org.zstack.sdk.ReservedIpRangeInventory", "org.zstack.header.network.l3.ReservedIpRangeInventory"); - put("org.zstack.sdk.ResourceBackupState", "org.zstack.externalbackup.ResourceBackupState"); - put("org.zstack.sdk.ResourceBindableConfigStruct", "org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct"); - put("org.zstack.sdk.ResourceConfigInventory", "org.zstack.resourceconfig.ResourceConfigInventory"); - put("org.zstack.sdk.ResourceConfigStruct", "org.zstack.resourceconfig.ResourceConfigStruct"); - put("org.zstack.sdk.ResourceExternalBackupInfo", "org.zstack.externalbackup.ResourceExternalBackupInfo"); - put("org.zstack.sdk.ResourceInventory", "org.zstack.header.vo.ResourceInventory"); - put("org.zstack.sdk.ResourceSpending", "org.zstack.billing.ResourceSpending"); - put("org.zstack.sdk.ResourceStackInventory", "org.zstack.header.cloudformation.ResourceStackInventory"); - put("org.zstack.sdk.ResourceStruct", "org.zstack.cloudformation.template.struct.ResourceStruct"); - put("org.zstack.sdk.ResourceType", "org.zstack.cloudformation.template.struct.ResourceType"); - put("org.zstack.sdk.RevertSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult"); - put("org.zstack.sdk.RootVolumeBillingInventory", "org.zstack.billing.generator.volume.root.RootVolumeBillingInventory"); - put("org.zstack.sdk.RootVolumeSpending", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending"); - put("org.zstack.sdk.RootVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory"); - put("org.zstack.sdk.RouterAreaInventory", "org.zstack.header.protocol.RouterAreaInventory"); - put("org.zstack.sdk.RuleAttributeType", "org.zstack.sso.header.RuleAttributeType"); - put("org.zstack.sdk.RunningState", "org.zstack.storage.device.localRaid.RunningState"); - put("org.zstack.sdk.RunningTaskInfo", "org.zstack.header.core.progress.RunningTaskInfo"); - put("org.zstack.sdk.SAML2ClientInventory", "org.zstack.sso.header.SAML2ClientInventory"); - put("org.zstack.sdk.SAML2State", "org.zstack.sso.header.SAML2State"); - put("org.zstack.sdk.SSOClientAttributeInventory", "org.zstack.sso.header.SSOClientAttributeInventory"); - put("org.zstack.sdk.SSOClientInventory", "org.zstack.sso.header.SSOClientInventory"); - put("org.zstack.sdk.SSORedirectTemplateInventory", "org.zstack.sso.header.SSORedirectTemplateInventory"); - put("org.zstack.sdk.SSOServerTokenInventory", "org.zstack.sso.header.SSOServerTokenInventory"); - put("org.zstack.sdk.SSOTokenInventory", "org.zstack.sso.header.SSOTokenInventory"); - put("org.zstack.sdk.SanSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory"); - put("org.zstack.sdk.SanSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory"); - put("org.zstack.sdk.SchedulerJobGroupInventory", "org.zstack.header.scheduler.SchedulerJobGroupInventory"); - put("org.zstack.sdk.SchedulerJobGroupJobRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory"); - put("org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory"); - put("org.zstack.sdk.SchedulerJobHistoryInventory", "org.zstack.header.scheduler.SchedulerJobHistoryInventory"); - put("org.zstack.sdk.SchedulerJobInventory", "org.zstack.header.scheduler.SchedulerJobInventory"); - put("org.zstack.sdk.SchedulerJobSchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory"); - put("org.zstack.sdk.SchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerTriggerInventory"); - put("org.zstack.sdk.ScsiLunClusterStatusInventory", "org.zstack.header.storageDevice.ScsiLunClusterStatusInventory"); - put("org.zstack.sdk.ScsiLunHostRefInventory", "org.zstack.header.storageDevice.ScsiLunHostRefInventory"); - put("org.zstack.sdk.ScsiLunInventory", "org.zstack.header.storageDevice.ScsiLunInventory"); - put("org.zstack.sdk.ScsiLunVmInstanceRefInventory", "org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory"); - put("org.zstack.sdk.SdnControllerHostRefInventory", "org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory"); - put("org.zstack.sdk.SdnControllerInventory", "org.zstack.header.network.sdncontroller.SdnControllerInventory"); - put("org.zstack.sdk.SdnControllerStatus", "org.zstack.header.network.sdncontroller.SdnControllerStatus"); - put("org.zstack.sdk.SdnVlanRange", "org.zstack.sdnController.header.SdnVlanRange"); - put("org.zstack.sdk.SecretResourcePoolInventory", "org.zstack.header.securitymachine.SecretResourcePoolInventory"); - put("org.zstack.sdk.SecurityGroupIngressRuleTO", "org.zstack.network.securitygroup.SecurityGroupIngressRuleTO"); - put("org.zstack.sdk.SecurityGroupInventory", "org.zstack.network.securitygroup.SecurityGroupInventory"); - put("org.zstack.sdk.SecurityGroupRuleInventory", "org.zstack.network.securitygroup.SecurityGroupRuleInventory"); - put("org.zstack.sdk.SecurityMachineInventory", "org.zstack.header.securitymachine.SecurityMachineInventory"); - put("org.zstack.sdk.ServiceStatus", "org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus"); - put("org.zstack.sdk.ServiceTypeStatisticData", "org.zstack.header.host.ServiceTypeStatisticData"); - put("org.zstack.sdk.SessionInventory", "org.zstack.header.identity.SessionInventory"); - put("org.zstack.sdk.SessionStatus", "org.zstack.header.portMirror.SessionStatus"); - put("org.zstack.sdk.SessionType", "org.zstack.header.portMirror.SessionType"); - put("org.zstack.sdk.SftpBackupStorageInventory", "org.zstack.storage.backup.sftp.SftpBackupStorageInventory"); - put("org.zstack.sdk.ShareableVolumeVmInstanceRefInventory", "org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory"); - put("org.zstack.sdk.SharedBlockCandidateStruct", "org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct"); - put("org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory"); - put("org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory"); - put("org.zstack.sdk.SharedBlockGroupType", "org.zstack.storage.primary.sharedblock.SharedBlockGroupType"); - put("org.zstack.sdk.SharedBlockInventory", "org.zstack.storage.primary.sharedblock.SharedBlockInventory"); - put("org.zstack.sdk.SharedBlockState", "org.zstack.storage.primary.sharedblock.SharedBlockState"); - put("org.zstack.sdk.SharedBlockStatus", "org.zstack.storage.primary.sharedblock.SharedBlockStatus"); - put("org.zstack.sdk.SharedBlockType", "org.zstack.storage.primary.sharedblock.SharedBlockType"); - put("org.zstack.sdk.SharedResourceInventory", "org.zstack.header.identity.SharedResourceInventory"); - put("org.zstack.sdk.ShellResult", "org.zstack.kvm.APIKvmRunShellEvent$ShellResult"); - put("org.zstack.sdk.ShrinkResult", "org.zstack.header.storage.snapshot.ShrinkResult"); - put("org.zstack.sdk.SimulatorHostInventory", "org.zstack.header.simulator.SimulatorHostInventory"); - put("org.zstack.sdk.SlbGroupInventory", "org.zstack.network.service.slb.SlbGroupInventory"); - put("org.zstack.sdk.SlbGroupL3NetworkRefInventory", "org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory"); - put("org.zstack.sdk.SlbGroupMonitorIpInventory", "org.zstack.network.service.slb.SlbGroupMonitorIpInventory"); - put("org.zstack.sdk.SlbLoadBalancerInventory", "org.zstack.network.service.slb.SlbLoadBalancerInventory"); - put("org.zstack.sdk.SlbOfferingInventory", "org.zstack.network.service.slb.SlbOfferingInventory"); - put("org.zstack.sdk.SlbVmInstanceConfigTaskInventory", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory"); - put("org.zstack.sdk.SlbVmInstanceConfigTaskStatus", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus"); - put("org.zstack.sdk.SlbVmInstanceInventory", "org.zstack.network.service.slb.SlbVmInstanceInventory"); - put("org.zstack.sdk.SmartDataStruct", "org.zstack.storage.device.localRaid.SmartDataStruct"); - put("org.zstack.sdk.SnapShotSpendingInventory", "org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory"); - put("org.zstack.sdk.SnapshotLeafInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory"); - put("org.zstack.sdk.SnapshotSpending", "org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending"); - put("org.zstack.sdk.SnmpAgentInventory", "org.zstack.snmp.agent.SnmpAgentInventory"); - put("org.zstack.sdk.Spending", "org.zstack.billing.Spending"); - put("org.zstack.sdk.SpendingDetails", "org.zstack.billing.SpendingDetails"); - put("org.zstack.sdk.SshKeyPairInventory", "org.zstack.header.sshkeypair.SshKeyPairInventory"); - put("org.zstack.sdk.SshPrivateKeyPairInventory", "org.zstack.header.sshkeypair.SshPrivateKeyPairInventory"); - put("org.zstack.sdk.StackParameters", "org.zstack.header.cloudformation.StackParameters"); - put("org.zstack.sdk.StackTemplateInventory", "org.zstack.header.cloudformation.StackTemplateInventory"); - put("org.zstack.sdk.StorageType", "org.zstack.header.zdfs.StorageType"); - put("org.zstack.sdk.SupportedResourceStruct", "org.zstack.header.cloudformation.SupportedResourceStruct"); - put("org.zstack.sdk.SyncBackupResult", "org.zstack.header.storage.backup.SyncBackupResult"); - put("org.zstack.sdk.SystemTagInventory", "org.zstack.header.tag.SystemTagInventory"); - put("org.zstack.sdk.TagInventory", "org.zstack.header.tag.TagInventory"); - put("org.zstack.sdk.TagPatternInventory", "org.zstack.header.tag.TagPatternInventory"); - put("org.zstack.sdk.TagPatternType", "org.zstack.header.tag.TagPatternType"); - put("org.zstack.sdk.TaskInfo", "org.zstack.header.core.progress.TaskInfo"); - put("org.zstack.sdk.TaskProgressInventory", "org.zstack.header.core.progress.TaskProgressInventory"); - put("org.zstack.sdk.TemplateConfigInventory", "org.zstack.templateConfig.TemplateConfigInventory"); - put("org.zstack.sdk.Threshold", "org.zstack.drs.api.Threshold"); - put("org.zstack.sdk.TrainedModelRecordInventory", "org.zstack.ai.entity.TrainedModelRecordInventory"); - put("org.zstack.sdk.TrashCleanupResult", "org.zstack.header.core.trash.TrashCleanupResult"); - put("org.zstack.sdk.TwoFactorAuthenticationInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory"); - put("org.zstack.sdk.TwoFactorAuthenticationSecretInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory"); - put("org.zstack.sdk.TwoFactorAuthenticationSecretStatus", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus"); - put("org.zstack.sdk.UKeyInventory", "org.zstack.license.UKeyInventory"); - put("org.zstack.sdk.UKeyStatus", "org.zstack.license.UKeyStatus"); - put("org.zstack.sdk.UsageReport", "org.zstack.header.storage.primary.UsageReport"); - put("org.zstack.sdk.UsbDeviceInventory", "org.zstack.usbDevice.UsbDeviceInventory"); - put("org.zstack.sdk.UsbDeviceState", "org.zstack.usbDevice.UsbDeviceState"); - put("org.zstack.sdk.UsedIpInventory", "org.zstack.header.network.l3.UsedIpInventory"); - put("org.zstack.sdk.UserGroupInventory", "org.zstack.header.identity.UserGroupInventory"); - put("org.zstack.sdk.UserInventory", "org.zstack.header.identity.UserInventory"); - put("org.zstack.sdk.UserProxyConfigInventory", "org.zstack.proxy.UserProxyConfigInventory"); - put("org.zstack.sdk.UserProxyConfigResourceRefInventory", "org.zstack.proxy.UserProxyConfigResourceRefInventory"); - put("org.zstack.sdk.UserTagInventory", "org.zstack.header.tag.UserTagInventory"); - put("org.zstack.sdk.V2VConversionHostInventory", "org.zstack.v2v.V2VConversionHostInventory"); - put("org.zstack.sdk.VCenterBackupStorageInventory", "org.zstack.vmware.VCenterBackupStorageInventory"); - put("org.zstack.sdk.VCenterClusterInventory", "org.zstack.vmware.VCenterClusterInventory"); - put("org.zstack.sdk.VCenterDatacenterInventory", "org.zstack.vmware.VCenterDatacenterInventory"); - put("org.zstack.sdk.VCenterInventory", "org.zstack.vmware.VCenterInventory"); - put("org.zstack.sdk.VCenterPrimaryStorageInventory", "org.zstack.vmware.VCenterPrimaryStorageInventory"); - put("org.zstack.sdk.VCenterResourcePoolInventory", "org.zstack.vmware.VCenterResourcePoolInventory"); - put("org.zstack.sdk.VCenterResourcePoolUsageInventory", "org.zstack.vmware.VCenterResourcePoolUsageInventory"); - put("org.zstack.sdk.VHostAddOn", "org.zstack.kvm.KVMAgentCommands$VHostAddOn"); - put("org.zstack.sdk.VRouterRouteEntryAO", "org.zstack.vrouterRoute.VRouterRouteEntryAO"); - put("org.zstack.sdk.VRouterRouteEntryInventory", "org.zstack.vrouterRoute.VRouterRouteEntryInventory"); - put("org.zstack.sdk.VRouterRouteEntryType", "org.zstack.vrouterRoute.VRouterRouteEntryType"); - put("org.zstack.sdk.VRouterRouteTableInventory", "org.zstack.vrouterRoute.VRouterRouteTableInventory"); - put("org.zstack.sdk.VdiPortInfo", "org.zstack.header.vm.VdiPortInfo"); - put("org.zstack.sdk.VipBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails"); - put("org.zstack.sdk.VipInventory", "org.zstack.network.service.vip.VipInventory"); - put("org.zstack.sdk.VipNetworkServicesRefInventory", "org.zstack.network.service.vip.VipNetworkServicesRefInventory"); - put("org.zstack.sdk.VipPortRangeInventory", "org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory"); - put("org.zstack.sdk.VipQosInventory", "org.zstack.header.vipQos.VipQosInventory"); - put("org.zstack.sdk.VirtualBorderRouterInventory", "org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory"); - put("org.zstack.sdk.VirtualRouterOfferingInventory", "org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory"); - put("org.zstack.sdk.VirtualRouterSoftwareVersionInventory", "org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory"); - put("org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory"); - put("org.zstack.sdk.VirtualRouterVmInventory", "org.zstack.network.service.virtualrouter.VirtualRouterVmInventory"); - put("org.zstack.sdk.VirtualizerInfo", "org.zstack.header.vm.VirtualizerInfo"); - put("org.zstack.sdk.VirtualizerInfoInventory", "org.zstack.header.vm.VirtualizerInfoInventory"); - put("org.zstack.sdk.VmCPUBillingInventory", "org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory"); - put("org.zstack.sdk.VmCPUSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails"); - put("org.zstack.sdk.VmCapabilities", "org.zstack.header.vm.VmCapabilities"); - put("org.zstack.sdk.VmCdRomInventory", "org.zstack.header.vm.cdrom.VmCdRomInventory"); - put("org.zstack.sdk.VmExternalBackupInfo", "org.zstack.externalbackup.VmExternalBackupInfo"); - put("org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory"); - put("org.zstack.sdk.VmInstanceDeviceAddressGroupInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory"); - put("org.zstack.sdk.VmInstanceInventory", "org.zstack.header.vm.VmInstanceInventory"); - put("org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory"); - put("org.zstack.sdk.VmInstancePciDeviceSpecRefInventory", "org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory"); - put("org.zstack.sdk.VmMemoryBillingInventory", "org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory"); - put("org.zstack.sdk.VmMemorySpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails"); - put("org.zstack.sdk.VmModelMountInventory", "org.zstack.ai.entity.VmModelMountInventory"); - put("org.zstack.sdk.VmModelMountStatus", "org.zstack.ai.entity.VmModelMountStatus"); - put("org.zstack.sdk.VmNicBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails"); - put("org.zstack.sdk.VmNicInventory", "org.zstack.header.vm.VmNicInventory"); - put("org.zstack.sdk.VmNicSecurityGroupRefInventory", "org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory"); - put("org.zstack.sdk.VmNicSecurityPolicyInventory", "org.zstack.network.securitygroup.VmNicSecurityPolicyInventory"); - put("org.zstack.sdk.VmPriorityConfigInventory", "org.zstack.header.vm.VmPriorityConfigInventory"); - put("org.zstack.sdk.VmPriorityLevel", "org.zstack.header.vm.VmPriorityLevel"); - put("org.zstack.sdk.VmSchedHistoryInventory", "org.zstack.header.vm.VmSchedHistoryInventory"); - put("org.zstack.sdk.VmSchedulingRuleExecuteState", "org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState"); - put("org.zstack.sdk.VmSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory"); - put("org.zstack.sdk.VmSchedulingRuleInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleInventory"); - put("org.zstack.sdk.VmSpending", "org.zstack.billing.spendingcalculator.vm.VmSpending"); - put("org.zstack.sdk.VmSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmSpendingDetails"); - put("org.zstack.sdk.VmVdpaNicInventory", "org.zstack.header.vdpa.VmVdpaNicInventory"); - put("org.zstack.sdk.VmVfNicInventory", "org.zstack.header.sriov.VmVfNicInventory"); - put("org.zstack.sdk.VniRangeInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory"); - put("org.zstack.sdk.VolumeBackupInventory", "org.zstack.header.storage.backup.VolumeBackupInventory"); - put("org.zstack.sdk.VolumeBackupStorageRefInventory", "org.zstack.header.storage.backup.VolumeBackupStorageRefInventory"); - put("org.zstack.sdk.VolumeCbtBackupInfo", "org.zstack.header.cbt.VolumeCbtBackupInfo"); - put("org.zstack.sdk.VolumeExternalBackupInfo", "org.zstack.externalbackup.VolumeExternalBackupInfo"); - put("org.zstack.sdk.VolumeFormatReplyStruct", "org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct"); - put("org.zstack.sdk.VolumeInventory", "org.zstack.header.volume.VolumeInventory"); - put("org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory"); - put("org.zstack.sdk.VolumeSnapshotGroupAvailability", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability"); - put("org.zstack.sdk.VolumeSnapshotGroupInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory"); - put("org.zstack.sdk.VolumeSnapshotGroupRefInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory"); - put("org.zstack.sdk.VolumeSnapshotInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotInventory"); - put("org.zstack.sdk.VolumeSnapshotReferenceTreeInventory", "org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory"); - put("org.zstack.sdk.VolumeSnapshotTreeInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory"); - put("org.zstack.sdk.VolumeTO", "org.zstack.kvm.VolumeTO"); - put("org.zstack.sdk.VpcFirewallInventory", "org.zstack.vpcfirewall.entity.VpcFirewallInventory"); - put("org.zstack.sdk.VpcFirewallIpSetTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory"); - put("org.zstack.sdk.VpcFirewallRuleInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory"); - put("org.zstack.sdk.VpcFirewallRuleSetInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory"); - put("org.zstack.sdk.VpcFirewallRuleSetL3RefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory"); - put("org.zstack.sdk.VpcFirewallRuleTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory"); - put("org.zstack.sdk.VpcFirewallVRouterRefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory"); - put("org.zstack.sdk.VpcHaGroupApplianceVmRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory"); - put("org.zstack.sdk.VpcHaGroupInventory", "org.zstack.header.vpc.ha.VpcHaGroupInventory"); - put("org.zstack.sdk.VpcHaGroupMonitorIpInventory", "org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory"); - put("org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory"); - put("org.zstack.sdk.VpcHaGroupVipRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory"); - put("org.zstack.sdk.VpcRouterDnsInventory", "org.zstack.header.vpc.VpcRouterDnsInventory"); - put("org.zstack.sdk.VpcRouterVmInventory", "org.zstack.header.vpc.VpcRouterVmInventory"); - put("org.zstack.sdk.VpcSharedQosInventory", "org.zstack.header.vipQos.VpcSharedQosInventory"); - put("org.zstack.sdk.VpcSharedQosRefVipInventory", "org.zstack.header.vipQos.VpcSharedQosRefVipInventory"); - put("org.zstack.sdk.VpcSnatStateInventory", "org.zstack.header.vpc.VpcSnatStateInventory"); - put("org.zstack.sdk.VpcUserVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory"); - put("org.zstack.sdk.VpcVirtualRouteEntryInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory"); - put("org.zstack.sdk.VpcVirtualRouterInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory"); - put("org.zstack.sdk.VpcVpnConnectionInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory"); - put("org.zstack.sdk.VpcVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory"); - put("org.zstack.sdk.VpcVpnIkeConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory"); - put("org.zstack.sdk.VpcVpnIkeConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct"); - put("org.zstack.sdk.VpcVpnIpSecConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory"); - put("org.zstack.sdk.VpcVpnIpSecConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct"); - put("org.zstack.sdk.VtepInventory", "org.zstack.network.l2.vxlan.vtep.VtepInventory"); - put("org.zstack.sdk.WebhookInventory", "org.zstack.header.core.webhooks.WebhookInventory"); - put("org.zstack.sdk.XDragonHostInventory", "org.zstack.xdragon.XDragonHostInventory"); - put("org.zstack.sdk.XmlHookInventory", "org.zstack.kvm.xmlhook.XmlHookInventory"); - put("org.zstack.sdk.XmlHookType", "org.zstack.kvm.xmlhook.XmlHookType"); - put("org.zstack.sdk.XskyBlockVolumeInventory", "org.zstack.header.volume.block.XskyBlockVolumeInventory"); - put("org.zstack.sdk.YuccaBareMetal2DpuChassisConfig", "org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig"); - put("org.zstack.sdk.ZBoxBackupInventory", "org.zstack.externalbackup.zbox.ZBoxBackupInventory"); - put("org.zstack.sdk.ZBoxBackupStorageBackupInfo", "org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo"); - put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory"); - put("org.zstack.sdk.ZBoxLocationRefInventory", "org.zstack.zbox.ZBoxLocationRefInventory"); - put("org.zstack.sdk.ZBoxState", "org.zstack.zbox.ZBoxState"); - put("org.zstack.sdk.ZBoxStatus", "org.zstack.zbox.ZBoxStatus"); - put("org.zstack.sdk.ZBoxVmBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVmBackupInfo"); - put("org.zstack.sdk.ZBoxVolumeBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo"); - put("org.zstack.sdk.ZQLQueryReturn", "org.zstack.zql.ZQLQueryReturn"); - put("org.zstack.sdk.ZakuImageInventory", "org.zstack.container.entity.ZakuImageInventory"); - put("org.zstack.sdk.ZdfsInventory", "org.zstack.header.zdfs.ZdfsInventory"); - put("org.zstack.sdk.ZdfsService", "org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService"); - put("org.zstack.sdk.ZdfsStorageInventory", "org.zstack.header.zdfs.ZdfsStorageInventory"); - put("org.zstack.sdk.ZoneInventory", "org.zstack.header.zone.ZoneInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupInventory", "org.zstack.header.storage.database.backup.DatabaseBackupInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory", "org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory"); - put("org.zstack.sdk.databasebackup.DatabaseBackupStruct", "org.zstack.header.storage.database.backup.DatabaseBackupStruct"); - put("org.zstack.sdk.databasebackup.DatabaseType", "org.zstack.header.storage.database.backup.DatabaseType"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory"); - put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory"); - put("org.zstack.sdk.iam2.api.APIPermissionStruct", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct"); - put("org.zstack.sdk.iam2.api.Attribute", "org.zstack.iam2.api.Attribute"); - put("org.zstack.sdk.iam2.api.ErrorResult", "org.zstack.iam2.api.ErrorResult"); - put("org.zstack.sdk.iam2.api.Permission", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission"); - put("org.zstack.sdk.iam2.container.ContainerClusterInventory", "org.zstack.iam2.container.ContainerClusterInventory"); - put("org.zstack.sdk.iam2.entity.AttributeType", "org.zstack.iam2.entity.AttributeType"); - put("org.zstack.sdk.iam2.entity.IAM2AttributeInventory", "org.zstack.iam2.entity.IAM2AttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.iam2.entity.IAM2OrganizationAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationInventory", "org.zstack.iam2.entity.IAM2OrganizationInventory"); - put("org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.iam2.entity.IAM2ProjectAccountRefInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.iam2.entity.IAM2ProjectAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectInventory", "org.zstack.iam2.entity.IAM2ProjectInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.iam2.entity.IAM2ProjectRoleInventory"); - put("org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.iam2.entity.IAM2ProjectTemplateInventory"); - put("org.zstack.sdk.iam2.entity.IAM2State", "org.zstack.iam2.entity.IAM2State"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupInventory"); - put("org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory", "org.zstack.iam2.entity.IAM2VirtualIDInventory"); - put("org.zstack.sdk.iam2.entity.OrganizationType", "org.zstack.iam2.entity.OrganizationType"); - put("org.zstack.sdk.iam2.entity.ProjectState", "org.zstack.iam2.entity.ProjectState"); - put("org.zstack.sdk.iam2.entity.StateEvent", "org.zstack.iam2.entity.StateEvent"); - put("org.zstack.sdk.iam2.project.template.Template", "org.zstack.iam2.project.template.Template"); - put("org.zstack.sdk.identity.role.RoleInventory", "org.zstack.header.identity.role.RoleInventory"); - put("org.zstack.sdk.identity.role.RolePolicyRefInventory", "org.zstack.header.identity.role.RolePolicyRefInventory"); - put("org.zstack.sdk.identity.role.RolePolicyStatementInventory", "org.zstack.header.identity.role.RolePolicyStatementInventory"); - put("org.zstack.sdk.identity.role.RoleState", "org.zstack.header.identity.role.RoleState"); - put("org.zstack.sdk.identity.role.RoleStateEvent", "org.zstack.header.identity.role.RoleStateEvent"); - put("org.zstack.sdk.identity.role.RoleType", "org.zstack.header.identity.role.RoleType"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.license.header.server.LicenseAuthorizedCapacityInventory"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); - put("org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.license.header.server.LicenseAuthorizedNodeInventory"); - put("org.zstack.sdk.license.header.server.LicenseUsageDetailView", "org.zstack.license.header.server.LicenseUsageDetailView"); - put("org.zstack.sdk.license.header.server.LicenseUsageView", "org.zstack.license.header.server.LicenseUsageView"); - put("org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView"); - put("org.zstack.sdk.network.zns.L2GeneveNetworkInventory", "org.zstack.network.zns.L2GeneveNetworkInventory"); - put("org.zstack.sdk.network.zns.ZnsControllerInventory", "org.zstack.network.zns.ZnsControllerInventory"); - put("org.zstack.sdk.network.zns.ZnsTenantInventory", "org.zstack.network.zns.ZnsTenantInventory"); - put("org.zstack.sdk.network.zns.ZnsTenantRouterInventory", "org.zstack.network.zns.ZnsTenantRouterInventory"); - put("org.zstack.sdk.network.zns.ZnsTransportZoneInventory", "org.zstack.network.zns.ZnsTransportZoneInventory"); - put("org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sns.SNSAliyunSmsEndpointInventory"); - put("org.zstack.sdk.sns.SNSApplicationEndpointInventory", "org.zstack.sns.SNSApplicationEndpointInventory"); - put("org.zstack.sdk.sns.SNSApplicationPlatformInventory", "org.zstack.sns.SNSApplicationPlatformInventory"); - put("org.zstack.sdk.sns.SNSSmsReceiverInventory", "org.zstack.sns.SNSSmsReceiverInventory"); - put("org.zstack.sdk.sns.SNSSubscriberInventory", "org.zstack.sns.SNSSubscriberInventory"); - put("org.zstack.sdk.sns.SNSTopicInventory", "org.zstack.sns.SNSTopicInventory"); - put("org.zstack.sdk.sns.SmsReceiverType", "org.zstack.sns.SmsReceiverType"); - put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); - put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sns.platform.email.SNSEmailAddressInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sns.platform.email.SNSEmailEndpointInventory"); - put("org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sns.platform.email.SNSEmailPlatformInventory"); - put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory"); - put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory"); - put("org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sns.platform.http.SNSHttpEndpointInventory"); - put("org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); - put("org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sns.platform.plugin.SNSPluginEndpointInventory"); - put("org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory"); - put("org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); - put("org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); - put("org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory"); - put("org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sns.platform.wecom.SNSWeComEndpointInventory"); - put("org.zstack.sdk.ticket.entity.ArchiveTicketInventory", "org.zstack.ticket.entity.ArchiveTicketInventory"); - put("org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory"); - put("org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory", "org.zstack.ticket.entity.TicketFlowCollectionInventory"); - put("org.zstack.sdk.ticket.entity.TicketFlowInventory", "org.zstack.ticket.entity.TicketFlowInventory"); - put("org.zstack.sdk.ticket.entity.TicketInventory", "org.zstack.ticket.entity.TicketInventory"); - put("org.zstack.sdk.ticket.entity.TicketRequest", "org.zstack.ticket.entity.TicketRequest"); - put("org.zstack.sdk.ticket.entity.TicketStatus", "org.zstack.ticket.entity.TicketStatus"); - put("org.zstack.sdk.ticket.entity.TicketStatusEvent", "org.zstack.ticket.entity.TicketStatusEvent"); - put("org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory", "org.zstack.ticket.entity.TicketStatusHistoryInventory"); - put("org.zstack.sdk.ticket.entity.TicketTypeInventory", "org.zstack.ticket.entity.TicketTypeInventory"); - put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); - put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory"); - put("org.zstack.sdk.zwatch.alarm.ActionParam", "org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam"); - put("org.zstack.sdk.zwatch.alarm.AlarmActionInventory", "org.zstack.zwatch.alarm.AlarmActionInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory", "org.zstack.zwatch.alarm.AlarmDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmInventory", "org.zstack.zwatch.alarm.AlarmInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmLabelInventory", "org.zstack.zwatch.alarm.AlarmLabelInventory"); - put("org.zstack.sdk.zwatch.alarm.AlarmState", "org.zstack.zwatch.alarm.AlarmState"); - put("org.zstack.sdk.zwatch.alarm.AlarmStatus", "org.zstack.zwatch.alarm.AlarmStatus"); - put("org.zstack.sdk.zwatch.alarm.AlertDataAckInventory", "org.zstack.zwatch.alarm.AlertDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.EventDataAckInventory", "org.zstack.zwatch.alarm.EventDataAckInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.zwatch.alarm.EventSubscriptionActionInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory", "org.zstack.zwatch.alarm.EventSubscriptionInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.zwatch.alarm.EventSubscriptionLabelInventory"); - put("org.zstack.sdk.zwatch.alarm.EventSubscriptionState", "org.zstack.zwatch.alarm.EventSubscriptionState"); - put("org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); - put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); - put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); - put("org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory"); - put("org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); - put("org.zstack.sdk.zwatch.api.EventStruct", "org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct"); - put("org.zstack.sdk.zwatch.api.Histogram", "org.zstack.zwatch.api.Histogram"); - put("org.zstack.sdk.zwatch.api.MetricStruct", "org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct"); - put("org.zstack.sdk.zwatch.api.Tag", "org.zstack.zwatch.api.Histogram$Tag"); - put("org.zstack.sdk.zwatch.datatype.AlarmData", "org.zstack.zwatch.datatype.AlarmData"); - put("org.zstack.sdk.zwatch.datatype.AlarmDataV1", "org.zstack.zwatch.datatype.AlarmDataV1"); - put("org.zstack.sdk.zwatch.datatype.AlarmDataV2", "org.zstack.zwatch.datatype.AlarmDataV2"); - put("org.zstack.sdk.zwatch.datatype.AuditType", "org.zstack.zwatch.datatype.AuditType"); - put("org.zstack.sdk.zwatch.datatype.Datapoint", "org.zstack.zwatch.datatype.Datapoint"); - put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EmergencyLevel"); - put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EventFamily$EmergencyLevel"); - put("org.zstack.sdk.zwatch.datatype.EventData", "org.zstack.zwatch.datatype.EventData"); - put("org.zstack.sdk.zwatch.datatype.Label", "org.zstack.zwatch.datatype.Label"); - put("org.zstack.sdk.zwatch.datatype.MetricDatum", "org.zstack.zwatch.datatype.MetricDatum"); - put("org.zstack.sdk.zwatch.datatype.Operator", "org.zstack.zwatch.datatype.Label$Operator"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventData", "org.zstack.zwatch.influxdb.InfluxEventData"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1", "org.zstack.zwatch.influxdb.InfluxEventDataV1"); - put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2", "org.zstack.zwatch.influxdb.InfluxEventDataV2"); - put("org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory"); - put("org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.zwatch.metricpusher.MetricTemplateInventory"); - put("org.zstack.sdk.zwatch.metricpusher.ReceiverState", "org.zstack.zwatch.metricpusher.ReceiverState"); - put("org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.zwatch.migratedb.AlarmRecordsInventory"); - put("org.zstack.sdk.zwatch.migratedb.AuditsInventory", "org.zstack.zwatch.migratedb.AuditsInventory"); - put("org.zstack.sdk.zwatch.migratedb.EventRecordsInventory", "org.zstack.zwatch.migratedb.EventRecordsInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupState"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); - put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.zwatch.resnotify.ResNotifySubscriptionState"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifyType", "org.zstack.zwatch.resnotify.ResNotifyType"); - put("org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory"); - put("org.zstack.sdk.zwatch.ruleengine.ComparisonOperator", "org.zstack.zwatch.ruleengine.ComparisonOperator"); - put("org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); - put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); - put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); + put("org.zstack.sdk.AccessControlListEntryInventory", "org.zstack.header.acl.AccessControlListEntryInventory"); + put("org.zstack.sdk.AccessControlListInventory", "org.zstack.header.acl.AccessControlListInventory"); + put("org.zstack.sdk.AccessControlRuleInventory", "org.zstack.loginControl.entity.AccessControlRuleInventory"); + put("org.zstack.sdk.AccessKeyInventory", "org.zstack.accessKey.AccessKeyInventory"); + put("org.zstack.sdk.AccessKeyState", "org.zstack.accessKey.AccessKeyState"); + put("org.zstack.sdk.AccessKeyType", "org.zstack.accessKey.AccessKeyType"); + put("org.zstack.sdk.AccessPathInfo", "org.zstack.header.volume.block.AccessPathInfo"); + put("org.zstack.sdk.AccountInventory", "org.zstack.header.identity.AccountInventory"); + put("org.zstack.sdk.AccountPriceTableRefInventory", "org.zstack.billing.table.AccountPriceTableRefInventory"); + put("org.zstack.sdk.AccountResourceRefInventory", "org.zstack.header.identity.AccountResourceRefInventory"); + put("org.zstack.sdk.ActionStruct", "org.zstack.cloudformation.template.struct.ActionStruct"); + put("org.zstack.sdk.ActionType", "org.zstack.vpcfirewall.entity.ActionType"); + put("org.zstack.sdk.AddHostFromFileResult", "org.zstack.header.host.AddHostFromFileResult"); + put("org.zstack.sdk.AddingNewVmRuleInventory", "org.zstack.autoscaling.group.rule.AddingNewVmRuleInventory"); + put("org.zstack.sdk.AdditionalLicenseInfo", "org.zstack.license.AdditionalLicenseInfo"); + put("org.zstack.sdk.AdditionalLicenseType", "org.zstack.license.AdditionalLicenseType"); + put("org.zstack.sdk.AddressPoolInventory", "org.zstack.header.network.l3.AddressPoolInventory"); + put("org.zstack.sdk.AffinityGroupInventory", "org.zstack.header.affinitygroup.AffinityGroupInventory"); + put("org.zstack.sdk.AffinityGroupUsageInventory", "org.zstack.header.affinitygroup.AffinityGroupUsageInventory"); + put("org.zstack.sdk.AgentVersionInventory", "org.zstack.core.upgrade.AgentVersionInventory"); + put("org.zstack.sdk.AiSiNoSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.aisino.AiSiNoSecretResourcePoolInventory"); + put("org.zstack.sdk.AlertInventory", "org.zstack.monitoring.AlertInventory"); + put("org.zstack.sdk.AliyunDiskInventory", "org.zstack.header.aliyun.storage.disk.AliyunDiskInventory"); + put("org.zstack.sdk.AliyunEbsBackupStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsBackupStorageInventory"); + put("org.zstack.sdk.AliyunEbsPrimaryStorageInventory", "org.zstack.header.aliyun.ebs.AliyunEbsPrimaryStorageInventory"); + put("org.zstack.sdk.AliyunErrorCode", "org.zstack.header.aliyun.errorCode.AliyunErrorCode"); + put("org.zstack.sdk.AliyunNasAccessGroupInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessGroupInventory"); + put("org.zstack.sdk.AliyunNasAccessGroupProperty", "org.zstack.aliyun.nas.message.AliyunNasAccessGroupProperty"); + put("org.zstack.sdk.AliyunNasAccessRuleInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasAccessRuleInventory"); + put("org.zstack.sdk.AliyunNasFileSystemInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasFileSystemInventory"); + put("org.zstack.sdk.AliyunNasFileSystemProperty", "org.zstack.aliyun.nas.message.AliyunNasFileSystemProperty"); + put("org.zstack.sdk.AliyunNasMountTargetInventory", "org.zstack.aliyun.nas.filesystem.AliyunNasMountTargetInventory"); + put("org.zstack.sdk.AliyunNasMountTargetProperty", "org.zstack.aliyun.nas.message.AliyunNasMountTargetProperty"); + put("org.zstack.sdk.AliyunOssException", "org.zstack.header.aliyun.AliyunOssException"); + put("org.zstack.sdk.AliyunPanguPartitionInventory", "org.zstack.aliyun.pangu.AliyunPanguPartitionInventory"); + put("org.zstack.sdk.AliyunProxyVSwitchInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVSwitchInventory"); + put("org.zstack.sdk.AliyunProxyVpcInventory", "org.zstack.aliyunproxy.vpc.AliyunProxyVpcInventory"); + put("org.zstack.sdk.AliyunRouterInterfaceInventory", "org.zstack.header.aliyun.network.connection.AliyunRouterInterfaceInventory"); + put("org.zstack.sdk.AliyunSnapshotInventory", "org.zstack.header.aliyun.storage.snapshot.AliyunSnapshotInventory"); + put("org.zstack.sdk.AppBuildSystemInventory", "org.zstack.header.buildsystem.AppBuildSystemInventory"); + put("org.zstack.sdk.AppBuildSystemZoneRefInventory", "org.zstack.header.buildsystem.AppBuildSystemZoneRefInventory"); + put("org.zstack.sdk.ApplianceVmInventory", "org.zstack.appliancevm.ApplianceVmInventory"); + put("org.zstack.sdk.ApplicationDevelopmentServiceInventory", "org.zstack.ai.entity.ApplicationDevelopmentServiceInventory"); + put("org.zstack.sdk.ArchitectureImageMapping", "org.zstack.ai.message.ArchitectureImageMapping"); + put("org.zstack.sdk.AttachTagResult", "org.zstack.tag2.AttachTagResult"); + put("org.zstack.sdk.AttributePurpose", "org.zstack.sso.header.AttributePurpose"); + put("org.zstack.sdk.AuditData", "org.zstack.header.zwatch.AuditData"); + put("org.zstack.sdk.AuditDataV1", "org.zstack.header.zwatch.AuditDataV1"); + put("org.zstack.sdk.AuditDataV2", "org.zstack.header.zwatch.AuditDataV2"); + put("org.zstack.sdk.AutoScalingGroupActivityInventory", "org.zstack.autoscaling.group.activity.AutoScalingGroupActivityInventory"); + put("org.zstack.sdk.AutoScalingGroupInstanceInventory", "org.zstack.autoscaling.group.instance.AutoScalingGroupInstanceInventory"); + put("org.zstack.sdk.AutoScalingGroupInventory", "org.zstack.autoscaling.group.AutoScalingGroupInventory"); + put("org.zstack.sdk.AutoScalingRuleAlarmTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleAlarmTriggerInventory"); + put("org.zstack.sdk.AutoScalingRuleInventory", "org.zstack.autoscaling.group.rule.AutoScalingRuleInventory"); + put("org.zstack.sdk.AutoScalingRuleSchedulerJobTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleSchedulerJobTriggerInventory"); + put("org.zstack.sdk.AutoScalingRuleState", "org.zstack.autoscaling.group.rule.AutoScalingRuleState"); + put("org.zstack.sdk.AutoScalingRuleStatus", "org.zstack.autoscaling.group.rule.AutoScalingRuleStatus"); + put("org.zstack.sdk.AutoScalingRuleTriggerInventory", "org.zstack.autoscaling.group.rule.trigger.AutoScalingRuleTriggerInventory"); + put("org.zstack.sdk.AutoScalingTemplateInventory", "org.zstack.autoscaling.template.AutoScalingTemplateInventory"); + put("org.zstack.sdk.AutoScalingVmTemplateInventory", "org.zstack.autoscaling.template.AutoScalingVmTemplateInventory"); + put("org.zstack.sdk.BackupMode", "org.zstack.header.storage.backup.BackupMode"); + put("org.zstack.sdk.BackupStorageExternalBackupInfo", "org.zstack.externalbackup.BackupStorageExternalBackupInfo"); + put("org.zstack.sdk.BackupStorageInventory", "org.zstack.header.storage.backup.BackupStorageInventory"); + put("org.zstack.sdk.BareMetal2BillingInventory", "org.zstack.billing.generator.baremetal2.BareMetal2BillingInventory"); + put("org.zstack.sdk.BareMetal2BondingInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingInventory"); + put("org.zstack.sdk.BareMetal2BondingNicRefInventory", "org.zstack.baremetal2.chassis.BareMetal2BondingNicRefInventory"); + put("org.zstack.sdk.BareMetal2ChassisDiskInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisDiskInventory"); + put("org.zstack.sdk.BareMetal2ChassisGpuDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisGpuDeviceInventory"); + put("org.zstack.sdk.BareMetal2ChassisInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisInventory"); + put("org.zstack.sdk.BareMetal2ChassisNicInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisNicInventory"); + put("org.zstack.sdk.BareMetal2ChassisOfferingInventory", "org.zstack.baremetal2.configuration.BareMetal2ChassisOfferingInventory"); + put("org.zstack.sdk.BareMetal2ChassisPciDeviceInventory", "org.zstack.baremetal2.chassis.BareMetal2ChassisPciDeviceInventory"); + put("org.zstack.sdk.BareMetal2DpuChassisConfig", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisConfig"); + put("org.zstack.sdk.BareMetal2DpuChassisInventory", "org.zstack.baremetal2.chassis.dpu.BareMetal2DpuChassisInventory"); + put("org.zstack.sdk.BareMetal2DpuHostInventory", "org.zstack.baremetal2.dpu.BareMetal2DpuHostInventory"); + put("org.zstack.sdk.BareMetal2GatewayInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayInventory"); + put("org.zstack.sdk.BareMetal2GatewayProvisionNicInventory", "org.zstack.baremetal2.gateway.BareMetal2GatewayProvisionNicInventory"); + put("org.zstack.sdk.BareMetal2InstanceInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceInventory"); + put("org.zstack.sdk.BareMetal2InstanceProvisionNicInventory", "org.zstack.baremetal2.instance.BareMetal2InstanceProvisionNicInventory"); + put("org.zstack.sdk.BareMetal2IpmiChassisInventory", "org.zstack.baremetal2.chassis.ipmi.BareMetal2IpmiChassisInventory"); + put("org.zstack.sdk.BareMetal2ProvisionNetworkInventory", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkInventory"); + put("org.zstack.sdk.BareMetal2ProvisionNetworkIpCapacity", "org.zstack.baremetal2.provisionnetwork.BareMetal2ProvisionNetworkIpCapacity"); + put("org.zstack.sdk.BareMetal2Spending", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2Spending"); + put("org.zstack.sdk.BareMetal2SpendingDetails", "org.zstack.billing.spendingcalculator.baremetal2.BareMetal2SpendingDetails"); + put("org.zstack.sdk.BaremetalBondingInventory", "org.zstack.header.baremetal.network.BaremetalBondingInventory"); + put("org.zstack.sdk.BaremetalChassisInventory", "org.zstack.header.baremetal.chassis.BaremetalChassisInventory"); + put("org.zstack.sdk.BaremetalException", "org.zstack.header.baremetal.BaremetalException"); + put("org.zstack.sdk.BaremetalHardwareInfoInventory", "org.zstack.header.baremetal.chassis.BaremetalHardwareInfoInventory"); + put("org.zstack.sdk.BaremetalInstanceInventory", "org.zstack.header.baremetal.instance.BaremetalInstanceInventory"); + put("org.zstack.sdk.BaremetalNicInventory", "org.zstack.header.baremetal.network.BaremetalNicInventory"); + put("org.zstack.sdk.BaremetalPxeServerInventory", "org.zstack.header.baremetal.pxeserver.BaremetalPxeServerInventory"); + put("org.zstack.sdk.BaremetalVlanNicInventory", "org.zstack.header.baremetal.network.BaremetalVlanNicInventory"); + put("org.zstack.sdk.BaseVirtualDeviceTO", "org.zstack.kvm.BaseVirtualDeviceTO"); + put("org.zstack.sdk.BatchDeleteVolumeSnapshotStruct", "org.zstack.header.storage.snapshot.BatchDeleteVolumeSnapshotStruct"); + put("org.zstack.sdk.BillingInventory", "org.zstack.billing.generator.BillingInventory"); + put("org.zstack.sdk.BlockPrimaryStorageInventory", "org.zstack.storage.primary.block.BlockPrimaryStorageInventory"); + put("org.zstack.sdk.BlockVolumeInventory", "org.zstack.header.volume.block.BlockVolumeInventory"); + put("org.zstack.sdk.BuildAppExportHistoryInventory", "org.zstack.header.buildapp.BuildAppExportHistoryInventory"); + put("org.zstack.sdk.BuildApplicationInventory", "org.zstack.header.buildapp.BuildApplicationInventory"); + put("org.zstack.sdk.CCSCertificateInventory", "org.zstack.crypto.ccs.CCSCertificateInventory"); + put("org.zstack.sdk.CCSCertificateUserRefInventory", "org.zstack.crypto.ccs.CCSCertificateUserRefInventory"); + put("org.zstack.sdk.CCSCertificateUserState", "org.zstack.crypto.ccs.CCSCertificateUserState"); + put("org.zstack.sdk.CSPSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.csp.CSPSecretResourcePoolInventory"); + put("org.zstack.sdk.CasClientInventory", "org.zstack.sso.header.CasClientInventory"); + put("org.zstack.sdk.CasState", "org.zstack.sso.header.CasState"); + put("org.zstack.sdk.CbtTaskInventory", "org.zstack.header.cbt.CbtTaskInventory"); + put("org.zstack.sdk.CbtTaskResourceRefInventory", "org.zstack.header.cbt.CbtTaskResourceRefInventory"); + put("org.zstack.sdk.CbtTaskStatus", "org.zstack.header.cbt.CbtTaskStatus"); + put("org.zstack.sdk.CdRomTO", "org.zstack.kvm.KVMAgentCommands$CdRomTO"); + put("org.zstack.sdk.CdpPolicyInventory", "org.zstack.header.storage.cdp.CdpPolicyInventory"); + put("org.zstack.sdk.CdpPolicyState", "org.zstack.header.storage.cdp.CdpPolicyState"); + put("org.zstack.sdk.CdpTaskInventory", "org.zstack.header.storage.cdp.CdpTaskInventory"); + put("org.zstack.sdk.CdpTaskResourceRefInventory", "org.zstack.header.storage.cdp.CdpTaskResourceRefInventory"); + put("org.zstack.sdk.CdpTaskState", "org.zstack.header.storage.cdp.CdpTaskState"); + put("org.zstack.sdk.CdpTaskStatus", "org.zstack.header.storage.cdp.CdpTaskStatus"); + put("org.zstack.sdk.CdpTaskType", "org.zstack.header.storage.cdp.CdpTaskType"); + put("org.zstack.sdk.CephBackupStorageInventory", "org.zstack.storage.ceph.backup.CephBackupStorageInventory"); + put("org.zstack.sdk.CephBackupStorageMonInventory", "org.zstack.storage.ceph.backup.CephBackupStorageMonInventory"); + put("org.zstack.sdk.CephOsdGroupInventory", "org.zstack.storage.ceph.primary.CephOsdGroupInventory"); + put("org.zstack.sdk.CephPrimaryStorageInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageInventory"); + put("org.zstack.sdk.CephPrimaryStorageMonInventory", "org.zstack.storage.ceph.primary.CephPrimaryStorageMonInventory"); + put("org.zstack.sdk.CephPrimaryStoragePoolInventory", "org.zstack.storage.ceph.primary.CephPrimaryStoragePoolInventory"); + put("org.zstack.sdk.CertificateInventory", "org.zstack.network.service.lb.CertificateInventory"); + put("org.zstack.sdk.ChainInfo", "org.zstack.header.core.progress.ChainInfo"); + put("org.zstack.sdk.ChronyServerInfo", "org.zstack.zops.ChronyServerInfo"); + put("org.zstack.sdk.ChronyServerInfoPair", "org.zstack.zops.ChronyServerInfoPair"); + put("org.zstack.sdk.CleanTrashResult", "org.zstack.header.core.trash.CleanTrashResult"); + put("org.zstack.sdk.CloneVmInstanceInventory", "org.zstack.header.vm.CloneVmInstanceInventory"); + put("org.zstack.sdk.CloneVmInstanceResults", "org.zstack.header.vm.CloneVmInstanceResults"); + put("org.zstack.sdk.CloudFormationStackEventInventory", "org.zstack.header.cloudformation.CloudFormationStackEventInventory"); + put("org.zstack.sdk.ClusterDRSInventory", "org.zstack.drs.entity.ClusterDRSInventory"); + put("org.zstack.sdk.ClusterInventory", "org.zstack.header.cluster.ClusterInventory"); + put("org.zstack.sdk.ConnectionAccessPointInventory", "org.zstack.header.aliyun.network.connection.ConnectionAccessPointInventory"); + put("org.zstack.sdk.ConnectionRelationShipInventory", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipInventory"); + put("org.zstack.sdk.ConnectionRelationShipProperty", "org.zstack.header.aliyun.network.connection.ConnectionRelationShipProperty"); + put("org.zstack.sdk.ConsoleInventory", "org.zstack.header.console.ConsoleInventory"); + put("org.zstack.sdk.ConsoleProxyAgentInventory", "org.zstack.header.console.ConsoleProxyAgentInventory"); + put("org.zstack.sdk.ContainerBackupStorageInventory", "org.zstack.container.ContainerBackupStorageInventory"); + put("org.zstack.sdk.ContainerImageInventory", "org.zstack.container.entity.ContainerImageInventory"); + put("org.zstack.sdk.ContainerImageTagInventory", "org.zstack.container.entity.ContainerImageTagInventory"); + put("org.zstack.sdk.ContainerManagementEndpointInventory", "org.zstack.container.entity.ContainerManagementEndpointInventory"); + put("org.zstack.sdk.ContainerUsage", "org.zstack.container.ContainerUsage"); + put("org.zstack.sdk.ControlStrategy", "org.zstack.loginControl.entity.ControlStrategy"); + put("org.zstack.sdk.CpuArchitecture", "org.zstack.header.host.CpuArchitecture"); + put("org.zstack.sdk.CpuMemoryCapacityData", "org.zstack.header.allocator.datatypes.CpuMemoryCapacityData"); + put("org.zstack.sdk.CreateDataVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateDataVolumeTemplateFromVolumeSnapshotEvent$Failure"); + put("org.zstack.sdk.CreateRootVolumeTemplateFromVolumeSnapshotFailure", "org.zstack.header.image.APICreateRootVolumeTemplateFromVolumeSnapshotEvent$Failure"); + put("org.zstack.sdk.DGpuDeviceInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuDeviceInventory"); + put("org.zstack.sdk.DGpuProfileInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuProfileInventory"); + put("org.zstack.sdk.DGpuSpecStatsInventory", "org.zstack.pciDevice.gpu.dgpu.DGpuSpecStatsInventory"); + put("org.zstack.sdk.DGpuStatus", "org.zstack.pciDevice.gpu.dgpu.DGpuStatus"); + put("org.zstack.sdk.DRSAdviceInventory", "org.zstack.drs.entity.DRSAdviceInventory"); + put("org.zstack.sdk.DRSVmMigrationActivityInventory", "org.zstack.drs.entity.DRSVmMigrationActivityInventory"); + put("org.zstack.sdk.DataCenterInventory", "org.zstack.header.datacenter.DataCenterInventory"); + put("org.zstack.sdk.DataCenterProperty", "org.zstack.header.datacenter.DataCenterProperty"); + put("org.zstack.sdk.DataVolumeBillingInventory", "org.zstack.billing.generator.volume.data.DataVolumeBillingInventory"); + put("org.zstack.sdk.DataVolumeSpending", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpending"); + put("org.zstack.sdk.DataVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.data.DataVolumeSpendingInventory"); + put("org.zstack.sdk.DatasetInventory", "org.zstack.ai.entity.DatasetInventory"); + put("org.zstack.sdk.DeleteSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.DeleteSnapshotGroupResult"); + put("org.zstack.sdk.DeviceAddress", "org.zstack.header.vm.devices.DeviceAddress"); + put("org.zstack.sdk.DeviceTO", "org.zstack.storage.device.multipath.DeviceTO"); + put("org.zstack.sdk.DirectoryInventory", "org.zstack.directory.DirectoryInventory"); + put("org.zstack.sdk.DiskOfferingInventory", "org.zstack.header.configuration.DiskOfferingInventory"); + put("org.zstack.sdk.ESXHostInventory", "org.zstack.vmware.ESXHostInventory"); + put("org.zstack.sdk.EcsImageInventory", "org.zstack.header.aliyun.image.EcsImageInventory"); + put("org.zstack.sdk.EcsInstanceInventory", "org.zstack.header.aliyun.ecs.EcsInstanceInventory"); + put("org.zstack.sdk.EcsInstanceType", "org.zstack.header.aliyun.ecs.EcsInstanceType"); + put("org.zstack.sdk.EcsSecurityGroupInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupInventory"); + put("org.zstack.sdk.EcsSecurityGroupRuleInventory", "org.zstack.header.aliyun.network.group.EcsSecurityGroupRuleInventory"); + put("org.zstack.sdk.EcsVSwitchInventory", "org.zstack.header.aliyun.network.vpc.EcsVSwitchInventory"); + put("org.zstack.sdk.EcsVpcInventory", "org.zstack.header.aliyun.network.vpc.EcsVpcInventory"); + put("org.zstack.sdk.EipInventory", "org.zstack.network.service.eip.EipInventory"); + put("org.zstack.sdk.ElaborationCategory", "org.zstack.core.errorcode.ElaborationCategory"); + put("org.zstack.sdk.ElaborationCheckResult", "org.zstack.core.errorcode.ElaborationCheckResult"); + put("org.zstack.sdk.ElaborationContent", "org.zstack.core.errorcode.ElaborationContent"); + put("org.zstack.sdk.EmailMediaInventory", "org.zstack.monitoring.media.EmailMediaInventory"); + put("org.zstack.sdk.EmailTriggerActionInventory", "org.zstack.monitoring.actions.EmailTriggerActionInventory"); + put("org.zstack.sdk.ErrorCode", "org.zstack.header.errorcode.ErrorCode"); + put("org.zstack.sdk.ErrorCodeList", "org.zstack.header.errorcode.ErrorCodeList"); + put("org.zstack.sdk.EthernetVfPciDeviceInventory", "org.zstack.header.sriov.EthernetVfPciDeviceInventory"); + put("org.zstack.sdk.EthernetVfStatus", "org.zstack.header.sriov.EthernetVfStatus"); + put("org.zstack.sdk.EventLogInventory", "org.zstack.core.eventlog.EventLogInventory"); + put("org.zstack.sdk.ExponBlockVolumeInventory", "org.zstack.header.volume.block.ExponBlockVolumeInventory"); + put("org.zstack.sdk.ExtendedAttribute", "org.zstack.sso.header.ExtendedAttribute"); + put("org.zstack.sdk.ExternalBackupInventory", "org.zstack.externalbackup.ExternalBackupInventory"); + put("org.zstack.sdk.ExternalBackupState", "org.zstack.externalbackup.ExternalBackupState"); + put("org.zstack.sdk.ExternalBackupStorageInventory", "org.zstack.header.storage.addon.backup.ExternalBackupStorageInventory"); + put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); + put("org.zstack.sdk.ExternalServiceCapabilities", "org.zstack.header.core.external.service.ExternalServiceCapabilities"); + put("org.zstack.sdk.ExternalServiceCapabilitiesBuilder", "org.zstack.core.externalservice.ExternalServiceCapabilitiesBuilder"); + put("org.zstack.sdk.ExternalServiceConfigurationInventory", "org.zstack.header.core.external.service.ExternalServiceConfigurationInventory"); + put("org.zstack.sdk.ExternalServiceInventory", "org.zstack.header.core.external.service.ExternalServiceInventory"); + put("org.zstack.sdk.FaultToleranceVmGroupInventory", "org.zstack.faulttolerance.entity.FaultToleranceVmGroupInventory"); + put("org.zstack.sdk.FcHbaDeviceInventory", "org.zstack.storage.device.hba.FcHbaDeviceInventory"); + put("org.zstack.sdk.FiSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecretResourcePoolInventory"); + put("org.zstack.sdk.FiSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.fiSec.FiSecSecurityMachineInventory"); + put("org.zstack.sdk.FiberChannelLunInventory", "org.zstack.storage.device.fibreChannel.FiberChannelLunInventory"); + put("org.zstack.sdk.FiberChannelStorageInventory", "org.zstack.storage.device.fibreChannel.FiberChannelStorageInventory"); + put("org.zstack.sdk.FirewallRuleState", "org.zstack.vpcfirewall.entity.FirewallRuleState"); + put("org.zstack.sdk.FlkSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecretResourcePoolInventory"); + put("org.zstack.sdk.FlkSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.flkSec.FlkSecSecurityMachineInventory"); + put("org.zstack.sdk.FlowCollectorInventory", "org.zstack.header.flowMeter.FlowCollectorInventory"); + put("org.zstack.sdk.FlowCounter", "org.zstack.header.flowMeter.FlowCounter"); + put("org.zstack.sdk.FlowMeterInventory", "org.zstack.header.flowMeter.FlowMeterInventory"); + put("org.zstack.sdk.FreeIpInventory", "org.zstack.header.network.l3.FreeIpInventory"); + put("org.zstack.sdk.FuncType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$FuncType"); + put("org.zstack.sdk.GarbageCollectorInventory", "org.zstack.core.gc.GarbageCollectorInventory"); + put("org.zstack.sdk.GlobalConfigInventory", "org.zstack.core.config.GlobalConfigInventory"); + put("org.zstack.sdk.GlobalConfigOptions", "org.zstack.core.config.GlobalConfigOptions"); + put("org.zstack.sdk.GlobalConfigTemplateInventory", "org.zstack.templateConfig.GlobalConfigTemplateInventory"); + put("org.zstack.sdk.GpuAllocateStatus", "org.zstack.pciDevice.gpu.GpuAllocateStatus"); + put("org.zstack.sdk.GpuDeviceInventory", "org.zstack.pciDevice.gpu.GpuDeviceInventory"); + put("org.zstack.sdk.GpuDeviceSpecCandidateInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecCandidateInventory"); + put("org.zstack.sdk.GpuDeviceSpecInventory", "org.zstack.pciDevice.gpu.GpuDeviceSpecInventory"); + put("org.zstack.sdk.GpuVendor", "org.zstack.pciDevice.gpu.GpuVendor"); + put("org.zstack.sdk.GuestOsCharacterInventory", "org.zstack.core.config.GuestOsCharacterInventory"); + put("org.zstack.sdk.GuestToolsInventory", "org.zstack.guesttools.GuestToolsInventory"); + put("org.zstack.sdk.GuestToolsStateInventory", "org.zstack.guesttools.GuestToolsStateInventory"); + put("org.zstack.sdk.GuestVmScriptExecutedRecordDetailInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordDetailInventory"); + put("org.zstack.sdk.GuestVmScriptExecutedRecordInventory", "org.zstack.guesttools.GuestVmScriptExecutedRecordInventory"); + put("org.zstack.sdk.GuestVmScriptInventory", "org.zstack.guesttools.GuestVmScriptInventory"); + put("org.zstack.sdk.H3cSdnControllerTenantInventory", "org.zstack.sdnController.header.H3cSdnControllerTenantInventory"); + put("org.zstack.sdk.HaNetworkGroupInventory", "org.zstack.ha.HaNetworkGroupInventory"); + put("org.zstack.sdk.HaStrategyConditionInventory", "org.zstack.ha.HaStrategyConditionInventory"); + put("org.zstack.sdk.HaiTaiSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.haitai.HaiTaiSecretResourcePoolInventory"); + put("org.zstack.sdk.HardwareL2VxlanNetworkInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkInventory"); + put("org.zstack.sdk.HardwareL2VxlanNetworkPoolInventory", "org.zstack.sdnController.header.HardwareL2VxlanNetworkPoolInventory"); + put("org.zstack.sdk.HbaDeviceInventory", "org.zstack.storage.device.hba.HbaDeviceInventory"); + put("org.zstack.sdk.HostConnectedStatus", "org.zstack.zops.HostConnectedStatus"); + put("org.zstack.sdk.HostDiskCapacity", "org.zstack.storage.primary.local.APIGetLocalStorageHostDiskCapacityReply$HostDiskCapacity"); + put("org.zstack.sdk.HostInventory", "org.zstack.header.host.HostInventory"); + put("org.zstack.sdk.HostIommuStateType", "org.zstack.pciDevice.HostIommuStateType"); + put("org.zstack.sdk.HostIommuStatusType", "org.zstack.pciDevice.HostIommuStatusType"); + put("org.zstack.sdk.HostIpmiInventory", "org.zstack.header.host.HostIpmiInventory"); + put("org.zstack.sdk.HostLoad", "org.zstack.drs.api.HostLoad"); + put("org.zstack.sdk.HostNUMANode", "org.zstack.header.host.HostNUMANode"); + put("org.zstack.sdk.HostNetworkBondingInventory", "org.zstack.network.hostNetworkInterface.HostNetworkBondingInventory"); + put("org.zstack.sdk.HostNetworkBondingServiceRefInventory", "org.zstack.header.host.HostNetworkBondingServiceRefInventory"); + put("org.zstack.sdk.HostNetworkInterfaceInventory", "org.zstack.network.hostNetworkInterface.HostNetworkInterfaceInventory"); + put("org.zstack.sdk.HostNetworkInterfaceLldpInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpInventory"); + put("org.zstack.sdk.HostNetworkInterfaceLldpRefInventory", "org.zstack.network.hostNetworkInterface.lldp.entity.HostNetworkInterfaceLldpRefInventory"); + put("org.zstack.sdk.HostNetworkInterfaceServiceRefInventory", "org.zstack.header.host.HostNetworkInterfaceServiceRefInventory"); + put("org.zstack.sdk.HostNetworkLabelInventory", "org.zstack.header.host.HostNetworkLabelInventory"); + put("org.zstack.sdk.HostOsCategoryInventory", "org.zstack.kvm.hypervisor.datatype.HostOsCategoryInventory"); + put("org.zstack.sdk.HostPhysicalMemoryInventory", "org.zstack.header.host.HostPhysicalMemoryInventory"); + put("org.zstack.sdk.HostSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.HostSchedulingRuleGroupInventory"); + put("org.zstack.sdk.HwMonitorStatus", "org.zstack.header.host.HwMonitorStatus"); + put("org.zstack.sdk.HybridAccountInventory", "org.zstack.hybrid.account.HybridAccountInventory"); + put("org.zstack.sdk.HybridConnectionType", "org.zstack.header.aliyun.network.HybridConnectionType"); + put("org.zstack.sdk.HybridEipAddressInventory", "org.zstack.header.hybrid.network.eip.HybridEipAddressInventory"); + put("org.zstack.sdk.HybridEipStatus", "org.zstack.header.hybrid.network.eip.HybridEipStatus"); + put("org.zstack.sdk.HybridType", "org.zstack.hybrid.core.HybridType"); + put("org.zstack.sdk.HygonCcpDeviceInventory", "org.zstack.hygon.HygonCcpDeviceInventory"); + put("org.zstack.sdk.HygonDeviceState", "org.zstack.hygon.HygonDeviceState"); + put("org.zstack.sdk.HygonDeviceType", "org.zstack.hygon.HygonDeviceType"); + put("org.zstack.sdk.HypervisorVersionState", "org.zstack.kvm.hypervisor.datatype.HypervisorVersionState"); + put("org.zstack.sdk.IPsecConnectionInventory", "org.zstack.ipsec.IPsecConnectionInventory"); + put("org.zstack.sdk.IPsecL3NetworkRefInventory", "org.zstack.ipsec.IPsecL3NetworkRefInventory"); + put("org.zstack.sdk.IPsecPeerCidrInventory", "org.zstack.ipsec.IPsecPeerCidrInventory"); + put("org.zstack.sdk.IdentityZoneInventory", "org.zstack.header.identityzone.IdentityZoneInventory"); + put("org.zstack.sdk.IdentityZoneProperty", "org.zstack.header.identityzone.IdentityZoneProperty"); + put("org.zstack.sdk.ImageBackupStorageRefInventory", "org.zstack.header.image.ImageBackupStorageRefInventory"); + put("org.zstack.sdk.ImageCacheInventory", "org.zstack.header.storage.primary.ImageCacheInventory"); + put("org.zstack.sdk.ImageGroupInventory", "org.zstack.header.image.ImageGroupInventory"); + put("org.zstack.sdk.ImageGroupRefInventory", "org.zstack.header.image.ImageGroupRefInventory"); + put("org.zstack.sdk.ImageInventory", "org.zstack.header.image.ImageInventory"); + put("org.zstack.sdk.ImagePackageInventory", "org.zstack.ovf.datatype.ImagePackageInventory"); + put("org.zstack.sdk.ImagePackageState", "org.zstack.ovf.datatype.ImagePackageState"); + put("org.zstack.sdk.ImageReplicationGroupBackupStorageRefInventory", "org.zstack.imagereplicator.ImageReplicationGroupBackupStorageRefInventory"); + put("org.zstack.sdk.ImageReplicationGroupInventory", "org.zstack.imagereplicator.ImageReplicationGroupInventory"); + put("org.zstack.sdk.ImageStoreBackupStorageInventory", "org.zstack.storage.backup.imagestore.ImageStoreBackupStorageInventory"); + put("org.zstack.sdk.ImageStoreGcResult", "org.zstack.storage.backup.imagestore.ImageStoreGcResult"); + put("org.zstack.sdk.ImageStoreImageStruct", "org.zstack.storage.backup.imagestore.ImageStoreImageStruct"); + put("org.zstack.sdk.InfoSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecretResourcePoolInventory"); + put("org.zstack.sdk.InfoSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.infoSec.InfoSecSecurityMachineInventory"); + put("org.zstack.sdk.InputType", "org.zstack.abstraction.OptionType$InputType"); + put("org.zstack.sdk.InstType", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConstants$InstType"); + put("org.zstack.sdk.InstallPathRecycleInventory", "org.zstack.header.core.trash.InstallPathRecycleInventory"); + put("org.zstack.sdk.InstanceOfferingInventory", "org.zstack.header.configuration.InstanceOfferingInventory"); + put("org.zstack.sdk.InvocationRecord", "org.zstack.guesttools.InvocationRecord"); + put("org.zstack.sdk.InvocationRecordDetail", "org.zstack.guesttools.InvocationRecordDetail"); + put("org.zstack.sdk.IpCapacityData", "org.zstack.header.network.l3.datatypes.IpCapacityData"); + put("org.zstack.sdk.IpRangeInventory", "org.zstack.header.network.l3.IpRangeInventory"); + put("org.zstack.sdk.IpRangeType", "org.zstack.header.network.l3.IpRangeType"); + put("org.zstack.sdk.IpSetType", "org.zstack.vpcfirewall.entity.IpSetType"); + put("org.zstack.sdk.IpStatisticData", "org.zstack.network.service.flat.IpStatisticData"); + put("org.zstack.sdk.IscsiLunInventory", "org.zstack.storage.device.iscsi.IscsiLunInventory"); + put("org.zstack.sdk.IscsiServerClusterRefInventory", "org.zstack.storage.device.iscsi.IscsiServerClusterRefInventory"); + put("org.zstack.sdk.IscsiServerInventory", "org.zstack.storage.device.iscsi.IscsiServerInventory"); + put("org.zstack.sdk.IscsiTargetInventory", "org.zstack.storage.device.iscsi.IscsiTargetInventory"); + put("org.zstack.sdk.IsoTO", "org.zstack.kvm.KVMAgentCommands$IsoTO"); + put("org.zstack.sdk.ItemInventory", "org.zstack.monitoring.items.ItemInventory"); + put("org.zstack.sdk.JitSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.jit.JitSecurityMachineInventory"); + put("org.zstack.sdk.JobDetails", "org.zstack.header.image.APIGetUploadImageJobDetailsReply$JobDetails"); + put("org.zstack.sdk.JsonLabelInventory", "org.zstack.core.jsonlabel.JsonLabelInventory"); + put("org.zstack.sdk.KVMCephVolumeTO", "org.zstack.storage.ceph.primary.KVMCephVolumeTO"); + put("org.zstack.sdk.KVMHostInventory", "org.zstack.kvm.KVMHostInventory"); + put("org.zstack.sdk.KVMIsoTO", "org.zstack.kvm.KVMIsoTO"); + put("org.zstack.sdk.KoAlSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.koal.KoAlSecretResourcePoolInventory"); + put("org.zstack.sdk.KvmCephCdRomTO", "org.zstack.storage.ceph.primary.KvmCephCdRomTO"); + put("org.zstack.sdk.KvmCephIsoTO", "org.zstack.storage.ceph.primary.KvmCephIsoTO"); + put("org.zstack.sdk.KvmHostHypervisorMetadataInventory", "org.zstack.kvm.hypervisor.datatype.KvmHostHypervisorMetadataInventory"); + put("org.zstack.sdk.KvmHypervisorInfoInventory", "org.zstack.kvm.hypervisor.datatype.KvmHypervisorInfoInventory"); + put("org.zstack.sdk.L2NetworkData", "org.zstack.header.network.l2.L2NetworkData"); + put("org.zstack.sdk.L2NetworkInventory", "org.zstack.header.network.l2.L2NetworkInventory"); + put("org.zstack.sdk.L2PortGroupNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupNetworkInventory"); + put("org.zstack.sdk.L2PortGroupVlanMode", "org.zstack.network.l2.virtualSwitch.header.L2PortGroupVlanMode"); + put("org.zstack.sdk.L2VirtualSwitchNetworkInventory", "org.zstack.network.l2.virtualSwitch.header.L2VirtualSwitchNetworkInventory"); + put("org.zstack.sdk.L2VlanNetworkInventory", "org.zstack.header.network.l2.L2VlanNetworkInventory"); + put("org.zstack.sdk.L2VxlanNetworkInventory", "org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory"); + put("org.zstack.sdk.L2VxlanNetworkPoolInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.L2VxlanNetworkPoolInventory"); + put("org.zstack.sdk.L3NetworkHostRouteInventory", "org.zstack.header.network.l3.L3NetworkHostRouteInventory"); + put("org.zstack.sdk.L3NetworkInventory", "org.zstack.header.network.l3.L3NetworkInventory"); + put("org.zstack.sdk.LdapAccountRefInventory", "org.zstack.ldap.LdapAccountRefInventory"); + put("org.zstack.sdk.LdapResourceRefInventory", "org.zstack.login.entity.LdapResourceRefInventory"); + put("org.zstack.sdk.LdapServerInventory", "org.zstack.ldap.LdapServerInventory"); + put("org.zstack.sdk.LicenseAddOnInventory", "org.zstack.license.LicenseAddOnInventory"); + put("org.zstack.sdk.LicenseInventory", "org.zstack.license.LicenseInventory"); + put("org.zstack.sdk.LoadBalancerDataInventory", "org.zstack.observabilityServer.service.loadBalancer.LoadBalancerDataInventory"); + put("org.zstack.sdk.LoadBalancerInventory", "org.zstack.network.service.lb.LoadBalancerInventory"); + put("org.zstack.sdk.LoadBalancerListenerACLRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerACLRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerCertificateRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerCertificateRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerInventory", "org.zstack.network.service.lb.LoadBalancerListenerInventory"); + put("org.zstack.sdk.LoadBalancerListenerServerGroupRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerServerGroupRefInventory"); + put("org.zstack.sdk.LoadBalancerListenerVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerListenerVmNicRefInventory"); + put("org.zstack.sdk.LoadBalancerListerAcl", "org.zstack.network.service.lb.APIChangeAccessControlListServerGroupEvent$LoadBalancerListerAcl"); + put("org.zstack.sdk.LoadBalancerServerGroupInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupInventory"); + put("org.zstack.sdk.LoadBalancerServerGroupServerIpInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupServerIpInventory"); + put("org.zstack.sdk.LoadBalancerServerGroupVmNicRefInventory", "org.zstack.network.service.lb.LoadBalancerServerGroupVmNicRefInventory"); + put("org.zstack.sdk.LocalStorageResourceRefInventory", "org.zstack.storage.primary.local.LocalStorageResourceRefInventory"); + put("org.zstack.sdk.LocateStatus", "org.zstack.storage.device.localRaid.LocateStatus"); + put("org.zstack.sdk.LogCategory", "org.zstack.log.server.LogCategory"); + put("org.zstack.sdk.LogLevel", "org.zstack.log.server.LogLevel"); + put("org.zstack.sdk.LogServerInventory", "org.zstack.log.server.LogServerInventory"); + put("org.zstack.sdk.LogType", "org.zstack.log.server.LogType"); + put("org.zstack.sdk.LoginAuthenticationProcedureDesc", "org.zstack.header.identity.login.LoginAuthenticationProcedureDesc"); + put("org.zstack.sdk.LongJobInventory", "org.zstack.header.longjob.LongJobInventory"); + put("org.zstack.sdk.LongJobProgressDetail", "org.zstack.header.core.progress.LongJobProgressDetail"); + put("org.zstack.sdk.LongJobState", "org.zstack.header.longjob.LongJobState"); + put("org.zstack.sdk.LunInventory", "org.zstack.header.storageDevice.LunInventory"); + put("org.zstack.sdk.MaaSUsage", "org.zstack.ai.message.MaaSUsage"); + put("org.zstack.sdk.ManagementNodeInventory", "org.zstack.header.managementnode.ManagementNodeInventory"); + put("org.zstack.sdk.MatchEvidence", "org.zstack.ai.message.MatchEvidence"); + put("org.zstack.sdk.MatchedStep", "org.zstack.ai.message.MatchedStep"); + put("org.zstack.sdk.MdevDeviceChooser", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceChooser"); + put("org.zstack.sdk.MdevDeviceInventory", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceInventory"); + put("org.zstack.sdk.MdevDeviceSpecInventory", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecInventory"); + put("org.zstack.sdk.MdevDeviceSpecState", "org.zstack.pciDevice.specification.mdev.MdevDeviceSpecState"); + put("org.zstack.sdk.MdevDeviceState", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceState"); + put("org.zstack.sdk.MdevDeviceStatus", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceStatus"); + put("org.zstack.sdk.MdevDeviceType", "org.zstack.pciDevice.virtual.vfio_mdev.MdevDeviceType"); + put("org.zstack.sdk.MediaInventory", "org.zstack.monitoring.media.MediaInventory"); + put("org.zstack.sdk.MetaServerService", "org.zstack.ai.message.ModelCenterServiceInventory$MetaServerService"); + put("org.zstack.sdk.MiniCandidateHostStruct", "org.zstack.header.bootstrap.MiniCandidateHostStruct"); + put("org.zstack.sdk.MiniHostInfo", "org.zstack.header.bootstrap.MiniHostInfo"); + put("org.zstack.sdk.MiniNetworkConfigStruct", "org.zstack.header.bootstrap.MiniNetworkConfigStruct"); + put("org.zstack.sdk.MiniStorageHostRefInventory", "org.zstack.storage.primary.ministorage.MiniStorageHostRefInventory"); + put("org.zstack.sdk.MiniStorageInventory", "org.zstack.storage.primary.ministorage.MiniStorageInventory"); + put("org.zstack.sdk.MiniStorageResourceReplicationInventory", "org.zstack.storage.primary.ministorage.MiniStorageResourceReplicationInventory"); + put("org.zstack.sdk.MiniStorageType", "org.zstack.storage.primary.ministorage.MiniStorageType"); + put("org.zstack.sdk.MirrorNetworkUsedIpInventory", "org.zstack.header.portMirror.MirrorNetworkUsedIpInventory"); + put("org.zstack.sdk.ModelCenterCapacityInventory", "org.zstack.ai.entity.ModelCenterCapacityInventory"); + put("org.zstack.sdk.ModelCenterInventory", "org.zstack.ai.entity.ModelCenterInventory"); + put("org.zstack.sdk.ModelCenterServiceInventory", "org.zstack.ai.message.ModelCenterServiceInventory"); + put("org.zstack.sdk.ModelEvalServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelEvalServiceInstanceGroupInventory"); + put("org.zstack.sdk.ModelEvaluationTaskInventory", "org.zstack.ai.entity.ModelEvaluationTaskInventory"); + put("org.zstack.sdk.ModelInventory", "org.zstack.ai.entity.ModelInventory"); + put("org.zstack.sdk.ModelService", "org.zstack.ai.message.ModelService"); + put("org.zstack.sdk.ModelServiceGroupDatasetRefInventory", "org.zstack.ai.entity.ModelServiceGroupDatasetRefInventory"); + put("org.zstack.sdk.ModelServiceInstanceGroupInventory", "org.zstack.ai.entity.ModelServiceInstanceGroupInventory"); + put("org.zstack.sdk.ModelServiceInstanceInventory", "org.zstack.ai.entity.ModelServiceInstanceInventory"); + put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); + put("org.zstack.sdk.ModelServiceMatchEntry", "org.zstack.ai.message.ModelServiceMatchEntry"); + put("org.zstack.sdk.ModelServiceMatchEntryName", "org.zstack.ai.message.ModelServiceMatchEntryName"); + put("org.zstack.sdk.ModelServiceMatchStatus", "org.zstack.ai.message.ModelServiceMatchStatus"); + put("org.zstack.sdk.ModelServiceRefInventory", "org.zstack.ai.entity.ModelServiceRefInventory"); + put("org.zstack.sdk.ModelServiceTemplateInventory", "org.zstack.ai.entity.ModelServiceTemplateInventory"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KVMCephVolumeTO$MonInfo"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephCdRomTO$MonInfo"); + put("org.zstack.sdk.MonInfo", "org.zstack.storage.ceph.primary.KvmCephIsoTO$MonInfo"); + put("org.zstack.sdk.MonitorTriggerActionInventory", "org.zstack.monitoring.actions.MonitorTriggerActionInventory"); + put("org.zstack.sdk.MonitorTriggerInventory", "org.zstack.monitoring.MonitorTriggerInventory"); + put("org.zstack.sdk.MttyDeviceInventory", "org.zstack.mttyDevice.MttyDeviceInventory"); + put("org.zstack.sdk.MttyDeviceState", "org.zstack.mttyDevice.MttyDeviceState"); + put("org.zstack.sdk.MttyDeviceType", "org.zstack.mttyDevice.MttyDeviceType"); + put("org.zstack.sdk.MttyDeviceVirtStatus", "org.zstack.mttyDevice.MttyDeviceVirtStatus"); + put("org.zstack.sdk.MulticastRouteInventory", "org.zstack.multicast.router.header.MulticastRouteInventory"); + put("org.zstack.sdk.MulticastRouterInventory", "org.zstack.multicast.router.header.MulticastRouterInventory"); + put("org.zstack.sdk.MulticastRouterRendezvousPointInventory", "org.zstack.multicast.router.header.MulticastRouterRendezvousPointInventory"); + put("org.zstack.sdk.MulticastRouterVpcVRouterRefInventory", "org.zstack.multicast.router.header.MulticastRouterVpcVRouterRefInventory"); + put("org.zstack.sdk.MultipathTopologyStruct", "org.zstack.storage.device.multipath.MultipathTopologyStruct"); + put("org.zstack.sdk.NasFileSystemInventory", "org.zstack.nas.NasFileSystemInventory"); + put("org.zstack.sdk.NasMountTargetInventory", "org.zstack.nas.NasMountTargetInventory"); + put("org.zstack.sdk.NasProtocolType", "org.zstack.nas.NasProtocolType"); + put("org.zstack.sdk.NativeClusterInventory", "org.zstack.container.entity.NativeClusterInventory"); + put("org.zstack.sdk.NativeHostInventory", "org.zstack.container.entity.NativeHostInventory"); + put("org.zstack.sdk.Neighbor", "org.zstack.header.protocol.Neighbor"); + put("org.zstack.sdk.NetworkReachablePair", "org.zstack.zops.NetworkReachablePair"); + put("org.zstack.sdk.NetworkRouterAreaRefInventory", "org.zstack.header.protocol.NetworkRouterAreaRefInventory"); + put("org.zstack.sdk.NetworkRouterFlowMeterRefInventory", "org.zstack.header.flowMeter.NetworkRouterFlowMeterRefInventory"); + put("org.zstack.sdk.NetworkServiceL3NetworkRefInventory", "org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory"); + put("org.zstack.sdk.NetworkServiceProviderInventory", "org.zstack.header.network.service.NetworkServiceProviderInventory"); + put("org.zstack.sdk.NfvInstClusterStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstClusterStatus"); + put("org.zstack.sdk.NfvInstGroupConfigTaskInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupConfigTaskInventory"); + put("org.zstack.sdk.NfvInstGroupInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupInventory"); + put("org.zstack.sdk.NfvInstGroupL3NetworkRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupL3NetworkRefInventory"); + put("org.zstack.sdk.NfvInstGroupMonitorIpInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupMonitorIpInventory"); + put("org.zstack.sdk.NfvInstGroupNetworkServiceRefInventory", "org.zstack.network.service.nfvinstgroup.NfvInstGroupNetworkServiceRefInventory"); + put("org.zstack.sdk.NfvInstGroupOperationMode", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupOperationMode"); + put("org.zstack.sdk.NfvInstGroupStatus", "org.zstack.network.service.header.nfvinstgroup.NfvInstGroupStatus"); + put("org.zstack.sdk.NfvInstInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstInventory"); + put("org.zstack.sdk.NfvInstOfferingInventory", "org.zstack.network.service.header.nfvinstgroup.NfvInstOfferingInventory"); + put("org.zstack.sdk.NginxRedirectRule", "org.zstack.ai.NginxRedirectRule"); + put("org.zstack.sdk.NicTO", "org.zstack.kvm.KVMAgentCommands$NicTO"); + put("org.zstack.sdk.NormalIpRangeInventory", "org.zstack.header.network.l3.NormalIpRangeInventory"); + put("org.zstack.sdk.NvmeLunHostRefInventory", "org.zstack.storage.device.nvme.NvmeLunHostRefInventory"); + put("org.zstack.sdk.NvmeLunInventory", "org.zstack.storage.device.nvme.NvmeLunInventory"); + put("org.zstack.sdk.NvmeServerClusterRefInventory", "org.zstack.storage.device.nvme.NvmeServerClusterRefInventory"); + put("org.zstack.sdk.NvmeServerInventory", "org.zstack.storage.device.nvme.NvmeServerInventory"); + put("org.zstack.sdk.NvmeTargetInventory", "org.zstack.storage.device.nvme.NvmeTargetInventory"); + put("org.zstack.sdk.OAuth2ClientInventory", "org.zstack.sso.header.OAuth2ClientInventory"); + put("org.zstack.sdk.OAuth2TokenInventory", "org.zstack.sso.header.OAuth2TokenInventory"); + put("org.zstack.sdk.ObservabilityServerOfferingInventory", "org.zstack.observabilityServer.ObservabilityServerOfferingInventory"); + put("org.zstack.sdk.ObservabilityServerServiceDataInventory", "org.zstack.observabilityServer.service.ObservabilityServerServiceDataInventory"); + put("org.zstack.sdk.ObservabilityServerVmInventory", "org.zstack.observabilityServer.ObservabilityServerVmInventory"); + put("org.zstack.sdk.OptionType", "org.zstack.abstraction.OptionType"); + put("org.zstack.sdk.OssBucketInventory", "org.zstack.header.aliyun.oss.OssBucketInventory"); + put("org.zstack.sdk.OssBucketProperty", "org.zstack.header.aliyun.oss.OssBucketProperty"); + put("org.zstack.sdk.OvfCdDriverInfo", "org.zstack.ovf.datatype.OvfCdDriverInfo"); + put("org.zstack.sdk.OvfCpuInfo", "org.zstack.ovf.datatype.OvfCpuInfo"); + put("org.zstack.sdk.OvfDiskInfo", "org.zstack.ovf.datatype.OvfDiskInfo"); + put("org.zstack.sdk.OvfEthernetAdapterInfo", "org.zstack.ovf.datatype.OvfEthernetAdapterInfo"); + put("org.zstack.sdk.OvfInfo", "org.zstack.ovf.datatype.OvfInfo"); + put("org.zstack.sdk.OvfMemoryInfo", "org.zstack.ovf.datatype.OvfMemoryInfo"); + put("org.zstack.sdk.OvfNetworkInfo", "org.zstack.ovf.datatype.OvfNetworkInfo"); + put("org.zstack.sdk.OvfOSInfo", "org.zstack.ovf.datatype.OvfOSInfo"); + put("org.zstack.sdk.OvfSystemInfo", "org.zstack.ovf.datatype.OvfSystemInfo"); + put("org.zstack.sdk.OvfVolumeInfo", "org.zstack.ovf.datatype.OvfVolumeInfo"); + put("org.zstack.sdk.OvnControllerInventory", "org.zstack.network.ovn.OvnControllerInventory"); + put("org.zstack.sdk.OvnControllerVmInstanceInventory", "org.zstack.network.ovn.OvnControllerVmInstanceInventory"); + put("org.zstack.sdk.OvnControllerVmOfferingInventory", "org.zstack.network.ovn.OvnControllerVmOfferingInventory"); + put("org.zstack.sdk.PacketsForwardType", "org.zstack.vpcfirewall.entity.PacketsForwardType"); + put("org.zstack.sdk.Pagination", "org.zstack.billing.Pagination"); + put("org.zstack.sdk.PciDeviceBillingInventory", "org.zstack.billing.generator.pcidevice.PciDeviceBillingInventory"); + put("org.zstack.sdk.PciDeviceChooser", "org.zstack.pciDevice.PciDeviceChooser"); + put("org.zstack.sdk.PciDeviceInventory", "org.zstack.pciDevice.PciDeviceInventory"); + put("org.zstack.sdk.PciDeviceMdevSpecRefInventory", "org.zstack.pciDevice.specification.mdev.PciDeviceMdevSpecRefInventory"); + put("org.zstack.sdk.PciDeviceMetaData", "org.zstack.pciDevice.PciDeviceMetaData"); + put("org.zstack.sdk.PciDeviceMetaDataEntry", "org.zstack.pciDevice.PciDeviceMetaDataEntry"); + put("org.zstack.sdk.PciDeviceMetaDataOperator", "org.zstack.pciDevice.PciDeviceMetaDataEntry$PciDeviceMetaDataOperator"); + put("org.zstack.sdk.PciDeviceOfferingInstanceOfferingRefInventory", "org.zstack.pciDevice.PciDeviceOfferingInstanceOfferingRefInventory"); + put("org.zstack.sdk.PciDeviceOfferingInventory", "org.zstack.pciDevice.PciDeviceOfferingInventory"); + put("org.zstack.sdk.PciDeviceOfferingType", "org.zstack.pciDevice.PciDeviceOfferingType"); + put("org.zstack.sdk.PciDevicePciDeviceOfferingRefInventory", "org.zstack.pciDevice.PciDevicePciDeviceOfferingRefInventory"); + put("org.zstack.sdk.PciDeviceSpecInventory", "org.zstack.pciDevice.specification.pci.PciDeviceSpecInventory"); + put("org.zstack.sdk.PciDeviceSpecState", "org.zstack.pciDevice.specification.pci.PciDeviceSpecState"); + put("org.zstack.sdk.PciDeviceSpending", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpending"); + put("org.zstack.sdk.PciDeviceSpendingInventory", "org.zstack.billing.spendingcalculator.pcidevice.PciDeviceSpendingInventory"); + put("org.zstack.sdk.PciDeviceState", "org.zstack.pciDevice.PciDeviceState"); + put("org.zstack.sdk.PciDeviceStatus", "org.zstack.pciDevice.PciDeviceStatus"); + put("org.zstack.sdk.PciDeviceType", "org.zstack.pciDevice.PciDeviceType"); + put("org.zstack.sdk.PciDeviceVirtMode", "org.zstack.pciDevice.virtual.PciDeviceVirtMode"); + put("org.zstack.sdk.PciDeviceVirtState", "org.zstack.pciDevice.virtual.PciDeviceVirtState"); + put("org.zstack.sdk.PciDeviceVirtStatus", "org.zstack.pciDevice.virtual.PciDeviceVirtStatus"); + put("org.zstack.sdk.PendingTaskInfo", "org.zstack.header.core.progress.PendingTaskInfo"); + put("org.zstack.sdk.PhysicalDriveSmartSelfTestHistoryInventory", "org.zstack.storage.device.localRaid.PhysicalDriveSmartSelfTestHistoryInventory"); + put("org.zstack.sdk.PhysicalSwitchInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchInventory"); + put("org.zstack.sdk.PhysicalSwitchPortInventory", "org.zstack.network.hostNetworkInterface.PhysicalSwitchPortInventory"); + put("org.zstack.sdk.PluginDriverInventory", "org.zstack.header.core.external.plugin.PluginDriverInventory"); + put("org.zstack.sdk.PluginSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.plugin.PluginSecretResourcePoolInventory"); + put("org.zstack.sdk.PodInventory", "org.zstack.container.entity.PodInventory"); + put("org.zstack.sdk.PolicyInventory", "org.zstack.header.identity.PolicyInventory"); + put("org.zstack.sdk.PolicyRouteRuleInventory", "org.zstack.policyRoute.PolicyRouteRuleInventory"); + put("org.zstack.sdk.PolicyRouteRuleProtocol", "org.zstack.policyRoute.PolicyRouteRuleProtocol"); + put("org.zstack.sdk.PolicyRouteRuleSetInventory", "org.zstack.policyRoute.PolicyRouteRuleSetInventory"); + put("org.zstack.sdk.PolicyRouteRuleSetL3RefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetL3RefInventory"); + put("org.zstack.sdk.PolicyRouteRuleSetVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteRuleSetVRouterRefInventory"); + put("org.zstack.sdk.PolicyRouteRuleState", "org.zstack.policyRoute.PolicyRouteRuleState"); + put("org.zstack.sdk.PolicyRouteTableInventory", "org.zstack.policyRoute.PolicyRouteTableInventory"); + put("org.zstack.sdk.PolicyRouteTableRouteEntryInventory", "org.zstack.policyRoute.PolicyRouteTableRouteEntryInventory"); + put("org.zstack.sdk.PolicyRouteTableVRouterRefInventory", "org.zstack.policyRoute.PolicyRouteTableVRouterRefInventory"); + put("org.zstack.sdk.PolicyStatement", "org.zstack.header.identity.PolicyStatement"); + put("org.zstack.sdk.PolicyStatementEffect", "org.zstack.header.identity.PolicyStatementEffect"); + put("org.zstack.sdk.PortForwardingRuleInventory", "org.zstack.network.service.portforwarding.PortForwardingRuleInventory"); + put("org.zstack.sdk.PortMirrorInventory", "org.zstack.header.portMirror.PortMirrorInventory"); + put("org.zstack.sdk.PortMirrorSessionInventory", "org.zstack.header.portMirror.PortMirrorSessionInventory"); + put("org.zstack.sdk.PortMirrorState", "org.zstack.header.portMirror.PortMirrorState"); + put("org.zstack.sdk.PowerOffHardwareResult", "org.zstack.header.cluster.PowerOffHardwareResult"); + put("org.zstack.sdk.PreconfigurationTemplateInventory", "org.zstack.header.baremetal.preconfiguration.PreconfigurationTemplateInventory"); + put("org.zstack.sdk.PreviewResourceStruct", "org.zstack.header.cloudformation.PreviewResourceStruct"); + put("org.zstack.sdk.Price", "org.zstack.billing.table.APICreatePriceTableMsg$Price"); + put("org.zstack.sdk.PriceBareMetal2ChassisOfferingRefInventory", "org.zstack.billing.spendingcalculator.baremetal2.PriceBareMetal2ChassisOfferingRefInventory"); + put("org.zstack.sdk.PriceInventory", "org.zstack.billing.PriceInventory"); + put("org.zstack.sdk.PricePciDeviceOfferingRefInventory", "org.zstack.billing.spendingcalculator.pcidevice.PricePciDeviceOfferingRefInventory"); + put("org.zstack.sdk.PriceTableInventory", "org.zstack.billing.table.PriceTableInventory"); + put("org.zstack.sdk.PrimaryStorageHostStatus", "org.zstack.header.storage.primary.PrimaryStorageHostStatus"); + put("org.zstack.sdk.PrimaryStorageInventory", "org.zstack.header.storage.primary.PrimaryStorageInventory"); + put("org.zstack.sdk.ProgressProperty", "org.zstack.header.aliyun.image.ProgressProperty"); + put("org.zstack.sdk.ProjectRepositoryInventory", "org.zstack.container.entity.ProjectRepositoryInventory"); + put("org.zstack.sdk.ProtocolType", "org.zstack.vpcfirewall.entity.ProtocolType"); + put("org.zstack.sdk.PubIpVipBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthInBillingInventory"); + put("org.zstack.sdk.PubIpVipBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vip.PubIpVipBandwidthOutBillingInventory"); + put("org.zstack.sdk.PubIpVipBandwidthSpending", "org.zstack.billing.spendingcalculator.vip.PubIpVipBandwidthSpending"); + put("org.zstack.sdk.PubIpVmNicBandwidthInBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthInBillingInventory"); + put("org.zstack.sdk.PubIpVmNicBandwidthOutBillingInventory", "org.zstack.billing.generator.pubip.vmnic.PubIpVmNicBandwidthOutBillingInventory"); + put("org.zstack.sdk.PubIpVmNicBandwidthSpending", "org.zstack.billing.spendingcalculator.vmnic.PubIpVmNicBandwidthSpending"); + put("org.zstack.sdk.PublishAppInventory", "org.zstack.header.appcenter.PublishAppInventory"); + put("org.zstack.sdk.PublishAppResourceStruct", "org.zstack.header.appcenter.PublishAppResourceStruct"); + put("org.zstack.sdk.QuotaInventory", "org.zstack.header.identity.QuotaInventory"); + put("org.zstack.sdk.QuotaUsage", "org.zstack.header.identity.Quota$QuotaUsage"); + put("org.zstack.sdk.RaidControllerInventory", "org.zstack.storage.device.localRaid.RaidControllerInventory"); + put("org.zstack.sdk.RaidPhysicalDriveInventory", "org.zstack.storage.device.localRaid.RaidPhysicalDriveInventory"); + put("org.zstack.sdk.RedirectUrlTemplate", "org.zstack.sso.header.RedirectUrlTemplate"); + put("org.zstack.sdk.RemoteVtepInventory", "org.zstack.network.l2.vxlan.vtep.RemoteVtepInventory"); + put("org.zstack.sdk.RemovalInstanceRuleInventory", "org.zstack.autoscaling.group.rule.RemovalInstanceRuleInventory"); + put("org.zstack.sdk.ReplicationDiskStatus", "org.zstack.storage.primary.ministorage.ReplicationDiskStatus"); + put("org.zstack.sdk.ReplicationGroupState", "org.zstack.imagereplicator.ReplicationGroupState"); + put("org.zstack.sdk.ReplicationNetworkStatus", "org.zstack.storage.primary.ministorage.ReplicationNetworkStatus"); + put("org.zstack.sdk.ReplicationRole", "org.zstack.storage.primary.ministorage.ReplicationRole"); + put("org.zstack.sdk.ReplicationState", "org.zstack.storage.primary.ministorage.ReplicationState"); + put("org.zstack.sdk.ReservedIpRangeInventory", "org.zstack.header.network.l3.ReservedIpRangeInventory"); + put("org.zstack.sdk.ResourceBackupState", "org.zstack.externalbackup.ResourceBackupState"); + put("org.zstack.sdk.ResourceBindableConfigStruct", "org.zstack.resourceconfig.APIGetResourceBindableConfigReply$ResourceBindableConfigStruct"); + put("org.zstack.sdk.ResourceConfigInventory", "org.zstack.resourceconfig.ResourceConfigInventory"); + put("org.zstack.sdk.ResourceConfigStruct", "org.zstack.resourceconfig.ResourceConfigStruct"); + put("org.zstack.sdk.ResourceExternalBackupInfo", "org.zstack.externalbackup.ResourceExternalBackupInfo"); + put("org.zstack.sdk.ResourceInventory", "org.zstack.header.vo.ResourceInventory"); + put("org.zstack.sdk.ResourceSpending", "org.zstack.billing.ResourceSpending"); + put("org.zstack.sdk.ResourceStackInventory", "org.zstack.header.cloudformation.ResourceStackInventory"); + put("org.zstack.sdk.ResourceStruct", "org.zstack.cloudformation.template.struct.ResourceStruct"); + put("org.zstack.sdk.ResourceType", "org.zstack.cloudformation.template.struct.ResourceType"); + put("org.zstack.sdk.RevertSnapshotGroupResult", "org.zstack.header.storage.snapshot.group.RevertSnapshotGroupResult"); + put("org.zstack.sdk.RootVolumeBillingInventory", "org.zstack.billing.generator.volume.root.RootVolumeBillingInventory"); + put("org.zstack.sdk.RootVolumeSpending", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpending"); + put("org.zstack.sdk.RootVolumeSpendingInventory", "org.zstack.billing.spendingcalculator.volume.root.RootVolumeSpendingInventory"); + put("org.zstack.sdk.RouterAreaInventory", "org.zstack.header.protocol.RouterAreaInventory"); + put("org.zstack.sdk.RuleAttributeType", "org.zstack.sso.header.RuleAttributeType"); + put("org.zstack.sdk.RunningState", "org.zstack.storage.device.localRaid.RunningState"); + put("org.zstack.sdk.RunningTaskInfo", "org.zstack.header.core.progress.RunningTaskInfo"); + put("org.zstack.sdk.SAML2ClientInventory", "org.zstack.sso.header.SAML2ClientInventory"); + put("org.zstack.sdk.SAML2State", "org.zstack.sso.header.SAML2State"); + put("org.zstack.sdk.SSOClientAttributeInventory", "org.zstack.sso.header.SSOClientAttributeInventory"); + put("org.zstack.sdk.SSOClientInventory", "org.zstack.sso.header.SSOClientInventory"); + put("org.zstack.sdk.SSORedirectTemplateInventory", "org.zstack.sso.header.SSORedirectTemplateInventory"); + put("org.zstack.sdk.SSOServerTokenInventory", "org.zstack.sso.header.SSOServerTokenInventory"); + put("org.zstack.sdk.SSOTokenInventory", "org.zstack.sso.header.SSOTokenInventory"); + put("org.zstack.sdk.SanSecSecretResourcePoolInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecretResourcePoolInventory"); + put("org.zstack.sdk.SanSecSecurityMachineInventory", "org.zstack.crypto.securitymachine.thirdparty.sansec.SanSecSecurityMachineInventory"); + put("org.zstack.sdk.SchedulerJobGroupInventory", "org.zstack.header.scheduler.SchedulerJobGroupInventory"); + put("org.zstack.sdk.SchedulerJobGroupJobRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupJobRefInventory"); + put("org.zstack.sdk.SchedulerJobGroupSchedulerTriggerRefInventory", "org.zstack.header.scheduler.SchedulerJobGroupSchedulerTriggerRefInventory"); + put("org.zstack.sdk.SchedulerJobHistoryInventory", "org.zstack.header.scheduler.SchedulerJobHistoryInventory"); + put("org.zstack.sdk.SchedulerJobInventory", "org.zstack.header.scheduler.SchedulerJobInventory"); + put("org.zstack.sdk.SchedulerJobSchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerJobSchedulerTriggerInventory"); + put("org.zstack.sdk.SchedulerTriggerInventory", "org.zstack.header.scheduler.SchedulerTriggerInventory"); + put("org.zstack.sdk.ScsiLunClusterStatusInventory", "org.zstack.header.storageDevice.ScsiLunClusterStatusInventory"); + put("org.zstack.sdk.ScsiLunHostRefInventory", "org.zstack.header.storageDevice.ScsiLunHostRefInventory"); + put("org.zstack.sdk.ScsiLunInventory", "org.zstack.header.storageDevice.ScsiLunInventory"); + put("org.zstack.sdk.ScsiLunVmInstanceRefInventory", "org.zstack.header.storageDevice.ScsiLunVmInstanceRefInventory"); + put("org.zstack.sdk.SdnControllerHostRefInventory", "org.zstack.header.network.sdncontroller.SdnControllerHostRefInventory"); + put("org.zstack.sdk.SdnControllerInventory", "org.zstack.header.network.sdncontroller.SdnControllerInventory"); + put("org.zstack.sdk.SdnControllerStatus", "org.zstack.header.network.sdncontroller.SdnControllerStatus"); + put("org.zstack.sdk.SdnVlanRange", "org.zstack.sdnController.header.SdnVlanRange"); + put("org.zstack.sdk.SecretResourcePoolInventory", "org.zstack.header.securitymachine.SecretResourcePoolInventory"); + put("org.zstack.sdk.SecurityGroupIngressRuleTO", "org.zstack.network.securitygroup.SecurityGroupIngressRuleTO"); + put("org.zstack.sdk.SecurityGroupInventory", "org.zstack.network.securitygroup.SecurityGroupInventory"); + put("org.zstack.sdk.SecurityGroupRuleInventory", "org.zstack.network.securitygroup.SecurityGroupRuleInventory"); + put("org.zstack.sdk.SecurityMachineInventory", "org.zstack.header.securitymachine.SecurityMachineInventory"); + put("org.zstack.sdk.ServiceStatus", "org.zstack.ai.message.ModelCenterServiceInventory$ServiceStatus"); + put("org.zstack.sdk.ServiceTypeStatisticData", "org.zstack.header.host.ServiceTypeStatisticData"); + put("org.zstack.sdk.SessionInventory", "org.zstack.header.identity.SessionInventory"); + put("org.zstack.sdk.SessionStatus", "org.zstack.header.portMirror.SessionStatus"); + put("org.zstack.sdk.SessionType", "org.zstack.header.portMirror.SessionType"); + put("org.zstack.sdk.SftpBackupStorageInventory", "org.zstack.storage.backup.sftp.SftpBackupStorageInventory"); + put("org.zstack.sdk.ShareableVolumeVmInstanceRefInventory", "org.zstack.mevoco.ShareableVolumeVmInstanceRefInventory"); + put("org.zstack.sdk.SharedBlockCandidateStruct", "org.zstack.storage.primary.sharedblock.SharedBlockCandidateStruct"); + put("org.zstack.sdk.SharedBlockGroupPrimaryStorageHostRefInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageHostRefInventory"); + put("org.zstack.sdk.SharedBlockGroupPrimaryStorageInventory", "org.zstack.storage.primary.sharedblock.SharedBlockGroupPrimaryStorageInventory"); + put("org.zstack.sdk.SharedBlockGroupType", "org.zstack.storage.primary.sharedblock.SharedBlockGroupType"); + put("org.zstack.sdk.SharedBlockInventory", "org.zstack.storage.primary.sharedblock.SharedBlockInventory"); + put("org.zstack.sdk.SharedBlockState", "org.zstack.storage.primary.sharedblock.SharedBlockState"); + put("org.zstack.sdk.SharedBlockStatus", "org.zstack.storage.primary.sharedblock.SharedBlockStatus"); + put("org.zstack.sdk.SharedBlockType", "org.zstack.storage.primary.sharedblock.SharedBlockType"); + put("org.zstack.sdk.SharedResourceInventory", "org.zstack.header.identity.SharedResourceInventory"); + put("org.zstack.sdk.ShellResult", "org.zstack.kvm.APIKvmRunShellEvent$ShellResult"); + put("org.zstack.sdk.ShrinkResult", "org.zstack.header.storage.snapshot.ShrinkResult"); + put("org.zstack.sdk.SimulatorHostInventory", "org.zstack.header.simulator.SimulatorHostInventory"); + put("org.zstack.sdk.SlbGroupInventory", "org.zstack.network.service.slb.SlbGroupInventory"); + put("org.zstack.sdk.SlbGroupL3NetworkRefInventory", "org.zstack.network.service.slb.SlbGroupL3NetworkRefInventory"); + put("org.zstack.sdk.SlbGroupMonitorIpInventory", "org.zstack.network.service.slb.SlbGroupMonitorIpInventory"); + put("org.zstack.sdk.SlbLoadBalancerInventory", "org.zstack.network.service.slb.SlbLoadBalancerInventory"); + put("org.zstack.sdk.SlbOfferingInventory", "org.zstack.network.service.slb.SlbOfferingInventory"); + put("org.zstack.sdk.SlbVmInstanceConfigTaskInventory", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskInventory"); + put("org.zstack.sdk.SlbVmInstanceConfigTaskStatus", "org.zstack.network.service.slb.configManager.SlbVmInstanceConfigTaskStatus"); + put("org.zstack.sdk.SlbVmInstanceInventory", "org.zstack.network.service.slb.SlbVmInstanceInventory"); + put("org.zstack.sdk.SmartDataStruct", "org.zstack.storage.device.localRaid.SmartDataStruct"); + put("org.zstack.sdk.SnapShotSpendingInventory", "org.zstack.billing.spendingcalculator.snapshot.SnapShotSpendingInventory"); + put("org.zstack.sdk.SnapshotLeafInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTree$SnapshotLeafInventory"); + put("org.zstack.sdk.SnapshotSpending", "org.zstack.billing.spendingcalculator.snapshot.SnapshotSpending"); + put("org.zstack.sdk.SnmpAgentInventory", "org.zstack.snmp.agent.SnmpAgentInventory"); + put("org.zstack.sdk.Spending", "org.zstack.billing.Spending"); + put("org.zstack.sdk.SpendingDetails", "org.zstack.billing.SpendingDetails"); + put("org.zstack.sdk.SshKeyPairInventory", "org.zstack.header.sshkeypair.SshKeyPairInventory"); + put("org.zstack.sdk.SshPrivateKeyPairInventory", "org.zstack.header.sshkeypair.SshPrivateKeyPairInventory"); + put("org.zstack.sdk.StackParameters", "org.zstack.header.cloudformation.StackParameters"); + put("org.zstack.sdk.StackTemplateInventory", "org.zstack.header.cloudformation.StackTemplateInventory"); + put("org.zstack.sdk.StorageType", "org.zstack.header.zdfs.StorageType"); + put("org.zstack.sdk.SupportedResourceStruct", "org.zstack.header.cloudformation.SupportedResourceStruct"); + put("org.zstack.sdk.SyncBackupResult", "org.zstack.header.storage.backup.SyncBackupResult"); + put("org.zstack.sdk.SystemTagInventory", "org.zstack.header.tag.SystemTagInventory"); + put("org.zstack.sdk.TagInventory", "org.zstack.header.tag.TagInventory"); + put("org.zstack.sdk.TagPatternInventory", "org.zstack.header.tag.TagPatternInventory"); + put("org.zstack.sdk.TagPatternType", "org.zstack.header.tag.TagPatternType"); + put("org.zstack.sdk.TaskInfo", "org.zstack.header.core.progress.TaskInfo"); + put("org.zstack.sdk.TaskProgressInventory", "org.zstack.header.core.progress.TaskProgressInventory"); + put("org.zstack.sdk.TemplateConfigInventory", "org.zstack.templateConfig.TemplateConfigInventory"); + put("org.zstack.sdk.Threshold", "org.zstack.drs.api.Threshold"); + put("org.zstack.sdk.TrainedModelRecordInventory", "org.zstack.ai.entity.TrainedModelRecordInventory"); + put("org.zstack.sdk.TrashCleanupResult", "org.zstack.header.core.trash.TrashCleanupResult"); + put("org.zstack.sdk.TwoFactorAuthenticationInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationInventory"); + put("org.zstack.sdk.TwoFactorAuthenticationSecretInventory", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretInventory"); + put("org.zstack.sdk.TwoFactorAuthenticationSecretStatus", "org.zstack.twoFactorAuthentication.TwoFactorAuthenticationSecretStatus"); + put("org.zstack.sdk.UKeyInventory", "org.zstack.license.UKeyInventory"); + put("org.zstack.sdk.UKeyStatus", "org.zstack.license.UKeyStatus"); + put("org.zstack.sdk.UsageReport", "org.zstack.header.storage.primary.UsageReport"); + put("org.zstack.sdk.UsbDeviceInventory", "org.zstack.usbDevice.UsbDeviceInventory"); + put("org.zstack.sdk.UsbDeviceState", "org.zstack.usbDevice.UsbDeviceState"); + put("org.zstack.sdk.UsedIpInventory", "org.zstack.header.network.l3.UsedIpInventory"); + put("org.zstack.sdk.UserGroupInventory", "org.zstack.header.identity.UserGroupInventory"); + put("org.zstack.sdk.UserInventory", "org.zstack.header.identity.UserInventory"); + put("org.zstack.sdk.UserProxyConfigInventory", "org.zstack.proxy.UserProxyConfigInventory"); + put("org.zstack.sdk.UserProxyConfigResourceRefInventory", "org.zstack.proxy.UserProxyConfigResourceRefInventory"); + put("org.zstack.sdk.UserTagInventory", "org.zstack.header.tag.UserTagInventory"); + put("org.zstack.sdk.V2VConversionHostInventory", "org.zstack.v2v.V2VConversionHostInventory"); + put("org.zstack.sdk.VCenterBackupStorageInventory", "org.zstack.vmware.VCenterBackupStorageInventory"); + put("org.zstack.sdk.VCenterClusterInventory", "org.zstack.vmware.VCenterClusterInventory"); + put("org.zstack.sdk.VCenterDatacenterInventory", "org.zstack.vmware.VCenterDatacenterInventory"); + put("org.zstack.sdk.VCenterInventory", "org.zstack.vmware.VCenterInventory"); + put("org.zstack.sdk.VCenterPrimaryStorageInventory", "org.zstack.vmware.VCenterPrimaryStorageInventory"); + put("org.zstack.sdk.VCenterResourcePoolInventory", "org.zstack.vmware.VCenterResourcePoolInventory"); + put("org.zstack.sdk.VCenterResourcePoolUsageInventory", "org.zstack.vmware.VCenterResourcePoolUsageInventory"); + put("org.zstack.sdk.VHostAddOn", "org.zstack.kvm.KVMAgentCommands$VHostAddOn"); + put("org.zstack.sdk.VRouterRouteEntryAO", "org.zstack.vrouterRoute.VRouterRouteEntryAO"); + put("org.zstack.sdk.VRouterRouteEntryInventory", "org.zstack.vrouterRoute.VRouterRouteEntryInventory"); + put("org.zstack.sdk.VRouterRouteEntryType", "org.zstack.vrouterRoute.VRouterRouteEntryType"); + put("org.zstack.sdk.VRouterRouteTableInventory", "org.zstack.vrouterRoute.VRouterRouteTableInventory"); + put("org.zstack.sdk.VdiPortInfo", "org.zstack.header.vm.VdiPortInfo"); + put("org.zstack.sdk.VipBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vip.VipBandwidthSpendingDetails"); + put("org.zstack.sdk.VipInventory", "org.zstack.network.service.vip.VipInventory"); + put("org.zstack.sdk.VipNetworkServicesRefInventory", "org.zstack.network.service.vip.VipNetworkServicesRefInventory"); + put("org.zstack.sdk.VipPortRangeInventory", "org.zstack.network.service.virtualrouter.APIGetVipUsedPortsReply$VipPortRangeInventory"); + put("org.zstack.sdk.VipQosInventory", "org.zstack.header.vipQos.VipQosInventory"); + put("org.zstack.sdk.VirtualBorderRouterInventory", "org.zstack.header.aliyun.network.connection.VirtualBorderRouterInventory"); + put("org.zstack.sdk.VirtualRouterOfferingInventory", "org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory"); + put("org.zstack.sdk.VirtualRouterSoftwareVersionInventory", "org.zstack.network.service.virtualrouter.VirtualRouterSoftwareVersionInventory"); + put("org.zstack.sdk.VirtualRouterVRouterRouteTableRefInventory", "org.zstack.vrouterRoute.VirtualRouterVRouterRouteTableRefInventory"); + put("org.zstack.sdk.VirtualRouterVmInventory", "org.zstack.network.service.virtualrouter.VirtualRouterVmInventory"); + put("org.zstack.sdk.VirtualizerInfo", "org.zstack.header.vm.VirtualizerInfo"); + put("org.zstack.sdk.VirtualizerInfoInventory", "org.zstack.header.vm.VirtualizerInfoInventory"); + put("org.zstack.sdk.VmCPUBillingInventory", "org.zstack.billing.generator.vm.cpu.VmCPUBillingInventory"); + put("org.zstack.sdk.VmCPUSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmCPUSpendingDetails"); + put("org.zstack.sdk.VmCapabilities", "org.zstack.header.vm.VmCapabilities"); + put("org.zstack.sdk.VmCdRomInventory", "org.zstack.header.vm.cdrom.VmCdRomInventory"); + put("org.zstack.sdk.VmExternalBackupInfo", "org.zstack.externalbackup.VmExternalBackupInfo"); + put("org.zstack.sdk.VmInstanceDeviceAddressArchiveInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressArchiveInventory"); + put("org.zstack.sdk.VmInstanceDeviceAddressGroupInventory", "org.zstack.header.vm.devices.VmInstanceDeviceAddressGroupInventory"); + put("org.zstack.sdk.VmInstanceInventory", "org.zstack.header.vm.VmInstanceInventory"); + put("org.zstack.sdk.VmInstanceMdevDeviceSpecRefInventory", "org.zstack.pciDevice.specification.mdev.VmInstanceMdevDeviceSpecRefInventory"); + put("org.zstack.sdk.VmInstancePciDeviceSpecRefInventory", "org.zstack.pciDevice.specification.pci.VmInstancePciDeviceSpecRefInventory"); + put("org.zstack.sdk.VmMemoryBillingInventory", "org.zstack.billing.generator.vm.memory.VmMemoryBillingInventory"); + put("org.zstack.sdk.VmMemorySpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmMemorySpendingDetails"); + put("org.zstack.sdk.VmModelMountInventory", "org.zstack.ai.entity.VmModelMountInventory"); + put("org.zstack.sdk.VmModelMountStatus", "org.zstack.ai.entity.VmModelMountStatus"); + put("org.zstack.sdk.VmNicBandwidthSpendingDetails", "org.zstack.billing.spendingcalculator.vmnic.VmNicBandwidthSpendingDetails"); + put("org.zstack.sdk.VmNicInventory", "org.zstack.header.vm.VmNicInventory"); + put("org.zstack.sdk.VmNicSecurityGroupRefInventory", "org.zstack.network.securitygroup.VmNicSecurityGroupRefInventory"); + put("org.zstack.sdk.VmNicSecurityPolicyInventory", "org.zstack.network.securitygroup.VmNicSecurityPolicyInventory"); + put("org.zstack.sdk.VmPriorityConfigInventory", "org.zstack.header.vm.VmPriorityConfigInventory"); + put("org.zstack.sdk.VmPriorityLevel", "org.zstack.header.vm.VmPriorityLevel"); + put("org.zstack.sdk.VmSchedHistoryInventory", "org.zstack.header.vm.VmSchedHistoryInventory"); + put("org.zstack.sdk.VmSchedulingRuleExecuteState", "org.zstack.header.vmscheduling.VmSchedulingRuleExecuteState"); + put("org.zstack.sdk.VmSchedulingRuleGroupInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleGroupInventory"); + put("org.zstack.sdk.VmSchedulingRuleInventory", "org.zstack.header.vmscheduling.VmSchedulingRuleInventory"); + put("org.zstack.sdk.VmSpending", "org.zstack.billing.spendingcalculator.vm.VmSpending"); + put("org.zstack.sdk.VmSpendingDetails", "org.zstack.billing.spendingcalculator.vm.VmSpendingDetails"); + put("org.zstack.sdk.VmVdpaNicInventory", "org.zstack.header.vdpa.VmVdpaNicInventory"); + put("org.zstack.sdk.VmVfNicInventory", "org.zstack.header.sriov.VmVfNicInventory"); + put("org.zstack.sdk.VniRangeInventory", "org.zstack.network.l2.vxlan.vxlanNetworkPool.VniRangeInventory"); + put("org.zstack.sdk.VolumeBackupInventory", "org.zstack.header.storage.backup.VolumeBackupInventory"); + put("org.zstack.sdk.VolumeBackupStorageRefInventory", "org.zstack.header.storage.backup.VolumeBackupStorageRefInventory"); + put("org.zstack.sdk.VolumeCbtBackupInfo", "org.zstack.header.cbt.VolumeCbtBackupInfo"); + put("org.zstack.sdk.VolumeExternalBackupInfo", "org.zstack.externalbackup.VolumeExternalBackupInfo"); + put("org.zstack.sdk.VolumeFormatReplyStruct", "org.zstack.header.volume.APIGetVolumeFormatReply$VolumeFormatReplyStruct"); + put("org.zstack.sdk.VolumeInventory", "org.zstack.header.volume.VolumeInventory"); + put("org.zstack.sdk.VolumeSnapshotBackupStorageRefInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotBackupStorageRefInventory"); + put("org.zstack.sdk.VolumeSnapshotGroupAvailability", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupAvailability"); + put("org.zstack.sdk.VolumeSnapshotGroupInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory"); + put("org.zstack.sdk.VolumeSnapshotGroupRefInventory", "org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupRefInventory"); + put("org.zstack.sdk.VolumeSnapshotInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotInventory"); + put("org.zstack.sdk.VolumeSnapshotReferenceTreeInventory", "org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceTreeInventory"); + put("org.zstack.sdk.VolumeSnapshotTreeInventory", "org.zstack.header.storage.snapshot.VolumeSnapshotTreeInventory"); + put("org.zstack.sdk.VolumeTO", "org.zstack.kvm.VolumeTO"); + put("org.zstack.sdk.VpcFirewallInventory", "org.zstack.vpcfirewall.entity.VpcFirewallInventory"); + put("org.zstack.sdk.VpcFirewallIpSetTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallIpSetTemplateInventory"); + put("org.zstack.sdk.VpcFirewallRuleInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleInventory"); + put("org.zstack.sdk.VpcFirewallRuleSetInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetInventory"); + put("org.zstack.sdk.VpcFirewallRuleSetL3RefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleSetL3RefInventory"); + put("org.zstack.sdk.VpcFirewallRuleTemplateInventory", "org.zstack.vpcfirewall.entity.VpcFirewallRuleTemplateInventory"); + put("org.zstack.sdk.VpcFirewallVRouterRefInventory", "org.zstack.vpcfirewall.entity.VpcFirewallVRouterRefInventory"); + put("org.zstack.sdk.VpcHaGroupApplianceVmRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupApplianceVmRefInventory"); + put("org.zstack.sdk.VpcHaGroupInventory", "org.zstack.header.vpc.ha.VpcHaGroupInventory"); + put("org.zstack.sdk.VpcHaGroupMonitorIpInventory", "org.zstack.header.vpc.ha.VpcHaGroupMonitorIpInventory"); + put("org.zstack.sdk.VpcHaGroupNetworkServiceRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupNetworkServiceRefInventory"); + put("org.zstack.sdk.VpcHaGroupVipRefInventory", "org.zstack.header.vpc.ha.VpcHaGroupVipRefInventory"); + put("org.zstack.sdk.VpcRouterDnsInventory", "org.zstack.header.vpc.VpcRouterDnsInventory"); + put("org.zstack.sdk.VpcRouterVmInventory", "org.zstack.header.vpc.VpcRouterVmInventory"); + put("org.zstack.sdk.VpcSharedQosInventory", "org.zstack.header.vipQos.VpcSharedQosInventory"); + put("org.zstack.sdk.VpcSharedQosRefVipInventory", "org.zstack.header.vipQos.VpcSharedQosRefVipInventory"); + put("org.zstack.sdk.VpcSnatStateInventory", "org.zstack.header.vpc.VpcSnatStateInventory"); + put("org.zstack.sdk.VpcUserVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcUserVpnGatewayInventory"); + put("org.zstack.sdk.VpcVirtualRouteEntryInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouteEntryInventory"); + put("org.zstack.sdk.VpcVirtualRouterInventory", "org.zstack.header.aliyun.network.vrouter.VpcVirtualRouterInventory"); + put("org.zstack.sdk.VpcVpnConnectionInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnConnectionInventory"); + put("org.zstack.sdk.VpcVpnGatewayInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnGatewayInventory"); + put("org.zstack.sdk.VpcVpnIkeConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigInventory"); + put("org.zstack.sdk.VpcVpnIkeConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIkeConfigStruct"); + put("org.zstack.sdk.VpcVpnIpSecConfigInventory", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigInventory"); + put("org.zstack.sdk.VpcVpnIpSecConfigStruct", "org.zstack.header.hybrid.network.vpn.VpcVpnIpSecConfigStruct"); + put("org.zstack.sdk.VtepInventory", "org.zstack.network.l2.vxlan.vtep.VtepInventory"); + put("org.zstack.sdk.WebhookInventory", "org.zstack.header.core.webhooks.WebhookInventory"); + put("org.zstack.sdk.XDragonHostInventory", "org.zstack.xdragon.XDragonHostInventory"); + put("org.zstack.sdk.XmlHookInventory", "org.zstack.kvm.xmlhook.XmlHookInventory"); + put("org.zstack.sdk.XmlHookType", "org.zstack.kvm.xmlhook.XmlHookType"); + put("org.zstack.sdk.XskyBlockVolumeInventory", "org.zstack.header.volume.block.XskyBlockVolumeInventory"); + put("org.zstack.sdk.YuccaBareMetal2DpuChassisConfig", "org.zstack.baremetal2.dpu.yucca.YuccaBareMetal2DpuChassisConfig"); + put("org.zstack.sdk.ZBoxBackupInventory", "org.zstack.externalbackup.zbox.ZBoxBackupInventory"); + put("org.zstack.sdk.ZBoxBackupStorageBackupInfo", "org.zstack.externalbackup.zbox.ZBoxBackupStorageBackupInfo"); + put("org.zstack.sdk.ZBoxInventory", "org.zstack.zbox.ZBoxInventory"); + put("org.zstack.sdk.ZBoxLocationRefInventory", "org.zstack.zbox.ZBoxLocationRefInventory"); + put("org.zstack.sdk.ZBoxState", "org.zstack.zbox.ZBoxState"); + put("org.zstack.sdk.ZBoxStatus", "org.zstack.zbox.ZBoxStatus"); + put("org.zstack.sdk.ZBoxVmBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVmBackupInfo"); + put("org.zstack.sdk.ZBoxVolumeBackupInfo", "org.zstack.externalbackup.zbox.ZBoxVolumeBackupInfo"); + put("org.zstack.sdk.ZQLQueryReturn", "org.zstack.zql.ZQLQueryReturn"); + put("org.zstack.sdk.ZakuImageInventory", "org.zstack.container.entity.ZakuImageInventory"); + put("org.zstack.sdk.ZdfsInventory", "org.zstack.header.zdfs.ZdfsInventory"); + put("org.zstack.sdk.ZdfsService", "org.zstack.ai.message.ModelCenterServiceInventory$ZdfsService"); + put("org.zstack.sdk.ZdfsStorageInventory", "org.zstack.header.zdfs.ZdfsStorageInventory"); + put("org.zstack.sdk.ZoneInventory", "org.zstack.header.zone.ZoneInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupInventory", "org.zstack.header.storage.database.backup.DatabaseBackupInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupStorageRefInventory", "org.zstack.header.storage.database.backup.DatabaseBackupStorageRefInventory"); + put("org.zstack.sdk.databasebackup.DatabaseBackupStruct", "org.zstack.header.storage.database.backup.DatabaseBackupStruct"); + put("org.zstack.sdk.databasebackup.DatabaseType", "org.zstack.header.storage.database.backup.DatabaseType"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterFabricInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterFabricInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterSdnControllerInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterSdnControllerInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterTenantInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterTenantInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVRouterInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVRouterInventory"); + put("org.zstack.sdk.huawei.imaster.HuaweiIMasterVpcInventory", "org.zstack.network.huawei.imaster.HuaweiIMasterVpcInventory"); + put("org.zstack.sdk.iam2.api.APIPermissionStruct", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionMsg$APIPermissionStruct"); + put("org.zstack.sdk.iam2.api.Attribute", "org.zstack.iam2.api.Attribute"); + put("org.zstack.sdk.iam2.api.ErrorResult", "org.zstack.iam2.api.ErrorResult"); + put("org.zstack.sdk.iam2.api.Permission", "org.zstack.iam2.api.APIGetIAM2VirtualIDAPIPermissionReply$Permission"); + put("org.zstack.sdk.iam2.container.ContainerClusterInventory", "org.zstack.iam2.container.ContainerClusterInventory"); + put("org.zstack.sdk.iam2.entity.AttributeType", "org.zstack.iam2.entity.AttributeType"); + put("org.zstack.sdk.iam2.entity.IAM2AttributeInventory", "org.zstack.iam2.entity.IAM2AttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationAttributeInventory", "org.zstack.iam2.entity.IAM2OrganizationAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationInventory", "org.zstack.iam2.entity.IAM2OrganizationInventory"); + put("org.zstack.sdk.iam2.entity.IAM2OrganizationProjectRefInventory", "org.zstack.iam2.entity.IAM2OrganizationProjectRefInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectAccountRefInventory", "org.zstack.iam2.entity.IAM2ProjectAccountRefInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectAttributeInventory", "org.zstack.iam2.entity.IAM2ProjectAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectInventory", "org.zstack.iam2.entity.IAM2ProjectInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectRoleInventory", "org.zstack.iam2.entity.IAM2ProjectRoleInventory"); + put("org.zstack.sdk.iam2.entity.IAM2ProjectTemplateInventory", "org.zstack.iam2.entity.IAM2ProjectTemplateInventory"); + put("org.zstack.sdk.iam2.entity.IAM2State", "org.zstack.iam2.entity.IAM2State"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupAttributeInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupAttributeInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDGroupInventory", "org.zstack.iam2.entity.IAM2VirtualIDGroupInventory"); + put("org.zstack.sdk.iam2.entity.IAM2VirtualIDInventory", "org.zstack.iam2.entity.IAM2VirtualIDInventory"); + put("org.zstack.sdk.iam2.entity.OrganizationType", "org.zstack.iam2.entity.OrganizationType"); + put("org.zstack.sdk.iam2.entity.ProjectState", "org.zstack.iam2.entity.ProjectState"); + put("org.zstack.sdk.iam2.entity.StateEvent", "org.zstack.iam2.entity.StateEvent"); + put("org.zstack.sdk.iam2.project.template.Template", "org.zstack.iam2.project.template.Template"); + put("org.zstack.sdk.identity.role.RoleInventory", "org.zstack.header.identity.role.RoleInventory"); + put("org.zstack.sdk.identity.role.RolePolicyRefInventory", "org.zstack.header.identity.role.RolePolicyRefInventory"); + put("org.zstack.sdk.identity.role.RolePolicyStatementInventory", "org.zstack.header.identity.role.RolePolicyStatementInventory"); + put("org.zstack.sdk.identity.role.RoleState", "org.zstack.header.identity.role.RoleState"); + put("org.zstack.sdk.identity.role.RoleStateEvent", "org.zstack.header.identity.role.RoleStateEvent"); + put("org.zstack.sdk.identity.role.RoleType", "org.zstack.header.identity.role.RoleType"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientAddOnUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityClientUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityClientUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityInventory", "org.zstack.license.header.server.LicenseAuthorizedCapacityInventory"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityServerUsageView", "org.zstack.license.header.server.LicenseAuthorizedCapacityServerUsageView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedCapacityUsageDetailView", "org.zstack.license.header.server.LicenseAuthorizedCapacityUsageDetailView"); + put("org.zstack.sdk.license.header.server.LicenseAuthorizedNodeInventory", "org.zstack.license.header.server.LicenseAuthorizedNodeInventory"); + put("org.zstack.sdk.license.header.server.LicenseUsageDetailView", "org.zstack.license.header.server.LicenseUsageDetailView"); + put("org.zstack.sdk.license.header.server.LicenseUsageView", "org.zstack.license.header.server.LicenseUsageView"); + put("org.zstack.sdk.license.header.server.TotalLicenseAuthorizedCapacityView", "org.zstack.license.header.server.TotalLicenseAuthorizedCapacityView"); + put("org.zstack.sdk.network.zns.L2GeneveNetworkInventory", "org.zstack.network.zns.L2GeneveNetworkInventory"); + put("org.zstack.sdk.network.zns.ZnsControllerInventory", "org.zstack.network.zns.ZnsControllerInventory"); + put("org.zstack.sdk.network.zns.ZnsTenantInventory", "org.zstack.network.zns.ZnsTenantInventory"); + put("org.zstack.sdk.network.zns.ZnsTenantRouterInventory", "org.zstack.network.zns.ZnsTenantRouterInventory"); + put("org.zstack.sdk.network.zns.ZnsTransportZoneInventory", "org.zstack.network.zns.ZnsTransportZoneInventory"); + put("org.zstack.sdk.sns.SNSAliyunSmsEndpointInventory", "org.zstack.sns.SNSAliyunSmsEndpointInventory"); + put("org.zstack.sdk.sns.SNSApplicationEndpointInventory", "org.zstack.sns.SNSApplicationEndpointInventory"); + put("org.zstack.sdk.sns.SNSApplicationPlatformInventory", "org.zstack.sns.SNSApplicationPlatformInventory"); + put("org.zstack.sdk.sns.SNSSmsReceiverInventory", "org.zstack.sns.SNSSmsReceiverInventory"); + put("org.zstack.sdk.sns.SNSSubscriberInventory", "org.zstack.sns.SNSSubscriberInventory"); + put("org.zstack.sdk.sns.SNSTopicInventory", "org.zstack.sns.SNSTopicInventory"); + put("org.zstack.sdk.sns.SmsReceiverType", "org.zstack.sns.SmsReceiverType"); + put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkAtPersonInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkAtPersonInventory"); + put("org.zstack.sdk.sns.platform.dingtalk.SNSDingTalkEndpointInventory", "org.zstack.sns.platform.dingtalk.SNSDingTalkEndpointInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailAddressInventory", "org.zstack.sns.platform.email.SNSEmailAddressInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailEndpointInventory", "org.zstack.sns.platform.email.SNSEmailEndpointInventory"); + put("org.zstack.sdk.sns.platform.email.SNSEmailPlatformInventory", "org.zstack.sns.platform.email.SNSEmailPlatformInventory"); + put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuAtPersonInventory", "org.zstack.sns.platform.feishu.SNSFeiShuAtPersonInventory"); + put("org.zstack.sdk.sns.platform.feishu.SNSFeiShuEndpointInventory", "org.zstack.sns.platform.feishu.SNSFeiShuEndpointInventory"); + put("org.zstack.sdk.sns.platform.http.SNSHttpEndpointInventory", "org.zstack.sns.platform.http.SNSHttpEndpointInventory"); + put("org.zstack.sdk.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory", "org.zstack.sns.platform.microsoftteams.SNSMicrosoftTeamsEndpointInventory"); + put("org.zstack.sdk.sns.platform.plugin.SNSPluginEndpointInventory", "org.zstack.sns.platform.plugin.SNSPluginEndpointInventory"); + put("org.zstack.sdk.sns.platform.snmp.SNSSnmpPlatformInventory", "org.zstack.sns.platform.snmp.SNSSnmpPlatformInventory"); + put("org.zstack.sdk.sns.platform.universalsms.SNSUniversalSmsEndpointInventory", "org.zstack.sns.platform.universalsms.SNSUniversalSmsEndpointInventory"); + put("org.zstack.sdk.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory", "org.zstack.sns.platform.universalsms.supplier.emay.SNSEmaySmsEndpointInventory"); + put("org.zstack.sdk.sns.platform.wecom.SNSWeComAtPersonInventory", "org.zstack.sns.platform.wecom.SNSWeComAtPersonInventory"); + put("org.zstack.sdk.sns.platform.wecom.SNSWeComEndpointInventory", "org.zstack.sns.platform.wecom.SNSWeComEndpointInventory"); + put("org.zstack.sdk.ticket.entity.ArchiveTicketInventory", "org.zstack.ticket.entity.ArchiveTicketInventory"); + put("org.zstack.sdk.ticket.entity.ArchiveTicketStatusHistoryInventory", "org.zstack.ticket.entity.ArchiveTicketStatusHistoryInventory"); + put("org.zstack.sdk.ticket.entity.TicketFlowCollectionInventory", "org.zstack.ticket.entity.TicketFlowCollectionInventory"); + put("org.zstack.sdk.ticket.entity.TicketFlowInventory", "org.zstack.ticket.entity.TicketFlowInventory"); + put("org.zstack.sdk.ticket.entity.TicketInventory", "org.zstack.ticket.entity.TicketInventory"); + put("org.zstack.sdk.ticket.entity.TicketRequest", "org.zstack.ticket.entity.TicketRequest"); + put("org.zstack.sdk.ticket.entity.TicketStatus", "org.zstack.ticket.entity.TicketStatus"); + put("org.zstack.sdk.ticket.entity.TicketStatusEvent", "org.zstack.ticket.entity.TicketStatusEvent"); + put("org.zstack.sdk.ticket.entity.TicketStatusHistoryInventory", "org.zstack.ticket.entity.TicketStatusHistoryInventory"); + put("org.zstack.sdk.ticket.entity.TicketTypeInventory", "org.zstack.ticket.entity.TicketTypeInventory"); + put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowCollectionInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowCollectionInventory"); + put("org.zstack.sdk.ticket.iam2.entity.IAM2TicketFlowInventory", "org.zstack.ticket.iam2.entity.IAM2TicketFlowInventory"); + put("org.zstack.sdk.zwatch.alarm.ActionParam", "org.zstack.zwatch.alarm.APICreateAlarmMsg$ActionParam"); + put("org.zstack.sdk.zwatch.alarm.AlarmActionInventory", "org.zstack.zwatch.alarm.AlarmActionInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmDataAckInventory", "org.zstack.zwatch.alarm.AlarmDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmInventory", "org.zstack.zwatch.alarm.AlarmInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmLabelInventory", "org.zstack.zwatch.alarm.AlarmLabelInventory"); + put("org.zstack.sdk.zwatch.alarm.AlarmState", "org.zstack.zwatch.alarm.AlarmState"); + put("org.zstack.sdk.zwatch.alarm.AlarmStatus", "org.zstack.zwatch.alarm.AlarmStatus"); + put("org.zstack.sdk.zwatch.alarm.AlertDataAckInventory", "org.zstack.zwatch.alarm.AlertDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.EventDataAckInventory", "org.zstack.zwatch.alarm.EventDataAckInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionActionInventory", "org.zstack.zwatch.alarm.EventSubscriptionActionInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionInventory", "org.zstack.zwatch.alarm.EventSubscriptionInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionLabelInventory", "org.zstack.zwatch.alarm.EventSubscriptionLabelInventory"); + put("org.zstack.sdk.zwatch.alarm.EventSubscriptionState", "org.zstack.zwatch.alarm.EventSubscriptionState"); + put("org.zstack.sdk.zwatch.alarm.activealarm.api.ActiveAlarmStatus", "org.zstack.zwatch.alarm.activealarm.api.ActiveAlarmStatus"); + put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmInventory"); + put("org.zstack.sdk.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory", "org.zstack.zwatch.alarm.activealarm.entity.ActiveAlarmTemplateInventory"); + put("org.zstack.sdk.zwatch.alarm.sns.SNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.SNSTextTemplateInventory"); + put("org.zstack.sdk.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory", "org.zstack.zwatch.alarm.sns.template.aliyunsms.AliyunSmsSNSTextTemplateInventory"); + put("org.zstack.sdk.zwatch.api.EventStruct", "org.zstack.zwatch.api.APIGetAllEventMetadataReply$EventStruct"); + put("org.zstack.sdk.zwatch.api.Histogram", "org.zstack.zwatch.api.Histogram"); + put("org.zstack.sdk.zwatch.api.MetricStruct", "org.zstack.zwatch.api.APIGetAllMetricMetadataReply$MetricStruct"); + put("org.zstack.sdk.zwatch.api.Tag", "org.zstack.zwatch.api.Histogram$Tag"); + put("org.zstack.sdk.zwatch.datatype.AlarmData", "org.zstack.zwatch.datatype.AlarmData"); + put("org.zstack.sdk.zwatch.datatype.AlarmDataV1", "org.zstack.zwatch.datatype.AlarmDataV1"); + put("org.zstack.sdk.zwatch.datatype.AlarmDataV2", "org.zstack.zwatch.datatype.AlarmDataV2"); + put("org.zstack.sdk.zwatch.datatype.AuditType", "org.zstack.zwatch.datatype.AuditType"); + put("org.zstack.sdk.zwatch.datatype.Datapoint", "org.zstack.zwatch.datatype.Datapoint"); + put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EmergencyLevel"); + put("org.zstack.sdk.zwatch.datatype.EmergencyLevel", "org.zstack.zwatch.datatype.EventFamily$EmergencyLevel"); + put("org.zstack.sdk.zwatch.datatype.EventData", "org.zstack.zwatch.datatype.EventData"); + put("org.zstack.sdk.zwatch.datatype.Label", "org.zstack.zwatch.datatype.Label"); + put("org.zstack.sdk.zwatch.datatype.MetricDatum", "org.zstack.zwatch.datatype.MetricDatum"); + put("org.zstack.sdk.zwatch.datatype.Operator", "org.zstack.zwatch.datatype.Label$Operator"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventData", "org.zstack.zwatch.influxdb.InfluxEventData"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV1", "org.zstack.zwatch.influxdb.InfluxEventDataV1"); + put("org.zstack.sdk.zwatch.influxdb.InfluxEventDataV2", "org.zstack.zwatch.influxdb.InfluxEventDataV2"); + put("org.zstack.sdk.zwatch.metricpusher.MetricDataHttpReceiverInventory", "org.zstack.zwatch.metricpusher.MetricDataHttpReceiverInventory"); + put("org.zstack.sdk.zwatch.metricpusher.MetricTemplateInventory", "org.zstack.zwatch.metricpusher.MetricTemplateInventory"); + put("org.zstack.sdk.zwatch.metricpusher.ReceiverState", "org.zstack.zwatch.metricpusher.ReceiverState"); + put("org.zstack.sdk.zwatch.migratedb.AlarmRecordsInventory", "org.zstack.zwatch.migratedb.AlarmRecordsInventory"); + put("org.zstack.sdk.zwatch.migratedb.AuditsInventory", "org.zstack.zwatch.migratedb.AuditsInventory"); + put("org.zstack.sdk.zwatch.migratedb.EventRecordsInventory", "org.zstack.zwatch.migratedb.EventRecordsInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.EventRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.EventRuleTemplateInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MetricRuleTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MetricRuleTemplateInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupAlarmInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupEventSubscriptionInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInstanceInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupState", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupState"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefInventory"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO", "org.zstack.zwatch.monitorgroup.entity.MonitorGroupTemplateRefVO"); + put("org.zstack.sdk.zwatch.monitorgroup.entity.MonitorTemplateInventory", "org.zstack.zwatch.monitorgroup.entity.MonitorTemplateInventory"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionInventory", "org.zstack.zwatch.resnotify.ResNotifySubscriptionInventory"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifySubscriptionState", "org.zstack.zwatch.resnotify.ResNotifySubscriptionState"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifyType", "org.zstack.zwatch.resnotify.ResNotifyType"); + put("org.zstack.sdk.zwatch.resnotify.ResNotifyWebhookRefInventory", "org.zstack.zwatch.resnotify.ResNotifyWebhookRefInventory"); + put("org.zstack.sdk.zwatch.ruleengine.ComparisonOperator", "org.zstack.zwatch.ruleengine.ComparisonOperator"); + put("org.zstack.sdk.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory", "org.zstack.zwatch.thirdparty.entity.SNSEndpointThirdpartyAlertHistoryInventory"); + put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyOriginalAlertInventory"); + put("org.zstack.sdk.zwatch.thirdparty.entity.ThirdpartyPlatformInventory", "org.zstack.zwatch.thirdparty.entity.ThirdpartyPlatformInventory"); } }; } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java index 37d1eaaa2cc..16c4675b2c8 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/CreateL2GeneveNetworkAction.java @@ -17,10 +17,10 @@ public static class Result { public Result throwExceptionIfError() { if (error != null) { throw new ApiException( - String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) ); } - + return this; } } @@ -89,9 +89,9 @@ private Result makeResult(ApiResult res) { ret.error = res.error; return ret; } - + org.zstack.sdk.CreateL2NetworkResult value = res.getResult(org.zstack.sdk.CreateL2NetworkResult.class); - ret.value = value == null ? new org.zstack.sdk.CreateL2NetworkResult() : value; + ret.value = value == null ? new org.zstack.sdk.CreateL2NetworkResult() : value; return ret; } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java index 1dfe3dd174e..3637f519a88 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantAction.java @@ -17,10 +17,10 @@ public static class Result { public Result throwExceptionIfError() { if (error != null) { throw new ApiException( - String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) ); } - + return this; } } @@ -33,9 +33,9 @@ private Result makeResult(ApiResult res) { ret.error = res.error; return ret; } - + org.zstack.sdk.network.zns.QueryZnsTenantResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsTenantResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantResult() : value; + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantResult() : value; return ret; } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java index 85ebcb6bb30..6145c60fc01 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsTenantRouterAction.java @@ -17,10 +17,10 @@ public static class Result { public Result throwExceptionIfError() { if (error != null) { throw new ApiException( - String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) ); } - + return this; } } @@ -33,9 +33,9 @@ private Result makeResult(ApiResult res) { ret.error = res.error; return ret; } - + org.zstack.sdk.network.zns.QueryZnsTenantRouterResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsTenantRouterResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantRouterResult() : value; + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsTenantRouterResult() : value; return ret; } From e009499e1dd36b20b607b8bd3932e27a17c18566 Mon Sep 17 00:00:00 2001 From: "shan.wu" Date: Sun, 17 May 2026 12:37:21 +0800 Subject: [PATCH 53/56] [snapshot]: ZSTAC-61889 handle late snapshot success Keep snapshot DB records when the hypervisor snapshot succeeds but later control-plane flow fails. KVMHost and VolumeSnapshotManagerImpl now share syncVolumeSnapshotDBAfterTakeSnapshot for the DB update. The regression case injects failure after data-plane success through VolumeSnapshotCreationExtensionPoint. Resolves: ZSTAC-61889 Change-Id: Ida2ef0ad95e7a2faf4d8db705d97b8807586802d --- conf/springConfigXml/volumeSnapshot.xml | 1 + .../VolumeSnapshotDBSyncExtensionPoint.java | 9 + .../src/main/java/org/zstack/kvm/KVMHost.java | 23 ++ .../snapshot/VolumeSnapshotManagerImpl.java | 89 ++++++-- ...otRollbackAfterDataPlaneSuccessCase.groovy | 205 ++++++++++++++++++ 5 files changed, 303 insertions(+), 24 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/storage/snapshot/VolumeSnapshotDBSyncExtensionPoint.java create mode 100644 test/src/test/groovy/org/zstack/test/integration/storage/snapshot/CreateSnapshotRollbackAfterDataPlaneSuccessCase.groovy diff --git a/conf/springConfigXml/volumeSnapshot.xml b/conf/springConfigXml/volumeSnapshot.xml index 09022186cb2..d26ca551061 100755 --- a/conf/springConfigXml/volumeSnapshot.xml +++ b/conf/springConfigXml/volumeSnapshot.xml @@ -26,6 +26,7 @@ + diff --git a/header/src/main/java/org/zstack/header/storage/snapshot/VolumeSnapshotDBSyncExtensionPoint.java b/header/src/main/java/org/zstack/header/storage/snapshot/VolumeSnapshotDBSyncExtensionPoint.java new file mode 100644 index 00000000000..9a86d0f29cf --- /dev/null +++ b/header/src/main/java/org/zstack/header/storage/snapshot/VolumeSnapshotDBSyncExtensionPoint.java @@ -0,0 +1,9 @@ +package org.zstack.header.storage.snapshot; + +import org.zstack.header.volume.VolumeInventory; + +public interface VolumeSnapshotDBSyncExtensionPoint { + VolumeSnapshotInventory syncVolumeSnapshotDBAfterTakeSnapshot(VolumeInventory volume, + VolumeSnapshotInventory snapshot, + String volumeNewInstallPath); +} diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index 48370a2a144..e542484be6b 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -73,6 +73,7 @@ import org.zstack.header.rest.JsonAsyncRESTCallback; import org.zstack.header.rest.RESTFacade; import org.zstack.header.storage.primary.*; +import org.zstack.header.storage.snapshot.*; import org.zstack.header.tag.SystemTagInventory; import org.zstack.header.vm.*; import org.zstack.header.vm.devices.DeviceAddress; @@ -3058,6 +3059,7 @@ public void success(TakeSnapshotResponse ret) { " data corruption may happen", ret.getNewVolumeInstallPath())); } + syncSnapshotMetadataAfterHypervisorSuccess(msg, ret); extEmitter.afterTakeSnapshot((KVMHostInventory) getSelfInventory(), msg, cmd, ret); reply.setNewVolumeInstallPath(ret.getNewVolumeInstallPath()); reply.setSnapshotInstallPath(ret.getSnapshotInstallPath()); @@ -3094,6 +3096,27 @@ public void handle(ErrorCode errCode, Map data) { }).start(); } + private void syncSnapshotMetadataAfterHypervisorSuccess(TakeSnapshotOnHypervisorMsg msg, TakeSnapshotResponse ret) { + VolumeInventory volume = msg.getVolume(); + if (volume == null || msg.getSnapshotName() == null) { + return; + } + + VolumeSnapshotInventory snapshot = new VolumeSnapshotInventory(); + snapshot.setUuid(msg.getSnapshotName()); + snapshot.setVolumeUuid(volume.getUuid()); + snapshot.setPrimaryStorageUuid(volume.getPrimaryStorageUuid()); + snapshot.setPrimaryStorageInstallPath(ret.getSnapshotInstallPath()); + snapshot.setType(VolumeSnapshotConstant.HYPERVISOR_SNAPSHOT_TYPE.toString()); + snapshot.setStatus(VolumeSnapshotStatus.Ready.toString()); + snapshot.setSize(ret.getSize()); + snapshot.setFormat(volume.getFormat()); + + for (VolumeSnapshotDBSyncExtensionPoint ext : pluginRgty.getExtensionList(VolumeSnapshotDBSyncExtensionPoint.class)) { + ext.syncVolumeSnapshotDBAfterTakeSnapshot(volume, snapshot, ret.getNewVolumeInstallPath()); + } + } + private void migrateVm(final MigrateStruct s, final Completion completion) { final TaskProgressRange parentStage = getTaskStage(); final TaskProgressRange MIGRATE_VM_STAGE = new TaskProgressRange(0, 90); diff --git a/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotManagerImpl.java b/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotManagerImpl.java index 6ac46abd7d8..de855185645 100755 --- a/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotManagerImpl.java +++ b/storage/src/main/java/org/zstack/storage/snapshot/VolumeSnapshotManagerImpl.java @@ -73,6 +73,7 @@ public class VolumeSnapshotManagerImpl extends AbstractService implements VolumeBeforeExpungeExtensionPoint, ResourceOwnerAfterChangeExtensionPoint, ReportQuotaExtensionPoint, + VolumeSnapshotDBSyncExtensionPoint, AfterReimageVmInstanceExtensionPoint, VmJustBeforeDeleteFromDbExtensionPoint, VolumeJustBeforeDeleteFromDbExtensionPoint, @@ -680,6 +681,12 @@ private void rollbackSnapshot(String uuid) { return; } + if (vo.getStatus() == VolumeSnapshotStatus.Ready) { + logger.warn(String.format("volume snapshot[uuid:%s] has been marked Ready, skip rollback to keep control plane metadata consistent with hypervisor snapshot", + uuid)); + return; + } + dbf.getEntityManager().remove(vo); String sql = "delete from AccountResourceRefVO where resourceUuid = :vsUuid and resourceType = 'VolumeSnapshotVO'"; @@ -697,6 +704,42 @@ private void rollbackSnapshot(String uuid) { } } + @Override + @Transactional + public VolumeSnapshotInventory syncVolumeSnapshotDBAfterTakeSnapshot(VolumeInventory volume, + VolumeSnapshotInventory snapshot, + String volumeNewInstallPath) { + if (volumeNewInstallPath != null) { + VolumeVO latestVol = dbf.findByUuid(volume.getUuid(), VolumeVO.class); + latestVol.setInstallPath(volumeNewInstallPath); + dbf.update(latestVol); + } + + VolumeSnapshotVO svo = dbf.findByUuid(snapshot.getUuid(), VolumeSnapshotVO.class); + if (svo == null) { + return null; + } + + svo.setType(snapshot.getType()); + svo.setPrimaryStorageUuid(snapshot.getPrimaryStorageUuid()); + svo.setPrimaryStorageInstallPath(snapshot.getPrimaryStorageInstallPath()); + svo.setStatus(VolumeSnapshotStatus.Ready); + svo.setSize(snapshot.getSize()); + if (snapshot.getFormat() != null) { + svo.setFormat(snapshot.getFormat()); + } + svo = dbf.updateAndRefresh(svo); + + markSnapshotTreeCompleted(VolumeSnapshotInventory.valueOf(svo)); + if (svo.getParentUuid() == null) { + VolumeSnapshotReferenceUtils.updateReferenceAfterFirstSnapshot(svo); + } + + logger.debug(String.format("synced volume snapshot[uuid:%s] metadata after hypervisor snapshot succeeded", + svo.getUuid())); + return VolumeSnapshotInventory.valueOf(svo); + } + private void handle(final AskVolumeSnapshotStructMsg msg) { AskVolumeSnapshotStructReply reply = new AskVolumeSnapshotStructReply(); CreateVolumeSnapshotMsg cmsg = new CreateVolumeSnapshotMsg(); @@ -991,33 +1034,14 @@ public void run(MessageReply reply) { done(new FlowDoneHandler(msg) { @Override public void handle(Map data) { - markSnapshotTreeCompleted(snapshot); - if (volumeNewInstallPath != null) { - vol.setInstallPath(volumeNewInstallPath); - dbf.update(vol); - } - - VolumeSnapshotVO svo = dbf.findByUuid(snapshot.getUuid(), VolumeSnapshotVO.class); - svo.setType(snapshot.getType()); - svo.setPrimaryStorageUuid(snapshot.getPrimaryStorageUuid()); - svo.setPrimaryStorageInstallPath(snapshot.getPrimaryStorageInstallPath()); - svo.setStatus(VolumeSnapshotStatus.Ready); - svo.setSize(snapshot.getSize()); - if (snapshot.getFormat() != null) { - svo.setFormat(snapshot.getFormat()); - } - svo = dbf.updateAndRefresh(svo); - - if (struct.isNewChain()) { - VolumeSnapshotReferenceUtils.updateReferenceAfterFirstSnapshot(svo); - } + VolumeSnapshotInventory sp = syncVolumeSnapshotDBAfterTakeSnapshot( + vol.toInventory(), snapshot, volumeNewInstallPath); new FireSnapShotCanonicalEvent(). fireSnapShotStatusChangedEvent( VolumeSnapshotStatus.valueOf(snapshot.getStatus()), - VolumeSnapshotInventory.valueOf(svo)); + sp); - VolumeSnapshotInventory sp = svo.toInventory(); callExtensionPoints(sp); ret.setInventory(sp); @@ -1034,8 +1058,18 @@ private void callExtensionPoints(VolumeSnapshotInventory sp) { error(new FlowErrorHandler(msg) { @Override public void handle(ErrorCode errCode, Map data) { - if (struct != null) { - rollbackSnapshot(struct.getCurrent().getUuid()); + if (snapshot != null) { + syncVolumeSnapshotDBAfterTakeSnapshot(vol.toInventory(), snapshot, volumeNewInstallPath); + logger.warn(String.format("volume snapshot[uuid:%s] has been created on primary storage, keep database record for recovery after error: %s", + snapshot.getUuid(), errCode)); + } else if (struct != null) { + String snapshotUuid = struct.getCurrent().getUuid(); + if (getCurrentSnapshotStatus(snapshotUuid) == VolumeSnapshotStatus.Ready) { + logger.warn(String.format("volume snapshot[uuid:%s] has been marked Ready, keep database record after error: %s", + snapshotUuid, errCode)); + } else { + rollbackSnapshot(snapshotUuid); + } } ret.setError(errCode); bus.reply(msg, ret); @@ -1045,6 +1079,13 @@ public void handle(ErrorCode errCode, Map data) { }).start(); } + private VolumeSnapshotStatus getCurrentSnapshotStatus(String uuid) { + return Q.New(VolumeSnapshotVO.class) + .select(VolumeSnapshotVO_.status) + .eq(VolumeSnapshotVO_.uuid, uuid) + .findValue(); + } + private void handle(MarkRootVolumeAsSnapshotMsg msg) { final MarkRootVolumeAsSnapshotReply ret = new MarkRootVolumeAsSnapshotReply(); VolumeInventory vol = msg.getVolume(); diff --git a/test/src/test/groovy/org/zstack/test/integration/storage/snapshot/CreateSnapshotRollbackAfterDataPlaneSuccessCase.groovy b/test/src/test/groovy/org/zstack/test/integration/storage/snapshot/CreateSnapshotRollbackAfterDataPlaneSuccessCase.groovy new file mode 100644 index 00000000000..46979001b31 --- /dev/null +++ b/test/src/test/groovy/org/zstack/test/integration/storage/snapshot/CreateSnapshotRollbackAfterDataPlaneSuccessCase.groovy @@ -0,0 +1,205 @@ +package org.zstack.test.integration.storage.snapshot + +import org.springframework.http.HttpEntity +import org.zstack.core.Platform +import org.zstack.core.componentloader.PluginRegistry +import org.zstack.core.db.Q +import org.zstack.header.core.Completion +import org.zstack.header.core.workflow.Flow +import org.zstack.header.storage.snapshot.ConsistentType +import org.zstack.header.storage.snapshot.CreateVolumesSnapshotOverlayInnerMsg +import org.zstack.header.storage.snapshot.TakeVolumesSnapshotOnKvmReply +import org.zstack.header.storage.snapshot.VolumeSnapshotConstant +import org.zstack.header.storage.snapshot.VolumeSnapshotCreationExtensionPoint +import org.zstack.header.storage.snapshot.VolumeSnapshotStatus +import org.zstack.header.storage.snapshot.VolumeSnapshotTreeStatus +import org.zstack.header.storage.snapshot.VolumeSnapshotTreeVO +import org.zstack.header.storage.snapshot.VolumeSnapshotInventory +import org.zstack.header.storage.snapshot.VolumeSnapshotVO +import org.zstack.header.storage.snapshot.VolumeSnapshotVO_ +import org.zstack.header.storage.snapshot.group.VolumeSnapshotGroupInventory +import org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceVO +import org.zstack.header.storage.snapshot.reference.VolumeSnapshotReferenceVO_ +import org.zstack.header.volume.CreateVolumeSnapshotGroupMessage +import org.zstack.header.volume.VolumeVO +import org.zstack.header.volume.VolumeVO_ +import org.zstack.kvm.KVMAgentCommands +import org.zstack.kvm.KVMConstant +import org.zstack.sdk.VmInstanceInventory +import org.zstack.test.integration.ldap.Env +import org.zstack.test.integration.storage.StorageTest +import org.zstack.testlib.EnvSpec +import org.zstack.testlib.SubCase +import org.zstack.utils.gson.JSONObjectUtil + +class CreateSnapshotRollbackAfterDataPlaneSuccessCase extends SubCase { + EnvSpec env + VmInstanceInventory vm + + int takeSnapshotCount = 0 + String firstSnapshotInstallPath + String firstNewVolumeInstallPath + String secondVolumeInstallPath + String secondSnapshotInstallPath + String secondNewVolumeInstallPath + long snapshotSize = 1L + + @Override + void clean() { + env.delete() + } + + @Override + void setup() { + useSpring(StorageTest.springSpec) + } + + @Override + void environment() { + env = Env.localStorageOneVmEnv() + } + + @Override + void test() { + env.create { + vm = env.inventoryByName("vm") as VmInstanceInventory + testKeepSnapshotMetadataWhenControlPlaneFailsAfterDataPlaneSuccess() + } + } + + void testKeepSnapshotMetadataWhenControlPlaneFailsAfterDataPlaneSuccess() { + String originalVolumeInstallPath = Q.New(VolumeVO.class) + .select(VolumeVO_.installPath) + .eq(VolumeVO_.uuid, vm.rootVolumeUuid) + .findValue() + + env.simulator(KVMConstant.KVM_TAKE_VOLUME_SNAPSHOT_PATH) { HttpEntity e, EnvSpec espec -> + KVMAgentCommands.TakeSnapshotCmd cmd = JSONObjectUtil.toObject(e.body, KVMAgentCommands.TakeSnapshotCmd.class) + takeSnapshotCount++ + + if (takeSnapshotCount == 1) { + assert cmd.volumeInstallPath == originalVolumeInstallPath + firstSnapshotInstallPath = cmd.volumeInstallPath + firstNewVolumeInstallPath = cmd.installPath + } else if (takeSnapshotCount == 2) { + secondVolumeInstallPath = cmd.volumeInstallPath + secondSnapshotInstallPath = cmd.volumeInstallPath + secondNewVolumeInstallPath = cmd.installPath + } + + KVMAgentCommands.TakeSnapshotResponse rsp = new KVMAgentCommands.TakeSnapshotResponse() + rsp.newVolumeInstallPath = cmd.installPath + rsp.snapshotInstallPath = cmd.volumeInstallPath + rsp.size = snapshotSize + return rsp + } + + PluginRegistry pluginRegistry = bean(PluginRegistry.class) + List extensions = pluginRegistry.getExtensionList(VolumeSnapshotCreationExtensionPoint.class) + FailAfterSnapshotCreatedExtension failureExtension = new FailAfterSnapshotCreatedExtension() + extensions.add(failureExtension) + + try { + expectError { + createVolumeSnapshot { + name = "snapshot-fail-after-metadata-synced" + volumeUuid = vm.rootVolumeUuid + } + } + + assert takeSnapshotCount == 1 + + VolumeSnapshotVO firstSnapshot + retryInSecs(10, 1) { + firstSnapshot = Q.New(VolumeSnapshotVO.class) + .eq(VolumeSnapshotVO_.volumeUuid, vm.rootVolumeUuid) + .find() + assert firstSnapshot != null + assert firstSnapshot.status == VolumeSnapshotStatus.Ready + } + + assert firstSnapshot.latest + assert firstSnapshot.primaryStorageInstallPath == firstSnapshotInstallPath + assert firstSnapshot.type == VolumeSnapshotConstant.HYPERVISOR_SNAPSHOT_TYPE.toString() + assert firstSnapshot.size == snapshotSize + + VolumeSnapshotTreeVO firstTree = dbFindByUuid(firstSnapshot.treeUuid, VolumeSnapshotTreeVO.class) + assert firstTree.current + assert firstTree.status == VolumeSnapshotTreeStatus.Completed + + assert Q.New(VolumeVO.class) + .select(VolumeVO_.installPath) + .eq(VolumeVO_.uuid, vm.rootVolumeUuid) + .findValue() == firstNewVolumeInstallPath + + VolumeSnapshotReferenceVO ref = Q.New(VolumeSnapshotReferenceVO.class) + .eq(VolumeSnapshotReferenceVO_.volumeUuid, vm.rootVolumeUuid) + .limit(1) + .find() + if (ref != null && ref.referenceInstallUrl == firstSnapshotInstallPath) { + assert ref.referenceUuid == firstSnapshot.uuid + assert ref.referenceType == VolumeSnapshotVO.class.simpleName + } + + org.zstack.sdk.VolumeSnapshotInventory secondSnapshotInv = createVolumeSnapshot { + name = "snapshot-after-recovery" + volumeUuid = vm.rootVolumeUuid + } as org.zstack.sdk.VolumeSnapshotInventory + + assert takeSnapshotCount == 2 + assert secondVolumeInstallPath == firstNewVolumeInstallPath + + VolumeSnapshotVO firstSnapshotAfterRecovery = dbFindByUuid(firstSnapshot.uuid, VolumeSnapshotVO.class) + VolumeSnapshotVO secondSnapshot = dbFindByUuid(secondSnapshotInv.uuid, VolumeSnapshotVO.class) + assert !firstSnapshotAfterRecovery.latest + assert secondSnapshot.latest + assert secondSnapshot.parentUuid == firstSnapshot.uuid + assert secondSnapshot.primaryStorageInstallPath == secondSnapshotInstallPath + assert secondSnapshot.status == VolumeSnapshotStatus.Ready + + assert Q.New(VolumeSnapshotVO.class) + .eq(VolumeSnapshotVO_.volumeUuid, vm.rootVolumeUuid) + .count() == 2 + assert Q.New(VolumeVO.class) + .select(VolumeVO_.installPath) + .eq(VolumeVO_.uuid, vm.rootVolumeUuid) + .findValue() == secondNewVolumeInstallPath + } finally { + extensions.remove(failureExtension) + } + } + + private static class FailAfterSnapshotCreatedExtension implements VolumeSnapshotCreationExtensionPoint { + boolean failAfterSnapshotCreated = true + + @Override + void afterVolumeSnapshotCreated(VolumeSnapshotInventory snapshot, Completion completion) { + if (failAfterSnapshotCreated) { + failAfterSnapshotCreated = false + completion.fail(Platform.operr("TEST.ERROR", "fail after KVM snapshot has been created")) + return + } + + completion.success() + } + + @Override + void afterVolumeLiveSnapshotGroupCreatedOnBackend(CreateVolumesSnapshotOverlayInnerMsg msg, TakeVolumesSnapshotOnKvmReply treply, Completion completion) { + completion.success() + } + + @Override + void afterVolumeLiveSnapshotGroupCreationFailsOnBackend(CreateVolumesSnapshotOverlayInnerMsg msg, TakeVolumesSnapshotOnKvmReply treply) { + } + + @Override + void afterVolumeSnapshotGroupCreated(VolumeSnapshotGroupInventory snapshotGroup, ConsistentType consistentType, Completion completion) { + completion.success() + } + + @Override + List beforeCreateVolumeSnapshotFlow(CreateVolumeSnapshotGroupMessage msg) { + return null + } + } +} From 8ffea20f5e339ea731bd5375dd934871116b411e Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Sat, 16 May 2026 08:14:24 +0800 Subject: [PATCH 54/56] [license]: support license lsclient Support License Server client API tests and related simulator, multipart request, request reader, and host tracker cleanup. Resolves: ZCF-3300 Change-Id: I4e157503cb58481a9bd2646981889e1477fa15d8 --- .../zstack/compute/host/HostTrackImpl.java | 15 +++ .../sdk/RegisterLicenseClientAction.java | 113 ++++++++++++++++++ .../sdk/RegisterLicenseClientResult.java | 38 ++++++ .../java/org/zstack/testlib/EnvSpec.groovy | 91 ++++++++++++-- .../org/zstack/testlib/TestLibController.java | 12 +- 5 files changed, 257 insertions(+), 12 deletions(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientResult.java diff --git a/compute/src/main/java/org/zstack/compute/host/HostTrackImpl.java b/compute/src/main/java/org/zstack/compute/host/HostTrackImpl.java index 48ed6a7dc48..19a5e56a752 100755 --- a/compute/src/main/java/org/zstack/compute/host/HostTrackImpl.java +++ b/compute/src/main/java/org/zstack/compute/host/HostTrackImpl.java @@ -36,6 +36,7 @@ public class HostTrackImpl implements HostTracker, ManagementNodeChangeListener, private final static CLogger logger = Utils.getLogger(HostTrackImpl.class); private Map trackers = new ConcurrentHashMap<>(); + private volatile boolean stopped; private static boolean alwaysStartRightNow = false; private static final Cache skippedPingHostDeadline = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build(); @@ -251,6 +252,11 @@ public void cancel() { public void trackHost(String hostUuid) { + if (stopped) { + logger.debug(String.format("skip tracking host[uuid:%s], host tracker is stopped", hostUuid)); + return; + } + if (!destMaker.isManagedByUs(hostUuid)) { logger.debug(String.format("skip tracking host[uuid:%s], not managed by us", hostUuid)); return; @@ -285,6 +291,11 @@ public void untrackHost(String huuid) { @Override public void trackHost(Collection huuids) { + if (stopped) { + logger.debug(String.format("skip tracking hosts%s, host tracker is stopped", huuids)); + return; + } + huuids.forEach(this::trackHost); } @@ -353,6 +364,7 @@ private HostReconnectTaskFactory getHostReconnectTaskFactory(String hvType) { @Override public boolean start() { + stopped = false; populateExtensions(); onHostStatusChange(); onHostPingSkip(); @@ -421,6 +433,9 @@ protected void run(Map tokens, Object data) { @Override public boolean stop() { + stopped = true; + new HashSet<>(trackers.values()).forEach(Tracker::cancel); + trackers.clear(); return true; } } diff --git a/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientAction.java b/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientAction.java new file mode 100644 index 00000000000..83fedbad41e --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientAction.java @@ -0,0 +1,113 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class RegisterLicenseClientAction extends AbstractAction { + + private static final HashMap parameterMap = new HashMap<>(); + + private static final HashMap nonAPIParameterMap = new HashMap<>(); + + public static class Result { + public ErrorCode error; + public org.zstack.sdk.RegisterLicenseClientResult value; + + public Result throwExceptionIfError() { + if (error != null) { + throw new ApiException( + String.format("error[code: %s, description: %s, details: %s, globalErrorCode: %s]", error.code, error.description, error.details, error.globalErrorCode) + ); + } + + return this; + } + } + + @Param(required = true, nonempty = true, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String serverUrl; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String siteName; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String productLine; + + @Param(required = true, nonempty = true, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String bundle; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String bundleName; + + @Param(required = false) + public java.util.List systemTags; + + @Param(required = false) + public java.util.List userTags; + + @Param(required = false) + public String sessionId; + + @Param(required = false) + public String accessKeyId; + + @Param(required = false) + public String accessKeySecret; + + @Param(required = false) + public String requestIp; + + @NonAPIParam + public long timeout = -1; + + @NonAPIParam + public long pollingInterval = -1; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.RegisterLicenseClientResult value = res.getResult(org.zstack.sdk.RegisterLicenseClientResult.class); + ret.value = value == null ? new org.zstack.sdk.RegisterLicenseClientResult() : value; + + return ret; + } + + public Result call() { + ApiResult res = ZSClient.call(this); + return makeResult(res); + } + + public void call(final Completion completion) { + ZSClient.call(this, new InternalCompletion() { + @Override + public void complete(ApiResult res) { + completion.complete(makeResult(res)); + } + }); + } + + protected Map getParameterMap() { + return parameterMap; + } + + protected Map getNonAPIParameterMap() { + return nonAPIParameterMap; + } + + protected RestInfo getRestInfo() { + RestInfo info = new RestInfo(); + info.httpMethod = "POST"; + info.path = "/licenses/client"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientResult.java b/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientResult.java new file mode 100644 index 00000000000..f731129c21d --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/RegisterLicenseClientResult.java @@ -0,0 +1,38 @@ +package org.zstack.sdk; + + + +public class RegisterLicenseClientResult { + public java.lang.String siteUuid; + public void setSiteUuid(java.lang.String siteUuid) { + this.siteUuid = siteUuid; + } + public java.lang.String getSiteUuid() { + return this.siteUuid; + } + + public java.lang.String state; + public void setState(java.lang.String state) { + this.state = state; + } + public java.lang.String getState() { + return this.state; + } + + public long licenseCount; + public void setLicenseCount(long licenseCount) { + this.licenseCount = licenseCount; + } + public long getLicenseCount() { + return this.licenseCount; + } + + public java.lang.String config; + public void setConfig(java.lang.String config) { + this.config = config; + } + public java.lang.String getConfig() { + return this.config; + } + +} diff --git a/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy b/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy index e0dbab38c3c..fec7d2c2eaf 100755 --- a/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy +++ b/testlib/src/main/java/org/zstack/testlib/EnvSpec.groovy @@ -4,6 +4,7 @@ import groovy.transform.AutoClone import org.codehaus.groovy.runtime.InvokerHelper import org.springframework.http.* import org.springframework.http.client.HttpComponentsClientHttpRequestFactory +import org.springframework.web.multipart.MultipartHttpServletRequest import org.springframework.web.client.RestTemplate import org.zstack.compute.vm.VmGlobalConfig import org.zstack.configuration.SqlForeignKeyGenerator @@ -109,6 +110,7 @@ class EnvSpec extends ApiHelper implements Node { private ConcurrentHashMap> defaultHttpConditionHandlers = [:] protected static RestTemplate restTemplate protected static Set simulatorClasses = Platform.reflections.getSubTypesOf(Simulator.class) + private static volatile List> cachedEORelations static Set cleanupClosures = [] private Map virtualFilesSystems = [:] @@ -804,8 +806,6 @@ class EnvSpec extends ApiHelper implements Node { } private void cleanupEO() { - SqlForeignKeyGenerator g = new SqlForeignKeyGenerator() - def vos = Platform.reflections.getTypesAnnotatedWith(EO.class).findAll { it.isAnnotationPresent(EO.class) } logger.debug(String.format("cleanupEO->clean targets(%s): %s", vos.size(), vos.toString())) Map eoNameEOClassMap = new HashMap<>() @@ -824,7 +824,19 @@ class EnvSpec extends ApiHelper implements Node { logger.debug(String.format("cleanupEO->clean targets(%s): %s", eoNameEOClassMap.size(), eoNameEOClassMap.toString())) logger.debug(String.format("cleanupEO->all nodes(%s): %s", nodes.size(), nodes.toString())) - new TraverseCleanEO(g.generateEORelations(), nodes, eoNameEOClassMap, eoNameVOClassMap).traverse() + new TraverseCleanEO(eoRelations(), nodes, eoNameEOClassMap, eoNameVOClassMap).traverse() + } + + private static List> eoRelations() { + if (cachedEORelations == null) { + synchronized (EnvSpec.class) { + if (cachedEORelations == null) { + cachedEORelations = Collections.unmodifiableList(new SqlForeignKeyGenerator().generateEORelations()) + } + } + } + + return cachedEORelations } protected void callDeleteOnResourcesNeedDeletion() { @@ -988,21 +1000,78 @@ class EnvSpec extends ApiHelper implements Node { } HttpEntity getEntityFromRequest(HttpServletRequest req) { - StringBuilder sb = new StringBuilder() - String line - while ((line = req.getReader().readLine()) != null) { - sb.append(line) - } - req.getReader().close() - HttpHeaders header = new HttpHeaders() for (Enumeration e = req.getHeaderNames() ; e.hasMoreElements() ;) { String name = e.nextElement().toString() header.add(name, req.getHeader(name)) } + + StringBuilder sb = new StringBuilder() + if (req.getContentType()?.toLowerCase()?.startsWith("multipart/")) { + sb.append(readMultipartBody(req)) + } else { + def reader = req.getReader() + try { + String line + while ((line = reader.readLine()) != null) { + sb.append(line) + } + } finally { + reader.close() + } + } + return new HttpEntity(sb.toString(), header) } + protected String readMultipartBody(HttpServletRequest req) { + byte[] raw = req.inputStream.bytes + if (raw.length > 0) { + return new String(raw, "UTF-8") + } + + if (req instanceof MultipartHttpServletRequest) { + return readSpringMultipartBody(req as MultipartHttpServletRequest) + } + + StringBuilder sb = new StringBuilder() + try { + req.getParts().each { part -> + appendMultipartPart(sb, part.name, part.submittedFileName, part.contentType, part.inputStream.bytes) + } + } catch (Throwable t) { + logger.debug("failed to read multipart parts for ${req.requestURI}", t) + } + return sb.toString() + } + + protected String readSpringMultipartBody(MultipartHttpServletRequest req) { + StringBuilder sb = new StringBuilder() + req.parameterMap.each { String name, String[] values -> + values.each { value -> + appendMultipartPart(sb, name, null, "text/plain", value == null ? new byte[0] : value.getBytes("UTF-8")) + } + } + req.fileMap.each { String name, file -> + appendMultipartPart(sb, name, file.originalFilename, file.contentType, file.bytes) + } + return sb.toString() + } + + protected void appendMultipartPart(StringBuilder sb, String name, String filename, String contentType, byte[] content) { + sb.append("Content-Disposition: form-data; name=\"").append(name).append("\"") + if (filename != null) { + sb.append("; filename=\"").append(filename).append("\"") + } + sb.append("\n") + if (contentType != null) { + sb.append("Content-Type: ").append(contentType).append("\n") + } + sb.append("\n") + sb.append(new String(content == null ? new byte[0] : content, "UTF-8")) + sb.append("\n") + } + void handleConditionSimulatorHttpRequests(HttpServletRequest req, HttpEntity entity, HttpServletResponse rsp) { def url = req.getRequestURI() if (httpConditionHandlers[url] == null || httpConditionHandlers[url].isEmpty()) { @@ -1223,4 +1292,4 @@ class EnvSpec extends ApiHelper implements Node { void resetAllMessageSize() { messageHandlerCounters.clear() } -} \ No newline at end of file +} diff --git a/testlib/src/main/java/org/zstack/testlib/TestLibController.java b/testlib/src/main/java/org/zstack/testlib/TestLibController.java index 286eae91b04..545acb8b278 100755 --- a/testlib/src/main/java/org/zstack/testlib/TestLibController.java +++ b/testlib/src/main/java/org/zstack/testlib/TestLibController.java @@ -27,7 +27,7 @@ public class TestLibController { private static final ExecutorService pool = Executors.newFixedThreadPool(32); @RequestMapping( - value = "/**", + value = {"/**", "/v1/sites/**", "/v1/quota/**"}, method = { RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE, RequestMethod.GET, RequestMethod.HEAD, RequestMethod.OPTIONS, RequestMethod.PATCH, RequestMethod.TRACE @@ -39,6 +39,11 @@ public void handle(HttpServletRequest request, HttpServletResponse response) thr return; } + if (isMultipartRequest(request)) { + Test.handleHttp(request, response); + return; + } + final AsyncContext asyncContext = request.startAsync(); asyncContext.setTimeout(TestConfigUtils.getMessageTimeoutMillisConfig()); @@ -59,6 +64,11 @@ public void handle(HttpServletRequest request, HttpServletResponse response) thr }); } + private boolean isMultipartRequest(HttpServletRequest request) { + String contentType = request.getContentType(); + return contentType != null && contentType.toLowerCase().startsWith("multipart/"); + } + @PreDestroy public void shutdownPool() { logger.info("Shutting down TestLibController pool"); From 5e886882c240563f2c8134ac05d0a3807ae083e3 Mon Sep 17 00:00:00 2001 From: "hanyu.liang" Date: Sat, 16 May 2026 08:14:35 +0800 Subject: [PATCH 55/56] [case]: stabilize integration cases Stabilize long job handling and shared integration test behavior. Resolves: ZCF-3300 Change-Id: Ie4e7ef2564c87c239894bcf82a9ea865a70e73de --- .../org/zstack/longjob/LongJobManagerImpl.java | 7 ++++--- .../main/java/org/zstack/longjob/LongJobUtils.java | 5 +++-- .../src/main/java/org/zstack/testlib/Test.groovy | 14 ++++++++------ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/longjob/src/main/java/org/zstack/longjob/LongJobManagerImpl.java b/longjob/src/main/java/org/zstack/longjob/LongJobManagerImpl.java index 975b0e711db..79a01a76efa 100755 --- a/longjob/src/main/java/org/zstack/longjob/LongJobManagerImpl.java +++ b/longjob/src/main/java/org/zstack/longjob/LongJobManagerImpl.java @@ -613,6 +613,9 @@ private void handle(SubmitLongJobMsg msg) { vo.setTargetResourceUuid(msg.getTargetResourceUuid()); vo.setManagementNodeUuid(Platform.getManagementServerId()); vo.setAccountUuid(msg.getAccountUuid()); + Timestamp now = Timestamp.valueOf(LocalDateTime.now()); + vo.setCreateDate(now); + vo.setLastOpDate(now); vo = dbf.persistAndRefresh(vo); msg.setJobUuid(vo.getUuid()); tagMgr.createTags(msg.getSystemTags(), msg.getUserTags(), vo.getUuid(), LongJobVO.class.getSimpleName()); @@ -831,9 +834,7 @@ public void validateGlobalConfig(String category, String name, String oldValue, dbf.installEntityLifeCycleCallback(LongJobVO.class, EntityEvent.PRE_UPDATE, (evt, o) -> { LongJobVO job = (LongJobVO) o; if (job.getExecuteTime() == null && jobCompleted(job)) { - long time = (System.currentTimeMillis() - job.getCreateDate().getTime()) / 1000; - job.setExecuteTime(Long.max(time, 1)); - logger.info(String.format("longjob [uuid:%s] set execute time:%d", job.getUuid(), time)); + setExecuteTimeIfNeed(job); } }); diff --git a/longjob/src/main/java/org/zstack/longjob/LongJobUtils.java b/longjob/src/main/java/org/zstack/longjob/LongJobUtils.java index 2d6d2fabc8e..c4d37f98ebe 100644 --- a/longjob/src/main/java/org/zstack/longjob/LongJobUtils.java +++ b/longjob/src/main/java/org/zstack/longjob/LongJobUtils.java @@ -202,9 +202,10 @@ private static boolean isRecoverableError(ErrorCode errorCode) { return recoverable instanceof Boolean && (Boolean) recoverable; } - private static void setExecuteTimeIfNeed(LongJobVO job) { + static void setExecuteTimeIfNeed(LongJobVO job) { if (job.getExecuteTime() == null) { - long time = (System.currentTimeMillis() - job.getCreateDate().getTime()) / 1000; + long startTime = job.getCreateDate() == null ? System.currentTimeMillis() : job.getCreateDate().getTime(); + long time = (System.currentTimeMillis() - startTime) / 1000; job.setExecuteTime(Long.max(time, 1)); logger.info(String.format("longjob [uuid:%s] set execute time:%d.", job.getUuid(), time)); } diff --git a/testlib/src/main/java/org/zstack/testlib/Test.groovy b/testlib/src/main/java/org/zstack/testlib/Test.groovy index 40f46defad1..ba84a10c09a 100755 --- a/testlib/src/main/java/org/zstack/testlib/Test.groovy +++ b/testlib/src/main/java/org/zstack/testlib/Test.groovy @@ -633,12 +633,14 @@ abstract class Test extends ApiHelper implements Retry { } static void handleHttp(HttpServletRequest request, HttpServletResponse response) { - if (WebBeanConstructor.WEB_HOOK_PATH.toString().contains(request.getRequestURI())) { - ZSClient.webHookCallback(request, response) - } else { - currentEnvSpec.handleSimulatorHttpRequests(request, response) - } - } + if (WebBeanConstructor.WEB_HOOK_PATH.toString().contains(request.getRequestURI())) { + ZSClient.webHookCallback(request, response) + } else if (currentEnvSpec == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND) + } else { + currentEnvSpec.handleSimulatorHttpRequests(request, response) + } + } static class SubCaseResult { Boolean success From 5818d9577f2dd01f9af37b6952ff87e75d2e98d3 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 18 May 2026 03:09:56 +0800 Subject: [PATCH 56/56] [network]: rollback failed service attach Remove stale network service refs on backend attach failure. Add missing ZNS L3 error code constant. Resolves: ZCF-3703 Change-Id: Ibdb091763161d3ee1da230c124dbc18bef898ac2 --- network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java | 2 ++ .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java index f61c5a9d79e..1e4f046423d 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -1541,12 +1541,14 @@ public void done(ErrorCodeList errorCodeList) { detachNetworkServiceFromL3NetworkMsg(l3VO, refVOS, new Completion(msg) { @Override public void success() { + dbf.removeCollection(refVOS, NetworkServiceL3NetworkRefVO.class); reply.setError(errorCodeList.getCauses().get(0)); bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { + dbf.removeCollection(refVOS, NetworkServiceL3NetworkRefVO.class); reply.setError(errorCodeList.getCauses().get(0)); bus.reply(msg, reply); } diff --git a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java index ace4537921c..e406468f95a 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12123,6 +12123,7 @@ public class CloudOperationsErrorCode { // 10039 ZNS did not return any IPs // 10040 ZNS did not return Cloud allocated IP version // 10041 VM NIC MAC update is not supported for ZNS NICs + // 10042 L3Network not found while enabling ZNS DHCP public static final String ORG_ZSTACK_NETWORK_ZNS_10035 = "ORG_ZSTACK_NETWORK_ZNS_10035"; public static final String ORG_ZSTACK_NETWORK_ZNS_10036 = "ORG_ZSTACK_NETWORK_ZNS_10036"; public static final String ORG_ZSTACK_NETWORK_ZNS_10037 = "ORG_ZSTACK_NETWORK_ZNS_10037"; @@ -12130,6 +12131,7 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10039 = "ORG_ZSTACK_NETWORK_ZNS_10039"; public static final String ORG_ZSTACK_NETWORK_ZNS_10040 = "ORG_ZSTACK_NETWORK_ZNS_10040"; public static final String ORG_ZSTACK_NETWORK_ZNS_10041 = "ORG_ZSTACK_NETWORK_ZNS_10041"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10042 = "ORG_ZSTACK_NETWORK_ZNS_10042"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000";