From 2988b170903e7bbafe8e8ccd01e492643cbf3594 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 15:50:39 +0800 Subject: [PATCH 01/66] [zstack]: mirror zns contract fixture Add CP-031 canonical contract fixture mirror. Resolves: ZCF-5485 Change-Id: I7f7636e7aab58b33bdf244dff28322315dbe211e --- test/src/test/resources/zns/zcf5485/SHA256SUMS | 1 + test/src/test/resources/zns/zcf5485/segment-cloud-contract.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 test/src/test/resources/zns/zcf5485/SHA256SUMS create mode 100644 test/src/test/resources/zns/zcf5485/segment-cloud-contract.json diff --git a/test/src/test/resources/zns/zcf5485/SHA256SUMS b/test/src/test/resources/zns/zcf5485/SHA256SUMS new file mode 100644 index 00000000000..75ade633e84 --- /dev/null +++ b/test/src/test/resources/zns/zcf5485/SHA256SUMS @@ -0,0 +1 @@ +26f7ebd99c7637900291a5968ff53c8a6fcdb3cdb3549f237c53efe53b71742b *segment-cloud-contract.json diff --git a/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json b/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json new file mode 100644 index 00000000000..3d70dc8cfec --- /dev/null +++ b/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json @@ -0,0 +1 @@ +{"contract":"ZCF-5485","version":1,"cloud_inventory":{"segment_uuid":"00000000-0000-0000-0000-000000000101","transport_zone_uuid":"00000000-0000-0000-0000-000000000201","transport_type":"overlay","cloud_zone_uuid":"00000000-0000-0000-0000-000000000301","cluster_uuids":["00000000-0000-0000-0000-000000000401"],"tenant_router_uuid":"00000000-0000-0000-0000-000000000501"},"cloud_projection":{"segment_uuid":"00000000-0000-0000-0000-000000000101","config_version":7,"etag":"\"7-abc\"","mtu":8950,"transport_zone_uuid":"00000000-0000-0000-0000-000000000201","ipams":[{"ip_version":4,"range_uuid":"00000000-0000-0000-0000-000000000601","cidr":"192.0.2.0/24","start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"mutations":[{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101/ipams","body":{"ip_version":4,"ip_ranges":[{"start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"wire":{"status":200,"has_data":true}},{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101","body":{"mtu":8950,"virtual_network_id":30001},"fields":["mtu","virtual_network_id"],"wire":{"status":202,"has_data":false}}],"wire":{"error_code":"","retryable":false}} From 738615471d6c56696553b988dbce3122b477a240 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 15:58:42 +0800 Subject: [PATCH 02/66] [network]: add l2 create context Additive context reaches the community L2 create pipeline. Resolves: ZCF-5485 Change-Id: I49a22b3296cafa8adb32546e0fa55786606e8c2a --- .../header/network/l2/ExternalNetworkRef.java | 15 ++++++++++ .../l2/L2NetworkCreateExtensionPoint.java | 8 +++++ .../header/network/l2/L2NetworkFactory.java | 5 ++++ .../network/l2/NetworkCreateContext.java | 30 +++++++++++++++++++ .../network/l2/NetworkOperationOrigin.java | 8 +++++ .../network/l2/L2NetworkManagerImpl.java | 5 ++-- .../network/l2/L2NoVlanL2NetworkFactory.java | 8 ++++- .../network/l2/L2VlanNetworkFactory.java | 8 ++++- .../zstack/sdnController/SdnControllerL2.java | 4 +++ 9 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/network/l2/ExternalNetworkRef.java create mode 100644 header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java create mode 100644 header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java diff --git a/header/src/main/java/org/zstack/header/network/l2/ExternalNetworkRef.java b/header/src/main/java/org/zstack/header/network/l2/ExternalNetworkRef.java new file mode 100644 index 00000000000..60d74831518 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/ExternalNetworkRef.java @@ -0,0 +1,15 @@ +package org.zstack.header.network.l2; + +/** Stable external identity carried by a projection create without changing the public API message. */ +public class ExternalNetworkRef { + private final String resourceUuid; + private final String accountUuid; + + public ExternalNetworkRef(String resourceUuid, String accountUuid) { + this.resourceUuid = resourceUuid; + this.accountUuid = accountUuid; + } + + public String getResourceUuid() { return resourceUuid; } + public String getAccountUuid() { return accountUuid; } +} diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkCreateExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkCreateExtensionPoint.java index d50559128d9..2d38a75bcb5 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkCreateExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkCreateExtensionPoint.java @@ -6,6 +6,14 @@ public interface L2NetworkCreateExtensionPoint { void beforeCreateL2Network(APICreateL2NetworkMsg msg) throws NetworkException; + default void beforeCreateL2Network(APICreateL2NetworkMsg msg, NetworkCreateContext context) throws NetworkException { + beforeCreateL2Network(msg); + } + default void postCreateL2Network(L2NetworkInventory l2Network, APICreateL2NetworkMsg msg, Completion completion) {completion.success();} + default void postCreateL2Network(L2NetworkInventory l2Network, APICreateL2NetworkMsg msg, + NetworkCreateContext context, Completion completion) { + postCreateL2Network(l2Network, msg, completion); + } void afterCreateL2Network(L2NetworkInventory l2Network); } diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkFactory.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkFactory.java index c013389967a..97e36c3f6a1 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkFactory.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkFactory.java @@ -7,5 +7,10 @@ public interface L2NetworkFactory { void createL2Network(L2NetworkVO vo, APICreateL2NetworkMsg msg, ReturnValueCompletion completion); + default void createL2Network(L2NetworkVO vo, APICreateL2NetworkMsg msg, NetworkCreateContext context, + ReturnValueCompletion completion) { + createL2Network(vo, msg, completion); + } + L2Network getL2Network(L2NetworkVO vo); } diff --git a/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java b/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java new file mode 100644 index 00000000000..6fd9cea748a --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java @@ -0,0 +1,30 @@ +package org.zstack.header.network.l2; + +/** Additive context for local and projection network creation. */ +public class NetworkCreateContext { + private final NetworkOperationOrigin origin; + private final ExternalNetworkRef externalRef; + + private NetworkCreateContext(NetworkOperationOrigin origin, ExternalNetworkRef externalRef) { + this.origin = origin; + this.externalRef = externalRef; + } + + public static NetworkCreateContext api() { + return new NetworkCreateContext(NetworkOperationOrigin.API, null); + } + + public static NetworkCreateContext projection(NetworkOperationOrigin origin, ExternalNetworkRef ref) { + if (origin != NetworkOperationOrigin.ZNS_PROJECTION && origin != NetworkOperationOrigin.ZNS_REFRESH) { + throw new IllegalArgumentException("projection context requires a ZNS projection origin"); + } + if (ref == null || ref.getResourceUuid() == null || ref.getResourceUuid().isEmpty()) { + throw new IllegalArgumentException("projection context requires an external resource identity"); + } + return new NetworkCreateContext(origin, ref); + } + + public NetworkOperationOrigin getOrigin() { return origin; } + public ExternalNetworkRef getExternalRef() { return externalRef; } + public boolean isProjection() { return origin == NetworkOperationOrigin.ZNS_PROJECTION || origin == NetworkOperationOrigin.ZNS_REFRESH; } +} diff --git a/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java b/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java new file mode 100644 index 00000000000..c5b92ce2b42 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java @@ -0,0 +1,8 @@ +package org.zstack.header.network.l2; + +/** Identifies whether a local L2 create came from the public API or a typed projection. */ +public enum NetworkOperationOrigin { + API, + ZNS_PROJECTION, + ZNS_REFRESH +} diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java index a62e87ddc4f..4954b8376d3 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java @@ -417,9 +417,10 @@ private void passThrough(L2NetworkMessage msg) { } private void handle(APICreateL2NetworkMsg msg) { + NetworkCreateContext context = NetworkCreateContext.api(); for (L2NetworkCreateExtensionPoint extp : createExtensions) { try { - extp.beforeCreateL2Network(msg); + extp.beforeCreateL2Network(msg, context); } catch (NetworkException e) { APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); evt.setError(err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.CREATE_RESOURCE_ERROR, "unable to create l2network[name:%s, type:%s], %s", msg.getName(), msg.getType(), e.getMessage())); @@ -447,7 +448,7 @@ private void handle(APICreateL2NetworkMsg msg) { vo.setAccountUuid(msg.getSession().getAccountUuid()); vo.setIsolated(msg.getIsolated()); vo.setPvlan(msg.getPvlan()); - factory.createL2Network(vo, msg, new ReturnValueCompletion(msg) { + factory.createL2Network(vo, msg, context, new ReturnValueCompletion(msg) { @Override public void success(L2NetworkInventory returnValue) { tagMgr.createTagsFromAPICreateMessage(msg, returnValue.getUuid(), L2NetworkVO.class.getSimpleName()); diff --git a/network/src/main/java/org/zstack/network/l2/L2NoVlanL2NetworkFactory.java b/network/src/main/java/org/zstack/network/l2/L2NoVlanL2NetworkFactory.java index 3d5720ccd26..207c3ae7e13 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanL2NetworkFactory.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanL2NetworkFactory.java @@ -43,6 +43,12 @@ public L2NetworkType getType() { @Override public void createL2Network(L2NetworkVO vo, APICreateL2NetworkMsg msg, ReturnValueCompletion completion) { + createL2Network(vo, msg, NetworkCreateContext.api(), completion); + } + + @Override + public void createL2Network(L2NetworkVO vo, APICreateL2NetworkMsg msg, NetworkCreateContext context, + ReturnValueCompletion completion) { FlowChain chain = new SimpleFlowChain(); chain.setName("create-no-vlan-network"); @@ -65,7 +71,7 @@ public void rollback(FlowRollback trigger, Map data) { @Override public void run(FlowTrigger trigger, Map data) { new While<>(pluginRgty.getExtensionList(L2NetworkCreateExtensionPoint.class)) - .each((exp, wcompl) -> exp.postCreateL2Network(L2NetworkInventory.valueOf(vo), msg, new Completion(trigger) { + .each((exp, wcompl) -> exp.postCreateL2Network(L2NetworkInventory.valueOf(vo), msg, context, new Completion(trigger) { @Override public void success() { wcompl.done(); diff --git a/network/src/main/java/org/zstack/network/l2/L2VlanNetworkFactory.java b/network/src/main/java/org/zstack/network/l2/L2VlanNetworkFactory.java index 35c34f1799a..6112ccba530 100755 --- a/network/src/main/java/org/zstack/network/l2/L2VlanNetworkFactory.java +++ b/network/src/main/java/org/zstack/network/l2/L2VlanNetworkFactory.java @@ -51,6 +51,12 @@ public L2NetworkType getType() { @Override public void createL2Network(L2NetworkVO ovo, APICreateL2NetworkMsg msg, ReturnValueCompletion completion) { + createL2Network(ovo, msg, NetworkCreateContext.api(), completion); + } + + @Override + public void createL2Network(L2NetworkVO ovo, APICreateL2NetworkMsg msg, NetworkCreateContext context, + ReturnValueCompletion completion) { FlowChain chain = new SimpleFlowChain(); chain.setName("create-no-vlan-network"); chain.then(new Flow() { @@ -78,7 +84,7 @@ public void run(FlowTrigger trigger, Map data) { L2VlanNetworkInventory inv = L2VlanNetworkInventory.valueOf( dbf.findByUuid(ovo.getUuid(), L2VlanNetworkVO.class)); new While<>(pluginRgty.getExtensionList(L2NetworkCreateExtensionPoint.class)) - .each((exp, wcompl) -> exp.postCreateL2Network(inv, msg, new Completion(trigger) { + .each((exp, wcompl) -> exp.postCreateL2Network(inv, msg, context, new Completion(trigger) { @Override public void success() { wcompl.done(); 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 4a63f3c5c2b..874585b5b2e 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java @@ -4,6 +4,7 @@ import org.zstack.header.host.HostInventory; import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.L2NetworkInventory; +import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.header.network.l3.IpRangeInventory; import org.zstack.header.network.l3.L3NetworkInventory; import org.zstack.header.vm.VmNicInventory; @@ -20,6 +21,9 @@ public interface SdnControllerL2 { void preCreateVxlanNetwork(L2VxlanNetworkInventory vxlan, List systemTags, Completion completion); void createL2Network(L2NetworkInventory inv, APICreateL2NetworkMsg msg, Completion completion); + default void createL2Network(L2NetworkInventory inv, APICreateL2NetworkMsg msg, NetworkCreateContext context, Completion completion) { + createL2Network(inv, msg, completion); + } void postCreateVxlanNetwork(L2VxlanNetworkInventory vxlan, List systemTags, Completion completion); void preAttachL2NetworkToCluster(L2VxlanNetworkInventory vxlan, List systemTags, Completion completion); From ba3d62cd71ff9dd8c3698d68bb329d039c50ee1c Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 15:58:52 +0800 Subject: [PATCH 03/66] [network]: format create context pipeline Keep the additive context change free of whitespace drift. Resolves: ZCF-5485 Change-Id: I22eeeee92fa9408f753772bb547cfa30bf9cc6b0 --- .../main/java/org/zstack/network/l2/L2NetworkManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java index 4954b8376d3..d6b0c2b9805 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java @@ -418,8 +418,8 @@ private void passThrough(L2NetworkMessage msg) { private void handle(APICreateL2NetworkMsg msg) { NetworkCreateContext context = NetworkCreateContext.api(); - for (L2NetworkCreateExtensionPoint extp : createExtensions) { - try { + for (L2NetworkCreateExtensionPoint extp : createExtensions) { + try { extp.beforeCreateL2Network(msg, context); } catch (NetworkException e) { APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); From 928b7cf5c52cb84d8266c23f9baa3469e30b8953 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:02:19 +0800 Subject: [PATCH 04/66] [network]: add typed internal l2 create Route projection and recovery creates through the shared pipeline. Resolves: ZCF-5485 Change-Id: I2bbce4ce622619d468c97938744def38639b675e --- .../header/network/l2/CreateL2NetworkMsg.java | 53 +++++++++++ .../network/l2/CreateL2NetworkReply.java | 10 ++ .../network/l2/L2NetworkManagerImpl.java | 93 ++++++++++++++++--- 3 files changed, 143 insertions(+), 13 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkReply.java diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java new file mode 100644 index 00000000000..c99be619d97 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -0,0 +1,53 @@ +package org.zstack.header.network.l2; + +import org.zstack.header.identity.SessionInventory; +import org.zstack.header.message.NeedReplyMessage; + +import java.util.List; + +/** Internal, typed local L2 create request used by projection/recovery flows. */ +public class CreateL2NetworkMsg extends NeedReplyMessage { + private String name; + private String description; + private String zoneUuid; + private String physicalInterface; + private String type; + private String vSwitchType = "LinuxBridge"; + private Boolean isolated = Boolean.FALSE; + private String pvlan; + private Integer vlan; + private String resourceUuid; + private String accountUuid; + private NetworkCreateContext context; + private SessionInventory session; + private List systemTags; + + public String getName() { return name; } + public void setName(String value) { name = value; } + public String getDescription() { return description; } + public void setDescription(String value) { description = value; } + public String getZoneUuid() { return zoneUuid; } + public void setZoneUuid(String value) { zoneUuid = value; } + public String getPhysicalInterface() { return physicalInterface; } + public void setPhysicalInterface(String value) { physicalInterface = value; } + public String getType() { return type; } + public void setType(String value) { type = value; } + public String getvSwitchType() { return vSwitchType; } + public void setvSwitchType(String value) { vSwitchType = value; } + public Boolean getIsolated() { return isolated; } + public void setIsolated(Boolean value) { isolated = value; } + public String getPvlan() { return pvlan; } + public void setPvlan(String value) { pvlan = value; } + public Integer getVlan() { return vlan; } + public void setVlan(Integer value) { vlan = value; } + public String getResourceUuid() { return resourceUuid; } + public void setResourceUuid(String value) { resourceUuid = value; } + public String getAccountUuid() { return accountUuid; } + public void setAccountUuid(String value) { accountUuid = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } + public SessionInventory getSession() { return session; } + public void setSession(SessionInventory value) { session = value; } + public List getSystemTags() { return systemTags; } + public void setSystemTags(List value) { systemTags = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkReply.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkReply.java new file mode 100644 index 00000000000..64fe737e036 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkReply.java @@ -0,0 +1,10 @@ +package org.zstack.header.network.l2; + +import org.zstack.header.message.MessageReply; + +public class CreateL2NetworkReply extends MessageReply { + private L2NetworkInventory inventory; + + public L2NetworkInventory getInventory() { return inventory; } + public void setInventory(L2NetworkInventory value) { inventory = value; } +} diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java index d6b0c2b9805..7261e987f45 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java @@ -76,13 +76,57 @@ public void handleMessage(Message msg) { } private void handleLocalMessage(Message msg) { - if (msg instanceof L2NetworkMessage) { + if (msg instanceof CreateL2NetworkMsg) { + handle((CreateL2NetworkMsg) msg); + } else if (msg instanceof L2NetworkMessage) { passThrough((L2NetworkMessage)msg); } else { bus.dealWithUnknownMessage(msg); } } + private void handle(CreateL2NetworkMsg msg) { + APICreateL2NetworkMsg apiMsg; + if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(msg.getType())) { + APICreateL2VlanNetworkMsg vlanMsg = new APICreateL2VlanNetworkMsg(); + vlanMsg.setVlan(msg.getVlan() == null ? 0 : msg.getVlan()); + apiMsg = vlanMsg; + } else if (L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(msg.getType())) { + apiMsg = new APICreateL2NoVlanNetworkMsg(); + } else { + bus.replyErrorByMessageType(msg, err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.INVALID_ARGUMENT_ERROR, + "unsupported internal l2 network type[%s]", msg.getType())); + return; + } + apiMsg.setName(msg.getName()); + apiMsg.setDescription(msg.getDescription()); + apiMsg.setZoneUuid(msg.getZoneUuid()); + apiMsg.setPhysicalInterface(msg.getPhysicalInterface()); + apiMsg.setvSwitchType(msg.getvSwitchType()); + apiMsg.setIsolated(msg.getIsolated()); + apiMsg.setPvlan(msg.getPvlan()); + apiMsg.setResourceUuid(msg.getResourceUuid()); + apiMsg.setSession(msg.getSession()); + apiMsg.setSystemTags(msg.getSystemTags()); + NetworkCreateContext context = msg.getContext(); + if (context == null) { + context = NetworkCreateContext.api(); + } + handle(apiMsg, context, new ReturnValueCompletion(msg) { + @Override + public void success(L2NetworkInventory returnValue) { + CreateL2NetworkReply reply = new CreateL2NetworkReply(); + reply.setInventory(returnValue); + bus.reply(msg, reply); + } + + @Override + public void fail(ErrorCode errorCode) { + bus.replyErrorByMessageType(msg, errorCode); + } + }); + } + private void handleApiMessage(APIMessage msg) { if (msg instanceof APICreateL2NetworkMsg) { handle((APICreateL2NetworkMsg)msg); @@ -417,15 +461,33 @@ private void passThrough(L2NetworkMessage msg) { } private void handle(APICreateL2NetworkMsg msg) { - NetworkCreateContext context = NetworkCreateContext.api(); + handle(msg, NetworkCreateContext.api(), new ReturnValueCompletion(msg) { + @Override + public void success(L2NetworkInventory returnValue) { + APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); + evt.setInventory(returnValue); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); + evt.setError(errorCode); + bus.publish(evt); + } + }); + } + + private void handle(APICreateL2NetworkMsg msg, NetworkCreateContext context, + ReturnValueCompletion completion) { for (L2NetworkCreateExtensionPoint extp : createExtensions) { try { extp.beforeCreateL2Network(msg, context); } catch (NetworkException e) { - APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); - evt.setError(err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.CREATE_RESOURCE_ERROR, "unable to create l2network[name:%s, type:%s], %s", msg.getName(), msg.getType(), e.getMessage())); - logger.warn(evt.getError().getDetails(), e); - bus.publish(evt); + ErrorCode error = err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.CREATE_RESOURCE_ERROR, + "unable to create l2network[name:%s, type:%s], %s", msg.getName(), msg.getType(), e.getMessage()); + logger.warn(error.getDetails(), e); + completion.fail(error); return; } } @@ -445,7 +507,16 @@ private void handle(APICreateL2NetworkMsg msg) { vo.setType(type.toString()); vo.setvSwitchType(vSwitchType.toString()); vo.setZoneUuid(msg.getZoneUuid()); - vo.setAccountUuid(msg.getSession().getAccountUuid()); + String accountUuid = msg.getSession() == null ? null : msg.getSession().getAccountUuid(); + if (accountUuid == null && context.getExternalRef() != null) { + accountUuid = context.getExternalRef().getAccountUuid(); + } + if (accountUuid == null) { + completion.fail(err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.INVALID_ARGUMENT_ERROR, + "account uuid is required for l2 create")); + return; + } + vo.setAccountUuid(accountUuid); vo.setIsolated(msg.getIsolated()); vo.setPvlan(msg.getPvlan()); factory.createL2Network(vo, msg, context, new ReturnValueCompletion(msg) { @@ -461,16 +532,12 @@ public void success(L2NetworkInventory returnValue) { } } - APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); - evt.setInventory(returnValue); - bus.publish(evt); + completion.success(returnValue); } @Override public void fail(ErrorCode errorCode) { - APICreateL2NetworkEvent evt = new APICreateL2NetworkEvent(msg.getId()); - evt.setError(errorCode); - bus.publish(evt); + completion.fail(errorCode); } }); From b80c6ff047fb5f80a916e7904ab243d8ac464afe Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:05:52 +0800 Subject: [PATCH 05/66] [network]: forward l2 context to sdn Preserve typed create origin at the controller extension boundary. Resolves: ZCF-5485 Change-Id: I750bc3281eb8a92a9dd800c08fecfd6862c295c9 --- .../zstack/sdnController/SdnControllerManagerImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 e832f146738..fb3ab7ffb99 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java @@ -292,6 +292,12 @@ public void beforeCreateL2Network(APICreateL2NetworkMsg msg) throws NetworkExcep @Override public void postCreateL2Network(L2NetworkInventory l2Network, APICreateL2NetworkMsg msg, Completion completion) { + postCreateL2Network(l2Network, msg, NetworkCreateContext.api(), completion); + } + + @Override + public void postCreateL2Network(L2NetworkInventory l2Network, APICreateL2NetworkMsg msg, + NetworkCreateContext context, Completion completion) { VSwitchType vSwitchType = VSwitchType.valueOf(l2Network.getvSwitchType()); if (vSwitchType.getSdnControllerType() == null) { completion.success(); @@ -326,7 +332,7 @@ public void postCreateL2Network(L2NetworkInventory l2Network, APICreateL2Network SdnControllerFactory factory = getSdnControllerFactory(sdnControllerVO.getVendorType()); SdnControllerL2 controller = factory.getSdnControllerL2(sdnControllerVO); - controller.createL2Network(l2Network, msg, completion); + controller.createL2Network(l2Network, msg, context, completion); } @Override From d0dc9227ff4f4ae4dc4707d8c0c3763c9317c902 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:07:01 +0800 Subject: [PATCH 06/66] [network]: add l3 create context Additive L3 and IP range context overloads for CP-002. Resolves: ZCF-5485 Change-Id: I6bd6f7ca57ad17d65f70215f5ec71bdda1709e2c --- .../header/network/l3/AfterAddIpRangeExtensionPoint.java | 6 ++++++ .../java/org/zstack/header/network/l3/IpRangeFactory.java | 6 ++++++ .../java/org/zstack/header/network/l3/SdnControllerL3.java | 7 +++++++ 3 files changed, 19 insertions(+) diff --git a/header/src/main/java/org/zstack/header/network/l3/AfterAddIpRangeExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/AfterAddIpRangeExtensionPoint.java index 318d27d9e68..c61af9160f6 100755 --- a/header/src/main/java/org/zstack/header/network/l3/AfterAddIpRangeExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l3/AfterAddIpRangeExtensionPoint.java @@ -1,5 +1,7 @@ package org.zstack.header.network.l3; +import org.zstack.header.network.l2.NetworkCreateContext; + import java.util.List; /** @@ -7,4 +9,8 @@ */ public interface AfterAddIpRangeExtensionPoint { void afterAddIpRange(IpRangeInventory ipr, List systemTags); + + default void afterAddIpRange(IpRangeInventory ipr, List systemTags, NetworkCreateContext context) { + afterAddIpRange(ipr, systemTags); + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/IpRangeFactory.java b/header/src/main/java/org/zstack/header/network/l3/IpRangeFactory.java index 6ad1a5507b7..b227d591926 100644 --- a/header/src/main/java/org/zstack/header/network/l3/IpRangeFactory.java +++ b/header/src/main/java/org/zstack/header/network/l3/IpRangeFactory.java @@ -2,6 +2,7 @@ import org.zstack.header.core.ReturnValueCompletion; import org.zstack.header.message.APICreateMessage; +import org.zstack.header.network.l2.NetworkCreateContext; import java.util.List; @@ -9,4 +10,9 @@ public interface IpRangeFactory { IpRangeType getType(); void createIpRange(List iprs, APICreateMessage msg, ReturnValueCompletion> completion); + + default void createIpRange(List iprs, APICreateMessage msg, NetworkCreateContext context, + ReturnValueCompletion> completion) { + createIpRange(iprs, msg, completion); + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java index 228b05aa98d..9b732283cb3 100644 --- a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java +++ b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java @@ -1,12 +1,19 @@ package org.zstack.header.network.l3; import org.zstack.header.core.Completion; +import org.zstack.header.network.l2.NetworkCreateContext; import java.util.List; public interface SdnControllerL3 { void createL3Network(L3NetworkInventory inv, List systemTags, Completion completion); + default void createL3Network(L3NetworkInventory inv, List systemTags, NetworkCreateContext context, Completion completion) { + createL3Network(inv, systemTags, completion); + } void deleteL3Network(L3NetworkInventory inv, Completion completion); void createIpRange(IpRangeInventory inv, Completion completion); + default void createIpRange(IpRangeInventory inv, NetworkCreateContext context, Completion completion) { + createIpRange(inv, completion); + } void deleteIpRange(IpRangeInventory inv, Completion completion); } From 510950d8e8826b6c6d1d8bcd08d2658629f509c7 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:08:22 +0800 Subject: [PATCH 07/66] [network]: make ip range projection local Projection preserves range identity and skips reverse writes. Resolves: ZCF-5485 Change-Id: I3cd5c15e897f2ac7c430d0eeeaa201f351a28191 --- .../network/l3/AddressPoolIpRangeFactory.java | 12 +++++++++-- .../network/l3/NormalIpRangeFactory.java | 20 +++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/network/src/main/java/org/zstack/network/l3/AddressPoolIpRangeFactory.java b/network/src/main/java/org/zstack/network/l3/AddressPoolIpRangeFactory.java index aae2711248b..77edf7d3e67 100644 --- a/network/src/main/java/org/zstack/network/l3/AddressPoolIpRangeFactory.java +++ b/network/src/main/java/org/zstack/network/l3/AddressPoolIpRangeFactory.java @@ -8,6 +8,7 @@ import org.zstack.header.core.ReturnValueCompletion; import org.zstack.header.message.APICreateMessage; import org.zstack.header.network.l3.*; +import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.utils.CollectionUtils; import org.zstack.utils.function.ForEachFunction; @@ -27,6 +28,12 @@ public IpRangeType getType() { @Override public void createIpRange(List iprs, APICreateMessage msg, ReturnValueCompletion> completion) { + createIpRange(iprs, msg, NetworkCreateContext.api(), completion); + } + + @Override + public void createIpRange(List iprs, APICreateMessage msg, NetworkCreateContext context, + ReturnValueCompletion> completion) { List vos = new ArrayList<>(); for (IpRangeInventory ipr : iprs) { AddressPoolVO vo = new SQLBatchWithReturn() { @@ -42,7 +49,8 @@ protected AddressPoolVO scripts() { vo.setNetmask(ipr.getNetmask()); vo.setStartIp(ipr.getStartIp()); vo.setNetworkCidr(ipr.getNetworkCidr()); - vo.setAccountUuid(msg.getSession().getAccountUuid()); + vo.setAccountUuid(msg.getSession() == null && context.getExternalRef() != null + ? context.getExternalRef().getAccountUuid() : msg.getSession().getAccountUuid()); vo.setIpVersion(ipr.getIpVersion()); vo.setAddressMode(ipr.getAddressMode()); vo.setPrefixLen(ipr.getPrefixLen()); @@ -60,7 +68,7 @@ protected AddressPoolVO scripts() { CollectionUtils.safeForEach(pluginRgty.getExtensionList(AfterAddIpRangeExtensionPoint.class), new ForEachFunction() { @Override public void run(AfterAddIpRangeExtensionPoint ext) { - ext.afterAddIpRange(finalIpr, msg.getSystemTags()); + ext.afterAddIpRange(finalIpr, msg.getSystemTags(), context); } }); } diff --git a/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java b/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java index c052d0a1d69..044e4e2d454 100644 --- a/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java +++ b/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java @@ -16,6 +16,7 @@ import org.zstack.header.message.APICreateMessage; import org.zstack.header.message.MessageReply; import org.zstack.header.network.l3.*; +import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.service.SdnControllerDhcp; import org.zstack.utils.CollectionUtils; @@ -47,6 +48,12 @@ public IpRangeType getType() { @Override public void createIpRange(List iprs, APICreateMessage msg, ReturnValueCompletion> completion) { + createIpRange(iprs, msg, NetworkCreateContext.api(), completion); + } + + @Override + public void createIpRange(List iprs, APICreateMessage msg, NetworkCreateContext context, + ReturnValueCompletion> completion) { FlowChain chain = new SimpleFlowChain(); chain.setName(String.format("add-iprange-to-l3-%s", iprs.get(0).getL3NetworkUuid())); chain.then(new Flow() { @@ -59,7 +66,8 @@ public void run(FlowTrigger trigger, Map data) { @Override protected NormalIpRangeVO scripts() { NormalIpRangeVO vo = (NormalIpRangeVO) IpRangeHelper - .fromIpRangeInventory(ipr, msg.getSession().getAccountUuid()); + .fromIpRangeInventory(ipr, msg.getSession() == null && context.getExternalRef() != null + ? context.getExternalRef().getAccountUuid() : msg.getSession().getAccountUuid()); dbf.getEntityManager().persist(vo); dbf.getEntityManager().flush(); dbf.getEntityManager().refresh(vo); @@ -97,7 +105,7 @@ protected NormalIpRangeVO scripts() { CollectionUtils.safeForEach(pluginRgty.getExtensionList(AfterAddIpRangeExtensionPoint.class), new ForEachFunction() { @Override public void run(AfterAddIpRangeExtensionPoint ext) { - ext.afterAddIpRange(IpRangeInventory.valueOf(vo), msg.getSystemTags()); + ext.afterAddIpRange(IpRangeInventory.valueOf(vo), msg.getSystemTags(), context); } }); @@ -119,6 +127,10 @@ public void rollback(FlowRollback trigger, Map data) { @Override public void run(FlowTrigger trigger, Map data) { + if (context.isProjection()) { + trigger.next(); + return; + } String sdnControllerUuid = L3NetworkHelper.getSdnControllerUuidFromL3Uuid(iprs.get(0).getL3NetworkUuid()); if (sdnControllerUuid == null) { trigger.next(); @@ -146,6 +158,10 @@ public void run(MessageReply reply) { @Override public void run(FlowTrigger trigger, Map data) { + if (context.isProjection()) { + trigger.next(); + return; + } L3NetworkVO l3vo = dbf.findByUuid(iprs.get(0).getL3NetworkUuid(), L3NetworkVO.class); SdnControllerL3 sdnL3 = l3Mgr.getSdnControllerL3(l3vo.getL2NetworkUuid()); if (sdnL3 == null) { From 8910c252a150fdda511beba0ed791ef5854906ba Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:09:45 +0800 Subject: [PATCH 08/66] [network]: add l3 factory context Make L3 factory creation context-aware without breaking providers. Resolves: ZCF-5485 Change-Id: Ie5cce5b84379cbe4c1d723f88da881b65ea4dea0 --- .../java/org/zstack/header/network/l3/L3NetworkFactory.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkFactory.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkFactory.java index 7398f552874..717f48bf810 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkFactory.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkFactory.java @@ -1,10 +1,16 @@ package org.zstack.header.network.l3; +import org.zstack.header.network.l2.NetworkCreateContext; + public interface L3NetworkFactory { L3NetworkType getType(); L3NetworkInventory createL3Network(L3NetworkVO l3vo, APICreateL3NetworkMsg msg); + default L3NetworkInventory createL3Network(L3NetworkVO l3vo, APICreateL3NetworkMsg msg, NetworkCreateContext context) { + return createL3Network(l3vo, msg); + } + L3Network getL3Network(L3NetworkVO vo); boolean applyNetworkServiceWhenVmStateChange(); From b546f024ce09cfc2922b0007c3d91b8ee3778bfa Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:10:47 +0800 Subject: [PATCH 09/66] [network]: forward l3 create context Keep typed origin through controller and factory creation. Resolves: ZCF-5485 Change-Id: I0631e2738bcfee48b56ee3766076dd1e2dc0986f --- .../zstack/network/l3/L3NetworkManagerImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 45fecdc0aa1..fa2a70c39d7 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -526,6 +526,10 @@ private void syncManagementServiceTypeWhileCreate(ServiceTypeExtensionPoint ext, } private void handle(APICreateL3NetworkMsg msg) { + handle(msg, NetworkCreateContext.api()); + } + + private void handle(APICreateL3NetworkMsg msg, NetworkCreateContext context) { APICreateL3NetworkEvent evt = new APICreateL3NetworkEvent(msg.getId()); L2NetworkVO l2Vo = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, msg.getL2NetworkUuid()).find(); @@ -569,7 +573,7 @@ public void run(FlowTrigger trigger, Map data) { return; } - controllerL3.createL3Network(L3NetworkInventory.valueOf(vo), msg.getSystemTags(), + controllerL3.createL3Network(L3NetworkInventory.valueOf(vo), msg.getSystemTags(), context, new Completion(trigger) { @Override public void success() { @@ -591,8 +595,14 @@ public void run(FlowTrigger trigger, Map data) { L3NetworkInventory inv = new SQLBatchWithReturn() { @Override protected L3NetworkInventory scripts() { - vo.setAccountUuid(msg.getSession().getAccountUuid()); - L3NetworkInventory inv = factory.createL3Network(vo, msg); + String accountUuid = msg.getSession() == null && context.getExternalRef() != null + ? context.getExternalRef().getAccountUuid() + : msg.getSession() == null ? null : msg.getSession().getAccountUuid(); + if (accountUuid == null) { + throw new CloudRuntimeException("account uuid is required for l3 create"); + } + vo.setAccountUuid(accountUuid); + L3NetworkInventory inv = factory.createL3Network(vo, msg, context); tagMgr.createTagsFromAPICreateMessage(msg, vo.getUuid(), L3NetworkVO.class.getSimpleName()); return inv; } From 6693bd26bdfdcc8c0b67a0453aa0cc613d9eb4f0 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:11:51 +0800 Subject: [PATCH 10/66] [network]: route ip range context Route L3 range entry points through the context contract. Resolves: ZCF-5485 Change-Id: Ic477b8d7bcff48e8d1543a567faf2a08f449556f --- .../main/java/org/zstack/network/l3/L3BasicNetwork.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 ae0258de955..ff4fe0c95b4 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -40,6 +40,7 @@ import org.zstack.header.network.l2.L2NetworkClusterRefVO_; import org.zstack.header.network.l2.L2NetworkConstant; import org.zstack.header.network.l2.L2NetworkVO; +import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.header.network.l3.*; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.service.*; @@ -190,7 +191,7 @@ private void doAddIpRange(APIAddIpRangeMsg msg, SyncTaskChain chain) { } IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, new ReturnValueCompletion>(msg) { + factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); @@ -1227,7 +1228,7 @@ private void handle(APIAddIpRangeByNetworkCidrMsg msg) { APIAddIpRangeByNetworkCidrEvent evt = new APIAddIpRangeByNetworkCidrEvent(msg.getId()); IpRangeFactory factory = l3NwMgr.getIpRangeFactory(iprs.get(0).getIpRangeType()); - factory.createIpRange(iprs, msg, new ReturnValueCompletion>(msg) { + factory.createIpRange(iprs, msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); @@ -1251,7 +1252,7 @@ private void handle(APIAddIpv6RangeByNetworkCidrMsg msg) { APIAddIpRangeByNetworkCidrEvent evt = new APIAddIpRangeByNetworkCidrEvent(msg.getId()); IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, new ReturnValueCompletion>(msg) { + factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); @@ -1274,7 +1275,7 @@ private void handle(APIAddIpv6RangeMsg msg) { APIAddIpRangeEvent evt = new APIAddIpRangeEvent(msg.getId()); IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, new ReturnValueCompletion>(msg) { + factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); From 18bea7d3d0f5854d6f018ab3342daaff80a43a1d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:12:56 +0800 Subject: [PATCH 11/66] [network]: define typed l3 create Add the internal L3 create message and reply contract. Resolves: ZCF-5485 Change-Id: I9be239ef9242a177fd2d396fd3e5f2e30e3c84f8 --- .../header/network/l3/CreateL3NetworkMsg.java | 51 +++++++++++++++++++ .../network/l3/CreateL3NetworkReply.java | 10 ++++ 2 files changed, 61 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkReply.java diff --git a/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java new file mode 100644 index 00000000000..a86e255a3ba --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java @@ -0,0 +1,51 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.identity.SessionInventory; +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; + +import java.util.List; + +/** Internal typed L3 create request for ZNS projection and recovery. */ +public class CreateL3NetworkMsg extends NeedReplyMessage { + private String name; + private String description; + private String type = L3NetworkConstant.L3_BASIC_NETWORK_TYPE; + private String l2NetworkUuid; + private String category = L3NetworkCategory.Private.toString(); + private Integer ipVersion; + private boolean system; + private String dnsDomain; + private Boolean enableIPAM = Boolean.TRUE; + private String resourceUuid; + private SessionInventory session; + private List systemTags; + private NetworkCreateContext context; + + public String getName() { return name; } + public void setName(String value) { name = value; } + public String getDescription() { return description; } + public void setDescription(String value) { description = value; } + public String getType() { return type; } + public void setType(String value) { type = value; } + public String getL2NetworkUuid() { return l2NetworkUuid; } + public void setL2NetworkUuid(String value) { l2NetworkUuid = value; } + public String getCategory() { return category; } + public void setCategory(String value) { category = value; } + public Integer getIpVersion() { return ipVersion; } + public void setIpVersion(Integer value) { ipVersion = value; } + public boolean isSystem() { return system; } + public void setSystem(boolean value) { system = value; } + public String getDnsDomain() { return dnsDomain; } + public void setDnsDomain(String value) { dnsDomain = value; } + public Boolean getEnableIPAM() { return enableIPAM; } + public void setEnableIPAM(Boolean value) { enableIPAM = value; } + public String getResourceUuid() { return resourceUuid; } + public void setResourceUuid(String value) { resourceUuid = value; } + public SessionInventory getSession() { return session; } + public void setSession(SessionInventory value) { session = value; } + public List getSystemTags() { return systemTags; } + public void setSystemTags(List value) { systemTags = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkReply.java b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkReply.java new file mode 100644 index 00000000000..17b49b1e727 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkReply.java @@ -0,0 +1,10 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.MessageReply; + +public class CreateL3NetworkReply extends MessageReply { + private L3NetworkInventory inventory; + + public L3NetworkInventory getInventory() { return inventory; } + public void setInventory(L3NetworkInventory value) { inventory = value; } +} From fcfbe41772c207ed5eed43b507f1c133076faaf2 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:14:30 +0800 Subject: [PATCH 12/66] [network]: wire typed l3 create Route internal L3 create through the shared flow and typed reply. Resolves: ZCF-5485 Change-Id: I35a584ad7b42d8aa5166595f7ed8a5c6e8c5effd --- .../network/l3/L3NetworkManagerImpl.java | 74 +++++++++++++++++-- 1 file changed, 66 insertions(+), 8 deletions(-) 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 fa2a70c39d7..b0728d6199d 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -116,13 +116,45 @@ public void handleMessage(Message msg) { } private void handleLocalMessage(Message msg) { - if (msg instanceof L3NetworkMessage) { + if (msg instanceof CreateL3NetworkMsg) { + handle((CreateL3NetworkMsg) msg); + } else if (msg instanceof L3NetworkMessage) { passThrough((L3NetworkMessage) msg); } else { bus.dealWithUnknownMessage(msg); } } + private void handle(CreateL3NetworkMsg msg) { + APICreateL3NetworkMsg api = new APICreateL3NetworkMsg(); + api.setName(msg.getName()); + api.setDescription(msg.getDescription()); + api.setType(msg.getType()); + api.setL2NetworkUuid(msg.getL2NetworkUuid()); + api.setCategory(msg.getCategory()); + api.setIpVersion(msg.getIpVersion()); + api.setSystem(msg.isSystem()); + api.setDnsDomain(msg.getDnsDomain()); + api.setEnableIPAM(msg.getEnableIPAM()); + api.setResourceUuid(msg.getResourceUuid()); + api.setSession(msg.getSession()); + api.setSystemTags(msg.getSystemTags()); + handle(api, msg.getContext() == null ? NetworkCreateContext.api() : msg.getContext(), + new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + CreateL3NetworkReply reply = new CreateL3NetworkReply(); + reply.setInventory(inventory); + bus.reply(msg, reply); + } + + @Override + public void fail(ErrorCode errorCode) { + bus.replyErrorByMessageType(msg, errorCode); + } + }); + } + private void handleApiMessage(APIMessage msg) { if (msg instanceof APICreateL3NetworkMsg) { @@ -526,11 +558,39 @@ private void syncManagementServiceTypeWhileCreate(ServiceTypeExtensionPoint ext, } private void handle(APICreateL3NetworkMsg msg) { - handle(msg, NetworkCreateContext.api()); + handle(msg, NetworkCreateContext.api(), new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + APICreateL3NetworkEvent evt = new APICreateL3NetworkEvent(msg.getId()); + evt.setInventory(inventory); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + APICreateL3NetworkEvent evt = new APICreateL3NetworkEvent(msg.getId()); + evt.setError(errorCode); + bus.publish(evt); + } + }); } private void handle(APICreateL3NetworkMsg msg, NetworkCreateContext context) { - APICreateL3NetworkEvent evt = new APICreateL3NetworkEvent(msg.getId()); + handle(msg, context, new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + logger.debug(String.format("Successfully created L3Network[name:%s, uuid:%s]", msg.getName(), inventory.getUuid())); + } + + @Override + public void fail(ErrorCode errorCode) { + logger.warn(String.format("Failed to create L3Network[name:%s]: %s", msg.getName(), errorCode)); + } + }); + } + + private void handle(APICreateL3NetworkMsg msg, NetworkCreateContext context, + ReturnValueCompletion completion) { L2NetworkVO l2Vo = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, msg.getL2NetworkUuid()).find(); assert l2Vo.getZoneUuid() != null; @@ -622,21 +682,19 @@ protected L3NetworkInventory scripts() { } extpEmitter.afterCreate(inv); - evt.setInventory(inv); + data.put("L3NetworkInventory", inv); trigger.next(); } }).error(new FlowErrorHandler(msg) { @Override public void handle(ErrorCode errCode, Map data) { - evt.setError(errCode); - bus.publish(evt); + completion.fail(errCode); } }).done(new FlowDoneHandler(msg) { @Override public void handle(Map data) { - logger.debug(String.format("Successfully created L3Network[name:%s, uuid:%s]", vo.getName(), vo.getUuid())); - bus.publish(evt); + completion.success((L3NetworkInventory) data.get("L3NetworkInventory")); } }).start(); From d9a477194d880139bdf181a65acc761a5fe9a8ae Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:15:56 +0800 Subject: [PATCH 13/66] [network]: define projected mutation messages Add typed range mutation and safe conversion contracts. Resolves: ZCF-5485 Change-Id: I89451f4bc100f53da0f5222712a61602edccdee7 --- .../network/l2/ConvertL2VlanModeMsg.java | 15 +++++++++ .../network/l3/ConvertL3NetworkTypeMsg.java | 15 +++++++++ .../network/l3/DeleteProjectedIpRangeMsg.java | 19 ++++++++++++ .../network/l3/UpdateProjectedIpRangeMsg.java | 31 +++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java diff --git a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java new file mode 100644 index 00000000000..e3c2104d46e --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java @@ -0,0 +1,15 @@ +package org.zstack.header.network.l2; + +import org.zstack.header.message.NeedReplyMessage; + +public class ConvertL2VlanModeMsg extends NeedReplyMessage { + private String l2NetworkUuid; + private String expectedSourceType; + private String targetType; + public String getL2NetworkUuid() { return l2NetworkUuid; } + public void setL2NetworkUuid(String value) { l2NetworkUuid = value; } + public String getExpectedSourceType() { return expectedSourceType; } + public void setExpectedSourceType(String value) { expectedSourceType = value; } + public String getTargetType() { return targetType; } + public void setTargetType(String value) { targetType = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java new file mode 100644 index 00000000000..0a124967c94 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java @@ -0,0 +1,15 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.NeedReplyMessage; + +public class ConvertL3NetworkTypeMsg extends NeedReplyMessage { + private String l3NetworkUuid; + private String expectedSourceType; + private String targetType; + public String getL3NetworkUuid() { return l3NetworkUuid; } + public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } + public String getExpectedSourceType() { return expectedSourceType; } + public void setExpectedSourceType(String value) { expectedSourceType = value; } + public String getTargetType() { return targetType; } + public void setTargetType(String value) { targetType = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java new file mode 100644 index 00000000000..433109c853f --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java @@ -0,0 +1,19 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; + +public class DeleteProjectedIpRangeMsg extends NeedReplyMessage { + private String l3NetworkUuid; + private String rangeUuid; + private String expectedSourceType; + private NetworkCreateContext context; + public String getL3NetworkUuid() { return l3NetworkUuid; } + public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } + public String getRangeUuid() { return rangeUuid; } + public void setRangeUuid(String value) { rangeUuid = value; } + public String getExpectedSourceType() { return expectedSourceType; } + public void setExpectedSourceType(String value) { expectedSourceType = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java new file mode 100644 index 00000000000..30478c31e3b --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java @@ -0,0 +1,31 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; + +public class UpdateProjectedIpRangeMsg extends NeedReplyMessage { + private String l3NetworkUuid; + private String rangeUuid; + private String startIp; + private String endIp; + private String gateway; + private String netmask; + private String expectedSourceType; + private NetworkCreateContext context; + public String getL3NetworkUuid() { return l3NetworkUuid; } + public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } + public String getRangeUuid() { return rangeUuid; } + public void setRangeUuid(String value) { rangeUuid = value; } + public String getStartIp() { return startIp; } + public void setStartIp(String value) { startIp = value; } + public String getEndIp() { return endIp; } + public void setEndIp(String value) { endIp = value; } + public String getGateway() { return gateway; } + public void setGateway(String value) { gateway = value; } + public String getNetmask() { return netmask; } + public void setNetmask(String value) { netmask = value; } + public String getExpectedSourceType() { return expectedSourceType; } + public void setExpectedSourceType(String value) { expectedSourceType = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } +} From e1ec61f8b26ad58da1f3ce3be0d709e0b00c5ab7 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:17:24 +0800 Subject: [PATCH 14/66] [network]: test projected mutation policy Reject stale and unsafe conversions before database writes. Resolves: ZCF-5485 Change-Id: Ib1cbb824200bf7e1c0adf1dd96a5300e6bc38242 --- .../network/ProjectedMutationPolicy.java | 36 +++++++++++++++++++ .../zns/ProjectedMutationPolicyTest.java | 24 +++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java create mode 100644 test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java diff --git a/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java b/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java new file mode 100644 index 00000000000..a40ef1241ba --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java @@ -0,0 +1,36 @@ +package org.zstack.header.network; + +/** Pure validation used by projected updates and subtype conversions before any DB write. */ +public final class ProjectedMutationPolicy { + private ProjectedMutationPolicy() { + } + + public static void requireSourceType(String actual, String expected) { + if (expected == null || expected.isEmpty()) { + return; + } + if (!expected.equals(actual)) { + throw new IllegalArgumentException(String.format("stale projected source type: expected %s but found %s", expected, actual)); + } + } + + public static void requireL2Conversion(String sourceType, String targetType, boolean hasDependencies) { + requireSourceType(sourceType, "L2NoVlanNetwork"); + if (!"L2VlanNetwork".equals(targetType) && !"L2NoVlanNetwork".equals(targetType)) { + throw new IllegalArgumentException("unsupported projected L2 conversion target: " + targetType); + } + if (hasDependencies) { + throw new IllegalArgumentException("projected L2 conversion has prohibited dependencies"); + } + } + + public static void requireL3Conversion(String sourceType, String targetType, boolean hasDependencies) { + requireSourceType(sourceType, "L3BasicNetwork"); + if (!"L3BasicNetwork".equals(targetType) && !"L3VpcNetwork".equals(targetType)) { + throw new IllegalArgumentException("unsupported projected L3 conversion target: " + targetType); + } + if (hasDependencies) { + throw new IllegalArgumentException("projected L3 conversion has prohibited dependencies"); + } + } +} diff --git a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java new file mode 100644 index 00000000000..35d99c292f0 --- /dev/null +++ b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java @@ -0,0 +1,24 @@ +package org.zstack.test.integration.networkservice.provider.zns; + +import org.junit.Test; +import org.zstack.header.network.ProjectedMutationPolicy; + +public class ProjectedMutationPolicyTest { + @Test + public void staleSourceIsRejectedBeforeMutation() { + try { + ProjectedMutationPolicy.requireSourceType("L2VlanNetwork", "L2NoVlanNetwork"); + throw new AssertionError("stale source was accepted"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void conversionWithDependenciesIsRejected() { + try { + ProjectedMutationPolicy.requireL2Conversion("L2NoVlanNetwork", "L2VlanNetwork", true); + throw new AssertionError("unsafe conversion was accepted"); + } catch (IllegalArgumentException expected) { + } + } +} From db6bb64a6e98ac93f9a24253b1b19d4b3398455a Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:18:43 +0800 Subject: [PATCH 15/66] [network]: define mutation continuation contract Add typed prepare and complete messages for remote-first mutation. Resolves: ZCF-5485 Change-Id: I5d543d03937a1cff6738ba82040c93475f2aea73 --- .../CompleteZnsSegmentMutationMsg.java | 22 +++++++++++++++ .../NetworkConfigLocalContinuation.java | 7 +++++ .../header/network/NetworkConfigMutation.java | 28 +++++++++++++++++++ .../NetworkConfigMutationExtensionPoint.java | 7 +++++ .../network/PrepareZnsSegmentMutationMsg.java | 13 +++++++++ 5 files changed, 77 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java create mode 100644 header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java create mode 100644 header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java diff --git a/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java b/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java new file mode 100644 index 00000000000..ff113456f9d --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java @@ -0,0 +1,22 @@ +package org.zstack.header.network; + +import org.zstack.header.message.NeedReplyMessage; + +public class CompleteZnsSegmentMutationMsg extends NeedReplyMessage { + private String resourceUuid; + private String operationUuid; + private boolean success; + private String errorCode; + private String errorDetails; + + public String getResourceUuid() { return resourceUuid; } + public void setResourceUuid(String value) { resourceUuid = value; } + public String getOperationUuid() { return operationUuid; } + public void setOperationUuid(String value) { operationUuid = value; } + public boolean isSuccess() { return success; } + public void setSuccess(boolean value) { success = value; } + public String getErrorCode() { return errorCode; } + public void setErrorCode(String value) { errorCode = value; } + public String getErrorDetails() { return errorDetails; } + public void setErrorDetails(String value) { errorDetails = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java b/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java new file mode 100644 index 00000000000..e432d4627df --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java @@ -0,0 +1,7 @@ +package org.zstack.header.network; + +import org.zstack.header.core.Completion; + +public interface NetworkConfigLocalContinuation { + void run(NetworkConfigMutation mutation, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java b/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java new file mode 100644 index 00000000000..6bb1dbfda95 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java @@ -0,0 +1,28 @@ +package org.zstack.header.network; + +import java.util.Collections; +import java.util.Map; + +/** Immutable description of a versioned network mutation shared by owner and controller MNs. */ +public final class NetworkConfigMutation { + private final String resourceUuid; + private final String operationUuid; + private final long expectedConfigVersion; + private final String operationStep; + private final Map fields; + + public NetworkConfigMutation(String resourceUuid, String operationUuid, long expectedConfigVersion, + String operationStep, Map fields) { + this.resourceUuid = resourceUuid; + this.operationUuid = operationUuid; + this.expectedConfigVersion = expectedConfigVersion; + this.operationStep = operationStep; + this.fields = fields == null ? Collections.emptyMap() : Collections.unmodifiableMap(new java.util.HashMap<>(fields)); + } + + public String getResourceUuid() { return resourceUuid; } + public String getOperationUuid() { return operationUuid; } + public long getExpectedConfigVersion() { return expectedConfigVersion; } + public String getOperationStep() { return operationStep; } + public Map getFields() { return fields; } +} diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java new file mode 100644 index 00000000000..419b052a463 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java @@ -0,0 +1,7 @@ +package org.zstack.header.network; + +import org.zstack.header.core.Completion; + +public interface NetworkConfigMutationExtensionPoint { + void prepare(NetworkConfigMutation mutation, Completion completion); +} diff --git a/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java new file mode 100644 index 00000000000..5f94d2c4870 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java @@ -0,0 +1,13 @@ +package org.zstack.header.network; + +import org.zstack.header.message.NeedReplyMessage; + +public class PrepareZnsSegmentMutationMsg extends NeedReplyMessage { + private NetworkConfigMutation mutation; + private String controllerUuid; + + public NetworkConfigMutation getMutation() { return mutation; } + public void setMutation(NetworkConfigMutation value) { mutation = value; } + public String getControllerUuid() { return controllerUuid; } + public void setControllerUuid(String value) { controllerUuid = value; } +} From 8f737f1fdfbc147ca132582ea5ff185ab87a22ef Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:19:04 +0800 Subject: [PATCH 16/66] [network]: test mutation immutability Verify continuation payloads cannot be changed after construction. Resolves: ZCF-5485 Change-Id: Ia30fbb92ef2b9cdb2a38e2935432612df6e15ea1 --- .../zns/NetworkConfigMutationTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java diff --git a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java new file mode 100644 index 00000000000..4688c38bc26 --- /dev/null +++ b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java @@ -0,0 +1,20 @@ +package org.zstack.test.integration.networkservice.provider.zns; + +import org.junit.Test; +import org.zstack.header.network.NetworkConfigMutation; + +import java.util.HashMap; +import java.util.Map; + +public class NetworkConfigMutationTest { + @Test + public void fieldsAreDefensivelyCopied() { + Map fields = new HashMap<>(); + fields.put("mtu", 1500); + NetworkConfigMutation mutation = new NetworkConfigMutation("r", "op", 1, "APPLY_LOCAL", fields); + fields.put("mtu", 9000); + if (!Integer.valueOf(1500).equals(mutation.getFields().get("mtu"))) { + throw new AssertionError("mutation fields changed after construction"); + } + } +} From 9d22fb3eaa6deac4f66be0582ab63a4457bf386a Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:20:45 +0800 Subject: [PATCH 17/66] [network]: add dependency admission hook Fail closed before IP allocation dependency writes. Resolves: ZCF-5485 Change-Id: I51cc310467b0c72b03fe6192b50f6ae585f128f0 --- ...workDependencyAdmissionExtensionPoint.java | 7 +++++++ .../NetworkDependencyAdmissionRequest.java | 20 +++++++++++++++++++ .../network/l3/L3NetworkManagerImpl.java | 11 ++++++++++ 3 files changed, 38 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java new file mode 100644 index 00000000000..012cee71ff8 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java @@ -0,0 +1,7 @@ +package org.zstack.header.network; + +import org.zstack.header.errorcode.ErrorCode; + +public interface NetworkDependencyAdmissionExtensionPoint { + ErrorCode admit(NetworkDependencyAdmissionRequest request); +} diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java new file mode 100644 index 00000000000..c78d5a44b35 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java @@ -0,0 +1,20 @@ +package org.zstack.header.network; + +public final class NetworkDependencyAdmissionRequest { + private final String resourceUuid; + private final String dependencyType; + private final String operationUuid; + private final String operationStep; + + public NetworkDependencyAdmissionRequest(String resourceUuid, String dependencyType, + String operationUuid, String operationStep) { + this.resourceUuid = resourceUuid; + this.dependencyType = dependencyType; + this.operationUuid = operationUuid; + this.operationStep = operationStep; + } + public String getResourceUuid() { return resourceUuid; } + public String getDependencyType() { return dependencyType; } + public String getOperationUuid() { return operationUuid; } + public String getOperationStep() { return operationStep; } +} 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 b0728d6199d..e8962a19bf9 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -32,6 +32,8 @@ import org.zstack.header.message.Message; import org.zstack.header.message.MessageReply; import org.zstack.header.network.l2.*; +import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; +import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.header.network.l3.*; import org.zstack.header.network.l3.datatypes.IpCapacityData; import org.zstack.header.network.service.GetSdnControllerExtensionPoint; @@ -885,6 +887,15 @@ public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip) { @Override public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDuplicatedAddress) { + NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( + ipRange.getL3NetworkUuid(), "UsedIp", null, "RESERVE_IP"); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admit(request); + if (errorCode != null) { + throw new CloudRuntimeException(errorCode.getDetails()); + } + } if (NetworkUtils.isIpv4Address(ip)) { return reserveIpv4(ipRange, ip, allowDuplicatedAddress); } else if (IPv6NetworkUtils.isIpv6Address(ip)) { From a20f6c4de40a4d7ee5e21741bae784247c94f82f Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:22:29 +0800 Subject: [PATCH 18/66] [compute]: guard vm nic dependencies Run admission before VmNic and QoS side effects. Resolves: ZCF-5485 Change-Id: I38b7b25b8d58257d6df2b35b4b69328c386a64b5 --- .../zstack/compute/vm/VmAllocateNicFlow.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 0e307a30b5c..fc4504623f5 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -21,6 +21,8 @@ import org.zstack.header.image.ImagePlatform; import org.zstack.header.message.APIMessage; import org.zstack.header.network.l3.*; +import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; +import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.header.vm.*; import org.zstack.network.l3.L3NetworkManager; import org.zstack.resourceconfig.ResourceConfig; @@ -121,6 +123,13 @@ public void run(final FlowTrigger trigger, final Map data) { return; } + ErrorCode admissionError = admitDependency(nw.getUuid(), "VmNic", null, "CREATE_VM_NIC"); + if (admissionError != null) { + errs.add(admissionError); + wcomp.allDone(); + return; + } + // 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); @@ -263,6 +272,13 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni VmNicParam vmNicParm = vmNicParms.get(0); + if (vmNicParm.getInboundBandwidth() != null || vmNicParm.getOutboundBandwidth() != null) { + ErrorCode admissionError = admitDependency(vmNicVO.getL3NetworkUuid(), "VmNicQos", null, "ADD_VM_NIC_QOS"); + if (admissionError != null) { + throw new org.zstack.header.exception.CloudRuntimeException(admissionError.getDetails()); + } + } + // add vmnic bandwidth systemtag if (vmNicParm.getInboundBandwidth() != null || vmNicParm.getOutboundBandwidth() != null) { VmNicQosConfigBackend backend = vmMgr.getVmNicQosConfigBackend(vmSpec.getVmInventory().getType()); @@ -277,6 +293,19 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni } } + private ErrorCode admitDependency(String resourceUuid, String dependencyType, String operationUuid, String operationStep) { + NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( + resourceUuid, dependencyType, operationUuid, operationStep); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admit(request); + if (errorCode != null) { + return errorCode; + } + } + return null; + } + private void callBeforeAllocateVmNicExtensions(VmNicInventory nic, VmInstanceSpec spec, Completion completion) { List exts = pluginRgty.getExtensionList(BeforeAllocateVmNicExtensionPoint.class); if (exts.isEmpty()) { From 7cc81c5cc0055eeb0d677f09cd46e5bf20a38a9f Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:24:04 +0800 Subject: [PATCH 19/66] [network]: guard network dependency attach Apply admission before cluster and service attachment writes. Resolves: ZCF-5485 Change-Id: I8beb86c2aef3cb11c0bd0ab16f521d6028d74e42 --- .../java/org/zstack/network/l2/L2NoVlanNetwork.java | 12 ++++++++++++ .../java/org/zstack/network/l3/L3BasicNetwork.java | 13 +++++++++++++ 2 files changed, 25 insertions(+) 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 ec9a7a5be0b..1fcaeb975ce 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -39,6 +39,8 @@ import org.zstack.header.network.l2.*; import org.zstack.header.network.l3.L3NetworkVO; import org.zstack.header.network.l3.L3NetworkVO_; +import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; +import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.network.l3.ServiceTypeExtensionPoint; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; @@ -926,6 +928,16 @@ public void handle(ErrorCode errCode, Map data) { } private void attachL2NetworkToCluster(final AttachL2NetworkToClusterMsg msg, final Completion completion){ + NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( + msg.getL2NetworkUuid(), "ClusterAttach", null, "ATTACH_CLUSTER"); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admit(admission); + if (errorCode != null) { + completion.fail(errorCode); + return; + } + } long count = Q.New(L2NetworkClusterRefVO.class).eq(L2NetworkClusterRefVO_.clusterUuid, msg.getClusterUuid()) .eq(L2NetworkClusterRefVO_.l2NetworkUuid, msg.getL2NetworkUuid()).count(); if (count != 0) { 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 ff4fe0c95b4..06284dee766 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -41,6 +41,8 @@ import org.zstack.header.network.l2.L2NetworkConstant; import org.zstack.header.network.l2.L2NetworkVO; import org.zstack.header.network.l2.NetworkCreateContext; +import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; +import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.header.network.l3.*; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.service.*; @@ -1538,6 +1540,17 @@ public void handle(ErrorCode errCode, Map data) { private void handle(final AttachNetworkServiceToL3Msg msg) { MessageReply reply = new MessageReply(); + NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( + msg.getL3NetworkUuid(), "NetworkService", null, "ATTACH_NETWORK_SERVICE"); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admit(admission); + if (errorCode != null) { + reply.setError(errorCode); + bus.reply(msg, reply); + return; + } + } L3NetworkVO l3VO = dbf.findByUuid(msg.getL3NetworkUuid(), L3NetworkVO.class); List networkServiceProviderVOS = Q.New(NetworkServiceProviderVO.class).list(); Map providerUuidTypeMap = new HashMap<>(); From 322af230e64ea88c987936c4e9b2d0258059642c Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:26:43 +0800 Subject: [PATCH 20/66] [network]: add confirmed l2 deletion hook Keep confirmed provider metadata until remote deletion succeeds. Resolves: ZCF-5485 Change-Id: I752fa55ba06723df88dd72b8286588a6bfbdee57 --- .../l2/L2DeleteConfirmExtensionPoint.java | 13 +++++++ .../network/l2/L2NetworkCascadeExtension.java | 34 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java diff --git a/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java new file mode 100644 index 00000000000..ca1912ffc97 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java @@ -0,0 +1,13 @@ +package org.zstack.header.network.l2; + +import org.zstack.header.errorcode.ErrorCode; + +/** Provider hook for confirmed remote-first L2 deletion. */ +public interface L2DeleteConfirmExtensionPoint { + boolean supports(L2NetworkInventory inventory); + ErrorCode begin(L2NetworkInventory inventory); + ErrorCode check(L2NetworkInventory inventory); + ErrorCode delete(L2NetworkInventory inventory); + ErrorCode cancel(L2NetworkInventory inventory); + void deleteLocalMetadata(L2NetworkInventory inventory); +} diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 1c78cb16f67..2694e735de3 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -13,6 +13,7 @@ import org.zstack.core.db.SimpleQuery; import org.zstack.core.errorcode.ErrorFacade; import org.zstack.header.core.Completion; +import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.identity.AccountInventory; import org.zstack.header.identity.AccountVO; import org.zstack.header.message.MessageReply; @@ -102,7 +103,14 @@ private void handleDeletionCleanup(CascadeAction action, Completion completion) try { final List l2invs = l2NetworkFromAction(action); if (l2invs != null) { - l2invs.forEach(l -> dbf.eoCleanup(L2NetworkVO.class, l.getUuid())); + l2invs.forEach(l -> { + for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { + if (ext.supports(l)) { + ext.deleteLocalMetadata(l); + } + } + dbf.eoCleanup(L2NetworkVO.class, l.getUuid()); + }); } else { dbf.eoCleanup(L2NetworkVO.class); } @@ -152,6 +160,15 @@ public void run(List replies) { List uuids = new ArrayList(); for (MessageReply r : replies) { L2NetworkInventory inv = finalL2invs.get(replies.indexOf(r)); + for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { + if (ext.supports(inv)) { + ErrorCode errorCode = ext.delete(inv); + if (errorCode != null) { + completion.fail(errorCode); + return; + } + } + } uuids.add(inv.getUuid()); logger.debug(String.format("delete l2 network[uuid:%s, name:%s]", inv.getUuid(), inv.getName())); } @@ -172,6 +189,21 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { try { for (L2NetworkInventory prinv : l2invs) { extpEmitter.preDelete(prinv); + for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { + if (ext.supports(prinv)) { + ErrorCode errorCode = ext.begin(prinv); + if (errorCode != null) { + completion.fail(errorCode); + return; + } + errorCode = ext.check(prinv); + if (errorCode != null) { + ext.cancel(prinv); + completion.fail(errorCode); + return; + } + } + } } completion.success(); From 5f3b0d4d399f9610cddeb82244d78934c4cf0688 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:27:32 +0800 Subject: [PATCH 21/66] [network]: preserve confirmed delete errors Do not report force delete success for confirmed providers. Resolves: ZCF-5485 Change-Id: Ie483b57be18deca6454286f5160c5c896f0e5bb6 --- .../zstack/network/l2/L2NetworkCascadeExtension.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 2694e735de3..55689bf6236 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -160,6 +160,16 @@ public void run(List replies) { List uuids = new ArrayList(); for (MessageReply r : replies) { L2NetworkInventory inv = finalL2invs.get(replies.indexOf(r)); + if (!r.isSuccess()) { + boolean confirmed = false; + for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { + confirmed |= ext.supports(inv); + } + if (confirmed) { + completion.fail(r.getError()); + return; + } + } for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { if (ext.supports(inv)) { ErrorCode errorCode = ext.delete(inv); From cb94461611e99ee56f84107366cced0713838e5a Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:28:57 +0800 Subject: [PATCH 22/66] [network]: propagate delete operation uuid Carry a typed operation token into L2 deletion handling. Resolves: ZCF-5485 Change-Id: I89736221cd451b5452207ef05a94aa97c2870686 --- .../zstack/header/network/l2/L2NetworkDeletionMsg.java | 9 +++++++++ .../org/zstack/network/l2/L2NetworkCascadeExtension.java | 1 + 2 files changed, 10 insertions(+) diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java index 08273df862f..cb690673d11 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java @@ -6,6 +6,7 @@ */ public class L2NetworkDeletionMsg extends DeletionMessage implements L2NetworkMessage { private String l2NetworkUuid; + private String operationUuid; public void setL2NetworkUuid(String l2NetworkUuid) { this.l2NetworkUuid = l2NetworkUuid; @@ -15,4 +16,12 @@ public void setL2NetworkUuid(String l2NetworkUuid) { public String getL2NetworkUuid() { return l2NetworkUuid; } + + public String getOperationUuid() { + return operationUuid; + } + + public void setOperationUuid(String operationUuid) { + this.operationUuid = operationUuid; + } } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 55689bf6236..4f337fec723 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -140,6 +140,7 @@ private void handleDeletion(final CascadeAction action, final Completion complet L2NetworkDeletionMsg msg = new L2NetworkDeletionMsg(); msg.setForceDelete(action.isActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE)); msg.setL2NetworkUuid(l2inv.getUuid()); + msg.setOperationUuid(org.zstack.core.Platform.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, L2NetworkConstant.SERVICE_ID, l2inv.getUuid()); msgs.add(msg); } From 8700e9949b24842ad36a49fd59e019345e0fe3b4 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:31:09 +0800 Subject: [PATCH 23/66] [rest]: add status body rest handler Expose HTTP status and body without changing legacy handlers. Resolves: ZCF-5485 Change-Id: I6cf4c661305059171b5f869b74dfe51432baa752 --- .../org/zstack/core/rest/RESTFacadeImpl.java | 56 +++++++++++++++++-- .../org/zstack/header/rest/RESTFacade.java | 3 + .../zstack/header/rest/SyncHttpResponse.java | 13 +++++ .../rest/SyncHttpStatusBodyCallHandler.java | 5 ++ 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/rest/SyncHttpResponse.java create mode 100644 header/src/main/java/org/zstack/header/rest/SyncHttpStatusBodyCallHandler.java diff --git a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java index 26dbb7ec675..83b2cb3267c 100755 --- a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java +++ b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java @@ -107,6 +107,19 @@ private interface AsyncHttpWrapper { private interface HttpCallHandlerWrapper { String handle(HttpEntity entity); + default void handle(HttpEntity entity, HttpServletResponse response) { + String body = handle(entity); + response.setStatus(HttpStatus.SC_OK); + if (body != null) { + response.setHeader("Content-Type", "application/json"); + try { + response.getWriter().write(body); + } catch (IOException e) { + throw new CloudRuntimeException(e); + } + } + } + HttpCallHandler getHandler(); } @@ -346,12 +359,7 @@ void sendCommand(HttpServletRequest req, HttpServletResponse rsp) { return; } - String ret = handler.handle(entity); - if (ret == null) { - rsp.setStatus(HttpStatus.SC_OK); - } else { - rsp.setStatus(HttpStatus.SC_OK, ret); - } + handler.handle(entity, rsp); } catch (IOException e) { logger.warn(e.getMessage(), e); } catch (Throwable t) { @@ -1051,6 +1059,42 @@ public HttpCallHandler getHandler() { httpCallhandlers.put(path, wrapper); } + @Override + public void registerSyncHttpStatusBodyCallHandler(String path, final Class objectType, + final SyncHttpStatusBodyCallHandler handler) { + if (httpCallhandlers.containsKey(path)) { + throw new CloudRuntimeException("duplicate SyncHttpStatusBodyCallHandler for path[" + path + "]"); + } + httpCallhandlers.put(path, new HttpCallHandlerWrapper() { + @Override + public String handle(HttpEntity entity) { + SyncHttpResponse response = handler.handleSyncHttpCall(JSONObjectUtil.toObject(entity.getBody(), objectType)); + return response == null ? null : response.getBody(); + } + + @Override + public void handle(HttpEntity entity, HttpServletResponse servletResponse) { + SyncHttpResponse response = handler.handleSyncHttpCall(JSONObjectUtil.toObject(entity.getBody(), objectType)); + if (response == null) { + servletResponse.setStatus(HttpStatus.SC_OK); + return; + } + servletResponse.setStatus(response.getStatus()); + if (response.getBody() != null) { + servletResponse.setHeader("Content-Type", "application/json"); + try { + servletResponse.getWriter().write(response.getBody()); + } catch (IOException e) { + throw new CloudRuntimeException(e); + } + } + } + + @Override + public HttpCallHandler getHandler() { return handler; } + }); + } + @Override public String getBaseUrl() { return baseUrl; diff --git a/header/src/main/java/org/zstack/header/rest/RESTFacade.java b/header/src/main/java/org/zstack/header/rest/RESTFacade.java index 23fee5208c2..94569183b18 100755 --- a/header/src/main/java/org/zstack/header/rest/RESTFacade.java +++ b/header/src/main/java/org/zstack/header/rest/RESTFacade.java @@ -85,6 +85,9 @@ public interface RESTFacade { void registerSyncHttpCallHandler(String path, Class objectType, SyncHttpCallHandler handler); + void registerSyncHttpStatusBodyCallHandler(String path, Class objectType, + SyncHttpStatusBodyCallHandler handler); + String getBaseUrl(); String getSendCommandUrl(); diff --git a/header/src/main/java/org/zstack/header/rest/SyncHttpResponse.java b/header/src/main/java/org/zstack/header/rest/SyncHttpResponse.java new file mode 100644 index 00000000000..ece0b4f928e --- /dev/null +++ b/header/src/main/java/org/zstack/header/rest/SyncHttpResponse.java @@ -0,0 +1,13 @@ +package org.zstack.header.rest; + +public final class SyncHttpResponse { + private final int status; + private final String body; + + public SyncHttpResponse(int status, String body) { + this.status = status; + this.body = body; + } + public int getStatus() { return status; } + public String getBody() { return body; } +} diff --git a/header/src/main/java/org/zstack/header/rest/SyncHttpStatusBodyCallHandler.java b/header/src/main/java/org/zstack/header/rest/SyncHttpStatusBodyCallHandler.java new file mode 100644 index 00000000000..41e0a9e39a7 --- /dev/null +++ b/header/src/main/java/org/zstack/header/rest/SyncHttpStatusBodyCallHandler.java @@ -0,0 +1,5 @@ +package org.zstack.header.rest; + +public interface SyncHttpStatusBodyCallHandler extends HttpCallHandler { + SyncHttpResponse handleSyncHttpCall(T cmd); +} From 65a516e3958854d8d4b136131a5c451d0ad35fac Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:34:52 +0800 Subject: [PATCH 24/66] [sdnController]: add generic sdn pull route Validate generic resource pull and keep provider extension optional. Resolves: ZCF-5485 Change-Id: Icfbe580a0605e40df2e9a7a6d901b136954dbb84 --- .../zstack/sdnController/SdnController.java | 6 ++++ .../SdnControllerApiInterceptor.java | 18 +++++++++++ .../sdnController/SdnControllerBase.java | 25 +++++++++++++++ .../header/APIPullSdnControllerEvent.java | 8 +++++ .../header/APIPullSdnControllerMsg.java | 32 +++++++++++++++++++ .../header/PullSdnControllerMsg.java | 27 ++++++++++++++++ .../header/PullSdnControllerReply.java | 6 ++++ 7 files changed, 122 insertions(+) create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsg.java create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerMsg.java create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerReply.java diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java index 57072cbaa57..80d4f917eee 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java @@ -27,4 +27,10 @@ public interface SdnController { default void removeHost(SdnControllerRemoveHostMsg msg, Completion completion) {completion.success();}; default void changeHost(SdnControllerHostRefVO oldRef, SdnControllerHostRefVO newRef, Completion completion) {completion.success();}; + + default void pullResources(PullSdnControllerMsg msg, Completion completion) { + completion.fail(org.zstack.core.Platform.operr( + org.zstack.utils.clouderrorcode.CloudOperationsErrorCode.ORG_ZSTACK_SDNCONTROLLER_10012, + "Resource pull is not supported by sdn controller[%s]", msg.getSdnControllerUuid())); + } } diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java index 97840150a1e..cfd2af26c48 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java @@ -60,6 +60,7 @@ public List getMessageClassToIntercept() { ret.add(APISetVmNicSecurityGroupMsg.class); ret.add(APIAddSecurityGroupRuleMsg.class); ret.add(APIPullSdnControllerTenantMsg.class); + ret.add(APIPullSdnControllerMsg.class); return ret; } @@ -85,6 +86,8 @@ public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionExcepti validate((APIAddSecurityGroupRuleMsg) msg); } else if (msg instanceof APIPullSdnControllerTenantMsg) { validate((APIPullSdnControllerTenantMsg) msg); + } else if (msg instanceof APIPullSdnControllerMsg) { + validate((APIPullSdnControllerMsg) msg); } else if (msg instanceof APIChangeSdnControllerMsg) { validate((APIChangeSdnControllerMsg) msg); } @@ -267,6 +270,21 @@ private void validate(APIPullSdnControllerTenantMsg msg) { } } + private void validate(APIPullSdnControllerMsg msg) { + if (!Arrays.asList("Segment", "TenantRouter").contains(msg.getResourceType())) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + "Unsupported resource type[%s]", msg.getResourceType())); + } + if (msg.getResourceUuids() != null && msg.getResourceUuids().size() > 100) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + "At most 100 resource uuids can be pulled in one request")); + } + if (dbf.findByUuid(msg.getSdnControllerUuid(), SdnControllerVO.class) == null) { + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + "SDN controller[uuid:%s] not found", msg.getSdnControllerUuid())); + } + } + private void validateVlanRanges(List ranges) { List sdnVlanRanges = new ArrayList<>(); for (String range : ranges) { 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 848c962b2e3..92e748b864e 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java @@ -120,12 +120,16 @@ public void handleMessage(SdnControllerMessage msg) { handle((APISdnControllerChangeHostMsg) msg); } else if (msg instanceof APIPullSdnControllerTenantMsg) { handle((APIPullSdnControllerTenantMsg) msg); + } else if (msg instanceof APIPullSdnControllerMsg) { + handle((APIPullSdnControllerMsg) msg); } else if (msg instanceof APIChangeSdnControllerMsg) { handle((APIChangeSdnControllerMsg) msg); } else if (msg instanceof SdnControllerRemoveHostMsg) { handle((SdnControllerRemoveHostMsg) msg); } else if (msg instanceof PullSdnControllerTenantMsg) { handle((PullSdnControllerTenantMsg) msg); + } else if (msg instanceof PullSdnControllerMsg) { + handle((PullSdnControllerMsg) msg); } else if (msg instanceof ReconnectSdnControllerMsg) { handle((ReconnectSdnControllerMsg) msg); } else if (msg instanceof SyncSdnControllerDataMsg) { @@ -1063,6 +1067,15 @@ public void fail(ErrorCode errorCode) { }); } + private void handle(APIPullSdnControllerMsg amsg) { + APIPullSdnControllerEvent event = new APIPullSdnControllerEvent(amsg.getId()); + PullSdnControllerMsg msg = PullSdnControllerMsg.fromApi(amsg); + pullResources(msg, new Completion(msg) { + @Override public void success() { bus.publish(event); } + @Override public void fail(ErrorCode errorCode) { event.setError(errorCode); bus.publish(event); } + }); + } + private void handle(PullSdnControllerTenantMsg msg) { PullSdnControllerTenantReply reply = new PullSdnControllerTenantReply(); @@ -1086,6 +1099,18 @@ public void fail(ErrorCode errorCode) { }); } + private void handle(PullSdnControllerMsg msg) { + PullSdnControllerReply reply = new PullSdnControllerReply(); + pullResources(msg, new Completion(msg) { + @Override public void success() { bus.reply(msg, reply); } + @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } + }); + } + + private void pullResources(PullSdnControllerMsg msg, Completion completion) { + getSdnController().pullResources(msg, completion); + } + private void pullSdnControllerTenant(PullSdnControllerTenantMsg msg, Completion completion) { // Only H3C VCFC V2 controllers support this operation, already validated in interceptor // But confirm again here to ensure type safety diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java new file mode 100644 index 00000000000..6dd5552adee --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java @@ -0,0 +1,8 @@ +package org.zstack.sdnController.header; + +import org.zstack.header.message.APIEvent; + +public class APIPullSdnControllerEvent extends APIEvent { + public APIPullSdnControllerEvent() { } + public APIPullSdnControllerEvent(String apiId) { super(apiId); } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsg.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsg.java new file mode 100644 index 00000000000..dd65117f990 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsg.java @@ -0,0 +1,32 @@ +package org.zstack.sdnController.header; + +import org.springframework.http.HttpMethod; +import org.zstack.header.identity.Action; +import org.zstack.header.message.APIMessage; +import org.zstack.header.message.APIParam; +import org.zstack.header.network.sdncontroller.SdnControllerConstant; +import org.zstack.header.network.sdncontroller.SdnControllerMessage; +import org.zstack.header.network.sdncontroller.SdnControllerVO; +import org.zstack.header.rest.RestRequest; + +import java.util.List; + +@RestRequest(path = "/sdn-controllers/{uuid}/resources/actions", method = HttpMethod.PUT, + responseClass = APIPullSdnControllerEvent.class, isAction = true) +@Action(category = SdnControllerConstant.ACTION_CATEGORY) +public class APIPullSdnControllerMsg extends APIMessage implements SdnControllerMessage { + @APIParam(resourceType = SdnControllerVO.class, checkAccount = true, operationTarget = true) + private String uuid; + @APIParam(validValues = {"Segment", "TenantRouter"}) + private String resourceType; + @APIParam(required = false) + private List resourceUuids; + + @Override public String getSdnControllerUuid() { return uuid; } + public String getUuid() { return uuid; } + public void setUuid(String value) { uuid = value; } + public String getResourceType() { return resourceType; } + public void setResourceType(String value) { resourceType = value; } + public List getResourceUuids() { return resourceUuids; } + public void setResourceUuids(List value) { resourceUuids = value; } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerMsg.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerMsg.java new file mode 100644 index 00000000000..603ec9913e7 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerMsg.java @@ -0,0 +1,27 @@ +package org.zstack.sdnController.header; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.sdncontroller.SdnControllerMessage; + +import java.util.List; + +public class PullSdnControllerMsg extends NeedReplyMessage implements SdnControllerMessage { + private String sdnControllerUuid; + private String resourceType; + private List resourceUuids; + + public static PullSdnControllerMsg fromApi(APIPullSdnControllerMsg api) { + PullSdnControllerMsg msg = new PullSdnControllerMsg(); + msg.setSdnControllerUuid(api.getSdnControllerUuid()); + msg.setResourceType(api.getResourceType()); + msg.setResourceUuids(api.getResourceUuids()); + return msg; + } + + @Override public String getSdnControllerUuid() { return sdnControllerUuid; } + public void setSdnControllerUuid(String value) { sdnControllerUuid = value; } + public String getResourceType() { return resourceType; } + public void setResourceType(String value) { resourceType = value; } + public List getResourceUuids() { return resourceUuids; } + public void setResourceUuids(List value) { resourceUuids = value; } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerReply.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerReply.java new file mode 100644 index 00000000000..6dc07d6e0c9 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/PullSdnControllerReply.java @@ -0,0 +1,6 @@ +package org.zstack.sdnController.header; + +import org.zstack.header.message.MessageReply; + +public class PullSdnControllerReply extends MessageReply { +} From 526dc81d57851efce250bbce96e6a843c52f0df6 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 16:35:33 +0800 Subject: [PATCH 25/66] [rest]: cover sync http response Verify status and body are preserved. Resolves: ZCF-5485 Change-Id: Idc030d936da504aa7cb0205f78e1395f51214d3b --- .../test/core/rest/TestSyncHttpResponse.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java diff --git a/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java b/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java new file mode 100644 index 00000000000..776234759c2 --- /dev/null +++ b/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java @@ -0,0 +1,14 @@ +package org.zstack.test.core.rest; + +import org.junit.Assert; +import org.junit.Test; +import org.zstack.header.rest.SyncHttpResponse; + +public class TestSyncHttpResponse { + @Test + public void preservesStatusAndBody() { + SyncHttpResponse response = new SyncHttpResponse(409, "conflict"); + Assert.assertEquals(409, response.getStatus()); + Assert.assertEquals("conflict", response.getBody()); + } +} From 754a6d95a6c085b3dbafb7e627b61d37b7bc7f84 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 17:03:11 +0800 Subject: [PATCH 26/66] [zns]: verify cloud contract fixture Check Cloud mirror against its SHA-256 manifest. Resolves: ZCF-5485 Change-Id: Ic20852423d42b8f16261a84634a9af0840bf2ea6 --- .../test/network/zns/TestZcf5485Fixture.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java diff --git a/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java b/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java new file mode 100644 index 00000000000..0d53d304e47 --- /dev/null +++ b/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java @@ -0,0 +1,29 @@ +package org.zstack.test.network.zns; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +public class TestZcf5485Fixture { + @Test + public void fixtureMatchesManifest() throws Exception { + ClassLoader loader = getClass().getClassLoader(); + byte[] fixture; + try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/segment-cloud-contract.json")) { + Assert.assertNotNull(stream); + fixture = stream.readAllBytes(); + } + String expected; + try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/SHA256SUMS")) { + Assert.assertNotNull(stream); + expected = new String(stream.readAllBytes(), StandardCharsets.UTF_8).trim().split("\\s+")[0]; + } + byte[] digest = MessageDigest.getInstance("SHA-256").digest(fixture); + StringBuilder actual = new StringBuilder(); + for (byte value : digest) actual.append(String.format("%02x", value)); + Assert.assertEquals(expected, actual.toString()); + } +} From 5f21c9674131100bbdfa45e15cc57df67594fcf8 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 18:07:35 +0800 Subject: [PATCH 27/66] [zns]: add projected mutation replies Add typed replies for projected range and network conversion messages. Resolves: ZCF-5485 Change-Id: I01926f8f269a35e59109de6c80e4bceb6e317f51 --- .../zstack/header/network/l2/ConvertL2VlanModeReply.java | 6 ++++++ .../zstack/header/network/l3/ConvertL3NetworkTypeReply.java | 6 ++++++ .../header/network/l3/DeleteProjectedIpRangeReply.java | 6 ++++++ .../header/network/l3/UpdateProjectedIpRangeReply.java | 6 ++++++ 4 files changed, 24 insertions(+) create mode 100644 header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java diff --git a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java new file mode 100644 index 00000000000..cc5b1d0e598 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java @@ -0,0 +1,6 @@ +package org.zstack.header.network.l2; + +import org.zstack.header.message.MessageReply; + +public class ConvertL2VlanModeReply extends MessageReply { +} diff --git a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java new file mode 100644 index 00000000000..4ea68f3cae0 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java @@ -0,0 +1,6 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.MessageReply; + +public class ConvertL3NetworkTypeReply extends MessageReply { +} diff --git a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java new file mode 100644 index 00000000000..3a113551b36 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java @@ -0,0 +1,6 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.MessageReply; + +public class DeleteProjectedIpRangeReply extends MessageReply { +} diff --git a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java new file mode 100644 index 00000000000..38ac6bbceff --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java @@ -0,0 +1,6 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.MessageReply; + +public class UpdateProjectedIpRangeReply extends MessageReply { +} From a5aaff7d1a04f6bde16979d3ebc064a0f8088c37 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 21:50:47 +0800 Subject: [PATCH 28/66] [zns]: fix sdk generation Java 8 fixture reader; add pull SDK result. Resolves: ZCF-5485 Change-Id: I019fe4e548db69dbf0df786380eee59f924a1095 --- .../zstack/sdk/PullSdnControllerAction.java | 107 +++++++++++++++++ .../zstack/sdk/PullSdnControllerResult.java | 5 + .../test/network/zns/TestZcf5485Fixture.java | 15 ++- .../java/org/zstack/testlib/ApiHelper.groovy | 111 +++++++++++++++--- 4 files changed, 222 insertions(+), 16 deletions(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/PullSdnControllerAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java diff --git a/sdk/src/main/java/org/zstack/sdk/PullSdnControllerAction.java b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerAction.java new file mode 100644 index 00000000000..b82f48c573a --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerAction.java @@ -0,0 +1,107 @@ +package org.zstack.sdk; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class PullSdnControllerAction 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.PullSdnControllerResult 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 = {"Segment","TenantRouter"}, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String resourceType; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.util.List resourceUuids; + + @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.PullSdnControllerResult value = res.getResult(org.zstack.sdk.PullSdnControllerResult.class); + ret.value = value == null ? new org.zstack.sdk.PullSdnControllerResult() : 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 = "/sdn-controllers/{uuid}/resources/actions"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "pullSdnController"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java new file mode 100644 index 00000000000..a0a3a4bf8e7 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java @@ -0,0 +1,5 @@ +package org.zstack.sdk; + +/** Empty result for the asynchronous generic SDN controller pull action. */ +public class PullSdnControllerResult { +} diff --git a/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java b/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java index 0d53d304e47..1811030d0e7 100644 --- a/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java +++ b/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java @@ -4,6 +4,7 @@ import org.junit.Test; import java.io.InputStream; +import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @@ -14,16 +15,26 @@ public void fixtureMatchesManifest() throws Exception { byte[] fixture; try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/segment-cloud-contract.json")) { Assert.assertNotNull(stream); - fixture = stream.readAllBytes(); + fixture = readAll(stream); } String expected; try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/SHA256SUMS")) { Assert.assertNotNull(stream); - expected = new String(stream.readAllBytes(), StandardCharsets.UTF_8).trim().split("\\s+")[0]; + expected = new String(readAll(stream), StandardCharsets.UTF_8).trim().split("\\s+")[0]; } byte[] digest = MessageDigest.getInstance("SHA-256").digest(fixture); StringBuilder actual = new StringBuilder(); for (byte value : digest) actual.append(String.format("%02x", value)); Assert.assertEquals(expected, actual.toString()); } + + private static byte[] readAll(InputStream stream) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + int count; + while ((count = stream.read(buffer)) != -1) { + out.write(buffer, 0, count); + } + return out.toByteArray(); + } } diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 74c3ac573dc..17b5f8e5843 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -21,20 +21,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(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()) @@ -24425,6 +24425,33 @@ abstract class ApiHelper { } + def getModelServiceLaunchCommands(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetModelServiceLaunchCommandsAction.class) Closure c) { + def a = new org.zstack.sdk.GetModelServiceLaunchCommandsAction() + 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 getMonitorItem(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.GetMonitorItemAction.class) Closure c) { def a = new org.zstack.sdk.GetMonitorItemAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -25430,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()) @@ -29015,6 +29042,33 @@ abstract class ApiHelper { } + def pullSdnController(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.PullSdnControllerAction.class) Closure c) { + def a = new org.zstack.sdk.PullSdnControllerAction() + 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 pullSdnControllerTenant(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.PullSdnControllerTenantAction.class) Closure c) { def a = new org.zstack.sdk.PullSdnControllerTenantAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -48552,6 +48606,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() + if (System.getProperty("apipath") != null) { if (a.apiId == null) { @@ -52035,6 +52090,33 @@ abstract class ApiHelper { } + def setIAM2RoleScope(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.iam2.api.SetIAM2RoleScopeAction.class) Closure c) { + def a = new org.zstack.sdk.iam2.api.SetIAM2RoleScopeAction() + 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 setOrganizationOperation(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.iam2.api.SetOrganizationOperationAction.class) Closure c) { def a = new org.zstack.sdk.iam2.api.SetOrganizationOperationAction() a.sessionId = Test.currentEnvSpec?.session?.uuid @@ -54914,19 +54996,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -56233,7 +56316,7 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + a.conditions = a.conditions.collect { it.toString() } @@ -56241,14 +56324,14 @@ abstract class ApiHelper { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) From 2db55b4dfc57837f078384133d3a9de6c75b5251 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 22:09:15 +0800 Subject: [PATCH 29/66] [zns]: keep sdk generation compatible Preserve non-regenerable SDK types during generation. Resolves: ZCF-5485 Change-Id: I918ced7ca2e47a7b93dde02ca18e5e9d2943e157 --- runMavenProfile | 4 +- sdk/src/main/java/SourceClassMap.java | 1450 ------------------------- 2 files changed, 3 insertions(+), 1451 deletions(-) diff --git a/runMavenProfile b/runMavenProfile index 5415b97953a..42929dd5857 100755 --- a/runMavenProfile +++ b/runMavenProfile @@ -287,7 +287,9 @@ sdk() { cd - >/dev/null cd sdk/src/main/java/org/zstack/sdk/ - find . -type f | grep -E -v "(ZSClient|ZSConfig|ApiException|AsyncRestState|Completion|Constants|ErrorCode|ErrorCodeList|InternalCompletion|ApiResult|Param|RestInfo|AbstractAction|QueryAction).java" | xargs rm -f + # Keep existing SDK classes that the current source tree cannot regenerate + # (for example premium/enterprise result types); generated classes overwrite + # matching files below without leaving a partially compilable SDK. cd - yes | cp -r ~/zstack-sdk/java/* sdk/src/main/java/ set +u diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 29c9197c37d..b33ed92361a 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -7,139 +7,7 @@ public class SourceClassMap { { 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.CdnModelServiceTemplateInventory", "org.zstack.sdk.CdnModelServiceTemplateInventory"); - 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.sdk.ModelServiceInstanceLaunchCommandInventory"); - put("org.zstack.ai.message.ModelServiceLaunchCommandInventory", "org.zstack.sdk.ModelServiceLaunchCommandInventory"); - 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.dgpu.DGpuBillingInventory", "org.zstack.sdk.DGpuBillingInventory"); - 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.dgpu.DGpuSpending", "org.zstack.sdk.DGpuSpending"); - put("org.zstack.billing.spendingcalculator.dgpu.DGpuSpendingInventory", "org.zstack.sdk.DGpuSpendingInventory"); - 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"); @@ -149,111 +17,12 @@ public class SourceClassMap { 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"); @@ -272,35 +41,14 @@ public class SourceClassMap { 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.HostBlockDeviceStruct", "org.zstack.sdk.HostBlockDeviceStruct"); 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"); @@ -319,8 +67,6 @@ public class SourceClassMap { 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"); @@ -349,52 +95,15 @@ public class SourceClassMap { 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.resource.ResourceSourceRefInventory", "org.zstack.sdk.ResourceSourceRefInventory"); - 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.sdk.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -409,113 +118,28 @@ public class SourceClassMap { 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.volumeCache.HostCacheStoreDeviceInventory", "org.zstack.sdk.HostCacheStoreDeviceInventory"); - put("org.zstack.header.volumeCache.HostCacheStoreInventory", "org.zstack.sdk.HostCacheStoreInventory"); - put("org.zstack.header.volumeCache.HostCacheStoreState", "org.zstack.sdk.HostCacheStoreState"); - put("org.zstack.header.volumeCache.HostCacheStoreStatus", "org.zstack.sdk.HostCacheStoreStatus"); - put("org.zstack.header.volumeCache.VolumeCacheInventory", "org.zstack.sdk.VolumeCacheInventory"); - put("org.zstack.header.volumeCache.VolumeCacheMode", "org.zstack.sdk.VolumeCacheMode"); - put("org.zstack.header.volumeCache.VolumeCacheStatus", "org.zstack.sdk.VolumeCacheStatus"); - 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.CacheTO", "org.zstack.sdk.CacheTO"); - 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"); @@ -524,71 +148,15 @@ public class SourceClassMap { 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.LicenseAuthorizationInfo", "org.zstack.sdk.LicenseAuthorizationInfo"); - put("org.zstack.license.LicenseAuthorizationQuotaInventory", "org.zstack.sdk.LicenseAuthorizationQuotaInventory"); - 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"); @@ -596,14 +164,6 @@ public class SourceClassMap { 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"); @@ -615,143 +175,18 @@ public class SourceClassMap { 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"); @@ -759,169 +194,9 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.sdk.zwatch.alarm.AlarmResourceStateInventory"); - 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"); } }; @@ -929,122 +204,14 @@ public class SourceClassMap { { 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.CacheTO", "org.zstack.kvm.CacheTO"); - 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.CdnModelServiceTemplateInventory", "org.zstack.ai.entity.CdnModelServiceTemplateInventory"); - 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"); @@ -1053,72 +220,24 @@ public class SourceClassMap { 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.DGpuBillingInventory", "org.zstack.billing.generator.dgpu.DGpuBillingInventory"); - 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.DGpuSpending", "org.zstack.billing.spendingcalculator.dgpu.DGpuSpending"); - put("org.zstack.sdk.DGpuSpendingInventory", "org.zstack.billing.spendingcalculator.dgpu.DGpuSpendingInventory"); - 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageHostProtocolRefInventory"); put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); @@ -1126,140 +245,50 @@ public class SourceClassMap { 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.HostBlockDeviceStruct", "org.zstack.header.host.HostBlockDeviceStruct"); - put("org.zstack.sdk.HostCacheStoreDeviceInventory", "org.zstack.header.volumeCache.HostCacheStoreDeviceInventory"); - put("org.zstack.sdk.HostCacheStoreInventory", "org.zstack.header.volumeCache.HostCacheStoreInventory"); - put("org.zstack.sdk.HostCacheStoreState", "org.zstack.header.volumeCache.HostCacheStoreState"); - put("org.zstack.sdk.HostCacheStoreStatus", "org.zstack.header.volumeCache.HostCacheStoreStatus"); - 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.LicenseAuthorizationInfo", "org.zstack.license.LicenseAuthorizationInfo"); - put("org.zstack.sdk.LicenseAuthorizationQuotaInventory", "org.zstack.license.LicenseAuthorizationQuotaInventory"); - 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"); @@ -1271,374 +300,79 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceInstanceLaunchCommandInventory"); - put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); - put("org.zstack.sdk.ModelServiceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceLaunchCommandInventory"); - 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.ResourceSourceRefInventory", "org.zstack.header.resource.ResourceSourceRefInventory"); - 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.VolumeCacheInventory", "org.zstack.header.volumeCache.VolumeCacheInventory"); - put("org.zstack.sdk.VolumeCacheMode", "org.zstack.header.volumeCache.VolumeCacheMode"); - put("org.zstack.sdk.VolumeCacheStatus", "org.zstack.header.volumeCache.VolumeCacheStatus"); - 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"); @@ -1648,202 +382,18 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.zwatch.alarm.AlarmResourceStateInventory"); - 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"); } }; } From 128c199918c025633a4f26e032827b7463a3ba3d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sat, 8 Aug 2026 22:09:36 +0800 Subject: [PATCH 30/66] [zns]: restore sdk source map Keep complete SDK source class mapping. Resolves: ZCF-5485 Change-Id: I82e3048b97f1b2f862a8ca66db50074fb3427d8c --- sdk/src/main/java/SourceClassMap.java | 1450 +++++++++++++++++++++++++ 1 file changed, 1450 insertions(+) diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index b33ed92361a..29c9197c37d 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -7,7 +7,139 @@ public class SourceClassMap { { 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.CdnModelServiceTemplateInventory", "org.zstack.sdk.CdnModelServiceTemplateInventory"); + 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.sdk.ModelServiceInstanceLaunchCommandInventory"); + put("org.zstack.ai.message.ModelServiceLaunchCommandInventory", "org.zstack.sdk.ModelServiceLaunchCommandInventory"); + 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.dgpu.DGpuBillingInventory", "org.zstack.sdk.DGpuBillingInventory"); + 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.dgpu.DGpuSpending", "org.zstack.sdk.DGpuSpending"); + put("org.zstack.billing.spendingcalculator.dgpu.DGpuSpendingInventory", "org.zstack.sdk.DGpuSpendingInventory"); + 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"); @@ -17,12 +149,111 @@ public class SourceClassMap { 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"); @@ -41,14 +272,35 @@ public class SourceClassMap { 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.HostBlockDeviceStruct", "org.zstack.sdk.HostBlockDeviceStruct"); 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"); @@ -67,6 +319,8 @@ public class SourceClassMap { 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"); @@ -95,15 +349,52 @@ public class SourceClassMap { 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.resource.ResourceSourceRefInventory", "org.zstack.sdk.ResourceSourceRefInventory"); + 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.sdk.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -118,28 +409,113 @@ public class SourceClassMap { 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.volumeCache.HostCacheStoreDeviceInventory", "org.zstack.sdk.HostCacheStoreDeviceInventory"); + put("org.zstack.header.volumeCache.HostCacheStoreInventory", "org.zstack.sdk.HostCacheStoreInventory"); + put("org.zstack.header.volumeCache.HostCacheStoreState", "org.zstack.sdk.HostCacheStoreState"); + put("org.zstack.header.volumeCache.HostCacheStoreStatus", "org.zstack.sdk.HostCacheStoreStatus"); + put("org.zstack.header.volumeCache.VolumeCacheInventory", "org.zstack.sdk.VolumeCacheInventory"); + put("org.zstack.header.volumeCache.VolumeCacheMode", "org.zstack.sdk.VolumeCacheMode"); + put("org.zstack.header.volumeCache.VolumeCacheStatus", "org.zstack.sdk.VolumeCacheStatus"); + 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.CacheTO", "org.zstack.sdk.CacheTO"); + 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"); @@ -148,15 +524,71 @@ public class SourceClassMap { 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.LicenseAuthorizationInfo", "org.zstack.sdk.LicenseAuthorizationInfo"); + put("org.zstack.license.LicenseAuthorizationQuotaInventory", "org.zstack.sdk.LicenseAuthorizationQuotaInventory"); + 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"); @@ -164,6 +596,14 @@ public class SourceClassMap { 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"); @@ -175,18 +615,143 @@ public class SourceClassMap { 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"); @@ -194,9 +759,169 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.sdk.zwatch.alarm.AlarmResourceStateInventory"); + 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"); } }; @@ -204,14 +929,122 @@ public class SourceClassMap { { 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.CacheTO", "org.zstack.kvm.CacheTO"); + 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.CdnModelServiceTemplateInventory", "org.zstack.ai.entity.CdnModelServiceTemplateInventory"); + 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"); @@ -220,24 +1053,72 @@ public class SourceClassMap { 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.DGpuBillingInventory", "org.zstack.billing.generator.dgpu.DGpuBillingInventory"); + 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.DGpuSpending", "org.zstack.billing.spendingcalculator.dgpu.DGpuSpending"); + put("org.zstack.sdk.DGpuSpendingInventory", "org.zstack.billing.spendingcalculator.dgpu.DGpuSpendingInventory"); + 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageHostProtocolRefInventory"); put("org.zstack.sdk.ExternalPrimaryStorageInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageInventory"); @@ -245,50 +1126,140 @@ public class SourceClassMap { 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.HostBlockDeviceStruct", "org.zstack.header.host.HostBlockDeviceStruct"); + put("org.zstack.sdk.HostCacheStoreDeviceInventory", "org.zstack.header.volumeCache.HostCacheStoreDeviceInventory"); + put("org.zstack.sdk.HostCacheStoreInventory", "org.zstack.header.volumeCache.HostCacheStoreInventory"); + put("org.zstack.sdk.HostCacheStoreState", "org.zstack.header.volumeCache.HostCacheStoreState"); + put("org.zstack.sdk.HostCacheStoreStatus", "org.zstack.header.volumeCache.HostCacheStoreStatus"); + 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.LicenseAuthorizationInfo", "org.zstack.license.LicenseAuthorizationInfo"); + put("org.zstack.sdk.LicenseAuthorizationQuotaInventory", "org.zstack.license.LicenseAuthorizationQuotaInventory"); + 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"); @@ -300,79 +1271,374 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceInstanceLaunchCommandInventory"); + put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); + put("org.zstack.sdk.ModelServiceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceLaunchCommandInventory"); + 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.ResourceSourceRefInventory", "org.zstack.header.resource.ResourceSourceRefInventory"); + 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.VolumeCacheInventory", "org.zstack.header.volumeCache.VolumeCacheInventory"); + put("org.zstack.sdk.VolumeCacheMode", "org.zstack.header.volumeCache.VolumeCacheMode"); + put("org.zstack.sdk.VolumeCacheStatus", "org.zstack.header.volumeCache.VolumeCacheStatus"); + 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"); @@ -382,18 +1648,202 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.zwatch.alarm.AlarmResourceStateInventory"); + 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"); } }; } From ad426555d20fffb05d643897126a84b9620129db Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 06:21:42 +0800 Subject: [PATCH 31/66] [zns]: fix mtu fixture Resolves: ZCF-5485 Change-Id: I429341bd13adabb708a69e491007c6b182e961f3 --- test/src/test/resources/zns/zcf5485/SHA256SUMS | 2 +- test/src/test/resources/zns/zcf5485/segment-cloud-contract.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/src/test/resources/zns/zcf5485/SHA256SUMS b/test/src/test/resources/zns/zcf5485/SHA256SUMS index 75ade633e84..3c9b7b4fcab 100644 --- a/test/src/test/resources/zns/zcf5485/SHA256SUMS +++ b/test/src/test/resources/zns/zcf5485/SHA256SUMS @@ -1 +1 @@ -26f7ebd99c7637900291a5968ff53c8a6fcdb3cdb3549f237c53efe53b71742b *segment-cloud-contract.json +05dedd4b7361e7566d195d81a15d5c16e60b40675d7b5c6ddeef16225ffe7fa9 segment-cloud-contract.json diff --git a/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json b/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json index 3d70dc8cfec..87b5bea74f4 100644 --- a/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json +++ b/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json @@ -1 +1 @@ -{"contract":"ZCF-5485","version":1,"cloud_inventory":{"segment_uuid":"00000000-0000-0000-0000-000000000101","transport_zone_uuid":"00000000-0000-0000-0000-000000000201","transport_type":"overlay","cloud_zone_uuid":"00000000-0000-0000-0000-000000000301","cluster_uuids":["00000000-0000-0000-0000-000000000401"],"tenant_router_uuid":"00000000-0000-0000-0000-000000000501"},"cloud_projection":{"segment_uuid":"00000000-0000-0000-0000-000000000101","config_version":7,"etag":"\"7-abc\"","mtu":8950,"transport_zone_uuid":"00000000-0000-0000-0000-000000000201","ipams":[{"ip_version":4,"range_uuid":"00000000-0000-0000-0000-000000000601","cidr":"192.0.2.0/24","start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"mutations":[{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101/ipams","body":{"ip_version":4,"ip_ranges":[{"start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"wire":{"status":200,"has_data":true}},{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101","body":{"mtu":8950,"virtual_network_id":30001},"fields":["mtu","virtual_network_id"],"wire":{"status":202,"has_data":false}}],"wire":{"error_code":"","retryable":false}} +{"contract":"ZCF-5485","version":1,"cloud_inventory":{"segment_uuid":"00000000-0000-0000-0000-000000000101","transport_zone_uuid":"00000000-0000-0000-0000-000000000201","transport_type":"overlay","cloud_zone_uuid":"00000000-0000-0000-0000-000000000301","cluster_uuids":["00000000-0000-0000-0000-000000000401"],"tenant_router_uuid":"00000000-0000-0000-0000-000000000501"},"cloud_projection":{"segment_uuid":"00000000-0000-0000-0000-000000000101","config_version":7,"etag":"\"7-abc\"","mtu":1400,"transport_zone_uuid":"00000000-0000-0000-0000-000000000201","ipams":[{"ip_version":4,"range_uuid":"00000000-0000-0000-0000-000000000601","cidr":"192.0.2.0/24","start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"mutations":[{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101/ipams","body":{"ip_version":4,"ip_ranges":[{"start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"wire":{"status":200,"has_data":true}},{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101","body":{"mtu":1400,"virtual_network_id":30001},"fields":["mtu","virtual_network_id"],"wire":{"status":202,"has_data":false}}],"wire":{"error_code":"","retryable":false}} From aaa4ef54882788936870e3b3e19357ceec95f2fe Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 08:36:24 +0800 Subject: [PATCH 32/66] [zns]: address zstack review comments Use typed dependency admission constants and preserve REST compatibility. Keep cascade cleanup progressing and split SDN validation errors. Remove duplicate fixture scope. Resolves: ZCF-5485 Change-Id: I9e6b71201ddbcc35b2df85f7dde2749a6668ae77 --- .../zstack/compute/vm/VmAllocateNicFlow.java | 8 +++- .../org/zstack/core/rest/RESTFacadeImpl.java | 12 ++---- .../NetworkDependencyAdmissionRequest.java | 5 +++ .../header/network/l2/CreateL2NetworkMsg.java | 2 +- .../network/l2/L2NetworkCascadeExtension.java | 4 +- .../SdnControllerApiInterceptor.java | 6 +-- runMavenProfile | 4 +- .../test/network/zns/TestZcf5485Fixture.java | 40 ------------------- .../src/test/resources/zns/zcf5485/SHA256SUMS | 1 - .../zns/zcf5485/segment-cloud-contract.json | 1 - 10 files changed, 22 insertions(+), 61 deletions(-) delete mode 100644 test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java delete mode 100644 test/src/test/resources/zns/zcf5485/SHA256SUMS delete mode 100644 test/src/test/resources/zns/zcf5485/segment-cloud-contract.json 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 fc4504623f5..3cf080d6942 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -123,7 +123,9 @@ public void run(final FlowTrigger trigger, final Map data) { return; } - ErrorCode admissionError = admitDependency(nw.getUuid(), "VmNic", null, "CREATE_VM_NIC"); + ErrorCode admissionError = admitDependency(nw.getUuid(), + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, null, + NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); if (admissionError != null) { errs.add(admissionError); wcomp.allDone(); @@ -273,7 +275,9 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni VmNicParam vmNicParm = vmNicParms.get(0); if (vmNicParm.getInboundBandwidth() != null || vmNicParm.getOutboundBandwidth() != null) { - ErrorCode admissionError = admitDependency(vmNicVO.getL3NetworkUuid(), "VmNicQos", null, "ADD_VM_NIC_QOS"); + ErrorCode admissionError = admitDependency(vmNicVO.getL3NetworkUuid(), + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC_QOS, null, + NetworkDependencyAdmissionRequest.OPERATION_ADD_VM_NIC_QOS); if (admissionError != null) { throw new org.zstack.header.exception.CloudRuntimeException(admissionError.getDetails()); } diff --git a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java index 83b2cb3267c..17774f44137 100755 --- a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java +++ b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java @@ -109,14 +109,10 @@ private interface HttpCallHandlerWrapper { default void handle(HttpEntity entity, HttpServletResponse response) { String body = handle(entity); - response.setStatus(HttpStatus.SC_OK); - if (body != null) { - response.setHeader("Content-Type", "application/json"); - try { - response.getWriter().write(body); - } catch (IOException e) { - throw new CloudRuntimeException(e); - } + if (body == null) { + response.setStatus(HttpStatus.SC_OK); + } else { + response.setStatus(HttpStatus.SC_OK, body); } } diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java index c78d5a44b35..f1519ff1c1b 100644 --- a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java +++ b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java @@ -1,6 +1,11 @@ package org.zstack.header.network; public final class NetworkDependencyAdmissionRequest { + public static final String DEPENDENCY_VM_NIC = "VmNic"; + public static final String DEPENDENCY_VM_NIC_QOS = "VmNicQos"; + public static final String OPERATION_CREATE_VM_NIC = "CREATE_VM_NIC"; + public static final String OPERATION_ADD_VM_NIC_QOS = "ADD_VM_NIC_QOS"; + private final String resourceUuid; private final String dependencyType; private final String operationUuid; diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java index c99be619d97..2323eb8855b 100644 --- a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -12,7 +12,7 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { private String zoneUuid; private String physicalInterface; private String type; - private String vSwitchType = "LinuxBridge"; + private String vSwitchType = L2NetworkConstant.VSWITCH_TYPE_LINUX_BRIDGE; private Boolean isolated = Boolean.FALSE; private String pvlan; private Integer vlan; diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 4f337fec723..53e7de503be 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -175,8 +175,8 @@ public void run(List replies) { if (ext.supports(inv)) { ErrorCode errorCode = ext.delete(inv); if (errorCode != null) { - completion.fail(errorCode); - return; + logger.warn(String.format("failed to delete confirmed local metadata for l2 network[uuid:%s], continue cascade: %s", + inv.getUuid(), errorCode)); } } } diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java index cfd2af26c48..b1f38ea9be6 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerApiInterceptor.java @@ -272,15 +272,15 @@ private void validate(APIPullSdnControllerTenantMsg msg) { private void validate(APIPullSdnControllerMsg msg) { if (!Arrays.asList("Segment", "TenantRouter").contains(msg.getResourceType())) { - throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10030, "Unsupported resource type[%s]", msg.getResourceType())); } if (msg.getResourceUuids() != null && msg.getResourceUuids().size() > 100) { - throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10031, "At most 100 resource uuids can be pulled in one request")); } if (dbf.findByUuid(msg.getSdnControllerUuid(), SdnControllerVO.class) == null) { - throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10025, + throw new ApiMessageInterceptionException(argerr(ORG_ZSTACK_SDNCONTROLLER_10032, "SDN controller[uuid:%s] not found", msg.getSdnControllerUuid())); } } diff --git a/runMavenProfile b/runMavenProfile index 42929dd5857..5415b97953a 100755 --- a/runMavenProfile +++ b/runMavenProfile @@ -287,9 +287,7 @@ sdk() { cd - >/dev/null cd sdk/src/main/java/org/zstack/sdk/ - # Keep existing SDK classes that the current source tree cannot regenerate - # (for example premium/enterprise result types); generated classes overwrite - # matching files below without leaving a partially compilable SDK. + find . -type f | grep -E -v "(ZSClient|ZSConfig|ApiException|AsyncRestState|Completion|Constants|ErrorCode|ErrorCodeList|InternalCompletion|ApiResult|Param|RestInfo|AbstractAction|QueryAction).java" | xargs rm -f cd - yes | cp -r ~/zstack-sdk/java/* sdk/src/main/java/ set +u diff --git a/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java b/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java deleted file mode 100644 index 1811030d0e7..00000000000 --- a/test/src/test/java/org/zstack/test/network/zns/TestZcf5485Fixture.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.zstack.test.network.zns; - -import org.junit.Assert; -import org.junit.Test; - -import java.io.InputStream; -import java.io.ByteArrayOutputStream; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; - -public class TestZcf5485Fixture { - @Test - public void fixtureMatchesManifest() throws Exception { - ClassLoader loader = getClass().getClassLoader(); - byte[] fixture; - try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/segment-cloud-contract.json")) { - Assert.assertNotNull(stream); - fixture = readAll(stream); - } - String expected; - try (InputStream stream = loader.getResourceAsStream("zns/zcf5485/SHA256SUMS")) { - Assert.assertNotNull(stream); - expected = new String(readAll(stream), StandardCharsets.UTF_8).trim().split("\\s+")[0]; - } - byte[] digest = MessageDigest.getInstance("SHA-256").digest(fixture); - StringBuilder actual = new StringBuilder(); - for (byte value : digest) actual.append(String.format("%02x", value)); - Assert.assertEquals(expected, actual.toString()); - } - - private static byte[] readAll(InputStream stream) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buffer = new byte[4096]; - int count; - while ((count = stream.read(buffer)) != -1) { - out.write(buffer, 0, count); - } - return out.toByteArray(); - } -} diff --git a/test/src/test/resources/zns/zcf5485/SHA256SUMS b/test/src/test/resources/zns/zcf5485/SHA256SUMS deleted file mode 100644 index 3c9b7b4fcab..00000000000 --- a/test/src/test/resources/zns/zcf5485/SHA256SUMS +++ /dev/null @@ -1 +0,0 @@ -05dedd4b7361e7566d195d81a15d5c16e60b40675d7b5c6ddeef16225ffe7fa9 segment-cloud-contract.json diff --git a/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json b/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json deleted file mode 100644 index 87b5bea74f4..00000000000 --- a/test/src/test/resources/zns/zcf5485/segment-cloud-contract.json +++ /dev/null @@ -1 +0,0 @@ -{"contract":"ZCF-5485","version":1,"cloud_inventory":{"segment_uuid":"00000000-0000-0000-0000-000000000101","transport_zone_uuid":"00000000-0000-0000-0000-000000000201","transport_type":"overlay","cloud_zone_uuid":"00000000-0000-0000-0000-000000000301","cluster_uuids":["00000000-0000-0000-0000-000000000401"],"tenant_router_uuid":"00000000-0000-0000-0000-000000000501"},"cloud_projection":{"segment_uuid":"00000000-0000-0000-0000-000000000101","config_version":7,"etag":"\"7-abc\"","mtu":1400,"transport_zone_uuid":"00000000-0000-0000-0000-000000000201","ipams":[{"ip_version":4,"range_uuid":"00000000-0000-0000-0000-000000000601","cidr":"192.0.2.0/24","start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"mutations":[{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101/ipams","body":{"ip_version":4,"ip_ranges":[{"start_ip":"192.0.2.10","end_ip":"192.0.2.200"}]},"wire":{"status":200,"has_data":true}},{"method":"PATCH","path":"/zns/api/v1/segments/00000000-0000-0000-0000-000000000101","body":{"mtu":1400,"virtual_network_id":30001},"fields":["mtu","virtual_network_id"],"wire":{"status":202,"has_data":false}}],"wire":{"error_code":"","retryable":false}} From b0a53ed22b12abc0a08d0e2a6c7b1ec17685b83c Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 08:44:22 +0800 Subject: [PATCH 33/66] [zns]: add public L3 error code Use a dedicated code for public ZNS L3 validation. Tests: premium ZNS contract tests Resolves: ZCF-5485 Change-Id: I8b67fc2f6b803a72ee49e44d454d7266c8e387b3 --- .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 2 ++ 1 file changed, 2 insertions(+) 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 9fc175de2c1..a68d10b24d4 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12240,6 +12240,7 @@ public class CloudOperationsErrorCode { // 10046 ZNS DHCP 409 fallback GET returned empty // 10047 ZNS DHCP update has no Cloud-reserved DHCPv4 server IP // 10048 failed to allocate DHCPv4 server IP in ZNS DHCP backend + // 10051 public ZNS L3 requires a VLAN-backed Basic network 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"; @@ -12254,6 +12255,7 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10046 = "ORG_ZSTACK_NETWORK_ZNS_10046"; public static final String ORG_ZSTACK_NETWORK_ZNS_10047 = "ORG_ZSTACK_NETWORK_ZNS_10047"; public static final String ORG_ZSTACK_NETWORK_ZNS_10048 = "ORG_ZSTACK_NETWORK_ZNS_10048"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10051 = "ORG_ZSTACK_NETWORK_ZNS_10051"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 8cdda4b69b5d726f786ff5f53825d3a6e17e15ba Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 09:33:49 +0800 Subject: [PATCH 34/66] [zns]: register ZNS binding schema Add V5.5.38 schema tables for ZNS binding state. Tests: git diff --check Resolves: ZCF-5485 Change-Id: I2644b27f09e7f0c5eadbe84760cc35af176e9c1b --- conf/db/upgrade/V5.5.38__schema.sql | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/conf/db/upgrade/V5.5.38__schema.sql b/conf/db/upgrade/V5.5.38__schema.sql index 1b8937fe5e9..190737991c3 100644 --- a/conf/db/upgrade/V5.5.38__schema.sql +++ b/conf/db/upgrade/V5.5.38__schema.sql @@ -20,3 +20,74 @@ CREATE TABLE IF NOT EXISTS `zstack`.`SnmpEngineVO` ( `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- ZNS segment binding state and controller inventory + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( + `sdnControllerUuid` varchar(32) NOT NULL, + `activeScanToken` varchar(255) DEFAULT NULL, + `activeScanStartedAt` timestamp NULL DEFAULT NULL, + `migrationState` varchar(32) NOT NULL DEFAULT 'NotStarted', + `compatibilityMode` varchar(32) NOT NULL DEFAULT 'LEGACY', + `compatibilityEpoch` bigint NOT NULL DEFAULT 0, + `remoteCompatibilityEpoch` bigint DEFAULT NULL, + `capabilityDigest` varchar(64) DEFAULT NULL, + `migrationDigest` varchar(64) DEFAULT NULL, + `pendingContractEpoch` bigint DEFAULT NULL, + `pendingContractRequestDigest` varchar(64) DEFAULT NULL, + `lastSuccessfulScanDate` timestamp NULL DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`sdnControllerUuid`), + CONSTRAINT `fkZnsControllerStateVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentInventoryVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) NOT NULL, + `name` varchar(255) NOT NULL, + `transportZoneUuid` varchar(36) NOT NULL, + `availability` varchar(32) NOT NULL, + `reasonCode` varchar(128) DEFAULT NULL, + `lastSeenToken` varchar(36) NOT NULL, + `lastSeenDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', + `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_seg_inv_controller_segment` (`sdnControllerUuid`, `znsSegmentUuid`), + KEY `idx_zns_seg_inv_candidate` (`sdnControllerUuid`, `transportZoneUuid`, `availability`), + CONSTRAINT `fkZnsSegmentInventoryVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) DEFAULT NULL, + `zoneUuid` varchar(32) NOT NULL, + `l2NetworkUuid` varchar(32) NOT NULL, + `accountUuid` varchar(32) NOT NULL, + `l3NetworkUuid` varchar(32) DEFAULT NULL, + `znsTenantRouterUuid` varchar(36) DEFAULT NULL, + `state` varchar(32) NOT NULL, + `operationUuid` varchar(36) DEFAULT NULL, + `operationStep` varchar(32) DEFAULT NULL, + `operationDigest` varchar(64) DEFAULT NULL, + `appliedConfigVersion` bigint DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `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_seg_ref_controller_segment_zone` + (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), + UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), + KEY `idx_zns_seg_ref_account` (`accountUuid`), + KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), + CONSTRAINT `fkZnsSegmentRefVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE, + CONSTRAINT `chk_zns_seg_ref_segment_state` + CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') +) ENGINE=InnoDB DEFAULT CHARSET=utf8; From 8ff9b69c473b0b83eacc7f8d4fcc29ade76edf11 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 10:41:00 +0800 Subject: [PATCH 35/66] [zns]: add generated zns SDK action Keep generated SDK files synchronized with the ZNS API. Change-Id: Iaa9c167ef71f1c4f2b7da09ad901c3476aa410b9 --- .../zns/GetCandidateZnsSegmentsAction.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java new file mode 100644 index 00000000000..8b447b85f2b --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java @@ -0,0 +1,107 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class GetCandidateZnsSegmentsAction 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.network.zns.GetCandidateZnsSegmentsResult 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 sdnControllerUuid; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String transportZoneUuid; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.Integer limit; + + @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.network.zns.GetCandidateZnsSegmentsResult value = res.getResult(org.zstack.sdk.network.zns.GetCandidateZnsSegmentsResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.GetCandidateZnsSegmentsResult() : 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/segments/candidates"; + info.needSession = true; + info.needPoll = true; + info.parameterName = ""; + return info; + } + +} From 9107257d0648eda2d2af00eddf0b06f65bee4482 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 10:47:14 +0800 Subject: [PATCH 36/66] [zns]: add generated zns SDK result Complete generated SDK types for candidate segment API. Change-Id: I92bdd19a9e4dbedd4ea7596605e82cb6fb1d2e95 --- .../network/zns/GetCandidateZnsSegmentsResult.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java new file mode 100644 index 00000000000..2f58cd9adb5 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java @@ -0,0 +1,13 @@ +package org.zstack.sdk.network.zns; + +public class GetCandidateZnsSegmentsResult { + public java.util.List candidates; + + public void setCandidates(java.util.List candidates) { + this.candidates = candidates; + } + + public java.util.List getCandidates() { + return this.candidates; + } +} From ce7956fc2bc0b36746bf3badd7d15fa32e5776d6 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 11:12:45 +0800 Subject: [PATCH 37/66] [zns]: move zns schema to 5.5.18 Place new ZNS entity tables in the requested migration. Change-Id: If1acd0a6e4c222ce298b5755439c49f3135bb71c --- conf/db/upgrade/V5.5.18__schema.sql | 71 +++++++++++++++++++++++++++++ conf/db/upgrade/V5.5.38__schema.sql | 71 ----------------------------- 2 files changed, 71 insertions(+), 71 deletions(-) create mode 100644 conf/db/upgrade/V5.5.18__schema.sql diff --git a/conf/db/upgrade/V5.5.18__schema.sql b/conf/db/upgrade/V5.5.18__schema.sql new file mode 100644 index 00000000000..96f34496544 --- /dev/null +++ b/conf/db/upgrade/V5.5.18__schema.sql @@ -0,0 +1,71 @@ +-- ZNS segment binding state and controller inventory + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( + `sdnControllerUuid` varchar(32) NOT NULL, + `activeScanToken` varchar(255) DEFAULT NULL, + `activeScanStartedAt` timestamp NULL DEFAULT NULL, + `migrationState` varchar(32) NOT NULL DEFAULT 'NotStarted', + `compatibilityMode` varchar(32) NOT NULL DEFAULT 'LEGACY', + `compatibilityEpoch` bigint NOT NULL DEFAULT 0, + `remoteCompatibilityEpoch` bigint DEFAULT NULL, + `capabilityDigest` varchar(64) DEFAULT NULL, + `migrationDigest` varchar(64) DEFAULT NULL, + `pendingContractEpoch` bigint DEFAULT NULL, + `pendingContractRequestDigest` varchar(64) DEFAULT NULL, + `lastSuccessfulScanDate` timestamp NULL DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`sdnControllerUuid`), + CONSTRAINT `fkZnsControllerStateVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentInventoryVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) NOT NULL, + `name` varchar(255) NOT NULL, + `transportZoneUuid` varchar(36) NOT NULL, + `availability` varchar(32) NOT NULL, + `reasonCode` varchar(128) DEFAULT NULL, + `lastSeenToken` varchar(36) NOT NULL, + `lastSeenDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', + `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_seg_inv_controller_segment` (`sdnControllerUuid`, `znsSegmentUuid`), + KEY `idx_zns_seg_inv_candidate` (`sdnControllerUuid`, `transportZoneUuid`, `availability`), + CONSTRAINT `fkZnsSegmentInventoryVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) DEFAULT NULL, + `zoneUuid` varchar(32) NOT NULL, + `l2NetworkUuid` varchar(32) NOT NULL, + `accountUuid` varchar(32) NOT NULL, + `l3NetworkUuid` varchar(32) DEFAULT NULL, + `znsTenantRouterUuid` varchar(36) DEFAULT NULL, + `state` varchar(32) NOT NULL, + `operationUuid` varchar(36) DEFAULT NULL, + `operationStep` varchar(32) DEFAULT NULL, + `operationDigest` varchar(64) DEFAULT NULL, + `appliedConfigVersion` bigint DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `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_seg_ref_controller_segment_zone` + (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), + UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), + KEY `idx_zns_seg_ref_account` (`accountUuid`), + KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), + CONSTRAINT `fkZnsSegmentRefVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE, + CONSTRAINT `chk_zns_seg_ref_segment_state` + CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/conf/db/upgrade/V5.5.38__schema.sql b/conf/db/upgrade/V5.5.38__schema.sql index 190737991c3..1b8937fe5e9 100644 --- a/conf/db/upgrade/V5.5.38__schema.sql +++ b/conf/db/upgrade/V5.5.38__schema.sql @@ -20,74 +20,3 @@ CREATE TABLE IF NOT EXISTS `zstack`.`SnmpEngineVO` ( `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --- ZNS segment binding state and controller inventory - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( - `sdnControllerUuid` varchar(32) NOT NULL, - `activeScanToken` varchar(255) DEFAULT NULL, - `activeScanStartedAt` timestamp NULL DEFAULT NULL, - `migrationState` varchar(32) NOT NULL DEFAULT 'NotStarted', - `compatibilityMode` varchar(32) NOT NULL DEFAULT 'LEGACY', - `compatibilityEpoch` bigint NOT NULL DEFAULT 0, - `remoteCompatibilityEpoch` bigint DEFAULT NULL, - `capabilityDigest` varchar(64) DEFAULT NULL, - `migrationDigest` varchar(64) DEFAULT NULL, - `pendingContractEpoch` bigint DEFAULT NULL, - `pendingContractRequestDigest` varchar(64) DEFAULT NULL, - `lastSuccessfulScanDate` timestamp NULL DEFAULT NULL, - `lastErrorCode` varchar(128) DEFAULT NULL, - `lastErrorDetails` text DEFAULT NULL, - `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`sdnControllerUuid`), - CONSTRAINT `fkZnsControllerStateVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentInventoryVO` ( - `uuid` varchar(32) NOT NULL, - `sdnControllerUuid` varchar(32) NOT NULL, - `znsSegmentUuid` varchar(36) NOT NULL, - `name` varchar(255) NOT NULL, - `transportZoneUuid` varchar(36) NOT NULL, - `availability` varchar(32) NOT NULL, - `reasonCode` varchar(128) DEFAULT NULL, - `lastSeenToken` varchar(36) NOT NULL, - `lastSeenDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', - `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_seg_inv_controller_segment` (`sdnControllerUuid`, `znsSegmentUuid`), - KEY `idx_zns_seg_inv_candidate` (`sdnControllerUuid`, `transportZoneUuid`, `availability`), - CONSTRAINT `fkZnsSegmentInventoryVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( - `uuid` varchar(32) NOT NULL, - `sdnControllerUuid` varchar(32) NOT NULL, - `znsSegmentUuid` varchar(36) DEFAULT NULL, - `zoneUuid` varchar(32) NOT NULL, - `l2NetworkUuid` varchar(32) NOT NULL, - `accountUuid` varchar(32) NOT NULL, - `l3NetworkUuid` varchar(32) DEFAULT NULL, - `znsTenantRouterUuid` varchar(36) DEFAULT NULL, - `state` varchar(32) NOT NULL, - `operationUuid` varchar(36) DEFAULT NULL, - `operationStep` varchar(32) DEFAULT NULL, - `operationDigest` varchar(64) DEFAULT NULL, - `appliedConfigVersion` bigint DEFAULT NULL, - `lastErrorCode` varchar(128) DEFAULT NULL, - `lastErrorDetails` text DEFAULT NULL, - `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_seg_ref_controller_segment_zone` - (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), - UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), - KEY `idx_zns_seg_ref_account` (`accountUuid`), - KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), - CONSTRAINT `fkZnsSegmentRefVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE, - CONSTRAINT `chk_zns_seg_ref_segment_state` - CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') -) ENGINE=InnoDB DEFAULT CHARSET=utf8; From f43c1b497924ed892e01d135372f37dce4100581 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 11:13:37 +0800 Subject: [PATCH 38/66] [zns]: keep zns schema in 5.5.38 Restore the migration version used by this MR baseline. Change-Id: I452a9f7b219a1d91bad0e47d4a5d0f9010a87bd0 --- conf/db/upgrade/V5.5.18__schema.sql | 71 ----------------------------- conf/db/upgrade/V5.5.38__schema.sql | 71 +++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 71 deletions(-) delete mode 100644 conf/db/upgrade/V5.5.18__schema.sql diff --git a/conf/db/upgrade/V5.5.18__schema.sql b/conf/db/upgrade/V5.5.18__schema.sql deleted file mode 100644 index 96f34496544..00000000000 --- a/conf/db/upgrade/V5.5.18__schema.sql +++ /dev/null @@ -1,71 +0,0 @@ --- ZNS segment binding state and controller inventory - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( - `sdnControllerUuid` varchar(32) NOT NULL, - `activeScanToken` varchar(255) DEFAULT NULL, - `activeScanStartedAt` timestamp NULL DEFAULT NULL, - `migrationState` varchar(32) NOT NULL DEFAULT 'NotStarted', - `compatibilityMode` varchar(32) NOT NULL DEFAULT 'LEGACY', - `compatibilityEpoch` bigint NOT NULL DEFAULT 0, - `remoteCompatibilityEpoch` bigint DEFAULT NULL, - `capabilityDigest` varchar(64) DEFAULT NULL, - `migrationDigest` varchar(64) DEFAULT NULL, - `pendingContractEpoch` bigint DEFAULT NULL, - `pendingContractRequestDigest` varchar(64) DEFAULT NULL, - `lastSuccessfulScanDate` timestamp NULL DEFAULT NULL, - `lastErrorCode` varchar(128) DEFAULT NULL, - `lastErrorDetails` text DEFAULT NULL, - `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`sdnControllerUuid`), - CONSTRAINT `fkZnsControllerStateVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentInventoryVO` ( - `uuid` varchar(32) NOT NULL, - `sdnControllerUuid` varchar(32) NOT NULL, - `znsSegmentUuid` varchar(36) NOT NULL, - `name` varchar(255) NOT NULL, - `transportZoneUuid` varchar(36) NOT NULL, - `availability` varchar(32) NOT NULL, - `reasonCode` varchar(128) DEFAULT NULL, - `lastSeenToken` varchar(36) NOT NULL, - `lastSeenDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', - `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_seg_inv_controller_segment` (`sdnControllerUuid`, `znsSegmentUuid`), - KEY `idx_zns_seg_inv_candidate` (`sdnControllerUuid`, `transportZoneUuid`, `availability`), - CONSTRAINT `fkZnsSegmentInventoryVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( - `uuid` varchar(32) NOT NULL, - `sdnControllerUuid` varchar(32) NOT NULL, - `znsSegmentUuid` varchar(36) DEFAULT NULL, - `zoneUuid` varchar(32) NOT NULL, - `l2NetworkUuid` varchar(32) NOT NULL, - `accountUuid` varchar(32) NOT NULL, - `l3NetworkUuid` varchar(32) DEFAULT NULL, - `znsTenantRouterUuid` varchar(36) DEFAULT NULL, - `state` varchar(32) NOT NULL, - `operationUuid` varchar(36) DEFAULT NULL, - `operationStep` varchar(32) DEFAULT NULL, - `operationDigest` varchar(64) DEFAULT NULL, - `appliedConfigVersion` bigint DEFAULT NULL, - `lastErrorCode` varchar(128) DEFAULT NULL, - `lastErrorDetails` text DEFAULT NULL, - `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_seg_ref_controller_segment_zone` - (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), - UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), - KEY `idx_zns_seg_ref_account` (`accountUuid`), - KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), - CONSTRAINT `fkZnsSegmentRefVOSdnControllerVO` - FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE, - CONSTRAINT `chk_zns_seg_ref_segment_state` - CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/conf/db/upgrade/V5.5.38__schema.sql b/conf/db/upgrade/V5.5.38__schema.sql index 1b8937fe5e9..190737991c3 100644 --- a/conf/db/upgrade/V5.5.38__schema.sql +++ b/conf/db/upgrade/V5.5.38__schema.sql @@ -20,3 +20,74 @@ CREATE TABLE IF NOT EXISTS `zstack`.`SnmpEngineVO` ( `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- ZNS segment binding state and controller inventory + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( + `sdnControllerUuid` varchar(32) NOT NULL, + `activeScanToken` varchar(255) DEFAULT NULL, + `activeScanStartedAt` timestamp NULL DEFAULT NULL, + `migrationState` varchar(32) NOT NULL DEFAULT 'NotStarted', + `compatibilityMode` varchar(32) NOT NULL DEFAULT 'LEGACY', + `compatibilityEpoch` bigint NOT NULL DEFAULT 0, + `remoteCompatibilityEpoch` bigint DEFAULT NULL, + `capabilityDigest` varchar(64) DEFAULT NULL, + `migrationDigest` varchar(64) DEFAULT NULL, + `pendingContractEpoch` bigint DEFAULT NULL, + `pendingContractRequestDigest` varchar(64) DEFAULT NULL, + `lastSuccessfulScanDate` timestamp NULL DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `lastOpDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`sdnControllerUuid`), + CONSTRAINT `fkZnsControllerStateVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentInventoryVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) NOT NULL, + `name` varchar(255) NOT NULL, + `transportZoneUuid` varchar(36) NOT NULL, + `availability` varchar(32) NOT NULL, + `reasonCode` varchar(128) DEFAULT NULL, + `lastSeenToken` varchar(36) NOT NULL, + `lastSeenDate` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00', + `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_seg_inv_controller_segment` (`sdnControllerUuid`, `znsSegmentUuid`), + KEY `idx_zns_seg_inv_candidate` (`sdnControllerUuid`, `transportZoneUuid`, `availability`), + CONSTRAINT `fkZnsSegmentInventoryVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( + `uuid` varchar(32) NOT NULL, + `sdnControllerUuid` varchar(32) NOT NULL, + `znsSegmentUuid` varchar(36) DEFAULT NULL, + `zoneUuid` varchar(32) NOT NULL, + `l2NetworkUuid` varchar(32) NOT NULL, + `accountUuid` varchar(32) NOT NULL, + `l3NetworkUuid` varchar(32) DEFAULT NULL, + `znsTenantRouterUuid` varchar(36) DEFAULT NULL, + `state` varchar(32) NOT NULL, + `operationUuid` varchar(36) DEFAULT NULL, + `operationStep` varchar(32) DEFAULT NULL, + `operationDigest` varchar(64) DEFAULT NULL, + `appliedConfigVersion` bigint DEFAULT NULL, + `lastErrorCode` varchar(128) DEFAULT NULL, + `lastErrorDetails` text DEFAULT NULL, + `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_seg_ref_controller_segment_zone` + (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), + UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), + KEY `idx_zns_seg_ref_account` (`accountUuid`), + KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), + CONSTRAINT `fkZnsSegmentRefVOSdnControllerVO` + FOREIGN KEY (`sdnControllerUuid`) REFERENCES `zstack`.`SdnControllerVO` (`uuid`) ON DELETE CASCADE, + CONSTRAINT `chk_zns_seg_ref_segment_state` + CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') +) ENGINE=InnoDB DEFAULT CHARSET=utf8; From ce93d01e221b33dfae03134ad13e75b8437301bf Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 12:20:14 +0800 Subject: [PATCH 39/66] [zns]: fix zns SDK and stability contracts Keep generated SDK results and REST event metadata consistent. Change-Id: I8ebff4b1c168dac813e5dee10e1bec4b02b87d49 --- .../header/APIPullSdnControllerEvent.java | 2 ++ sdk/src/main/java/SourceClassMap.java | 10 ++-------- .../zns/GetCandidateZnsSegmentsResult.java | 2 +- .../zns/ZnsSegmentCandidateInventory.java | 20 +++++++++++++++++++ 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java index 6dd5552adee..f905b260bff 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEvent.java @@ -1,7 +1,9 @@ package org.zstack.sdnController.header; import org.zstack.header.message.APIEvent; +import org.zstack.header.rest.RestResponse; +@RestResponse public class APIPullSdnControllerEvent extends APIEvent { public APIPullSdnControllerEvent() { } public APIPullSdnControllerEvent(String apiId) { super(apiId); } diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 29c9197c37d..04706b36bfe 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -37,8 +37,6 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.sdk.ModelServiceInstanceLaunchCommandInventory"); - put("org.zstack.ai.message.ModelServiceLaunchCommandInventory", "org.zstack.sdk.ModelServiceLaunchCommandInventory"); 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"); @@ -375,7 +373,6 @@ public class SourceClassMap { 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.sdk.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -636,6 +633,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory"); 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"); @@ -866,7 +864,6 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.sdk.zwatch.alarm.AlarmResourceStateInventory"); 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"); @@ -1120,7 +1117,6 @@ public class SourceClassMap { 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -1312,9 +1308,7 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceInstanceLaunchCommandInventory"); put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); - put("org.zstack.sdk.ModelServiceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceLaunchCommandInventory"); 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"); @@ -1746,6 +1740,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.network.zns.ZnsSegmentCandidateInventory"); 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"); @@ -1788,7 +1783,6 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.zwatch.alarm.AlarmResourceStateInventory"); 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"); diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java index 2f58cd9adb5..49b510b85e4 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java @@ -8,6 +8,6 @@ public void setCandidates(java.util.List candidates) { } public java.util.List getCandidates() { - return this.candidates; + return candidates; } } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java new file mode 100644 index 00000000000..0a8493eb120 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java @@ -0,0 +1,20 @@ +package org.zstack.sdk.network.zns; + +public class ZnsSegmentCandidateInventory { + public java.lang.String uuid; + public java.lang.String name; + public java.lang.String transportZoneUuid; + public java.lang.String availability; + public java.lang.String reasonCode; + + public void setUuid(java.lang.String uuid) { this.uuid = uuid; } + public java.lang.String getUuid() { return uuid; } + public void setName(java.lang.String name) { this.name = name; } + public java.lang.String getName() { return name; } + public void setTransportZoneUuid(java.lang.String value) { transportZoneUuid = value; } + public java.lang.String getTransportZoneUuid() { return transportZoneUuid; } + public void setAvailability(java.lang.String value) { availability = value; } + public java.lang.String getAvailability() { return availability; } + public void setReasonCode(java.lang.String value) { reasonCode = value; } + public java.lang.String getReasonCode() { return reasonCode; } +} From 0bc0e411579cc4baa6aa15909f4cd5884d022000 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 12:53:30 +0800 Subject: [PATCH 40/66] [testlib]: add zns candidate helper Generate the helper required by the ZNS candidate API. Resolves: ZCF-5485 Change-Id: If69c2624355f3ac3b6931c3a524a8b5882766b79 --- .../java/org/zstack/testlib/ApiHelper.groovy | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 17b5f8e5843..ce0fe15ef1d 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -53309,6 +53309,32 @@ abstract class ApiHelper { } + def getCandidateZnsSegments(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.GetCandidateZnsSegmentsAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.GetCandidateZnsSegmentsAction() + 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 From f83ae90cc08e593effb3d01d6140935988ca635b Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 16:34:47 +0800 Subject: [PATCH 41/66] [network]: usuus Resolves: ZCF-5487 Change-Id: I616d64766f6e796b696a727869626d7a79717a63 --- sdk/src/main/java/SourceClassMap.java | 12 ++++- .../zstack/sdk/PullSdnControllerResult.java | 4 +- .../zns/GetCandidateZnsSegmentsResult.java | 7 +-- .../zns/ZnsSegmentCandidateInventory.java | 49 ++++++++++++++----- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 04706b36bfe..118aa75ef73 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -37,6 +37,8 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.sdk.ModelServiceInstanceLaunchCommandInventory"); + put("org.zstack.ai.message.ModelServiceLaunchCommandInventory", "org.zstack.sdk.ModelServiceLaunchCommandInventory"); 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"); @@ -373,6 +375,7 @@ public class SourceClassMap { 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.sdk.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -633,7 +636,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory"); + put("org.zstack.network.zns.ZnsSegmentCandidateInventory", "org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory"); 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"); @@ -864,6 +867,7 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.sdk.zwatch.alarm.AlarmResourceStateInventory"); 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"); @@ -1117,6 +1121,7 @@ public class SourceClassMap { 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.ExternalPrimaryStorageHostProtocolRefInventory", "org.zstack.header.storage.addon.primary.ExternalPrimaryStorageHostProtocolRefInventory"); 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"); @@ -1308,7 +1313,9 @@ public class SourceClassMap { 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.ModelServiceInstanceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceInstanceLaunchCommandInventory"); put("org.zstack.sdk.ModelServiceInventory", "org.zstack.ai.entity.ModelServiceInventory"); + put("org.zstack.sdk.ModelServiceLaunchCommandInventory", "org.zstack.ai.message.ModelServiceLaunchCommandInventory"); 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"); @@ -1740,7 +1747,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.network.zns.ZnsSegmentCandidateInventory"); + put("org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory", "org.zstack.network.zns.ZnsSegmentCandidateInventory"); 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"); @@ -1783,6 +1790,7 @@ public class SourceClassMap { 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.AlarmResourceStateInventory", "org.zstack.zwatch.alarm.AlarmResourceStateInventory"); 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"); diff --git a/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java index a0a3a4bf8e7..7048752ca90 100644 --- a/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java +++ b/sdk/src/main/java/org/zstack/sdk/PullSdnControllerResult.java @@ -1,5 +1,7 @@ package org.zstack.sdk; -/** Empty result for the asynchronous generic SDN controller pull action. */ + + public class PullSdnControllerResult { + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java index 49b510b85e4..f42863e69e1 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java @@ -1,13 +1,14 @@ package org.zstack.sdk.network.zns; + + public class GetCandidateZnsSegmentsResult { public java.util.List candidates; - public void setCandidates(java.util.List candidates) { this.candidates = candidates; } - public java.util.List getCandidates() { - return candidates; + return this.candidates; } + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java index 0a8493eb120..7a370476e2f 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java @@ -1,20 +1,47 @@ package org.zstack.sdk.network.zns; -public class ZnsSegmentCandidateInventory { + + +public class ZnsSegmentCandidateInventory { + 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 transportZoneUuid; + public void setTransportZoneUuid(java.lang.String transportZoneUuid) { + this.transportZoneUuid = transportZoneUuid; + } + public java.lang.String getTransportZoneUuid() { + return this.transportZoneUuid; + } + public java.lang.String availability; + public void setAvailability(java.lang.String availability) { + this.availability = availability; + } + public java.lang.String getAvailability() { + return this.availability; + } + public java.lang.String reasonCode; + public void setReasonCode(java.lang.String reasonCode) { + this.reasonCode = reasonCode; + } + public java.lang.String getReasonCode() { + return this.reasonCode; + } - public void setUuid(java.lang.String uuid) { this.uuid = uuid; } - public java.lang.String getUuid() { return uuid; } - public void setName(java.lang.String name) { this.name = name; } - public java.lang.String getName() { return name; } - public void setTransportZoneUuid(java.lang.String value) { transportZoneUuid = value; } - public java.lang.String getTransportZoneUuid() { return transportZoneUuid; } - public void setAvailability(java.lang.String value) { availability = value; } - public java.lang.String getAvailability() { return availability; } - public void setReasonCode(java.lang.String value) { reasonCode = value; } - public java.lang.String getReasonCode() { return reasonCode; } } From ad923762a6d0254a382f71171747ac4a219acfdb Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 17:13:58 +0800 Subject: [PATCH 42/66] [zns]: serialize zns lifecycle sync Resolves: ZCF-5485 Change-Id: I0bbeb58565782d64a1fd4eb9fbb329c3c74b1b69 --- .../APIPullSdnControllerEventDoc_zh_cn.groovy | 23 ++++++ .../APIPullSdnControllerMsgDoc_zh_cn.groovy | 77 +++++++++++++++++++ .../java/org/zstack/testlib/ApiHelper.groovy | 3 + 3 files changed, 103 insertions(+) create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEventDoc_zh_cn.groovy create mode 100644 plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEventDoc_zh_cn.groovy b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEventDoc_zh_cn.groovy new file mode 100644 index 00000000000..3713f6e9f73 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerEventDoc_zh_cn.groovy @@ -0,0 +1,23 @@ +package org.zstack.sdnController.header + +import org.zstack.header.errorcode.ErrorCode + +doc { + + title "在这里输入结构的名称" + + field { + name "success" + desc "" + type "boolean" + since "5.5.38" + } + ref { + name "error" + path "org.zstack.sdnController.header.APIPullSdnControllerEvent.error" + desc "错误码,若不为null,则表示操作失败, 操作成功时该字段为null",false + type "ErrorCode" + since "5.5.38" + clz ErrorCode.class + } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy new file mode 100644 index 00000000000..b0664e73686 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy @@ -0,0 +1,77 @@ +package org.zstack.sdnController.header + +import org.zstack.sdnController.header.APIPullSdnControllerEvent + +doc { + title "PullSdnController" + + category "未知类别" + + desc """在这里填写API描述""" + + rest { + request { + url "PUT /v1/sdn-controllers/{uuid}/resources/actions" + + header (Authorization: 'OAuth the-session-uuid') + + clz APIPullSdnControllerMsg.class + + desc """""" + + params { + + column { + name "uuid" + enclosedIn "pullSdnController" + desc "资源的UUID,唯一标示该资源" + location "url" + type "String" + optional false + since "5.5.38" + } + column { + name "resourceType" + enclosedIn "pullSdnController" + desc "" + location "body" + type "String" + optional false + since "5.5.38" + values ("Segment","TenantRouter") + } + column { + name "resourceUuids" + enclosedIn "pullSdnController" + desc "" + location "body" + type "List" + optional true + since "5.5.38" + } + column { + name "systemTags" + enclosedIn "" + desc "系统标签" + location "body" + type "List" + optional true + since "5.5.38" + } + column { + name "userTags" + enclosedIn "" + desc "用户标签" + location "body" + type "List" + optional true + since "5.5.38" + } + } + } + + response { + clz APIPullSdnControllerEvent.class + } + } +} \ No newline at end of file diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index ce0fe15ef1d..79f526ec1ec 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -53316,11 +53316,13 @@ abstract class ApiHelper { c.delegate = a c() + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() @@ -53328,6 +53330,7 @@ abstract class ApiHelper { Test.apiPaths[a.class.name] = path.join(" --->\n") } + return out } else { return errorOut(a.call()) From e9d2f95ddcac028a42f22714676c670080fe4759 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Sun, 9 Aug 2026 18:22:00 +0800 Subject: [PATCH 43/66] [sdnController]: sync generated api doc Keep generated API documentation byte-for-byte consistent. Resolves: ZCF-5485 Change-Id: I5fd4e3d7dfe6093a7eed11930ba8abeab6f99fb4 --- .../APIPullSdnControllerMsgDoc_zh_cn.groovy | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy index b0664e73686..41c4bc28ab8 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/APIPullSdnControllerMsgDoc_zh_cn.groovy @@ -11,63 +11,63 @@ doc { rest { request { - url "PUT /v1/sdn-controllers/{uuid}/resources/actions" + url "PUT /v1/sdn-controllers/{uuid}/resources/actions" - header (Authorization: 'OAuth the-session-uuid') + header (Authorization: 'OAuth the-session-uuid') clz APIPullSdnControllerMsg.class desc """""" + + params { - params { - - column { - name "uuid" - enclosedIn "pullSdnController" - desc "资源的UUID,唯一标示该资源" - location "url" - type "String" - optional false - since "5.5.38" - } - column { - name "resourceType" - enclosedIn "pullSdnController" - desc "" - location "body" - type "String" - optional false - since "5.5.38" - values ("Segment","TenantRouter") - } - column { - name "resourceUuids" - enclosedIn "pullSdnController" - desc "" - location "body" - type "List" - optional true - since "5.5.38" - } - column { - name "systemTags" - enclosedIn "" - desc "系统标签" - location "body" - type "List" - optional true - since "5.5.38" - } - column { - name "userTags" - enclosedIn "" - desc "用户标签" - location "body" - type "List" - optional true - since "5.5.38" - } - } + column { + name "uuid" + enclosedIn "pullSdnController" + desc "资源的UUID,唯一标示该资源" + location "url" + type "String" + optional false + since "5.5.38" + } + column { + name "resourceType" + enclosedIn "pullSdnController" + desc "" + location "body" + type "String" + optional false + since "5.5.38" + values ("Segment","TenantRouter") + } + column { + name "resourceUuids" + enclosedIn "pullSdnController" + desc "" + location "body" + type "List" + optional true + since "5.5.38" + } + column { + name "systemTags" + enclosedIn "" + desc "系统标签" + location "body" + type "List" + optional true + since "5.5.38" + } + column { + name "userTags" + enclosedIn "" + desc "用户标签" + location "body" + type "List" + optional true + since "5.5.38" + } + } } response { From 6fb33e7cf3ad62e6a2e296f1a537436315edf718 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 00:05:15 +0900 Subject: [PATCH 44/66] [sdnController]: route generic pull API to service Declare the generic pull message on the controller service.\nCover the routing contract with a focused XML test. Resolves: ZCF-5485 Change-Id: I95ff9b880e441b519f4a365c312f27f1b126eaf4 --- conf/serviceConfig/sdnController.xml | 4 ++ .../SdnControllerServiceConfigTest.java | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java diff --git a/conf/serviceConfig/sdnController.xml b/conf/serviceConfig/sdnController.xml index 2ae849eb987..0f8b7cd4712 100644 --- a/conf/serviceConfig/sdnController.xml +++ b/conf/serviceConfig/sdnController.xml @@ -45,6 +45,10 @@ query + + org.zstack.sdnController.header.APIPullSdnControllerMsg + + org.zstack.network.hostNetworkInterface.APIQueryPhysicalSwitchMsg query diff --git a/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java b/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java new file mode 100644 index 00000000000..6d2ca5bf359 --- /dev/null +++ b/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java @@ -0,0 +1,39 @@ +package org.zstack.test.integration.network.sdnController; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.xml.parsers.DocumentBuilderFactory; +import java.nio.file.Paths; + +public class SdnControllerServiceConfigTest { + @Test + public void pullResourceApiIsRoutedToSdnControllerService() throws Exception { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + Document document = factory.newDocumentBuilder().parse( + Paths.get("../conf/serviceConfig/sdnController.xml").toFile()); + + NodeList messages = document.getElementsByTagNameNS("*", "message"); + for (int i = 0; i < messages.getLength(); i++) { + Element message = (Element) messages.item(i); + NodeList names = message.getElementsByTagNameNS("*", "name"); + if (names.getLength() == 0) { + continue; + } + Node name = names.item(0); + if ("org.zstack.sdnController.header.APIPullSdnControllerMsg" + .equals(name.getTextContent().trim())) { + Assert.assertEquals(0, + message.getElementsByTagNameNS("*", "serviceId").getLength()); + return; + } + } + + Assert.fail("APIPullSdnControllerMsg is not routed to SdnController service"); + } +} From 3d772044a62d3db3731adacb71d9cf1fcb815c55 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 01:35:26 +0900 Subject: [PATCH 45/66] [network]: preserve typed l2 projection Allow internal L2 create to carry the provider-owned subtype. This preserves Geneve projection fields without core dependencies. Change-Id: Ia7c4607377face7a943686cd0ad5c6ef65a6c4b3 --- .../header/network/l2/CreateL2NetworkMsg.java | 3 +++ .../network/l2/L2NetworkManagerImpl.java | 13 +++++++++---- .../network/l2/CreateL2NetworkMsgTest.java | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java index 2323eb8855b..4a9028502de 100644 --- a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -21,6 +21,7 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { private NetworkCreateContext context; private SessionInventory session; private List systemTags; + private APICreateL2NetworkMsg subtypeMessage; public String getName() { return name; } public void setName(String value) { name = value; } @@ -50,4 +51,6 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { public void setSession(SessionInventory value) { session = value; } public List getSystemTags() { return systemTags; } public void setSystemTags(List value) { systemTags = value; } + public APICreateL2NetworkMsg getSubtypeMessage() { return subtypeMessage; } + public void setSubtypeMessage(APICreateL2NetworkMsg value) { subtypeMessage = value; } } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java index 7261e987f45..ffd2ccaf2d0 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkManagerImpl.java @@ -86,14 +86,19 @@ private void handleLocalMessage(Message msg) { } private void handle(CreateL2NetworkMsg msg) { - APICreateL2NetworkMsg apiMsg; - if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(msg.getType())) { + APICreateL2NetworkMsg apiMsg = msg.getSubtypeMessage(); + if (apiMsg != null && !msg.getType().equals(apiMsg.getType())) { + bus.replyErrorByMessageType(msg, err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.INVALID_ARGUMENT_ERROR, + "internal l2 type[%s] does not match subtype message[%s]", + msg.getType(), apiMsg.getType())); + return; + } else if (apiMsg == null && L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(msg.getType())) { APICreateL2VlanNetworkMsg vlanMsg = new APICreateL2VlanNetworkMsg(); vlanMsg.setVlan(msg.getVlan() == null ? 0 : msg.getVlan()); apiMsg = vlanMsg; - } else if (L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(msg.getType())) { + } else if (apiMsg == null && L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(msg.getType())) { apiMsg = new APICreateL2NoVlanNetworkMsg(); - } else { + } else if (apiMsg == null) { bus.replyErrorByMessageType(msg, err(ORG_ZSTACK_NETWORK_L2_10002, SysErrors.INVALID_ARGUMENT_ERROR, "unsupported internal l2 network type[%s]", msg.getType())); return; diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java new file mode 100644 index 00000000000..43b9c8531c4 --- /dev/null +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -0,0 +1,19 @@ +package org.zstack.test.integration.network.l2; + +import org.junit.Assert; +import org.junit.Test; +import org.zstack.header.network.l2.APICreateL2NetworkMsg; +import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; +import org.zstack.header.network.l2.CreateL2NetworkMsg; + +public class CreateL2NetworkMsgTest { + @Test + public void internalCreateCarriesProviderSubtypeMessage() { + CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); + APICreateL2NetworkMsg subtype = new APICreateL2NoVlanNetworkMsg(); + + msg.setSubtypeMessage(subtype); + + Assert.assertSame(subtype, msg.getSubtypeMessage()); + } +} From 4f0d968d9a57e0c2c37ba0f17332b0364c76da06 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 02:10:14 +0900 Subject: [PATCH 46/66] [network]: reuse inherited system tags Remove the duplicate message field that breaks Gson serialization.\nCover the internal projection message with a serialization test. Resolves: ZCF-5485 Change-Id: I6037be12a8499b4a6f066038d5e3991850383359 --- .../header/network/l2/CreateL2NetworkMsg.java | 5 ----- .../network/l2/CreateL2NetworkMsgTest.java | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java index 4a9028502de..2f8b23e2a26 100644 --- a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -3,8 +3,6 @@ import org.zstack.header.identity.SessionInventory; import org.zstack.header.message.NeedReplyMessage; -import java.util.List; - /** Internal, typed local L2 create request used by projection/recovery flows. */ public class CreateL2NetworkMsg extends NeedReplyMessage { private String name; @@ -20,7 +18,6 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { private String accountUuid; private NetworkCreateContext context; private SessionInventory session; - private List systemTags; private APICreateL2NetworkMsg subtypeMessage; public String getName() { return name; } @@ -49,8 +46,6 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { public void setContext(NetworkCreateContext value) { context = value; } public SessionInventory getSession() { return session; } public void setSession(SessionInventory value) { session = value; } - public List getSystemTags() { return systemTags; } - public void setSystemTags(List value) { systemTags = value; } public APICreateL2NetworkMsg getSubtypeMessage() { return subtypeMessage; } public void setSubtypeMessage(APICreateL2NetworkMsg value) { subtypeMessage = value; } } diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index 43b9c8531c4..66343335c7e 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -5,6 +5,9 @@ import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; import org.zstack.header.network.l2.CreateL2NetworkMsg; +import org.zstack.utils.gson.JSONObjectUtil; + +import java.util.Collections; public class CreateL2NetworkMsgTest { @Test @@ -16,4 +19,15 @@ public void internalCreateCarriesProviderSubtypeMessage() { Assert.assertSame(subtype, msg.getSubtypeMessage()); } + + @Test + public void internalCreateUsesInheritedSystemTags() { + CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); + msg.setSystemTags(Collections.singletonList("projection::zns")); + + String json = JSONObjectUtil.toJsonString(msg); + + Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); + Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); + } } From cb5a109eb3a778cf3ecfa0ce2671c0f148d46d8f Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 02:16:10 +0900 Subject: [PATCH 47/66] [network]: reuse inherited l3 system tags Remove the duplicate L3 message field that breaks serialization.\nCover the L3 projection message in the focused contract test. Resolves: ZCF-5485 Change-Id: I402ef67328777f0a82e2905b5dea8ca10b653ce6 --- .../zstack/header/network/l3/CreateL3NetworkMsg.java | 5 ----- .../network/l2/CreateL2NetworkMsgTest.java | 12 ++++++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java index a86e255a3ba..405f65f6b46 100644 --- a/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/CreateL3NetworkMsg.java @@ -4,8 +4,6 @@ import org.zstack.header.message.NeedReplyMessage; import org.zstack.header.network.l2.NetworkCreateContext; -import java.util.List; - /** Internal typed L3 create request for ZNS projection and recovery. */ public class CreateL3NetworkMsg extends NeedReplyMessage { private String name; @@ -19,7 +17,6 @@ public class CreateL3NetworkMsg extends NeedReplyMessage { private Boolean enableIPAM = Boolean.TRUE; private String resourceUuid; private SessionInventory session; - private List systemTags; private NetworkCreateContext context; public String getName() { return name; } @@ -44,8 +41,6 @@ public class CreateL3NetworkMsg extends NeedReplyMessage { public void setResourceUuid(String value) { resourceUuid = value; } public SessionInventory getSession() { return session; } public void setSession(SessionInventory value) { session = value; } - public List getSystemTags() { return systemTags; } - public void setSystemTags(List value) { systemTags = value; } public NetworkCreateContext getContext() { return context; } public void setContext(NetworkCreateContext value) { context = value; } } diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index 66343335c7e..ee087a3cf16 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -5,6 +5,7 @@ import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; import org.zstack.header.network.l2.CreateL2NetworkMsg; +import org.zstack.header.network.l3.CreateL3NetworkMsg; import org.zstack.utils.gson.JSONObjectUtil; import java.util.Collections; @@ -30,4 +31,15 @@ public void internalCreateUsesInheritedSystemTags() { Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); } + + @Test + public void internalL3CreateUsesInheritedSystemTags() { + CreateL3NetworkMsg msg = new CreateL3NetworkMsg(); + msg.setSystemTags(Collections.singletonList("projection::zns")); + + String json = JSONObjectUtil.toJsonString(msg); + + Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); + Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); + } } From b55c79eb1ddfc2355a1b1c1d004f56bd0e743cce Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 02:51:58 +0900 Subject: [PATCH 48/66] [network]: project zns ip ranges Add a typed internal IP range create path for ZNS projections. Preserve the public add-range path and skip reverse SDN writes. Resolves: ZCF-5485 Change-Id: If1c67834208865cf547442170ea6cc78277471a4 --- .../header/network/l3/AddIpRangeMsg.java | 22 ++++ .../header/network/l3/AddIpRangeReply.java | 10 ++ .../org/zstack/network/l3/L3BasicNetwork.java | 102 +++++++++++++++--- .../network/l2/CreateL2NetworkMsgTest.java | 12 +++ .../CloudOperationsErrorCode.java | 4 + 5 files changed, 134 insertions(+), 16 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/network/l3/AddIpRangeMsg.java create mode 100644 header/src/main/java/org/zstack/header/network/l3/AddIpRangeReply.java diff --git a/header/src/main/java/org/zstack/header/network/l3/AddIpRangeMsg.java b/header/src/main/java/org/zstack/header/network/l3/AddIpRangeMsg.java new file mode 100644 index 00000000000..d1e29605a97 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/AddIpRangeMsg.java @@ -0,0 +1,22 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; + +/** Internal typed IP range create request for ZNS projection and recovery. */ +public class AddIpRangeMsg extends NeedReplyMessage implements L3NetworkMessage { + private String l3NetworkUuid; + private String operationUuid; + private IpRangeInventory inventory; + private NetworkCreateContext context; + + @Override + public String getL3NetworkUuid() { return l3NetworkUuid; } + public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } + public String getOperationUuid() { return operationUuid; } + public void setOperationUuid(String value) { operationUuid = value; } + public IpRangeInventory getInventory() { return inventory; } + public void setInventory(IpRangeInventory value) { inventory = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/AddIpRangeReply.java b/header/src/main/java/org/zstack/header/network/l3/AddIpRangeReply.java new file mode 100644 index 00000000000..a65390c371e --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/AddIpRangeReply.java @@ -0,0 +1,10 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.MessageReply; + +public class AddIpRangeReply extends MessageReply { + private IpRangeInventory inventory; + + public IpRangeInventory getInventory() { return inventory; } + public void setInventory(IpRangeInventory value) { inventory = value; } +} 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 06284dee766..70d0019f888 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -166,7 +166,24 @@ private void handle(APIAddIpRangeMsg msg) { thdf.chainSubmit(new ChainTask(msg) { @Override public void run(SyncTaskChain chain) { - doAddIpRange(msg, chain); + IpRangeInventory ipr = IpRangeInventory.fromMessage(msg); + addIpRange(ipr, msg, NetworkCreateContext.api(), new ReturnValueCompletion(msg) { + @Override + public void success(IpRangeInventory inv) { + APIAddIpRangeEvent evt = new APIAddIpRangeEvent(msg.getId()); + evt.setInventory(inv); + bus.publish(evt); + chain.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + APIAddIpRangeEvent evt = new APIAddIpRangeEvent(msg.getId()); + evt.setError(errorCode); + bus.publish(evt); + chain.next(); + } + }); } @Override @@ -181,34 +198,85 @@ public String getName() { }); } - private void doAddIpRange(APIAddIpRangeMsg msg, SyncTaskChain chain) { - IpRangeInventory ipr = IpRangeInventory.fromMessage(msg); - APIAddIpRangeEvent evt = new APIAddIpRangeEvent(msg.getId()); + private void handle(AddIpRangeMsg msg) { + thdf.chainSubmit(new ChainTask(msg) { + @Override + public void run(SyncTaskChain chain) { + IpRangeInventory ipr = msg.getInventory(); + if (ipr == null || !Objects.equals(msg.getL3NetworkUuid(), ipr.getL3NetworkUuid())) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10083, + "internal IP range must belong to L3 network[uuid:%s]", msg.getL3NetworkUuid())); + chain.next(); + return; + } + + APIAddIpRangeMsg create = new APIAddIpRangeMsg(); + create.setL3NetworkUuid(msg.getL3NetworkUuid()); + create.setName(ipr.getName()); + create.setDescription(ipr.getDescription()); + create.setStartIp(ipr.getStartIp()); + create.setEndIp(ipr.getEndIp()); + create.setNetmask(ipr.getNetmask()); + create.setGateway(ipr.getGateway()); + create.setIpRangeType(ipr.getIpRangeType().toString()); + create.setResourceUuid(ipr.getUuid()); + create.setSystemTags(msg.getSystemTags()); + create.setUserTags(msg.getUserTags()); + addIpRange(ipr, create, msg.getContext(), new ReturnValueCompletion(msg) { + @Override + public void success(IpRangeInventory inv) { + AddIpRangeReply reply = new AddIpRangeReply(); + reply.setInventory(inv); + bus.reply(msg, reply); + chain.next(); + } + + @Override + public void fail(ErrorCode errorCode) { + bus.replyErrorByMessageType(msg, errorCode); + chain.next(); + } + }); + } + + @Override + public String getSyncSignature() { + return syncThreadName; + } + + @Override + public String getName() { + return "add-projected-ip-range"; + } + }); + } + + private void addIpRange(IpRangeInventory ipr, APICreateMessage msg, NetworkCreateContext context, + ReturnValueCompletion completion) { + if (context == null) { + completion.fail(Platform.inerr(ORG_ZSTACK_NETWORK_L3_10084, + "network create context is required for internal IP range creation")); + return; + } ErrorCode errorCode = validateManagementNetworkIpRangeVersionBeforeCreate(ipr); if (errorCode != null) { - evt.setError(errorCode); - bus.publish(evt); - chain.next(); + completion.fail(errorCode); return; } IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { + factory.createIpRange(Collections.singletonList(ipr), msg, context, new ReturnValueCompletion>(completion) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); tagMgr.createTagsFromAPICreateMessage(msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); - setIpRangeSharedResource(msg.getL3NetworkUuid(), inv.getUuid()); - evt.setInventory(inv); - bus.publish(evt); - chain.next(); + setIpRangeSharedResource(ipr.getL3NetworkUuid(), inv.getUuid()); + completion.success(inv); } @Override public void fail(ErrorCode errorCode) { - evt.setError(errorCode); - bus.publish(evt); - chain.next(); + completion.fail(errorCode); } }); } @@ -237,7 +305,9 @@ private String getIpVersionName(int ipVersion) { } private void handleLocalMessage(Message msg) { - if (msg instanceof AllocateIpMsg) { + if (msg instanceof AddIpRangeMsg) { + handle((AddIpRangeMsg) msg); + } else if (msg instanceof AllocateIpMsg) { handle((AllocateIpMsg)msg); } else if (msg instanceof ReturnIpMsg) { handle((ReturnIpMsg)msg); diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index ee087a3cf16..957a396b505 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -6,6 +6,7 @@ import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; import org.zstack.header.network.l2.CreateL2NetworkMsg; import org.zstack.header.network.l3.CreateL3NetworkMsg; +import org.zstack.header.network.l3.AddIpRangeMsg; import org.zstack.utils.gson.JSONObjectUtil; import java.util.Collections; @@ -42,4 +43,15 @@ public void internalL3CreateUsesInheritedSystemTags() { Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); } + + @Test + public void internalIpRangeCreateUsesInheritedSystemTags() { + AddIpRangeMsg msg = new AddIpRangeMsg(); + msg.setSystemTags(Collections.singletonList("projection::zns")); + + String json = JSONObjectUtil.toJsonString(msg); + + Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); + Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); + } } 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 a68d10b24d4..743fbc3d1f9 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -995,6 +995,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_L3_10081 = "ORG_ZSTACK_NETWORK_L3_10081"; public static final String ORG_ZSTACK_NETWORK_L3_10082 = "ORG_ZSTACK_NETWORK_L3_10082"; + public static final String ORG_ZSTACK_NETWORK_L3_10083 = "ORG_ZSTACK_NETWORK_L3_10083"; + public static final String ORG_ZSTACK_NETWORK_L3_10084 = "ORG_ZSTACK_NETWORK_L3_10084"; public static final String ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000 = "ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000"; @@ -12256,6 +12258,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10047 = "ORG_ZSTACK_NETWORK_ZNS_10047"; public static final String ORG_ZSTACK_NETWORK_ZNS_10048 = "ORG_ZSTACK_NETWORK_ZNS_10048"; public static final String ORG_ZSTACK_NETWORK_ZNS_10051 = "ORG_ZSTACK_NETWORK_ZNS_10051"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10052 = "ORG_ZSTACK_NETWORK_ZNS_10052"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10053 = "ORG_ZSTACK_NETWORK_ZNS_10053"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 1f62ab848229a4202819e1f060b88722a2e00006 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 03:29:27 +0900 Subject: [PATCH 49/66] [network]: project zns dhcp and dns Refresh an existing projection with local-only DHCP service and DNS state. Advance the applied version only after the service projection succeeds. Resolves: ZCF-5485 Change-Id: I16ff29b287904bb5ec0bb77190f583b003b71a29 --- .../network/l3/UpdateProjectedDnsMsg.java | 22 ++++++ .../l3/AttachNetworkServiceToL3Msg.java | 10 +++ .../org/zstack/network/l3/L3BasicNetwork.java | 71 ++++++++++++++++++- .../network/l2/CreateL2NetworkMsgTest.java | 26 +++++++ .../CloudOperationsErrorCode.java | 4 ++ 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 header/src/main/java/org/zstack/header/network/l3/UpdateProjectedDnsMsg.java diff --git a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedDnsMsg.java b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedDnsMsg.java new file mode 100644 index 00000000000..29c1b153413 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedDnsMsg.java @@ -0,0 +1,22 @@ +package org.zstack.header.network.l3; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; + +import java.util.ArrayList; +import java.util.List; + +/** Internal typed DNS projection request. */ +public class UpdateProjectedDnsMsg extends NeedReplyMessage implements L3NetworkMessage { + private String l3NetworkUuid; + private List dns = new ArrayList<>(); + private NetworkCreateContext context; + + @Override + public String getL3NetworkUuid() { return l3NetworkUuid; } + public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } + public List getDns() { return dns; } + public void setDns(List value) { dns = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } +} diff --git a/network/src/main/java/org/zstack/network/l3/AttachNetworkServiceToL3Msg.java b/network/src/main/java/org/zstack/network/l3/AttachNetworkServiceToL3Msg.java index 24a40b3faf2..e344716d358 100644 --- a/network/src/main/java/org/zstack/network/l3/AttachNetworkServiceToL3Msg.java +++ b/network/src/main/java/org/zstack/network/l3/AttachNetworkServiceToL3Msg.java @@ -1,6 +1,7 @@ package org.zstack.network.l3; import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.header.network.l3.L3NetworkMessage; import java.util.ArrayList; @@ -16,6 +17,7 @@ public class AttachNetworkServiceToL3Msg extends NeedReplyMessage implements L3N private Map> networkServices; private List apiSystemTags = new ArrayList<>(); + private NetworkCreateContext context; public void setL3NetworkUuid(String l3NetworkUuid) { this.l3NetworkUuid = l3NetworkUuid; @@ -41,4 +43,12 @@ public List getApiSystemTags() { public void setApiSystemTags(List apiSystemTags) { this.apiSystemTags = apiSystemTags; } + + public NetworkCreateContext getContext() { + return context; + } + + public void setContext(NetworkCreateContext context) { + this.context = context; + } } 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 70d0019f888..27196b1a151 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -307,6 +307,8 @@ private String getIpVersionName(int ipVersion) { private void handleLocalMessage(Message msg) { if (msg instanceof AddIpRangeMsg) { handle((AddIpRangeMsg) msg); + } else if (msg instanceof UpdateProjectedDnsMsg) { + handle((UpdateProjectedDnsMsg) msg); } else if (msg instanceof AllocateIpMsg) { handle((AllocateIpMsg)msg); } else if (msg instanceof ReturnIpMsg) { @@ -1608,7 +1610,7 @@ public void handle(ErrorCode errCode, Map data) { }).start(); } - private void handle(final AttachNetworkServiceToL3Msg msg) { + private void handle(final AttachNetworkServiceToL3Msg msg) { MessageReply reply = new MessageReply(); NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( msg.getL3NetworkUuid(), "NetworkService", null, "ATTACH_NETWORK_SERVICE"); @@ -1656,6 +1658,11 @@ private void handle(final AttachNetworkServiceToL3Msg msg) { return; } + if (msg.getContext() != null && msg.getContext().isProjection()) { + wcomp.done(); + return; + } + nsMgr.enableNetworkService(l3VO, ptype, nsType, msg.getApiSystemTags(), new Completion(wcomp) { @Override public void success() { @@ -1694,6 +1701,68 @@ public void fail(ErrorCode errorCode) { }); } + private void handle(UpdateProjectedDnsMsg msg) { + thdf.chainSubmit(new ChainTask(msg) { + @Override + public void run(SyncTaskChain chain) { + if (msg.getContext() == null || !msg.getContext().isProjection()) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10085, + "DNS projection requires a ZNS projection context")); + chain.next(); + return; + } + + LinkedHashSet desired = new LinkedHashSet<>( + msg.getDns() == null ? Collections.emptyList() : msg.getDns()); + String invalid = desired.stream().filter(dns -> !NetworkUtils.isIpAddress(dns)).findFirst().orElse(null); + if (invalid != null) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10086, + "DNS[%s] is not an IP address", invalid)); + chain.next(); + return; + } + + new SQLBatch() { + @Override + protected void scripts() { + List existing = Q.New(L3NetworkDnsVO.class) + .eq(L3NetworkDnsVO_.l3NetworkUuid, msg.getL3NetworkUuid()).list(); + Set current = existing.stream().map(L3NetworkDnsVO::getDns) + .collect(Collectors.toSet()); + List obsolete = existing.stream() + .filter(vo -> !desired.contains(vo.getDns())).collect(Collectors.toList()); + if (!obsolete.isEmpty()) { + dbf.removeCollection(obsolete, L3NetworkDnsVO.class); + } + List additions = desired.stream() + .filter(dns -> !current.contains(dns)) + .map(dns -> { + L3NetworkDnsVO vo = new L3NetworkDnsVO(); + vo.setL3NetworkUuid(msg.getL3NetworkUuid()); + vo.setDns(dns); + return vo; + }).collect(Collectors.toList()); + if (!additions.isEmpty()) { + dbf.persistCollection(additions); + } + } + }.execute(); + bus.reply(msg, new MessageReply()); + chain.next(); + } + + @Override + public String getSyncSignature() { + return syncThreadName; + } + + @Override + public String getName() { + return "update-projected-dns"; + } + }); + } + private void handle(APIAttachNetworkServiceToL3NetworkMsg msg) { APIAttachNetworkServiceToL3NetworkEvent evt = new APIAttachNetworkServiceToL3NetworkEvent(msg.getId()); if (msg.isSkipAttach()) { diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index 957a396b505..127be10023f 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -5,8 +5,13 @@ import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; import org.zstack.header.network.l2.CreateL2NetworkMsg; +import org.zstack.header.network.l2.ExternalNetworkRef; +import org.zstack.header.network.l2.NetworkCreateContext; +import org.zstack.header.network.l2.NetworkOperationOrigin; import org.zstack.header.network.l3.CreateL3NetworkMsg; import org.zstack.header.network.l3.AddIpRangeMsg; +import org.zstack.header.network.l3.UpdateProjectedDnsMsg; +import org.zstack.network.l3.AttachNetworkServiceToL3Msg; import org.zstack.utils.gson.JSONObjectUtil; import java.util.Collections; @@ -54,4 +59,25 @@ public void internalIpRangeCreateUsesInheritedSystemTags() { Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); } + + @Test + public void internalDnsProjectionCarriesLocalOnlyContext() { + UpdateProjectedDnsMsg msg = new UpdateProjectedDnsMsg(); + msg.setL3NetworkUuid("l3-uuid"); + msg.setDns(Collections.singletonList("192.0.2.53")); + msg.setContext(NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_REFRESH, + new ExternalNetworkRef("dhcp-config-uuid", "account-uuid"))); + + Assert.assertTrue(msg.getContext().isProjection()); + Assert.assertEquals("192.0.2.53", msg.getDns().get(0)); + } + + @Test + public void internalNetworkServiceAttachCarriesLocalOnlyContext() { + AttachNetworkServiceToL3Msg msg = new AttachNetworkServiceToL3Msg(); + msg.setContext(NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_PROJECTION, + new ExternalNetworkRef("dhcp-service-uuid", "account-uuid"))); + + Assert.assertTrue(msg.getContext().isProjection()); + } } 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 743fbc3d1f9..bb776ad597f 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -997,6 +997,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_L3_10082 = "ORG_ZSTACK_NETWORK_L3_10082"; public static final String ORG_ZSTACK_NETWORK_L3_10083 = "ORG_ZSTACK_NETWORK_L3_10083"; public static final String ORG_ZSTACK_NETWORK_L3_10084 = "ORG_ZSTACK_NETWORK_L3_10084"; + public static final String ORG_ZSTACK_NETWORK_L3_10085 = "ORG_ZSTACK_NETWORK_L3_10085"; + public static final String ORG_ZSTACK_NETWORK_L3_10086 = "ORG_ZSTACK_NETWORK_L3_10086"; public static final String ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000 = "ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000"; @@ -12260,6 +12262,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10051 = "ORG_ZSTACK_NETWORK_ZNS_10051"; public static final String ORG_ZSTACK_NETWORK_ZNS_10052 = "ORG_ZSTACK_NETWORK_ZNS_10052"; public static final String ORG_ZSTACK_NETWORK_ZNS_10053 = "ORG_ZSTACK_NETWORK_ZNS_10053"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10054 = "ORG_ZSTACK_NETWORK_ZNS_10054"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10055 = "ORG_ZSTACK_NETWORK_ZNS_10055"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 1bf3325cbf55cfacfa00a492cf938b117427d2c6 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 04:17:03 +0900 Subject: [PATCH 50/66] [network]: reconcile projected ip ranges Keep projected ranges aligned with the authoritative ZNS snapshot.\nPreserve used addresses when a replacement range still covers them. Resolves: ZCF-5485 Change-Id: I8e201fe0ae7b2accdfa0aca1eb416adab08462a5 --- .../org/zstack/network/l3/L3BasicNetwork.java | 145 ++++++++++++++++++ .../network/l2/CreateL2NetworkMsgTest.java | 15 ++ .../CloudOperationsErrorCode.java | 5 + 3 files changed, 165 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 27196b1a151..4f21d3a05b9 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -307,6 +307,10 @@ private String getIpVersionName(int ipVersion) { private void handleLocalMessage(Message msg) { if (msg instanceof AddIpRangeMsg) { handle((AddIpRangeMsg) msg); + } else if (msg instanceof UpdateProjectedIpRangeMsg) { + handle((UpdateProjectedIpRangeMsg) msg); + } else if (msg instanceof DeleteProjectedIpRangeMsg) { + handle((DeleteProjectedIpRangeMsg) msg); } else if (msg instanceof UpdateProjectedDnsMsg) { handle((UpdateProjectedDnsMsg) msg); } else if (msg instanceof AllocateIpMsg) { @@ -326,6 +330,147 @@ private void handleLocalMessage(Message msg) { } } + private void handle(UpdateProjectedIpRangeMsg msg) { + thdf.chainSubmit(new ChainTask(msg) { + @Override + public void run(SyncTaskChain chain) { + IpRangeVO range = dbf.findByUuid(msg.getRangeUuid(), IpRangeVO.class); + if (msg.getContext() == null || !msg.getContext().isProjection() + || !IpRangeVO.class.getSimpleName().equals(msg.getExpectedSourceType()) + || !Objects.equals(self.getUuid(), msg.getL3NetworkUuid()) + || range == null || !Objects.equals(range.getL3NetworkUuid(), msg.getL3NetworkUuid())) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10087, + "IP range projection update requires the expected range on L3 network[uuid:%s]", + msg.getL3NetworkUuid())); + chain.next(); + return; + } + + boolean valid; + try { + valid = NetworkUtils.isInRange(msg.getStartIp(), msg.getStartIp(), msg.getEndIp()); + } catch (RuntimeException e) { + valid = false; + } + if (!valid) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10088, + "projected IP range[%s, %s] is invalid", msg.getStartIp(), msg.getEndIp())); + chain.next(); + return; + } + + List rangeUsedIps = Q.New(UsedIpVO.class) + .eq(UsedIpVO_.ipRangeUuid, range.getUuid()).list(); + UsedIpVO outside = rangeUsedIps.stream() + .filter(ip -> !NetworkUtils.isInRange(ip.getIp(), msg.getStartIp(), msg.getEndIp())) + .findFirst().orElse(null); + if (outside != null) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10089, + "used IP[%s] is outside projected IP range[uuid:%s]", + outside.getIp(), range.getUuid())); + chain.next(); + return; + } + + range.setStartIp(msg.getStartIp()); + range.setEndIp(msg.getEndIp()); + range.setGateway(msg.getGateway()); + range.setNetmask(msg.getNetmask()); + dbf.update(range); + bus.reply(msg, new MessageReply()); + chain.next(); + } + + @Override + public String getSyncSignature() { + return syncThreadName; + } + + @Override + public String getName() { + return "update-projected-ip-range"; + } + }); + } + + private void handle(DeleteProjectedIpRangeMsg msg) { + thdf.chainSubmit(new ChainTask(msg) { + @Override + public void run(SyncTaskChain chain) { + if (msg.getContext() == null || !msg.getContext().isProjection() + || !IpRangeVO.class.getSimpleName().equals(msg.getExpectedSourceType()) + || !Objects.equals(self.getUuid(), msg.getL3NetworkUuid())) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10090, + "IP range projection delete requires L3 network[uuid:%s] ownership", + msg.getL3NetworkUuid())); + chain.next(); + return; + } + + IpRangeVO range = dbf.findByUuid(msg.getRangeUuid(), IpRangeVO.class); + if (range == null) { + bus.reply(msg, new MessageReply()); + chain.next(); + return; + } + if (!Objects.equals(range.getL3NetworkUuid(), msg.getL3NetworkUuid())) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10090, + "IP range[uuid:%s] does not belong to L3 network[uuid:%s]", + range.getUuid(), msg.getL3NetworkUuid())); + chain.next(); + return; + } + + List alternatives = Q.New(IpRangeVO.class) + .eq(IpRangeVO_.l3NetworkUuid, msg.getL3NetworkUuid()) + .notEq(IpRangeVO_.uuid, range.getUuid()).list(); + List usedIps = Q.New(UsedIpVO.class) + .eq(UsedIpVO_.ipRangeUuid, range.getUuid()).list(); + Map replacements = new LinkedHashMap<>(); + for (UsedIpVO usedIp : usedIps) { + IpRangeVO replacement = alternatives.stream() + .filter(candidate -> Objects.equals(candidate.getIpVersion(), usedIp.getIpVersion())) + .filter(candidate -> NetworkUtils.isInRange( + usedIp.getIp(), candidate.getStartIp(), candidate.getEndIp())) + .findFirst().orElse(null); + if (replacement == null) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10091, + "used IP[%s] prevents deleting projected IP range[uuid:%s]", + usedIp.getIp(), range.getUuid())); + chain.next(); + return; + } + replacements.put(usedIp, replacement); + } + + new SQLBatch() { + @Override + protected void scripts() { + replacements.forEach((usedIp, replacement) -> + usedIp.setIpRangeUuid(replacement.getUuid())); + if (!usedIps.isEmpty()) { + dbf.updateCollection(usedIps); + } + dbf.remove(range); + IpRangeHelper.updateL3NetworkIpversion(range); + } + }.execute(); + bus.reply(msg, new MessageReply()); + chain.next(); + } + + @Override + public String getSyncSignature() { + return syncThreadName; + } + + @Override + public String getName() { + return "delete-projected-ip-range"; + } + }); + } + private void handle(CheckIpAvailabilityMsg msg) { CheckIpAvailabilityReply reply = checkIpAvailability(msg); bus.reply(msg, reply); diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index 127be10023f..b1f3674ac2a 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -10,7 +10,9 @@ import org.zstack.header.network.l2.NetworkOperationOrigin; import org.zstack.header.network.l3.CreateL3NetworkMsg; import org.zstack.header.network.l3.AddIpRangeMsg; +import org.zstack.header.network.l3.DeleteProjectedIpRangeMsg; import org.zstack.header.network.l3.UpdateProjectedDnsMsg; +import org.zstack.header.network.l3.UpdateProjectedIpRangeMsg; import org.zstack.network.l3.AttachNetworkServiceToL3Msg; import org.zstack.utils.gson.JSONObjectUtil; @@ -72,6 +74,19 @@ public void internalDnsProjectionCarriesLocalOnlyContext() { Assert.assertEquals("192.0.2.53", msg.getDns().get(0)); } + @Test + public void internalIpRangeRefreshCarriesLocalOnlyContext() { + NetworkCreateContext context = NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_REFRESH, + new ExternalNetworkRef("range-uuid", "account-uuid")); + UpdateProjectedIpRangeMsg update = new UpdateProjectedIpRangeMsg(); + update.setContext(context); + DeleteProjectedIpRangeMsg delete = new DeleteProjectedIpRangeMsg(); + delete.setContext(context); + + Assert.assertTrue(update.getContext().isProjection()); + Assert.assertTrue(delete.getContext().isProjection()); + } + @Test public void internalNetworkServiceAttachCarriesLocalOnlyContext() { AttachNetworkServiceToL3Msg msg = new AttachNetworkServiceToL3Msg(); 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 bb776ad597f..2c0df8c6a0a 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -999,6 +999,11 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_L3_10084 = "ORG_ZSTACK_NETWORK_L3_10084"; public static final String ORG_ZSTACK_NETWORK_L3_10085 = "ORG_ZSTACK_NETWORK_L3_10085"; public static final String ORG_ZSTACK_NETWORK_L3_10086 = "ORG_ZSTACK_NETWORK_L3_10086"; + public static final String ORG_ZSTACK_NETWORK_L3_10087 = "ORG_ZSTACK_NETWORK_L3_10087"; + public static final String ORG_ZSTACK_NETWORK_L3_10088 = "ORG_ZSTACK_NETWORK_L3_10088"; + public static final String ORG_ZSTACK_NETWORK_L3_10089 = "ORG_ZSTACK_NETWORK_L3_10089"; + public static final String ORG_ZSTACK_NETWORK_L3_10090 = "ORG_ZSTACK_NETWORK_L3_10090"; + public static final String ORG_ZSTACK_NETWORK_L3_10091 = "ORG_ZSTACK_NETWORK_L3_10091"; public static final String ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000 = "ORG_ZSTACK_SNS_PLATFORM_UNIVERSALSMS_SUPPLIER_EMAY_10000"; From 455f387d528e0a912b5a9c3b0dd38ffcdc26a03d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 04:29:47 +0900 Subject: [PATCH 51/66] [network]: route projected range messages Implement the L3 resource routing contract on typed range messages.\nVerify both refresh messages are routable before hot-fix deployment. Resolves: ZCF-5485 Change-Id: I7a469f6ce6b8c7af8b2875e6121c9f111d6da315 --- .../zstack/header/network/l3/DeleteProjectedIpRangeMsg.java | 3 ++- .../zstack/header/network/l3/UpdateProjectedIpRangeMsg.java | 3 ++- .../test/integration/network/l2/CreateL2NetworkMsgTest.java | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java index 433109c853f..5c4aed519c1 100644 --- a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeMsg.java @@ -3,11 +3,12 @@ import org.zstack.header.message.NeedReplyMessage; import org.zstack.header.network.l2.NetworkCreateContext; -public class DeleteProjectedIpRangeMsg extends NeedReplyMessage { +public class DeleteProjectedIpRangeMsg extends NeedReplyMessage implements L3NetworkMessage { private String l3NetworkUuid; private String rangeUuid; private String expectedSourceType; private NetworkCreateContext context; + @Override public String getL3NetworkUuid() { return l3NetworkUuid; } public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } public String getRangeUuid() { return rangeUuid; } diff --git a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java index 30478c31e3b..85345401895 100644 --- a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeMsg.java @@ -3,7 +3,7 @@ import org.zstack.header.message.NeedReplyMessage; import org.zstack.header.network.l2.NetworkCreateContext; -public class UpdateProjectedIpRangeMsg extends NeedReplyMessage { +public class UpdateProjectedIpRangeMsg extends NeedReplyMessage implements L3NetworkMessage { private String l3NetworkUuid; private String rangeUuid; private String startIp; @@ -12,6 +12,7 @@ public class UpdateProjectedIpRangeMsg extends NeedReplyMessage { private String netmask; private String expectedSourceType; private NetworkCreateContext context; + @Override public String getL3NetworkUuid() { return l3NetworkUuid; } public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } public String getRangeUuid() { return rangeUuid; } diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index b1f3674ac2a..ae4afa6fb80 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -11,6 +11,7 @@ import org.zstack.header.network.l3.CreateL3NetworkMsg; import org.zstack.header.network.l3.AddIpRangeMsg; import org.zstack.header.network.l3.DeleteProjectedIpRangeMsg; +import org.zstack.header.network.l3.L3NetworkMessage; import org.zstack.header.network.l3.UpdateProjectedDnsMsg; import org.zstack.header.network.l3.UpdateProjectedIpRangeMsg; import org.zstack.network.l3.AttachNetworkServiceToL3Msg; @@ -85,6 +86,8 @@ public void internalIpRangeRefreshCarriesLocalOnlyContext() { Assert.assertTrue(update.getContext().isProjection()); Assert.assertTrue(delete.getContext().isProjection()); + Assert.assertTrue(update instanceof L3NetworkMessage); + Assert.assertTrue(delete instanceof L3NetworkMessage); } @Test From a5509ba13f499156ebf57b94f87f16b3f5b25797 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 14:14:58 +0900 Subject: [PATCH 52/66] [zns]: add offering qos error code Add the dedicated Cloud error code used when a bound ZNS network rejects instance-offering NIC QoS. Resolves: ZCF-5485 Change-Id: I6d106f041580d362ef5452303187c9287150a67c --- .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 1 + 1 file changed, 1 insertion(+) 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 2c0df8c6a0a..69d4744e65c 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12269,6 +12269,7 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10053 = "ORG_ZSTACK_NETWORK_ZNS_10053"; public static final String ORG_ZSTACK_NETWORK_ZNS_10054 = "ORG_ZSTACK_NETWORK_ZNS_10054"; public static final String ORG_ZSTACK_NETWORK_ZNS_10055 = "ORG_ZSTACK_NETWORK_ZNS_10055"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10056 = "ORG_ZSTACK_NETWORK_ZNS_10056"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 6309e9d4270ec0e122ec39805eb444641b494a6f Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 16:48:49 +0900 Subject: [PATCH 53/66] [zns]: add router projection errors Allocate dedicated error codes for targeted pull failure branches. Change-Id: I9a73db591d4a851e0d5fc5b42e20d1d56361b0a5 --- .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 4 ++++ 1 file changed, 4 insertions(+) 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 69d4744e65c..52a5e8b2511 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12270,6 +12270,10 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10054 = "ORG_ZSTACK_NETWORK_ZNS_10054"; public static final String ORG_ZSTACK_NETWORK_ZNS_10055 = "ORG_ZSTACK_NETWORK_ZNS_10055"; public static final String ORG_ZSTACK_NETWORK_ZNS_10056 = "ORG_ZSTACK_NETWORK_ZNS_10056"; + // 10057 targeted Tenant Router pull completed without a local projection + // 10058 targeted Tenant Router pull returned an unknown projection state + public static final String ORG_ZSTACK_NETWORK_ZNS_10057 = "ORG_ZSTACK_NETWORK_ZNS_10057"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10058 = "ORG_ZSTACK_NETWORK_ZNS_10058"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 61ff6d973d4d3ab674fb9d52a72720d3058094de Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 10 Aug 2026 20:09:21 +0900 Subject: [PATCH 54/66] [zns]: convert projected l3 atomically Serialize projection-owned L3 type, category, and router tag changes. Reject stale sources and active dependencies before mutation. Resolves: ZCF-5485 Change-Id: Ieb55d8ff715afe54b8a0dd3c01d728539f9909c0 --- .../network/l3/ConvertL3NetworkTypeMsg.java | 18 ++- .../org/zstack/network/l3/L3BasicNetwork.java | 127 ++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) diff --git a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java index 0a124967c94..44904ac410e 100644 --- a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeMsg.java @@ -1,15 +1,31 @@ package org.zstack.header.network.l3; import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.l2.NetworkCreateContext; -public class ConvertL3NetworkTypeMsg extends NeedReplyMessage { +public class ConvertL3NetworkTypeMsg extends NeedReplyMessage implements L3NetworkMessage { private String l3NetworkUuid; private String expectedSourceType; + private String expectedSourceCategory; private String targetType; + private String targetCategory; + private String managedSystemTagPrefix; + private String targetSystemTag; + private NetworkCreateContext context; public String getL3NetworkUuid() { return l3NetworkUuid; } public void setL3NetworkUuid(String value) { l3NetworkUuid = value; } public String getExpectedSourceType() { return expectedSourceType; } public void setExpectedSourceType(String value) { expectedSourceType = value; } + public String getExpectedSourceCategory() { return expectedSourceCategory; } + public void setExpectedSourceCategory(String value) { expectedSourceCategory = value; } public String getTargetType() { return targetType; } public void setTargetType(String value) { targetType = value; } + public String getTargetCategory() { return targetCategory; } + public void setTargetCategory(String value) { targetCategory = value; } + public String getManagedSystemTagPrefix() { return managedSystemTagPrefix; } + public void setManagedSystemTagPrefix(String value) { managedSystemTagPrefix = value; } + public String getTargetSystemTag() { return targetSystemTag; } + public void setTargetSystemTag(String value) { targetSystemTag = value; } + public NetworkCreateContext getContext() { return context; } + public void setContext(NetworkCreateContext value) { context = value; } } 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 4f21d3a05b9..1e1c51be9b9 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -46,6 +46,8 @@ import org.zstack.header.network.l3.*; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.service.*; +import org.zstack.header.tag.SystemTagVO; +import org.zstack.header.vm.VmNicVO; import org.zstack.identity.AccountManager; import org.zstack.network.service.NetworkServiceManager; import org.zstack.resourceconfig.ResourceConfigFacade; @@ -62,6 +64,7 @@ import org.zstack.utils.network.NetworkUtils; import org.zstack.utils.stopwatch.StopWatch; +import javax.persistence.LockModeType; import javax.persistence.Tuple; import java.math.BigInteger; import java.util.*; @@ -313,6 +316,8 @@ private void handleLocalMessage(Message msg) { handle((DeleteProjectedIpRangeMsg) msg); } else if (msg instanceof UpdateProjectedDnsMsg) { handle((UpdateProjectedDnsMsg) msg); + } else if (msg instanceof ConvertL3NetworkTypeMsg) { + handle((ConvertL3NetworkTypeMsg) msg); } else if (msg instanceof AllocateIpMsg) { handle((AllocateIpMsg)msg); } else if (msg instanceof ReturnIpMsg) { @@ -330,6 +335,128 @@ private void handleLocalMessage(Message msg) { } } + private void handle(ConvertL3NetworkTypeMsg msg) { + thdf.chainSubmit(new ChainTask(msg) { + @Override + public void run(SyncTaskChain chain) { + L3NetworkCategory targetCategory; + try { + targetCategory = L3NetworkCategory.valueOf(msg.getTargetCategory()); + } catch (RuntimeException e) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10090, + "invalid target category for projected L3 network conversion")); + chain.next(); + return; + } + if (msg.getContext() == null || !msg.getContext().isProjection() + || msg.getExpectedSourceType() == null + || msg.getExpectedSourceCategory() == null + || msg.getTargetType() == null + || !L3NetworkType.hasType(msg.getTargetType()) + || targetCategory == L3NetworkCategory.System + || msg.getManagedSystemTagPrefix() == null + || msg.getManagedSystemTagPrefix().isEmpty() + || (msg.getTargetSystemTag() != null + && (!msg.getTargetSystemTag().startsWith(msg.getManagedSystemTagPrefix()) + || msg.getTargetSystemTag().length() > 128))) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10090, + "projected L3 network conversion has an invalid typed contract")); + chain.next(); + return; + } + + String failure; + try { + failure = new SQLBatchWithReturn() { + @Override + protected String scripts() { + L3NetworkVO current = databaseFacade.getEntityManager().find( + L3NetworkVO.class, msg.getL3NetworkUuid(), LockModeType.PESSIMISTIC_WRITE); + if (current == null) { + return String.format("L3 network[uuid:%s] no longer exists", + msg.getL3NetworkUuid()); + } + + List managedTags = databaseFacade.getEntityManager() + .createQuery("select tag from SystemTagVO tag where tag.resourceUuid = :resourceUuid" + + " and tag.resourceType = :resourceType", SystemTagVO.class) + .setParameter("resourceUuid", current.getUuid()) + .setParameter("resourceType", L3NetworkVO.class.getSimpleName()) + .getResultList().stream() + .filter(tag -> tag.getTag().startsWith(msg.getManagedSystemTagPrefix())) + .collect(Collectors.toList()); + boolean targetTagMatches = msg.getTargetSystemTag() == null + ? managedTags.isEmpty() + : managedTags.size() == 1 + && msg.getTargetSystemTag().equals(managedTags.get(0).getTag()); + if (msg.getTargetType().equals(current.getType()) + && targetCategory == current.getCategory() + && targetTagMatches) { + return null; + } + if (!msg.getExpectedSourceType().equals(current.getType()) + || !msg.getExpectedSourceCategory().equals(current.getCategory().toString())) { + return String.format("L3 network[uuid:%s] changed from expected source[%s/%s] to[%s/%s]", + current.getUuid(), msg.getExpectedSourceType(), + msg.getExpectedSourceCategory(), current.getType(), current.getCategory()); + } + + Long usedIpCount = databaseFacade.getEntityManager() + .createQuery("select count(ip) from UsedIpVO ip where ip.l3NetworkUuid = :l3Uuid", + Long.class) + .setParameter("l3Uuid", current.getUuid()) + .getSingleResult(); + Long vmNicCount = databaseFacade.getEntityManager() + .createQuery("select count(nic) from VmNicVO nic where nic.l3NetworkUuid = :l3Uuid", + Long.class) + .setParameter("l3Uuid", current.getUuid()) + .getSingleResult(); + if (usedIpCount > 0 || vmNicCount > 0) { + return String.format("L3 network[uuid:%s] has active dependencies[usedIp:%d, vmNic:%d]", + current.getUuid(), usedIpCount, vmNicCount); + } + + current.setType(msg.getTargetType()); + current.setCategory(targetCategory); + managedTags.forEach(tag -> tagMgr.deleteSystemTag(tag.getUuid())); + if (msg.getTargetSystemTag() != null) { + tagMgr.createNonInherentSystemTag(current.getUuid(), + msg.getTargetSystemTag(), L3NetworkVO.class.getSimpleName()); + } + databaseFacade.getEntityManager().flush(); + return null; + } + }.execute(); + } catch (RuntimeException e) { + bus.replyErrorByMessageType(msg, Platform.inerr(ORG_ZSTACK_NETWORK_L3_10090, + "failed to atomically convert projected L3 network[uuid:%s]: %s", + msg.getL3NetworkUuid(), e.getMessage())); + chain.next(); + return; + } + if (failure != null) { + bus.replyErrorByMessageType(msg, argerr(ORG_ZSTACK_NETWORK_L3_10091, failure)); + chain.next(); + return; + } + + self = dbf.findByUuid(msg.getL3NetworkUuid(), L3NetworkVO.class); + bus.reply(msg, new MessageReply()); + chain.next(); + } + + @Override + public String getSyncSignature() { + return syncThreadName; + } + + @Override + public String getName() { + return String.format("convert-projected-l3-network-%s", msg.getL3NetworkUuid()); + } + }); + } + private void handle(UpdateProjectedIpRangeMsg msg) { thdf.chainSubmit(new ChainTask(msg) { @Override From 53487ce1618c258df3716062c7d011823fa27d14 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Tue, 11 Aug 2026 01:55:05 +0900 Subject: [PATCH 55/66] [network]: preserve confirmed l2 deletion Propagate confirmed provider failures and commit provider metadata with the L2 EO. Keep legacy delete extensions compatible. Resolves: ZCF-5485 Change-Id: I22fbfc1a31fe3909bcc2b8774fc68b0dc37dc128 --- conf/springConfigXml/sdnController.xml | 1 + .../l2/L2NetworkDeleteExtensionPoint.java | 11 +++ .../network/l2/L2NetworkCascadeExtension.java | 50 ++++++++--- .../zstack/network/l2/L2NoVlanNetwork.java | 27 ++++-- .../zstack/sdnController/SdnControllerL2.java | 10 +++ .../SdnControllerManagerImpl.java | 87 ++++++++++++++++--- 6 files changed, 156 insertions(+), 30 deletions(-) diff --git a/conf/springConfigXml/sdnController.xml b/conf/springConfigXml/sdnController.xml index e76be084ac6..0372fc43e06 100644 --- a/conf/springConfigXml/sdnController.xml +++ b/conf/springConfigXml/sdnController.xml @@ -26,6 +26,7 @@ + diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java index 3e46f74b1e7..70aaa7a71c7 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java @@ -10,5 +10,16 @@ public interface L2NetworkDeleteExtensionPoint { default void deleteL2Network(L2NetworkInventory inv, NoErrorCompletion completion) {completion.done();} + default boolean requiresConfirmedDelete(L2NetworkInventory inv) { return false; } + + default void deleteL2Network(L2NetworkInventory inv, String operationUuid, Completion completion) { + deleteL2Network(inv, new NoErrorCompletion(completion) { + @Override + public void done() { + completion.success(); + } + }); + } + void afterDeleteL2Network(L2NetworkInventory inventory); } diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 53e7de503be..9cf9f91d6a8 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -11,6 +11,7 @@ import org.zstack.core.db.DatabaseFacade; import org.zstack.core.db.SQL; import org.zstack.core.db.SimpleQuery; +import org.zstack.core.db.SQLBatch; import org.zstack.core.errorcode.ErrorFacade; import org.zstack.header.core.Completion; import org.zstack.header.errorcode.ErrorCode; @@ -30,8 +31,11 @@ import javax.persistence.TypedQuery; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.Callable; +import java.util.stream.Collectors; import static org.zstack.core.Platform.inerr; import static org.zstack.utils.clouderrorcode.CloudOperationsErrorCode.*; @@ -135,6 +139,15 @@ private void handleDeletion(final CascadeAction action, final Completion complet } } + Map> confirmedExtensions = new HashMap<>(); + for (L2NetworkInventory l2inv : l2invs) { + List extensions = pluginRgty + .getExtensionList(L2DeleteConfirmExtensionPoint.class).stream() + .filter(ext -> ext.supports(l2inv)) + .collect(Collectors.toList()); + confirmedExtensions.put(l2inv.getUuid(), extensions); + } + List msgs = new ArrayList(); for (L2NetworkInventory l2inv : l2invs) { L2NetworkDeletionMsg msg = new L2NetworkDeletionMsg(); @@ -162,30 +175,39 @@ public void run(List replies) { for (MessageReply r : replies) { L2NetworkInventory inv = finalL2invs.get(replies.indexOf(r)); if (!r.isSuccess()) { - boolean confirmed = false; - for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { - confirmed |= ext.supports(inv); - } - if (confirmed) { + if (!confirmedExtensions.get(inv.getUuid()).isEmpty()) { completion.fail(r.getError()); return; } } - for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { - if (ext.supports(inv)) { - ErrorCode errorCode = ext.delete(inv); - if (errorCode != null) { - logger.warn(String.format("failed to delete confirmed local metadata for l2 network[uuid:%s], continue cascade: %s", - inv.getUuid(), errorCode)); - } + for (L2DeleteConfirmExtensionPoint ext : confirmedExtensions.get(inv.getUuid())) { + ErrorCode errorCode = ext.delete(inv); + if (errorCode != null) { + completion.fail(errorCode); + return; } } uuids.add(inv.getUuid()); logger.debug(String.format("delete l2 network[uuid:%s, name:%s]", inv.getUuid(), inv.getName())); } - dbf.removeByPrimaryKeys(uuids, L2NetworkVO.class); - completion.success(); + try { + new SQLBatch() { + @Override + protected void scripts() { + for (L2NetworkInventory inv : finalL2invs) { + for (L2DeleteConfirmExtensionPoint ext : confirmedExtensions.get(inv.getUuid())) { + ext.deleteLocalMetadata(inv); + } + } + databaseFacade.removeByPrimaryKeys(uuids, L2NetworkVO.class); + } + }.execute(); + completion.success(); + } catch (RuntimeException e) { + completion.fail(inerr(ORG_ZSTACK_NETWORK_L2_10000, + "failed to commit confirmed l2 network deletion: %s", e.getMessage())); + } } }); } 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 1fcaeb975ce..2feb31cffdf 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -354,12 +354,29 @@ private void handle(L2NetworkDeletionMsg msg) { @Override public void run(FlowTrigger trigger, Map data) { new While<>(pluginRgty.getExtensionList(L2NetworkDeleteExtensionPoint.class)) - .each((exp, wcompl) -> exp.deleteL2Network(inv, new NoErrorCompletion(trigger) { - @Override - public void done() { - wcompl.done(); + .each((exp, wcompl) -> { + if (exp.requiresConfirmedDelete(inv)) { + exp.deleteL2Network(inv, msg.getOperationUuid(), new Completion(trigger) { + @Override + public void success() { + wcompl.done(); + } + + @Override + public void fail(ErrorCode errorCode) { + wcompl.addError(errorCode); + wcompl.allDone(); + } + }); + return; } - })).run(new WhileDoneCompletion(trigger) { + exp.deleteL2Network(inv, new NoErrorCompletion(trigger) { + @Override + public void done() { + wcompl.done(); + } + }); + }).run(new WhileDoneCompletion(trigger) { @Override public void done(ErrorCodeList errorCodeList) { if (errorCodeList.getCauses().isEmpty()) { 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 874585b5b2e..563188ca427 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java @@ -1,6 +1,7 @@ package org.zstack.sdnController; import org.zstack.header.core.Completion; +import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.host.HostInventory; import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.L2NetworkInventory; @@ -34,6 +35,15 @@ default void createL2Network(L2NetworkInventory inv, APICreateL2NetworkMsg msg, void deleteSdnController(SdnControllerDeletionMsg msg, SdnControllerInventory sdn, Completion completion); void detachL2NetworkFromCluster(L2VxlanNetworkInventory vxlan, List clusterUuids, Completion completion); void deleteL2Network(L2NetworkInventory inv, Completion completion); + default boolean requiresConfirmedDelete() { return false; } + default void deleteL2Network(L2NetworkInventory inv, String operationUuid, Completion completion) { + deleteL2Network(inv, completion); + } + default ErrorCode beginConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode checkConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode completeConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode cancelConfirmedDelete(L2NetworkInventory inv) { return null; } + default void deleteConfirmedLocalMetadata(L2NetworkInventory inv) { } List getVniRange(SdnControllerInventory controller); List getVlanRange(SdnControllerInventory controller); 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 fb3ab7ffb99..be8963b6dab 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java @@ -47,7 +47,7 @@ import static org.zstack.utils.clouderrorcode.CloudOperationsErrorCode.*; public class SdnControllerManagerImpl extends AbstractService implements SdnControllerManager, - L2NetworkCreateExtensionPoint, L2NetworkDeleteExtensionPoint, + L2NetworkCreateExtensionPoint, L2NetworkDeleteExtensionPoint, L2DeleteConfirmExtensionPoint, SecurityGroupGetSdnBackendExtensionPoint, AfterAddIpRangeExtensionPoint, IpRangeDeletionExtensionPoint, GetSdnControllerExtensionPoint, AfterAllocateSdnNicExtensionPoint { @@ -352,16 +352,7 @@ public void beforeDeleteL2Network(L2NetworkInventory inventory) { @Override public void deleteL2Network(L2NetworkInventory inv, NoErrorCompletion completion) { - VSwitchType vSwitchType = VSwitchType.valueOf(inv.getvSwitchType()); - if (vSwitchType.getSdnControllerType() == null) { - //hardware vxlan will go this path - completion.done(); - return; - } - - /* vswitch type: OvnDpdk will go here */ - SdnControllerFactory factory = getSdnControllerFactory(vSwitchType.getSdnControllerType()); - SdnControllerL2 controllerL2 = factory.getSdnControllerL2(inv.getUuid()); + SdnControllerL2 controllerL2 = findSdnControllerL2(inv); if (controllerL2 == null) { logger.warn(String.format("can not found sdn controller for l2 network[uuid:%s, vswitchType:%s]", inv.getUuid(), inv.getvSwitchType())); @@ -384,6 +375,80 @@ public void fail(ErrorCode errorCode) { }); } + @Override + public boolean requiresConfirmedDelete(L2NetworkInventory inv) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inv); + return controllerL2 != null && controllerL2.requiresConfirmedDelete(); + } + + @Override + public void deleteL2Network(L2NetworkInventory inv, String operationUuid, Completion completion) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inv); + if (controllerL2 == null) { + completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10002, + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s, vswitchType:%s]", + inv.getUuid(), inv.getvSwitchType())); + return; + } + controllerL2.deleteL2Network(inv, operationUuid, completion); + } + + @Override + public boolean supports(L2NetworkInventory inventory) { + return requiresConfirmedDelete(inventory); + } + + @Override + public ErrorCode begin(L2NetworkInventory inventory) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + : controllerL2.beginConfirmedDelete(inventory); + } + + @Override + public ErrorCode check(L2NetworkInventory inventory) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + : controllerL2.checkConfirmedDelete(inventory); + } + + @Override + public ErrorCode delete(L2NetworkInventory inventory) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + : controllerL2.completeConfirmedDelete(inventory); + } + + @Override + public ErrorCode cancel(L2NetworkInventory inventory) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + : controllerL2.cancelConfirmedDelete(inventory); + } + + @Override + public void deleteLocalMetadata(L2NetworkInventory inventory) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + if (controllerL2 == null) { + throw new CloudRuntimeException(String.format( + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid())); + } + controllerL2.deleteConfirmedLocalMetadata(inventory); + } + + private SdnControllerL2 findSdnControllerL2(L2NetworkInventory inv) { + VSwitchType vSwitchType = VSwitchType.valueOf(inv.getvSwitchType()); + if (vSwitchType.getSdnControllerType() == null) { + return null; + } + SdnControllerFactory factory = getSdnControllerFactory(vSwitchType.getSdnControllerType()); + return factory == null ? null : factory.getSdnControllerL2(inv.getUuid()); + } + @Override public void afterDeleteL2Network(L2NetworkInventory inventory) { From 70c76f1010a1c6acf6c65e832168298f9f320fc0 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Tue, 11 Aug 2026 11:22:10 +0900 Subject: [PATCH 56/66] [network]: restore typed l2 message routing Preserve the concrete L2 request type when CloudBus sends the internal create message to another management node. Verified: CreateL2NetworkMsgTest 8/8; premium build 143/143. Change-Id: I582a4d8586a768ad483780738b930be6cb0e14e4 --- .../header/network/l2/CreateL2NetworkMsg.java | 34 +++++++++++++++++-- .../network/l2/CreateL2NetworkMsgTest.java | 18 ++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java index 2f8b23e2a26..9ff2ecc5ef1 100644 --- a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -1,7 +1,9 @@ package org.zstack.header.network.l2; import org.zstack.header.identity.SessionInventory; +import org.zstack.header.log.NoLogging; import org.zstack.header.message.NeedReplyMessage; +import org.zstack.utils.gson.JSONObjectUtil; /** Internal, typed local L2 create request used by projection/recovery flows. */ public class CreateL2NetworkMsg extends NeedReplyMessage { @@ -18,7 +20,9 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { private String accountUuid; private NetworkCreateContext context; private SessionInventory session; - private APICreateL2NetworkMsg subtypeMessage; + @NoLogging(behavior = NoLogging.Behavior.Auto) + private Object subtypeMessage; + private String subtypeMessageClassName; public String getName() { return name; } public void setName(String value) { name = value; } @@ -46,6 +50,30 @@ public class CreateL2NetworkMsg extends NeedReplyMessage { public void setContext(NetworkCreateContext value) { context = value; } public SessionInventory getSession() { return session; } public void setSession(SessionInventory value) { session = value; } - public APICreateL2NetworkMsg getSubtypeMessage() { return subtypeMessage; } - public void setSubtypeMessage(APICreateL2NetworkMsg value) { subtypeMessage = value; } + public APICreateL2NetworkMsg getSubtypeMessage() { + if (subtypeMessage == null || subtypeMessage instanceof APICreateL2NetworkMsg) { + return (APICreateL2NetworkMsg) subtypeMessage; + } + if (subtypeMessageClassName == null) { + throw new IllegalArgumentException("missing l2 subtype message class"); + } + + try { + Class subtypeClass = Class.forName(subtypeMessageClassName); + if (!APICreateL2NetworkMsg.class.isAssignableFrom(subtypeClass)) { + throw new IllegalArgumentException(String.format( + "invalid l2 subtype message class[%s]", subtypeMessageClassName)); + } + subtypeMessage = JSONObjectUtil.rehashObject(subtypeMessage, subtypeClass); + return (APICreateL2NetworkMsg) subtypeMessage; + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException(String.format( + "cannot find l2 subtype message class[%s]", subtypeMessageClassName), e); + } + } + + public void setSubtypeMessage(APICreateL2NetworkMsg value) { + subtypeMessage = value; + subtypeMessageClassName = value == null ? null : value.getClass().getName(); + } } diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index ae4afa6fb80..10f0ea2c1f7 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -2,8 +2,10 @@ import org.junit.Assert; import org.junit.Test; +import org.zstack.core.cloudbus.CloudBusGson; import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; +import org.zstack.header.network.l2.APICreateL2VlanNetworkMsg; import org.zstack.header.network.l2.CreateL2NetworkMsg; import org.zstack.header.network.l2.ExternalNetworkRef; import org.zstack.header.network.l2.NetworkCreateContext; @@ -30,6 +32,22 @@ public void internalCreateCarriesProviderSubtypeMessage() { Assert.assertSame(subtype, msg.getSubtypeMessage()); } + @Test + public void internalCreateSubtypeSurvivesCloudBusRoundTrip() { + CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); + APICreateL2VlanNetworkMsg subtype = new APICreateL2VlanNetworkMsg(); + subtype.setVlan(101); + msg.setSubtypeMessage(subtype); + + String json = CloudBusGson.toJson(msg); + CreateL2NetworkMsg restored = (CreateL2NetworkMsg) CloudBusGson.fromJson(json); + + Assert.assertTrue(json.contains(APICreateL2VlanNetworkMsg.class.getName())); + Assert.assertTrue(restored.getSubtypeMessage() instanceof APICreateL2VlanNetworkMsg); + Assert.assertEquals(101, + ((APICreateL2VlanNetworkMsg) restored.getSubtypeMessage()).getVlan()); + } + @Test public void internalCreateUsesInheritedSystemTags() { CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); From d3f53256231a6f815329dbc536f5852ff700559f Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Tue, 11 Aug 2026 16:45:04 +0900 Subject: [PATCH 57/66] [zns]: add owner change error codes Add dedicated failures for ZNS L2 owner-change state and ownership integrity checks. Resolves: ZCF-5485 Change-Id: I1dd61ca02ff33ed34fcfae60076f10aec29508de --- .../utils/clouderrorcode/CloudOperationsErrorCode.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 52a5e8b2511..7b0c359207a 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12274,6 +12274,16 @@ public class CloudOperationsErrorCode { // 10058 targeted Tenant Router pull returned an unknown projection state public static final String ORG_ZSTACK_NETWORK_ZNS_10057 = "ORG_ZSTACK_NETWORK_ZNS_10057"; public static final String ORG_ZSTACK_NETWORK_ZNS_10058 = "ORG_ZSTACK_NETWORK_ZNS_10058"; + // 10059 ZNS L2 owner change found a non-Ready relation + // 10060 ZNS L2 owner change found an active or unknown operation step + // 10061 ZNS L2 owner change found an invalid L2 ownership reference count + // 10062 ZNS L2 owner change found an invalid relation ownership reference count + // 10063 ZNS L2 and relation ownership records are inconsistent + public static final String ORG_ZSTACK_NETWORK_ZNS_10059 = "ORG_ZSTACK_NETWORK_ZNS_10059"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10060 = "ORG_ZSTACK_NETWORK_ZNS_10060"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10061 = "ORG_ZSTACK_NETWORK_ZNS_10061"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10062 = "ORG_ZSTACK_NETWORK_ZNS_10062"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10063 = "ORG_ZSTACK_NETWORK_ZNS_10063"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 7ebd75aa25fed40b10d34e9d810cf79817ef058b Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Tue, 11 Aug 2026 17:32:23 +0900 Subject: [PATCH 58/66] [zns]: add account cascade error codes Resolves: ZCF-5485 Change-Id: Ie5ce1bf13ea87cf5816815b5750cdb01bfd72939 --- .../zstack/utils/clouderrorcode/CloudOperationsErrorCode.java | 4 ++++ 1 file changed, 4 insertions(+) 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 7b0c359207a..305c62c8a16 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12279,11 +12279,15 @@ public class CloudOperationsErrorCode { // 10061 ZNS L2 owner change found an invalid L2 ownership reference count // 10062 ZNS L2 owner change found an invalid relation ownership reference count // 10063 ZNS L2 and relation ownership records are inconsistent + // 10064 account cascade cannot prove the outcome of a ZNS reservation + // 10065 account cascade failed to compensate an exact ZNS binding public static final String ORG_ZSTACK_NETWORK_ZNS_10059 = "ORG_ZSTACK_NETWORK_ZNS_10059"; public static final String ORG_ZSTACK_NETWORK_ZNS_10060 = "ORG_ZSTACK_NETWORK_ZNS_10060"; public static final String ORG_ZSTACK_NETWORK_ZNS_10061 = "ORG_ZSTACK_NETWORK_ZNS_10061"; public static final String ORG_ZSTACK_NETWORK_ZNS_10062 = "ORG_ZSTACK_NETWORK_ZNS_10062"; public static final String ORG_ZSTACK_NETWORK_ZNS_10063 = "ORG_ZSTACK_NETWORK_ZNS_10063"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10064 = "ORG_ZSTACK_NETWORK_ZNS_10064"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10065 = "ORG_ZSTACK_NETWORK_ZNS_10065"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 3b958d77dc762801079ef5e8573e02b5d2c020b8 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Thu, 13 Aug 2026 16:51:58 +0900 Subject: [PATCH 59/66] [zns]: sync generated ZNS SDK Regenerate Java SDK for ZNS APIs. Resolves: ZCF-5485 Change-Id: Id633d5498e16a171c7f6c4d38a2703ab2c061090 --- sdk/src/main/java/SourceClassMap.java | 6 + .../zns/GetCandidateZnsSegmentsAction.java | 24 ++-- .../zns/GetCandidateZnsSegmentsResult.java | 8 ++ .../zns/GetZnsSegmentSyncStatusAction.java | 95 +++++++++++++ .../zns/GetZnsSegmentSyncStatusResult.java | 47 +++++++ .../network/zns/QueryZnsSegmentRefAction.java | 75 +++++++++++ .../network/zns/QueryZnsSegmentRefResult.java | 22 +++ .../sdk/network/zns/UseZnsSegmentAction.java | 125 +++++++++++++++++ .../sdk/network/zns/UseZnsSegmentResult.java | 49 +++++++ .../zns/ZnsSegmentCandidateInventory.java | 34 ++++- .../network/zns/ZnsSegmentProjectionPlan.java | 87 ++++++++++++ .../network/zns/ZnsSegmentRefInventory.java | 127 ++++++++++++++++++ .../zns/ZnsSegmentSyncOperationInventory.java | 23 ++++ 13 files changed, 705 insertions(+), 17 deletions(-) create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java create mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentSyncOperationInventory.java diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 118aa75ef73..31718bb8205 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -637,6 +637,9 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory"); + put("org.zstack.network.zns.ZnsSegmentProjectionPlan", "org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan"); + put("org.zstack.network.zns.ZnsSegmentRefInventory", "org.zstack.sdk.network.zns.ZnsSegmentRefInventory"); + put("org.zstack.network.zns.ZnsSegmentSyncOperationInventory", "org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory"); 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"); @@ -1748,6 +1751,9 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.network.zns.ZnsSegmentCandidateInventory"); + put("org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan", "org.zstack.network.zns.ZnsSegmentProjectionPlan"); + put("org.zstack.sdk.network.zns.ZnsSegmentRefInventory", "org.zstack.network.zns.ZnsSegmentRefInventory"); + put("org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory", "org.zstack.network.zns.ZnsSegmentSyncOperationInventory"); 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"); diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java index 8b447b85f2b..8a755e3275b 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java @@ -28,11 +28,17 @@ public Result throwExceptionIfError() { @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) public java.lang.String sdnControllerUuid; - @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.String transportZoneUuid; + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String zoneUuid; + + @Param(required = false, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String keyword; - @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.Integer limit; + @Param(required = false) + public java.lang.Integer limit = 20; + + @Param(required = false) + public java.lang.Integer start = 0; @Param(required = false) public java.util.List systemTags; @@ -52,12 +58,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(); @@ -97,9 +97,9 @@ protected Map getNonAPIParameterMap() { protected RestInfo getRestInfo() { RestInfo info = new RestInfo(); info.httpMethod = "GET"; - info.path = "/sdn-controller/zns/segments/candidates"; + info.path = "/sdn-controllers/{sdnControllerUuid}/zns-segment-candidates"; info.needSession = true; - info.needPoll = true; + info.needPoll = false; info.parameterName = ""; return info; } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java index f42863e69e1..f7902ba069c 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java @@ -11,4 +11,12 @@ public java.util.List getCandidates() { return this.candidates; } + public long total; + public void setTotal(long total) { + this.total = total; + } + public long getTotal() { + return this.total; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java new file mode 100644 index 00000000000..18825af5908 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java @@ -0,0 +1,95 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class GetZnsSegmentSyncStatusAction 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.network.zns.GetZnsSegmentSyncStatusResult 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; + + + private Result makeResult(ApiResult res) { + Result ret = new Result(); + if (res.error != null) { + ret.error = res.error; + return ret; + } + + org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult value = res.getResult(org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult() : 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 = "/zns-segment-refs/{uuid}/sync-status"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java new file mode 100644 index 00000000000..38bab211aa8 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java @@ -0,0 +1,47 @@ +package org.zstack.sdk.network.zns; + +import org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory; +import org.zstack.sdk.ErrorCode; + +public class GetZnsSegmentSyncStatusResult { + 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.lang.Long currentConfigVersion; + public void setCurrentConfigVersion(java.lang.Long currentConfigVersion) { + this.currentConfigVersion = currentConfigVersion; + } + public java.lang.Long getCurrentConfigVersion() { + return this.currentConfigVersion; + } + + public java.lang.Long appliedConfigVersion; + public void setAppliedConfigVersion(java.lang.Long appliedConfigVersion) { + this.appliedConfigVersion = appliedConfigVersion; + } + public java.lang.Long getAppliedConfigVersion() { + return this.appliedConfigVersion; + } + + public ZnsSegmentSyncOperationInventory operation; + public void setOperation(ZnsSegmentSyncOperationInventory operation) { + this.operation = operation; + } + public ZnsSegmentSyncOperationInventory getOperation() { + return this.operation; + } + + public ErrorCode error; + public void setError(ErrorCode error) { + this.error = error; + } + public ErrorCode getError() { + return this.error; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java new file mode 100644 index 00000000000..9fa9de465f3 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.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 QueryZnsSegmentRefAction 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.QueryZnsSegmentRefResult 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.QueryZnsSegmentRefResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsSegmentRefResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsSegmentRefResult() : 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 = "/zns-segment-refs"; + info.needSession = true; + info.needPoll = false; + info.parameterName = ""; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java new file mode 100644 index 00000000000..49b5ebc7eea --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java @@ -0,0 +1,22 @@ +package org.zstack.sdk.network.zns; + + + +public class QueryZnsSegmentRefResult { + 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/UseZnsSegmentAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java new file mode 100644 index 00000000000..d11f9131921 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java @@ -0,0 +1,125 @@ +package org.zstack.sdk.network.zns; + +import java.util.HashMap; +import java.util.Map; +import org.zstack.sdk.*; + +public class UseZnsSegmentAction 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.network.zns.UseZnsSegmentResult 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 sdnControllerUuid; + + @Param(required = true, maxLength = 36, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String znsSegmentUuid; + + @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public java.lang.String zoneUuid; + + @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 = false, nonempty = false, nullElements = false, emptyString = true, numberRange = {0L,9223372036854775807L}, noTrim = false) + public java.lang.Long expectedConfigVersion; + + @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) + public boolean dryRun = false; + + @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.network.zns.UseZnsSegmentResult value = res.getResult(org.zstack.sdk.network.zns.UseZnsSegmentResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.UseZnsSegmentResult() : 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 = "/sdn-controllers/{sdnControllerUuid}/zns-segments/{znsSegmentUuid}/l2-networks"; + info.needSession = true; + info.needPoll = true; + info.parameterName = "params"; + return info; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java new file mode 100644 index 00000000000..26602c7ebf7 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java @@ -0,0 +1,49 @@ +package org.zstack.sdk.network.zns; + +import org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan; +import org.zstack.sdk.network.zns.ZnsSegmentRefInventory; +import org.zstack.sdk.L2NetworkInventory; +import org.zstack.sdk.L3NetworkInventory; + +public class UseZnsSegmentResult { + public ZnsSegmentProjectionPlan plan; + public void setPlan(ZnsSegmentProjectionPlan plan) { + this.plan = plan; + } + public ZnsSegmentProjectionPlan getPlan() { + return this.plan; + } + + public ZnsSegmentRefInventory relation; + public void setRelation(ZnsSegmentRefInventory relation) { + this.relation = relation; + } + public ZnsSegmentRefInventory getRelation() { + return this.relation; + } + + public L2NetworkInventory l2Network; + public void setL2Network(L2NetworkInventory l2Network) { + this.l2Network = l2Network; + } + public L2NetworkInventory getL2Network() { + return this.l2Network; + } + + public L3NetworkInventory l3Network; + public void setL3Network(L3NetworkInventory l3Network) { + this.l3Network = l3Network; + } + public L3NetworkInventory getL3Network() { + return this.l3Network; + } + + public java.util.List ipRanges; + public void setIpRanges(java.util.List ipRanges) { + this.ipRanges = ipRanges; + } + public java.util.List getIpRanges() { + return this.ipRanges; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java index 7a370476e2f..048bfba3679 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java @@ -4,12 +4,28 @@ public class ZnsSegmentCandidateInventory { - public java.lang.String uuid; - public void setUuid(java.lang.String uuid) { - this.uuid = uuid; + public java.lang.String znsSegmentUuid; + public void setZnsSegmentUuid(java.lang.String znsSegmentUuid) { + this.znsSegmentUuid = znsSegmentUuid; } - public java.lang.String getUuid() { - return this.uuid; + public java.lang.String getZnsSegmentUuid() { + return this.znsSegmentUuid; + } + + 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 zoneUuid; + public void setZoneUuid(java.lang.String zoneUuid) { + this.zoneUuid = zoneUuid; + } + public java.lang.String getZoneUuid() { + return this.zoneUuid; } public java.lang.String name; @@ -44,4 +60,12 @@ public java.lang.String getReasonCode() { return this.reasonCode; } + public java.sql.Timestamp lastSeenDate; + public void setLastSeenDate(java.sql.Timestamp lastSeenDate) { + this.lastSeenDate = lastSeenDate; + } + public java.sql.Timestamp getLastSeenDate() { + return this.lastSeenDate; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java new file mode 100644 index 00000000000..e956f858eec --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java @@ -0,0 +1,87 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsSegmentProjectionPlan { + + public java.lang.String znsSegmentUuid; + public void setZnsSegmentUuid(java.lang.String znsSegmentUuid) { + this.znsSegmentUuid = znsSegmentUuid; + } + public java.lang.String getZnsSegmentUuid() { + return this.znsSegmentUuid; + } + + public java.lang.String zoneUuid; + public void setZoneUuid(java.lang.String zoneUuid) { + this.zoneUuid = zoneUuid; + } + public java.lang.String getZoneUuid() { + return this.zoneUuid; + } + + public java.lang.String l2NetworkType; + public void setL2NetworkType(java.lang.String l2NetworkType) { + this.l2NetworkType = l2NetworkType; + } + public java.lang.String getL2NetworkType() { + return this.l2NetworkType; + } + + public java.lang.String l3NetworkType; + public void setL3NetworkType(java.lang.String l3NetworkType) { + this.l3NetworkType = l3NetworkType; + } + public java.lang.String getL3NetworkType() { + return this.l3NetworkType; + } + + public java.lang.String l3Category; + public void setL3Category(java.lang.String l3Category) { + this.l3Category = l3Category; + } + public java.lang.String getL3Category() { + return this.l3Category; + } + + public java.lang.String znsTenantRouterUuid; + public void setZnsTenantRouterUuid(java.lang.String znsTenantRouterUuid) { + this.znsTenantRouterUuid = znsTenantRouterUuid; + } + public java.lang.String getZnsTenantRouterUuid() { + return this.znsTenantRouterUuid; + } + + public java.util.List warnings; + public void setWarnings(java.util.List warnings) { + this.warnings = warnings; + } + public java.util.List getWarnings() { + return this.warnings; + } + + public java.lang.Integer virtualNetworkId; + public void setVirtualNetworkId(java.lang.Integer virtualNetworkId) { + this.virtualNetworkId = virtualNetworkId; + } + public java.lang.Integer getVirtualNetworkId() { + return this.virtualNetworkId; + } + + public java.lang.Long configVersion; + public void setConfigVersion(java.lang.Long configVersion) { + this.configVersion = configVersion; + } + public java.lang.Long getConfigVersion() { + return this.configVersion; + } + + public java.util.List clusterUuids; + public void setClusterUuids(java.util.List clusterUuids) { + this.clusterUuids = clusterUuids; + } + public java.util.List getClusterUuids() { + return this.clusterUuids; + } + +} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java new file mode 100644 index 00000000000..f24489626c9 --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java @@ -0,0 +1,127 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsSegmentRefInventory { + + 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 znsSegmentUuid; + public void setZnsSegmentUuid(java.lang.String znsSegmentUuid) { + this.znsSegmentUuid = znsSegmentUuid; + } + public java.lang.String getZnsSegmentUuid() { + return this.znsSegmentUuid; + } + + public java.lang.String zoneUuid; + public void setZoneUuid(java.lang.String zoneUuid) { + this.zoneUuid = zoneUuid; + } + public java.lang.String getZoneUuid() { + return this.zoneUuid; + } + + public java.lang.String l2NetworkUuid; + public void setL2NetworkUuid(java.lang.String l2NetworkUuid) { + this.l2NetworkUuid = l2NetworkUuid; + } + public java.lang.String getL2NetworkUuid() { + return this.l2NetworkUuid; + } + + public java.lang.String l3NetworkUuid; + public void setL3NetworkUuid(java.lang.String l3NetworkUuid) { + this.l3NetworkUuid = l3NetworkUuid; + } + public java.lang.String getL3NetworkUuid() { + return this.l3NetworkUuid; + } + + public java.lang.String znsTenantRouterUuid; + public void setZnsTenantRouterUuid(java.lang.String znsTenantRouterUuid) { + this.znsTenantRouterUuid = znsTenantRouterUuid; + } + public java.lang.String getZnsTenantRouterUuid() { + return this.znsTenantRouterUuid; + } + + 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.lang.String operationUuid; + public void setOperationUuid(java.lang.String operationUuid) { + this.operationUuid = operationUuid; + } + public java.lang.String getOperationUuid() { + return this.operationUuid; + } + + public java.lang.String operationStep; + public void setOperationStep(java.lang.String operationStep) { + this.operationStep = operationStep; + } + public java.lang.String getOperationStep() { + return this.operationStep; + } + + public java.lang.Long appliedConfigVersion; + public void setAppliedConfigVersion(java.lang.Long appliedConfigVersion) { + this.appliedConfigVersion = appliedConfigVersion; + } + public java.lang.Long getAppliedConfigVersion() { + return this.appliedConfigVersion; + } + + public java.lang.String lastErrorCode; + public void setLastErrorCode(java.lang.String lastErrorCode) { + this.lastErrorCode = lastErrorCode; + } + public java.lang.String getLastErrorCode() { + return this.lastErrorCode; + } + + public java.lang.String lastErrorDetails; + public void setLastErrorDetails(java.lang.String lastErrorDetails) { + this.lastErrorDetails = lastErrorDetails; + } + public java.lang.String getLastErrorDetails() { + return this.lastErrorDetails; + } + + 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/ZnsSegmentSyncOperationInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentSyncOperationInventory.java new file mode 100644 index 00000000000..fa8f8027c9a --- /dev/null +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentSyncOperationInventory.java @@ -0,0 +1,23 @@ +package org.zstack.sdk.network.zns; + + + +public class ZnsSegmentSyncOperationInventory { + + 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 step; + public void setStep(java.lang.String step) { + this.step = step; + } + public java.lang.String getStep() { + return this.step; + } + +} From bfa612ae6130ae844d04d67d71dc45ed8ecc74cc Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Thu, 13 Aug 2026 20:15:31 +0900 Subject: [PATCH 60/66] [zns]: sync segment API helpers Regenerate ZNS API helpers and L2 inventory documentation. Resolves: ZCF-5485 Change-Id: I739f13fbcf5c8472c89dfc7ea2fea6fa12eb84c9 --- .../l2/L2NetworkInventoryDoc_zh_cn.groovy | 26 ++++++ .../java/org/zstack/testlib/ApiHelper.groovy | 81 +++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkInventoryDoc_zh_cn.groovy b/header/src/main/java/org/zstack/header/network/l2/L2NetworkInventoryDoc_zh_cn.groovy index 5ee174aa8e8..1987bdf0174 100644 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkInventoryDoc_zh_cn.groovy +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkInventoryDoc_zh_cn.groovy @@ -1,5 +1,7 @@ package org.zstack.header.network.l2 +import java.lang.Boolean +import java.lang.Integer import java.sql.Timestamp import java.sql.Timestamp @@ -43,6 +45,30 @@ doc { type "String" since "0.6" } + field { + name "vSwitchType" + desc "二层网络虚拟交换机类型" + type "String" + since "5.3.0" + } + field { + name "virtualNetworkId" + desc "VLAN/VNI 的虚拟网络 ID" + type "Integer" + since "5.3.0" + } + field { + name "isolated" + desc "二层网络是否开启隔离" + type "Boolean" + since "5.3.0" + } + field { + name "pvlan" + desc "二层网络私有 VLAN ID" + type "String" + since "5.3.0" + } field { name "createDate" desc "创建时间" diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index 79f526ec1ec..a3e56a52492 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -53322,6 +53322,32 @@ abstract class ApiHelper { a.apiId = Platform.uuid } + def tracker = new ApiPathTracker(a.apiId) + def out = errorOut(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 getZnsSegmentSyncStatus(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusAction() + 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()) @@ -53330,6 +53356,34 @@ abstract class ApiHelper { Test.apiPaths[a.class.name] = path.join(" --->\n") } + return out + } else { + return errorOut(a.call()) + } + } + + + def queryZnsSegmentRef(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.QueryZnsSegmentRefAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.QueryZnsSegmentRefAction() + 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 { @@ -53396,6 +53450,33 @@ abstract class ApiHelper { } + def useZnsSegment(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.UseZnsSegmentAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.UseZnsSegmentAction() + 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 addSNSSmsReceiver(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.sns.AddSNSSmsReceiverAction.class) Closure c) { def a = new org.zstack.sdk.sns.AddSNSSmsReceiverAction() a.sessionId = Test.currentEnvSpec?.session?.uuid From f3b5d04eadf71d3573403f48a0d30a78a3321da4 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 07:32:52 +0900 Subject: [PATCH 61/66] [zns]: support automatic segment projection Add typed projection mutation context and generated query SDK. Remove obsolete manual mapping APIs. Resolves: ZCF-5485 Change-Id: I190973bbb1f537b7f440fe8f339d53bfbfac5cfc --- .../zstack/compute/vm/VmAllocateNicFlow.java | 67 ++- conf/db/upgrade/V5.5.38__schema.sql | 8 +- .../CompleteZnsSegmentMutationMsg.java | 69 ++- .../NetworkConfigLocalContinuation.java | 2 +- .../header/network/NetworkConfigMutation.java | 297 +++++++++- .../NetworkConfigMutationExtensionPoint.java | 6 +- ...workDependencyAdmissionExtensionPoint.java | 4 + .../network/PrepareZnsSegmentMutationMsg.java | 46 +- .../PrepareZnsSegmentMutationReply.java | 15 + .../network/ProjectedMutationPolicy.java | 36 -- .../l2/AttachL2NetworkToClusterMsg.java | 18 + .../network/l2/ConvertL2VlanModeMsg.java | 15 - .../network/l2/ConvertL2VlanModeReply.java | 6 - .../l2/L2NetworkUpdateExtensionPoint.java | 7 + .../network/l2/NetworkCreateContext.java | 27 +- .../network/l2/NetworkOperationOrigin.java | 1 + .../header/network/l3/AllocateIpMsg.java | 20 + .../network/l3/ConvertL3NetworkTypeReply.java | 6 - .../l3/DeleteProjectedIpRangeReply.java | 6 - .../header/network/l3/IpAllocateMessage.java | 8 + .../header/network/l3/SdnControllerL3.java | 18 + .../l3/UpdateProjectedIpRangeReply.java | 6 - .../l2/L2NetworkExtensionPointEmitter.java | 23 + .../zstack/network/l2/L2NoVlanNetwork.java | 88 ++- .../l3/AbstractIpAllocatorStrategy.java | 6 +- .../AscDelayRecycleIpAllocatorStrategy.java | 3 +- .../l3/FirstAvailableIpAllocatorStrategy.java | 3 +- .../FirstAvailableIpv6AllocatorStrategy.java | 3 +- .../org/zstack/network/l3/L3BasicNetwork.java | 534 +++++++++++++++--- .../zstack/network/l3/L3NetworkManager.java | 2 + .../network/l3/L3NetworkManagerImpl.java | 104 +++- .../network/l3/NormalIpRangeFactory.java | 4 +- .../network/l3/RandomIpAllocatorStrategy.java | 3 +- .../l3/RandomIpv6AllocatorStrategy.java | 3 +- sdk/src/main/java/SourceClassMap.java | 8 +- .../zns/GetCandidateZnsSegmentsAction.java | 107 ---- .../zns/GetCandidateZnsSegmentsResult.java | 22 - .../zns/GetZnsSegmentSyncStatusAction.java | 95 ---- .../zns/GetZnsSegmentSyncStatusResult.java | 47 -- ...QueryZnsSegmentCloudProjectionAction.java} | 10 +- ...QueryZnsSegmentCloudProjectionResult.java} | 2 +- .../sdk/network/zns/UseZnsSegmentAction.java | 125 ---- .../sdk/network/zns/UseZnsSegmentResult.java | 49 -- .../zns/ZnsSegmentCandidateInventory.java | 71 --- ...> ZnsSegmentCloudProjectionInventory.java} | 62 +- .../network/zns/ZnsSegmentProjectionPlan.java | 87 --- .../zns/NetworkConfigMutationTest.java | 68 ++- .../zns/ProjectedMutationPolicyTest.java | 24 - .../java/org/zstack/testlib/ApiHelper.groovy | 91 +-- .../CloudOperationsErrorCode.java | 17 + 50 files changed, 1355 insertions(+), 994 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationReply.java delete mode 100644 header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java delete mode 100644 header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java delete mode 100644 header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java delete mode 100644 header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java delete mode 100644 header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java delete mode 100644 header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java rename sdk/src/main/java/org/zstack/sdk/network/zns/{QueryZnsSegmentRefAction.java => QueryZnsSegmentCloudProjectionAction.java} (81%) rename sdk/src/main/java/org/zstack/sdk/network/zns/{QueryZnsSegmentRefResult.java => QueryZnsSegmentCloudProjectionResult.java} (89%) delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java rename sdk/src/main/java/org/zstack/sdk/network/zns/{ZnsSegmentRefInventory.java => ZnsSegmentCloudProjectionInventory.java} (74%) delete mode 100644 sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java delete mode 100644 test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java 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 3cf080d6942..de9bbe68380 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -10,6 +10,7 @@ import org.zstack.core.componentloader.PluginRegistry; import org.zstack.core.db.DatabaseFacade; import org.zstack.core.db.SQLBatch; +import org.zstack.core.db.SQLBatchWithReturn; import org.zstack.core.errorcode.ErrorFacade; import org.zstack.header.core.Completion; import org.zstack.header.core.WhileDoneCompletion; @@ -18,6 +19,7 @@ import org.zstack.header.core.workflow.FlowTrigger; import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.errorcode.ErrorCodeList; +import org.zstack.header.errorcode.OperationFailureException; import org.zstack.header.image.ImagePlatform; import org.zstack.header.message.APIMessage; import org.zstack.header.network.l3.*; @@ -123,31 +125,53 @@ public void run(final FlowTrigger trigger, final Map data) { return; } - ErrorCode admissionError = admitDependency(nw.getUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, null, - NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); - if (admissionError != null) { - errs.add(admissionError); + // Persist VmNicVO first so that ResourceVO entry exists before extensions + // (e.g. SDN controllers) attempt to create SystemTags referencing the NIC UUID. + VmNicVO nicVO; + try { + nicVO = new SQLBatchWithReturn() { + @Override + protected VmNicVO scripts() { + ErrorCode admissionError = admitDependency(nw.getUuid(), + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, null, + NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); + if (admissionError != null) { + throw new OperationFailureException(admissionError); + } + return vnicFactory.createVmNic(nic, spec); + } + }.execute(); + } catch (OperationFailureException e) { + errs.add(e.getErrorCode()); wcomp.allDone(); return; } - // 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); - callBeforeAllocateVmNicExtensions(nic, spec, new Completion(wcomp) { @Override 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); - } - }.execute(); + try { + new SQLBatch() { + @Override + protected void scripts() { + ErrorCode admissionError = admitDependency(nw.getUuid(), + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, + null, NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); + if (admissionError != null) { + throw new OperationFailureException(admissionError); + } + persistStaticIpIfNeeded(nic, nicVO, nw, nicNetworkInfoMap, spec); + VmNicVO updated = dbf.updateAndRefresh(nicVO); + addVmNicConfig(updated, spec, nicSpec); + } + }.execute(); + } catch (OperationFailureException e) { + dbf.removeByPrimaryKey(nicVO.getUuid(), VmNicVO.class); + errs.add(e.getErrorCode()); + wcomp.allDone(); + return; + } + nics.add(nic); if (customMac != null) { mo.deleteCustomMacSystemTag(spec.getVmInventory().getUuid(), nw.getUuid(), customMac); } @@ -279,7 +303,7 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC_QOS, null, NetworkDependencyAdmissionRequest.OPERATION_ADD_VM_NIC_QOS); if (admissionError != null) { - throw new org.zstack.header.exception.CloudRuntimeException(admissionError.getDetails()); + throw new OperationFailureException(admissionError); } } @@ -297,12 +321,13 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni } } - private ErrorCode admitDependency(String resourceUuid, String dependencyType, String operationUuid, String operationStep) { + private ErrorCode admitDependency(String resourceUuid, String dependencyType, String operationUuid, + String operationStep) { NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( resourceUuid, dependencyType, operationUuid, operationStep); for (NetworkDependencyAdmissionExtensionPoint extension : pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admit(request); + ErrorCode errorCode = extension.admitWithLock(request); if (errorCode != null) { return errorCode; } diff --git a/conf/db/upgrade/V5.5.38__schema.sql b/conf/db/upgrade/V5.5.38__schema.sql index 190737991c3..8d2dd987fbb 100644 --- a/conf/db/upgrade/V5.5.38__schema.sql +++ b/conf/db/upgrade/V5.5.38__schema.sql @@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS `zstack`.`SnmpEngineVO` ( `lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + -- ZNS segment binding state and controller inventory CREATE TABLE IF NOT EXISTS `zstack`.`ZnsControllerStateVO` ( @@ -75,14 +76,15 @@ CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( `operationUuid` varchar(36) DEFAULT NULL, `operationStep` varchar(32) DEFAULT NULL, `operationDigest` varchar(64) DEFAULT NULL, + `currentConfigVersion` bigint DEFAULT NULL, `appliedConfigVersion` bigint DEFAULT NULL, `lastErrorCode` varchar(128) DEFAULT NULL, `lastErrorDetails` text DEFAULT NULL, `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_seg_ref_controller_segment_zone` - (`sdnControllerUuid`, `znsSegmentUuid`, `zoneUuid`), + UNIQUE KEY `uk_zns_seg_ref_controller_segment` + (`sdnControllerUuid`, `znsSegmentUuid`), UNIQUE KEY `uk_zns_seg_ref_l2` (`l2NetworkUuid`), KEY `idx_zns_seg_ref_account` (`accountUuid`), KEY `idx_zns_seg_ref_state` (`sdnControllerUuid`, `state`), @@ -91,3 +93,5 @@ CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( CONSTRAINT `chk_zns_seg_ref_segment_state` CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CALL ADD_COLUMN('ZnsSegmentRefVO', 'currentConfigVersion', 'BIGINT', 1, NULL); diff --git a/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java b/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java index ff113456f9d..0c160f481aa 100644 --- a/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java +++ b/header/src/main/java/org/zstack/header/network/CompleteZnsSegmentMutationMsg.java @@ -3,20 +3,67 @@ import org.zstack.header.message.NeedReplyMessage; public class CompleteZnsSegmentMutationMsg extends NeedReplyMessage { - private String resourceUuid; + private String controllerUuid; + private String relationUuid; private String operationUuid; + private long acceptedConfigVersion; private boolean success; private String errorCode; private String errorDetails; - public String getResourceUuid() { return resourceUuid; } - public void setResourceUuid(String value) { resourceUuid = value; } - public String getOperationUuid() { return operationUuid; } - public void setOperationUuid(String value) { operationUuid = value; } - public boolean isSuccess() { return success; } - public void setSuccess(boolean value) { success = value; } - public String getErrorCode() { return errorCode; } - public void setErrorCode(String value) { errorCode = value; } - public String getErrorDetails() { return errorDetails; } - public void setErrorDetails(String value) { errorDetails = value; } + public String getControllerUuid() { + return controllerUuid; + } + + public void setControllerUuid(String controllerUuid) { + this.controllerUuid = controllerUuid; + } + + public String getRelationUuid() { + return relationUuid; + } + + public void setRelationUuid(String relationUuid) { + this.relationUuid = relationUuid; + } + + public String getOperationUuid() { + return operationUuid; + } + + public void setOperationUuid(String operationUuid) { + this.operationUuid = operationUuid; + } + + public long getAcceptedConfigVersion() { + return acceptedConfigVersion; + } + + public void setAcceptedConfigVersion(long acceptedConfigVersion) { + this.acceptedConfigVersion = acceptedConfigVersion; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorDetails() { + return errorDetails; + } + + public void setErrorDetails(String errorDetails) { + this.errorDetails = errorDetails; + } } diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java b/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java index e432d4627df..26b00a0ac58 100644 --- a/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigLocalContinuation.java @@ -3,5 +3,5 @@ import org.zstack.header.core.Completion; public interface NetworkConfigLocalContinuation { - void run(NetworkConfigMutation mutation, Completion completion); + void run(Completion completion); } diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java b/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java index 6bb1dbfda95..64b3e2e6a49 100644 --- a/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigMutation.java @@ -1,28 +1,291 @@ package org.zstack.header.network; +import org.zstack.header.network.l2.NetworkOperationOrigin; + +import java.util.ArrayList; import java.util.Collections; -import java.util.Map; +import java.util.List; -/** Immutable description of a versioned network mutation shared by owner and controller MNs. */ public final class NetworkConfigMutation { - private final String resourceUuid; + public enum Kind { + ENCAP, + L3_CREATE, + IPAM, + DHCP_DNS + } + + public static final class EncapsulationTarget { + private final String l2Type; + private final int virtualNetworkId; + + private EncapsulationTarget(String l2Type, int virtualNetworkId) { + this.l2Type = l2Type; + this.virtualNetworkId = virtualNetworkId; + } + + public String getL2Type() { + return l2Type; + } + + public int getVirtualNetworkId() { + return virtualNetworkId; + } + } + + public static final class L3CreateTarget { + private final String l3Uuid; + private final String l3Type; + private final List systemTags; + + private L3CreateTarget(String l3Uuid, String l3Type, List systemTags) { + this.l3Uuid = l3Uuid; + this.l3Type = l3Type; + this.systemTags = Collections.unmodifiableList(new ArrayList<>( + systemTags == null ? Collections.emptyList() : systemTags)); + } + + public String getL3Uuid() { + return l3Uuid; + } + + public String getL3Type() { + return l3Type; + } + + public List getSystemTags() { + return systemTags; + } + } + + public static final class IpRangeTarget { + private final String rangeUuid; + private final String startIp; + private final String endIp; + + public IpRangeTarget(String rangeUuid, String startIp, String endIp) { + this.rangeUuid = rangeUuid; + this.startIp = startIp; + this.endIp = endIp; + } + + public String getRangeUuid() { + return rangeUuid; + } + + public String getStartIp() { + return startIp; + } + + public String getEndIp() { + return endIp; + } + } + + public static final class IpamTarget { + private final String l3Uuid; + private final int ipVersion; + private final String gatewayAddress; + private final List ranges; + private final boolean delete; + + private IpamTarget(String l3Uuid, int ipVersion, String gatewayAddress, + List ranges, boolean delete) { + this.l3Uuid = l3Uuid; + this.ipVersion = ipVersion; + this.gatewayAddress = gatewayAddress; + this.ranges = Collections.unmodifiableList(new ArrayList<>(ranges)); + this.delete = delete; + } + + public String getL3Uuid() { + return l3Uuid; + } + + public int getIpVersion() { + return ipVersion; + } + + public String getGatewayAddress() { + return gatewayAddress; + } + + public List getRanges() { + return ranges; + } + + public boolean isDelete() { + return delete; + } + } + + public static final class DhcpTarget { + private final String l3Uuid; + private final boolean enabled; + private final List systemTags; + private final Integer ipVersion; + private final List dnsServers; + + private DhcpTarget(String l3Uuid, boolean enabled, List systemTags, + Integer ipVersion, List dnsServers) { + this.l3Uuid = l3Uuid; + this.enabled = enabled; + this.systemTags = Collections.unmodifiableList(new ArrayList<>( + systemTags == null ? Collections.emptyList() : systemTags)); + this.ipVersion = ipVersion; + this.dnsServers = dnsServers == null ? null + : Collections.unmodifiableList(new ArrayList<>(dnsServers)); + } + + public String getL3Uuid() { + return l3Uuid; + } + + public boolean isEnabled() { + return enabled; + } + + public List getSystemTags() { + return systemTags; + } + + public Integer getIpVersion() { + return ipVersion; + } + + public List getDnsServers() { + return dnsServers; + } + } + + private final Kind kind; + private final String l2Uuid; + private final NetworkOperationOrigin origin; private final String operationUuid; - private final long expectedConfigVersion; - private final String operationStep; - private final Map fields; + private final String accountUuid; + private final EncapsulationTarget encapsulation; + private final L3CreateTarget l3Create; + private final IpamTarget ipam; + private final DhcpTarget dhcp; - public NetworkConfigMutation(String resourceUuid, String operationUuid, long expectedConfigVersion, - String operationStep, Map fields) { - this.resourceUuid = resourceUuid; + private NetworkConfigMutation(Kind kind, String l2Uuid, NetworkOperationOrigin origin, + String operationUuid, String accountUuid, + EncapsulationTarget encapsulation, + L3CreateTarget l3Create, + IpamTarget ipam, + DhcpTarget dhcp) { + this.kind = kind; + this.l2Uuid = l2Uuid; + this.origin = origin; this.operationUuid = operationUuid; - this.expectedConfigVersion = expectedConfigVersion; - this.operationStep = operationStep; - this.fields = fields == null ? Collections.emptyMap() : Collections.unmodifiableMap(new java.util.HashMap<>(fields)); + this.accountUuid = accountUuid; + this.encapsulation = encapsulation; + this.l3Create = l3Create; + this.ipam = ipam; + this.dhcp = dhcp; + } + + public static NetworkConfigMutation encapsulation(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l2Type, + int virtualNetworkId) { + return new NetworkConfigMutation(Kind.ENCAP, l2Uuid, origin, operationUuid, + accountUuid, new EncapsulationTarget(l2Type, virtualNetworkId), null, null, null); + } + + public static NetworkConfigMutation l3Create(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l3Uuid, + String l3Type, + List systemTags) { + return new NetworkConfigMutation(Kind.L3_CREATE, l2Uuid, origin, operationUuid, + accountUuid, null, new L3CreateTarget(l3Uuid, l3Type, systemTags), null, null); + } + + public static NetworkConfigMutation ipam(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l3Uuid, + int ipVersion, + String gatewayAddress, + List ranges) { + return new NetworkConfigMutation(Kind.IPAM, l2Uuid, origin, operationUuid, + accountUuid, null, null, + new IpamTarget(l3Uuid, ipVersion, gatewayAddress, ranges, false), null); + } + + public static NetworkConfigMutation deleteIpam(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l3Uuid, + int ipVersion) { + return new NetworkConfigMutation(Kind.IPAM, l2Uuid, origin, operationUuid, + accountUuid, null, null, + new IpamTarget(l3Uuid, ipVersion, null, Collections.emptyList(), true), null); + } + + public static NetworkConfigMutation dhcp(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l3Uuid, + boolean enabled, + List systemTags) { + return new NetworkConfigMutation(Kind.DHCP_DNS, l2Uuid, origin, operationUuid, + accountUuid, null, null, null, + new DhcpTarget(l3Uuid, enabled, systemTags, null, null)); + } + + public static NetworkConfigMutation dhcpDns(String l2Uuid, + NetworkOperationOrigin origin, + String operationUuid, + String accountUuid, + String l3Uuid, + int ipVersion, + List dnsServers) { + return new NetworkConfigMutation(Kind.DHCP_DNS, l2Uuid, origin, operationUuid, + accountUuid, null, null, null, + new DhcpTarget(l3Uuid, true, Collections.emptyList(), ipVersion, dnsServers)); + } + + public Kind getKind() { + return kind; + } + + public String getL2Uuid() { + return l2Uuid; + } + + public NetworkOperationOrigin getOrigin() { + return origin; + } + + public String getOperationUuid() { + return operationUuid; + } + + public String getAccountUuid() { + return accountUuid; + } + + public EncapsulationTarget getEncapsulation() { + return encapsulation; + } + + public L3CreateTarget getL3Create() { + return l3Create; + } + + public IpamTarget getIpam() { + return ipam; } - public String getResourceUuid() { return resourceUuid; } - public String getOperationUuid() { return operationUuid; } - public long getExpectedConfigVersion() { return expectedConfigVersion; } - public String getOperationStep() { return operationStep; } - public Map getFields() { return fields; } + public DhcpTarget getDhcp() { + return dhcp; + } } diff --git a/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java index 419b052a463..2bc95a80914 100644 --- a/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/NetworkConfigMutationExtensionPoint.java @@ -3,5 +3,9 @@ import org.zstack.header.core.Completion; public interface NetworkConfigMutationExtensionPoint { - void prepare(NetworkConfigMutation mutation, Completion completion); + boolean supports(NetworkConfigMutation mutation); + + void mutate(NetworkConfigMutation mutation, + NetworkConfigLocalContinuation continuation, + Completion completion); } diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java index 012cee71ff8..de69aeddfd1 100644 --- a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java @@ -4,4 +4,8 @@ public interface NetworkDependencyAdmissionExtensionPoint { ErrorCode admit(NetworkDependencyAdmissionRequest request); + + default ErrorCode admitWithLock(NetworkDependencyAdmissionRequest request) { + return admit(request); + } } diff --git a/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java index 5f94d2c4870..0286c4845e6 100644 --- a/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java +++ b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationMsg.java @@ -5,9 +5,47 @@ public class PrepareZnsSegmentMutationMsg extends NeedReplyMessage { private NetworkConfigMutation mutation; private String controllerUuid; + private String segmentUuid; + private String relationUuid; + private long expectedConfigVersion; - public NetworkConfigMutation getMutation() { return mutation; } - public void setMutation(NetworkConfigMutation value) { mutation = value; } - public String getControllerUuid() { return controllerUuid; } - public void setControllerUuid(String value) { controllerUuid = value; } + public NetworkConfigMutation getMutation() { + return mutation; + } + + public void setMutation(NetworkConfigMutation mutation) { + this.mutation = mutation; + } + + public String getControllerUuid() { + return controllerUuid; + } + + public void setControllerUuid(String controllerUuid) { + this.controllerUuid = controllerUuid; + } + + public String getSegmentUuid() { + return segmentUuid; + } + + public void setSegmentUuid(String segmentUuid) { + this.segmentUuid = segmentUuid; + } + + public String getRelationUuid() { + return relationUuid; + } + + public void setRelationUuid(String relationUuid) { + this.relationUuid = relationUuid; + } + + public long getExpectedConfigVersion() { + return expectedConfigVersion; + } + + public void setExpectedConfigVersion(long expectedConfigVersion) { + this.expectedConfigVersion = expectedConfigVersion; + } } diff --git a/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationReply.java b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationReply.java new file mode 100644 index 00000000000..479280f8d14 --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/PrepareZnsSegmentMutationReply.java @@ -0,0 +1,15 @@ +package org.zstack.header.network; + +import org.zstack.header.message.MessageReply; + +public class PrepareZnsSegmentMutationReply extends MessageReply { + private long acceptedConfigVersion; + + public long getAcceptedConfigVersion() { + return acceptedConfigVersion; + } + + public void setAcceptedConfigVersion(long acceptedConfigVersion) { + this.acceptedConfigVersion = acceptedConfigVersion; + } +} diff --git a/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java b/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java deleted file mode 100644 index a40ef1241ba..00000000000 --- a/header/src/main/java/org/zstack/header/network/ProjectedMutationPolicy.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.zstack.header.network; - -/** Pure validation used by projected updates and subtype conversions before any DB write. */ -public final class ProjectedMutationPolicy { - private ProjectedMutationPolicy() { - } - - public static void requireSourceType(String actual, String expected) { - if (expected == null || expected.isEmpty()) { - return; - } - if (!expected.equals(actual)) { - throw new IllegalArgumentException(String.format("stale projected source type: expected %s but found %s", expected, actual)); - } - } - - public static void requireL2Conversion(String sourceType, String targetType, boolean hasDependencies) { - requireSourceType(sourceType, "L2NoVlanNetwork"); - if (!"L2VlanNetwork".equals(targetType) && !"L2NoVlanNetwork".equals(targetType)) { - throw new IllegalArgumentException("unsupported projected L2 conversion target: " + targetType); - } - if (hasDependencies) { - throw new IllegalArgumentException("projected L2 conversion has prohibited dependencies"); - } - } - - public static void requireL3Conversion(String sourceType, String targetType, boolean hasDependencies) { - requireSourceType(sourceType, "L3BasicNetwork"); - if (!"L3BasicNetwork".equals(targetType) && !"L3VpcNetwork".equals(targetType)) { - throw new IllegalArgumentException("unsupported projected L3 conversion target: " + targetType); - } - if (hasDependencies) { - throw new IllegalArgumentException("projected L3 conversion has prohibited dependencies"); - } - } -} diff --git a/header/src/main/java/org/zstack/header/network/l2/AttachL2NetworkToClusterMsg.java b/header/src/main/java/org/zstack/header/network/l2/AttachL2NetworkToClusterMsg.java index af5a9290e55..ab310a04ae0 100644 --- a/header/src/main/java/org/zstack/header/network/l2/AttachL2NetworkToClusterMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/AttachL2NetworkToClusterMsg.java @@ -8,6 +8,8 @@ public class AttachL2NetworkToClusterMsg extends NeedReplyMessage implements L2N private String l2NetworkUuid; private String clusterUuid; private String l2ProviderType; + private String operationUuid; + private String operationStep; public String getL2NetworkUuid() { return l2NetworkUuid; @@ -32,4 +34,20 @@ public String getL2ProviderType() { public void setL2ProviderType(String l2ProviderType) { this.l2ProviderType = l2ProviderType; } + + public String getOperationUuid() { + return operationUuid; + } + + public void setOperationUuid(String operationUuid) { + this.operationUuid = operationUuid; + } + + public String getOperationStep() { + return operationStep; + } + + public void setOperationStep(String operationStep) { + this.operationStep = operationStep; + } } diff --git a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java deleted file mode 100644 index e3c2104d46e..00000000000 --- a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeMsg.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.zstack.header.network.l2; - -import org.zstack.header.message.NeedReplyMessage; - -public class ConvertL2VlanModeMsg extends NeedReplyMessage { - private String l2NetworkUuid; - private String expectedSourceType; - private String targetType; - public String getL2NetworkUuid() { return l2NetworkUuid; } - public void setL2NetworkUuid(String value) { l2NetworkUuid = value; } - public String getExpectedSourceType() { return expectedSourceType; } - public void setExpectedSourceType(String value) { expectedSourceType = value; } - public String getTargetType() { return targetType; } - public void setTargetType(String value) { targetType = value; } -} diff --git a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java b/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java deleted file mode 100644 index cc5b1d0e598..00000000000 --- a/header/src/main/java/org/zstack/header/network/l2/ConvertL2VlanModeReply.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zstack.header.network.l2; - -import org.zstack.header.message.MessageReply; - -public class ConvertL2VlanModeReply extends MessageReply { -} diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkUpdateExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkUpdateExtensionPoint.java index 1336bea1907..df817cf8302 100644 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkUpdateExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkUpdateExtensionPoint.java @@ -1,5 +1,7 @@ package org.zstack.header.network.l2; +import org.zstack.header.core.Completion; + /** * Created by boce.wang on 03/25/2024. */ @@ -7,5 +9,10 @@ public interface L2NetworkUpdateExtensionPoint { void beforeChangeL2NetworkVlanId(L2NetworkInventory l2Inv); + default void beforeChangeL2NetworkVlanId(L2NetworkInventory l2Inv, Completion completion) { + beforeChangeL2NetworkVlanId(l2Inv); + completion.success(); + } + void afterChangeL2NetworkVlanId(L2NetworkInventory l2Inv); } diff --git a/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java b/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java index 6fd9cea748a..80d419a5699 100644 --- a/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java +++ b/header/src/main/java/org/zstack/header/network/l2/NetworkCreateContext.java @@ -4,27 +4,48 @@ public class NetworkCreateContext { private final NetworkOperationOrigin origin; private final ExternalNetworkRef externalRef; + private final String operationUuid; + private final String operationStep; - private NetworkCreateContext(NetworkOperationOrigin origin, ExternalNetworkRef externalRef) { + private NetworkCreateContext(NetworkOperationOrigin origin, ExternalNetworkRef externalRef, + String operationUuid, String operationStep) { this.origin = origin; this.externalRef = externalRef; + this.operationUuid = operationUuid; + this.operationStep = operationStep; } public static NetworkCreateContext api() { - return new NetworkCreateContext(NetworkOperationOrigin.API, null); + return new NetworkCreateContext(NetworkOperationOrigin.API, null, null, null); + } + + public static NetworkCreateContext cloudCommit(String operationUuid) { + if (operationUuid == null || operationUuid.isEmpty()) { + throw new IllegalArgumentException("cloud commit context requires an operation UUID"); + } + return new NetworkCreateContext(NetworkOperationOrigin.CLOUD_COMMIT, null, + operationUuid, "APPLY_LOCAL"); } public static NetworkCreateContext projection(NetworkOperationOrigin origin, ExternalNetworkRef ref) { + return projection(origin, ref, null, null); + } + + public static NetworkCreateContext projection(NetworkOperationOrigin origin, ExternalNetworkRef ref, + String operationUuid, String operationStep) { if (origin != NetworkOperationOrigin.ZNS_PROJECTION && origin != NetworkOperationOrigin.ZNS_REFRESH) { throw new IllegalArgumentException("projection context requires a ZNS projection origin"); } if (ref == null || ref.getResourceUuid() == null || ref.getResourceUuid().isEmpty()) { throw new IllegalArgumentException("projection context requires an external resource identity"); } - return new NetworkCreateContext(origin, ref); + return new NetworkCreateContext(origin, ref, operationUuid, operationStep); } public NetworkOperationOrigin getOrigin() { return origin; } public ExternalNetworkRef getExternalRef() { return externalRef; } + public String getOperationUuid() { return operationUuid; } + public String getOperationStep() { return operationStep; } public boolean isProjection() { return origin == NetworkOperationOrigin.ZNS_PROJECTION || origin == NetworkOperationOrigin.ZNS_REFRESH; } + public boolean isRemoteWriteSuppressed() { return isProjection() || origin == NetworkOperationOrigin.CLOUD_COMMIT; } } diff --git a/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java b/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java index c5b92ce2b42..afa7be382c6 100644 --- a/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java +++ b/header/src/main/java/org/zstack/header/network/l2/NetworkOperationOrigin.java @@ -3,6 +3,7 @@ /** Identifies whether a local L2 create came from the public API or a typed projection. */ public enum NetworkOperationOrigin { API, + CLOUD_COMMIT, ZNS_PROJECTION, ZNS_REFRESH } diff --git a/header/src/main/java/org/zstack/header/network/l3/AllocateIpMsg.java b/header/src/main/java/org/zstack/header/network/l3/AllocateIpMsg.java index 78af601bea6..e75bea0b25d 100755 --- a/header/src/main/java/org/zstack/header/network/l3/AllocateIpMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/AllocateIpMsg.java @@ -16,6 +16,8 @@ public class AllocateIpMsg extends NeedReplyMessage implements L3NetworkMessage, private String gateway; private String ipv6Gateway; private String ipv6Prefix; + private String operationUuid; + private String operationStep; public String getRequiredIp() { return requiredIp; @@ -114,4 +116,22 @@ public String getIpv6Prefix() { public void setIpv6Prefix(String ipv6Prefix) { this.ipv6Prefix = ipv6Prefix; } + + @Override + public String getOperationUuid() { + return operationUuid; + } + + public void setOperationUuid(String operationUuid) { + this.operationUuid = operationUuid; + } + + @Override + public String getOperationStep() { + return operationStep; + } + + public void setOperationStep(String operationStep) { + this.operationStep = operationStep; + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java b/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java deleted file mode 100644 index 4ea68f3cae0..00000000000 --- a/header/src/main/java/org/zstack/header/network/l3/ConvertL3NetworkTypeReply.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zstack.header.network.l3; - -import org.zstack.header.message.MessageReply; - -public class ConvertL3NetworkTypeReply extends MessageReply { -} diff --git a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java b/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java deleted file mode 100644 index 3a113551b36..00000000000 --- a/header/src/main/java/org/zstack/header/network/l3/DeleteProjectedIpRangeReply.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zstack.header.network.l3; - -import org.zstack.header.message.MessageReply; - -public class DeleteProjectedIpRangeReply extends MessageReply { -} diff --git a/header/src/main/java/org/zstack/header/network/l3/IpAllocateMessage.java b/header/src/main/java/org/zstack/header/network/l3/IpAllocateMessage.java index 0d886bab7b5..2df457e9755 100755 --- a/header/src/main/java/org/zstack/header/network/l3/IpAllocateMessage.java +++ b/header/src/main/java/org/zstack/header/network/l3/IpAllocateMessage.java @@ -31,6 +31,14 @@ default String getIpv6Prefix() { return null; } + default String getOperationUuid() { + return null; + } + + default String getOperationStep() { + return null; + } + void setIpRangeUuid(String ipRangeUuid); void setRequiredIp(String requiredIp); diff --git a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java index 9b732283cb3..d64be78ae53 100644 --- a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java +++ b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java @@ -16,4 +16,22 @@ default void createIpRange(IpRangeInventory inv, NetworkCreateContext context, C createIpRange(inv, completion); } void deleteIpRange(IpRangeInventory inv, Completion completion); + + default void deleteIpRange(IpRangeInventory inv, boolean lastIpRange, Completion completion) { + if (lastIpRange) { + deleteIpRange(inv, new Completion(completion) { + @Override + public void success() { + completion.success(); + } + + @Override + public void fail(org.zstack.header.errorcode.ErrorCode errorCode) { + completion.success(); + } + }); + } else { + completion.success(); + } + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java b/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java deleted file mode 100644 index 38ac6bbceff..00000000000 --- a/header/src/main/java/org/zstack/header/network/l3/UpdateProjectedIpRangeReply.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zstack.header.network.l3; - -import org.zstack.header.message.MessageReply; - -public class UpdateProjectedIpRangeReply extends MessageReply { -} 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 b1eecae4d5e..a866efdce4f 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkExtensionPointEmitter.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.zstack.core.componentloader.PluginRegistry; import org.zstack.header.Component; +import org.zstack.header.core.Completion; import org.zstack.header.network.l2.L2NetworkDeleteExtensionPoint; import org.zstack.header.network.l2.L2NetworkException; import org.zstack.header.network.l2.L2NetworkInventory; @@ -67,6 +68,28 @@ public void beforeUpdate(final L2NetworkInventory inv) { } } + public void beforeUpdate(final L2NetworkInventory inv, Completion completion) { + beforeUpdate(inv, 0, completion); + } + + private void beforeUpdate(final L2NetworkInventory inv, int index, Completion completion) { + if (index >= updateExtensions.size()) { + completion.success(); + return; + } + updateExtensions.get(index).beforeChangeL2NetworkVlanId(inv, new Completion(completion) { + @Override + public void success() { + beforeUpdate(inv, index + 1, completion); + } + + @Override + public void fail(org.zstack.header.errorcode.ErrorCode errorCode) { + completion.fail(errorCode); + } + }); + } + public void afterUpdate(final L2NetworkInventory inv) { CollectionUtils.safeForEach(updateExtensions, arg -> arg.afterChangeL2NetworkVlanId(inv)); } 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 2feb31cffdf..37b281558eb 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -41,6 +41,9 @@ import org.zstack.header.network.l3.L3NetworkVO_; import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; import org.zstack.header.network.NetworkDependencyAdmissionRequest; +import org.zstack.header.network.NetworkConfigLocalContinuation; +import org.zstack.header.network.NetworkConfigMutation; +import org.zstack.header.network.NetworkConfigMutationExtensionPoint; import org.zstack.network.l3.ServiceTypeExtensionPoint; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; @@ -462,12 +465,36 @@ public String getSyncSignature() { @Override public void run(SyncTaskChain chain) { - extpEmitter.beforeUpdate(getSelfInventory()); - changeL2NetworkVlanId(msg, new Completion(chain) { + L2NetworkInventory target = getSelfInventory(); + target.setType(msg.getType()); + target.setVirtualNetworkId(msg.getVlan() == null ? 0 : msg.getVlan()); + NetworkConfigMutation mutation = NetworkConfigMutation.encapsulation( + msg.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + target.getType(), target.getVirtualNetworkId()); + mutateNetworkConfig(mutation, localCompletion -> { + try { + extpEmitter.beforeUpdate(target); + } catch (OperationFailureException e) { + localCompletion.fail(e.getErrorCode()); + return; + } + changeL2NetworkVlanId(msg, new Completion(localCompletion) { + @Override + public void success() { + changeL2NetworkVlanIdInDb(msg); + extpEmitter.afterUpdate(getSelfInventory()); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }); + }, new Completion(chain) { @Override public void success() { - changeL2NetworkVlanIdInDb(msg); - extpEmitter.afterUpdate(getSelfInventory()); event.setInventory(getSelfInventory()); bus.publish(event); chain.next(); @@ -489,6 +516,26 @@ public String getName() { }); } + protected void mutateNetworkConfig(NetworkConfigMutation mutation, + NetworkConfigLocalContinuation continuation, + Completion completion) { + List providers = pluginRgty + .getExtensionList(NetworkConfigMutationExtensionPoint.class).stream() + .filter(provider -> provider.supports(mutation)) + .collect(Collectors.toList()); + if (providers.isEmpty()) { + continuation.run(completion); + return; + } + if (providers.size() != 1) { + completion.fail(errf.stringToInternalError(String.format( + "network mutation[%s] matched[%s] providers", + mutation.getKind(), providers.size()))); + return; + } + providers.get(0).mutate(mutation, continuation, completion); + } + private void handle(APIUpdateL2NetworkMsg msg) { boolean update = false; if (msg.getName() != null) { @@ -946,7 +993,8 @@ public void handle(ErrorCode errCode, Map data) { private void attachL2NetworkToCluster(final AttachL2NetworkToClusterMsg msg, final Completion completion){ NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( - msg.getL2NetworkUuid(), "ClusterAttach", null, "ATTACH_CLUSTER"); + msg.getL2NetworkUuid(), "ClusterAttach", msg.getOperationUuid(), + msg.getOperationStep() == null ? "ATTACH_CLUSTER" : msg.getOperationStep()); for (NetworkDependencyAdmissionExtensionPoint extension : pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { ErrorCode errorCode = extension.admit(admission); @@ -1068,11 +1116,31 @@ protected void scripts() { prepareL2NetworkOnHosts(hvinvs, msg.getL2ProviderType(), new Completion(msg,completion) { @Override public void success() { - L2NetworkClusterRefVO rvo = new L2NetworkClusterRefVO(); - rvo.setClusterUuid(msg.getClusterUuid()); - rvo.setL2NetworkUuid(self.getUuid()); - rvo.setL2ProviderType(msg.getL2ProviderType()); - dbf.persist(rvo); + try { + new SQLBatch() { + @Override + protected void scripts() { + NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( + msg.getL2NetworkUuid(), "ClusterAttach", msg.getOperationUuid(), + msg.getOperationStep() == null ? "ATTACH_CLUSTER" : msg.getOperationStep()); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admitWithLock(admission); + if (errorCode != null) { + throw new OperationFailureException(errorCode); + } + } + L2NetworkClusterRefVO rvo = new L2NetworkClusterRefVO(); + rvo.setClusterUuid(msg.getClusterUuid()); + rvo.setL2NetworkUuid(self.getUuid()); + rvo.setL2ProviderType(msg.getL2ProviderType()); + persist(rvo); + } + }.execute(); + } catch (OperationFailureException e) { + completion.fail(e.getErrorCode()); + return; + } logger.debug(String.format("successfully attached L2Network[uuid:%s] to cluster [uuid:%s]", self.getUuid(), msg.getClusterUuid())); self = dbf.findByUuid(self.getUuid(), L2NetworkVO.class); completion.success(); diff --git a/network/src/main/java/org/zstack/network/l3/AbstractIpAllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/AbstractIpAllocatorStrategy.java index 490408c5c93..a94e657d056 100755 --- a/network/src/main/java/org/zstack/network/l3/AbstractIpAllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/AbstractIpAllocatorStrategy.java @@ -107,7 +107,8 @@ public IpRangeVO call(IpRangeVO arg) { )); } - return l3NwMgr.reserveIp(ipr, msg.getRequiredIp(), msg.isDuplicatedIpAllowed()); + return l3NwMgr.reserveIp(ipr, msg.getRequiredIp(), msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); } protected UsedIpInventory allocateRequiredIpv6(IpAllocateMessage msg) { @@ -138,7 +139,8 @@ public IpRangeVO call(IpRangeVO arg) { )); } - return l3NwMgr.reserveIp(ipr, msg.getRequiredIp(), msg.isDuplicatedIpAllowed()); + return l3NwMgr.reserveIp(ipr, msg.getRequiredIp(), msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); } public static int compareIpv4Range(IpRangeVO r1, IpRangeVO r2) { diff --git a/network/src/main/java/org/zstack/network/l3/AscDelayRecycleIpAllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/AscDelayRecycleIpAllocatorStrategy.java index 47337b221e3..71ca46140d3 100755 --- a/network/src/main/java/org/zstack/network/l3/AscDelayRecycleIpAllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/AscDelayRecycleIpAllocatorStrategy.java @@ -148,7 +148,8 @@ private UsedIpInventory allocateIpByAsc(IpAllocateMessage msg, List r ip = allocateIpByAsc(r, excludeIp); tr = r; if (ip != null) { - UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed()); + UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); if (inv != null) { return inv; } diff --git a/network/src/main/java/org/zstack/network/l3/FirstAvailableIpAllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/FirstAvailableIpAllocatorStrategy.java index 20a9cffc1fb..7207a229b11 100755 --- a/network/src/main/java/org/zstack/network/l3/FirstAvailableIpAllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/FirstAvailableIpAllocatorStrategy.java @@ -66,7 +66,8 @@ public UsedIpInventory allocateIp(IpAllocateMessage msg) { return null; } - UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed()); + UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); if (inv != null) { return inv; } diff --git a/network/src/main/java/org/zstack/network/l3/FirstAvailableIpv6AllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/FirstAvailableIpv6AllocatorStrategy.java index 63723dc7073..71bd3b7c659 100755 --- a/network/src/main/java/org/zstack/network/l3/FirstAvailableIpv6AllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/FirstAvailableIpv6AllocatorStrategy.java @@ -69,7 +69,8 @@ public UsedIpInventory allocateIp(IpAllocateMessage msg) { return null; } - UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed()); + UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); if (inv != null) { return inv; } 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 1e1c51be9b9..faec396a702 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -30,6 +30,7 @@ import org.zstack.header.core.workflow.*; import org.zstack.header.errorcode.ErrorCode; import org.zstack.header.errorcode.ErrorCodeList; +import org.zstack.header.errorcode.OperationFailureException; import org.zstack.header.host.HostVO; import org.zstack.header.host.HostVO_; import org.zstack.header.identity.SharedResourceVO; @@ -43,6 +44,10 @@ import org.zstack.header.network.l2.NetworkCreateContext; import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; import org.zstack.header.network.NetworkDependencyAdmissionRequest; +import org.zstack.header.network.NetworkConfigLocalContinuation; +import org.zstack.header.network.NetworkConfigMutation; +import org.zstack.header.network.NetworkConfigMutationExtensionPoint; +import org.zstack.header.network.l2.NetworkOperationOrigin; import org.zstack.header.network.l3.*; import org.zstack.header.network.sdncontroller.SdnControllerConstant; import org.zstack.header.network.service.*; @@ -169,6 +174,9 @@ private void handle(APIAddIpRangeMsg msg) { thdf.chainSubmit(new ChainTask(msg) { @Override public void run(SyncTaskChain chain) { + if (msg.getResourceUuid() == null) { + msg.setResourceUuid(Platform.getUuid()); + } IpRangeInventory ipr = IpRangeInventory.fromMessage(msg); addIpRange(ipr, msg, NetworkCreateContext.api(), new ReturnValueCompletion(msg) { @Override @@ -256,25 +264,118 @@ public String getName() { private void addIpRange(IpRangeInventory ipr, APICreateMessage msg, NetworkCreateContext context, ReturnValueCompletion completion) { + addIpRanges(Collections.singletonList(ipr), msg, context, + new ReturnValueCompletion>(completion) { + @Override + public void success(List inventories) { + completion.success(inventories.get(0)); + } + + @Override + public void fail(ErrorCode errorCode) { + completion.fail(errorCode); + } + }); + } + + private void addIpRanges(List iprs, APICreateMessage msg, + NetworkCreateContext context, + ReturnValueCompletion> completion) { if (context == null) { completion.fail(Platform.inerr(ORG_ZSTACK_NETWORK_L3_10084, "network create context is required for internal IP range creation")); return; } - ErrorCode errorCode = validateManagementNetworkIpRangeVersionBeforeCreate(ipr); - if (errorCode != null) { - completion.fail(errorCode); - return; + for (IpRangeInventory ipr : iprs) { + ErrorCode errorCode = validateManagementNetworkIpRangeVersionBeforeCreate(ipr); + if (errorCode != null) { + completion.fail(errorCode); + return; + } } - IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, context, new ReturnValueCompletion>(completion) { + if (context.getOrigin() == NetworkOperationOrigin.API + && iprs.stream().allMatch(ipr -> ipr.getIpRangeType() == IpRangeType.Normal)) { + IpRangeInventory first = iprs.get(0); + List existingRanges = Q.New(NormalIpRangeVO.class) + .eq(IpRangeVO_.l3NetworkUuid, first.getL3NetworkUuid()) + .eq(IpRangeVO_.ipVersion, first.getIpVersion()) + .list(); + List ranges = existingRanges.stream() + .map(existing -> new NetworkConfigMutation.IpRangeTarget( + existing.getUuid(), existing.getStartIp(), existing.getEndIp())) + .collect(Collectors.toList()); + iprs.forEach(ipr -> ranges.add(new NetworkConfigMutation.IpRangeTarget( + ipr.getUuid(), ipr.getStartIp(), ipr.getEndIp()))); + int prefix = first.getIpVersion() == IPv6Constants.IPv6 + ? first.getPrefixLen() + : NetworkUtils.getPrefixLengthFromNetmask(first.getNetmask()); + NetworkConfigMutation mutation = NetworkConfigMutation.ipam( + self.getL2NetworkUuid(), context.getOrigin(), msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + first.getL3NetworkUuid(), + first.getIpVersion(), first.getGateway() + "/" + prefix, ranges); + java.util.concurrent.atomic.AtomicReference> created = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> addIpRanges(iprs, msg, + NetworkCreateContext.cloudCommit(msg.getId()), + new ReturnValueCompletion>(localCompletion) { + @Override + public void success(List inventories) { + created.set(inventories); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), created, completion)) { + return; + } + } + + IpRangeFactory factory = l3NwMgr.getIpRangeFactory(iprs.get(0).getIpRangeType()); + factory.createIpRange(iprs, msg, context, new ReturnValueCompletion>(completion) { @Override public void success(List invs) { - IpRangeInventory inv = invs.get(0); - tagMgr.createTagsFromAPICreateMessage(msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); - setIpRangeSharedResource(ipr.getL3NetworkUuid(), inv.getUuid()); - completion.success(inv); + for (IpRangeInventory inv : invs) { + tagMgr.createTagsFromAPICreateMessage( + msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); + setIpRangeSharedResource(inv.getL3NetworkUuid(), inv.getUuid()); + } + completion.success(invs); + } + + @Override + public void fail(ErrorCode errorCode) { + completion.fail(errorCode); + } + }); + } + + private boolean mutateNetworkConfig(NetworkConfigMutation mutation, + NetworkConfigLocalContinuation continuation, + java.util.concurrent.atomic.AtomicReference result, + ReturnValueCompletion completion) { + List providers = pluginRgty + .getExtensionList(NetworkConfigMutationExtensionPoint.class).stream() + .filter(provider -> provider.supports(mutation)) + .collect(Collectors.toList()); + if (providers.isEmpty()) { + return false; + } + if (providers.size() != 1) { + completion.fail(errf.stringToInternalError(String.format( + "network mutation[%s] matched[%s] providers", + mutation.getKind(), providers.size()))); + return true; + } + providers.get(0).mutate(mutation, continuation, new Completion(completion) { + @Override + public void success() { + completion.success(result.get()); } @Override @@ -282,6 +383,7 @@ public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); + return true; } private ErrorCode validateManagementNetworkIpRangeVersionBeforeCreate(IpRangeInventory ipr) { @@ -695,23 +797,17 @@ public void run(FlowTrigger trigger, Map data) { } boolean isLastIpRange = isLastNormalIpRangeOfVersion(msg.getIpRangeUuid(), inv.getIpVersion()); - if (isLastIpRange) { - sdnL3.deleteIpRange(inv, new Completion(trigger) { - @Override - public void success() { - trigger.next(); - } + sdnL3.deleteIpRange(inv, isLastIpRange, new Completion(trigger) { + @Override + public void success() { + trigger.next(); + } - @Override - public void fail(ErrorCode errorCode) { - logger.debug(String.format("delete ip range [uuid:%s] failed because %s", - inv.getUuid(), errorCode.getDetails())); - trigger.next(); - } - }); - } else { - trigger.next(); - } + @Override + public void fail(ErrorCode errorCode) { + trigger.fail(errorCode); + } + }); } }).then(new NoRollbackFlow() { String __name__ = "remove-db"; @@ -1424,22 +1520,61 @@ private void handle(APIDetachNetworkServiceFromL3NetworkMsg msg) { return; } - detachNetworkServiceFromL3NetworkMsg(l3VO, refs, new Completion(msg) { + ReturnValueCompletion completion = new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + evt.setInventory(inventory); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + evt.setError(errorCode); + bus.publish(evt); + } + }; + if (refs.stream().anyMatch(ref -> NetworkServiceType.DHCP.toString() + .equals(ref.getNetworkServiceType()))) { + NetworkConfigMutation mutation = NetworkConfigMutation.dhcp( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + msg.getL3NetworkUuid(), false, msg.getSystemTags()); + java.util.concurrent.atomic.AtomicReference result = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> detachNetworkServicesLocally(l3VO, refs, + new ReturnValueCompletion(localCompletion) { + @Override + public void success(L3NetworkInventory inventory) { + result.set(inventory); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), result, completion)) { + return; + } + } + detachNetworkServicesLocally(l3VO, refs, completion); + } + + private void detachNetworkServicesLocally(L3NetworkVO l3VO, + List refs, + ReturnValueCompletion completion) { + detachNetworkServiceFromL3NetworkMsg(l3VO, refs, new Completion(completion) { @Override public void success() { dbf.removeCollection(refs, NetworkServiceL3NetworkRefVO.class); - logger.debug(String.format("successfully detached network service provider[uuid:%s]", JSONObjectUtil.dumpPretty(refs))); self = dbf.reload(self); - evt.setInventory(L3NetworkInventory.valueOf(self)); - bus.publish(evt); + completion.success(L3NetworkInventory.valueOf(self)); } @Override public void fail(ErrorCode errorCode) { - logger.debug(String.format("detached network service provider[uuid:%s] failed:%s", JSONObjectUtil.dumpPretty(refs), errorCode.getDetails())); - self = dbf.reload(self); - evt.setInventory(L3NetworkInventory.valueOf(self)); - bus.publish(evt); + completion.fail(errorCode); } }); } @@ -1571,15 +1706,13 @@ private void handle(APIUpdateL3NetworkMsg msg) { private void handle(APIAddIpRangeByNetworkCidrMsg msg) { List iprs = IpRangeInventory.fromMessage(msg); + assignStableIpRangeUuids(iprs, msg.getResourceUuid()); APIAddIpRangeByNetworkCidrEvent evt = new APIAddIpRangeByNetworkCidrEvent(msg.getId()); - IpRangeFactory factory = l3NwMgr.getIpRangeFactory(iprs.get(0).getIpRangeType()); - factory.createIpRange(iprs, msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { + addIpRanges(iprs, msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); - tagMgr.createTagsFromAPICreateMessage(msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); - setIpRangeSharedResource(msg.getL3NetworkUuid(), inv.getUuid()); evt.setInventory(inv); evt.setInventories(invs); bus.publish(evt); @@ -1595,15 +1728,15 @@ public void fail(ErrorCode errorCode) { private void handle(APIAddIpv6RangeByNetworkCidrMsg msg) { IpRangeInventory ipr = IpRangeInventory.fromMessage(msg); + if (ipr.getUuid() == null) { + ipr.setUuid(Platform.getUuid()); + } APIAddIpRangeByNetworkCidrEvent evt = new APIAddIpRangeByNetworkCidrEvent(msg.getId()); - IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { + addIpRanges(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); - tagMgr.createTagsFromAPICreateMessage(msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); - setIpRangeSharedResource(msg.getL3NetworkUuid(), inv.getUuid()); evt.setInventory(inv); bus.publish(evt); } @@ -1618,15 +1751,15 @@ public void fail(ErrorCode errorCode) { private void handle(APIAddIpv6RangeMsg msg) { IpRangeInventory ipr = IpRangeInventory.fromMessage(msg); + if (ipr.getUuid() == null) { + ipr.setUuid(Platform.getUuid()); + } APIAddIpRangeEvent evt = new APIAddIpRangeEvent(msg.getId()); - IpRangeFactory factory = l3NwMgr.getIpRangeFactory(ipr.getIpRangeType()); - factory.createIpRange(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { + addIpRanges(Collections.singletonList(ipr), msg, NetworkCreateContext.api(), new ReturnValueCompletion>(msg) { @Override public void success(List invs) { IpRangeInventory inv = invs.get(0); - tagMgr.createTagsFromAPICreateMessage(msg, inv.getL3NetworkUuid(), L3NetworkVO.class.getSimpleName()); - setIpRangeSharedResource(msg.getL3NetworkUuid(), inv.getUuid()); evt.setInventory(inv); bus.publish(evt); } @@ -1639,6 +1772,16 @@ public void fail(ErrorCode errorCode) { }); } + private static void assignStableIpRangeUuids(List iprs, + String requestedUuid) { + for (int i = 0; i < iprs.size(); i++) { + if (iprs.get(i).getUuid() == null) { + iprs.get(i).setUuid(i == 0 && requestedUuid != null + ? requestedUuid : Platform.getUuid()); + } + } + } + private void handle(APIChangeL3NetworkStateMsg msg) { if (L3NetworkStateEvent.enable.toString().equals(msg.getStateEvent())) { @@ -1658,6 +1801,52 @@ private void handle(APIChangeL3NetworkStateMsg msg) { private void handle(final APIRemoveDnsFromL3NetworkMsg msg) { final APIRemoveDnsFromL3NetworkEvent evt = new APIRemoveDnsFromL3NetworkEvent(msg.getId()); + ReturnValueCompletion completion = new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + evt.setInventory(inventory); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + evt.setError(errorCode); + bus.publish(evt); + } + }; + List desiredDns = Q.New(L3NetworkDnsVO.class) + .select(L3NetworkDnsVO_.dns) + .eq(L3NetworkDnsVO_.l3NetworkUuid, msg.getL3NetworkUuid()) + .notEq(L3NetworkDnsVO_.dns, msg.getDns()).listValues(); + NetworkConfigMutation mutation = NetworkConfigMutation.dhcpDns( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + msg.getL3NetworkUuid(), NetworkUtils.isIpv4Address(msg.getDns()) + ? IPv6Constants.IPv4 : IPv6Constants.IPv6, desiredDns); + java.util.concurrent.atomic.AtomicReference result = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> removeDns(msg, true, + new ReturnValueCompletion(localCompletion) { + @Override + public void success(L3NetworkInventory inventory) { + result.set(inventory); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), result, completion)) { + return; + } + removeDns(msg, false, completion); + } + + private void removeDns(final APIRemoveDnsFromL3NetworkMsg msg, + boolean remoteCommitted, + ReturnValueCompletion completion) { SdnControllerDhcp sdnDhcp = l3NwMgr.getSdnControllerDhcp(msg.getL3NetworkUuid()); @@ -1686,6 +1875,11 @@ public void run(FlowTrigger trigger, Map data) { flow(new NoRollbackFlow() { String __name__ = "remove-dns-from-sdn"; + @Override + public boolean skip(Map data) { + return remoteCommitted; + } + @Override public void run(FlowTrigger trigger, Map data) { String sdnControllerUuid = L3NetworkHelper.getSdnControllerUuidFromL3Uuid(self.getUuid()); @@ -1748,16 +1942,14 @@ public void run(MessageReply reply) { done(new FlowDoneHandler(msg) { @Override public void handle(Map data) { - evt.setInventory(L3NetworkInventory.valueOf(dbf.reload(self))); - bus.publish(evt); + completion.success(L3NetworkInventory.valueOf(dbf.reload(self))); } }); error(new FlowErrorHandler(msg) { @Override public void handle(ErrorCode errCode, Map data) { - evt.setError(errCode); - bus.publish(evt); + completion.fail(errCode); } }); } @@ -1766,6 +1958,54 @@ public void handle(ErrorCode errCode, Map data) { private void handle(final APIAddDnsToL3NetworkMsg msg) { final APIAddDnsToL3NetworkEvent evt = new APIAddDnsToL3NetworkEvent(msg.getId()); + ReturnValueCompletion completion = new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + evt.setInventory(inventory); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + evt.setError(errorCode); + bus.publish(evt); + } + }; + List desiredDns = Q.New(L3NetworkDnsVO.class) + .select(L3NetworkDnsVO_.dns) + .eq(L3NetworkDnsVO_.l3NetworkUuid, msg.getL3NetworkUuid()).listValues(); + if (!desiredDns.contains(msg.getDns())) { + desiredDns.add(msg.getDns()); + } + NetworkConfigMutation mutation = NetworkConfigMutation.dhcpDns( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + msg.getL3NetworkUuid(), NetworkUtils.isIpv4Address(msg.getDns()) + ? IPv6Constants.IPv4 : IPv6Constants.IPv6, desiredDns); + java.util.concurrent.atomic.AtomicReference result = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> addDns(msg, true, + new ReturnValueCompletion(localCompletion) { + @Override + public void success(L3NetworkInventory inventory) { + result.set(inventory); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), result, completion)) { + return; + } + addDns(msg, false, completion); + } + + private void addDns(final APIAddDnsToL3NetworkMsg msg, + boolean remoteCommitted, + ReturnValueCompletion completion) { SdnControllerDhcp sdnDhcp = l3NwMgr.getSdnControllerDhcp(msg.getL3NetworkUuid()); @@ -1802,6 +2042,11 @@ public void rollback(FlowRollback trigger, Map data) { flow(new NoRollbackFlow() { String __name__ = "apply-to-sdn"; + @Override + public boolean skip(Map data) { + return remoteCommitted; + } + @Override public void run(FlowTrigger trigger, Map data) { String sdnControllerUuid = L3NetworkHelper.getSdnControllerUuidFromL3Uuid(self.getUuid()); @@ -1865,17 +2110,15 @@ public void run(MessageReply reply) { @Override public void handle(Map data) { self = dbf.reload(self); - evt.setInventory(L3NetworkInventory.valueOf(self)); logger.debug(String.format("successfully added dns[%s] to L3Network[uuid:%s, name:%s]", msg.getDns(), self.getUuid(), self.getName())); - bus.publish(evt); + completion.success(L3NetworkInventory.valueOf(self)); } }); error(new FlowErrorHandler(msg) { @Override public void handle(ErrorCode errCode, Map data) { - evt.setError(errCode); - bus.publish(evt); + completion.fail(errCode); } }); } @@ -1885,7 +2128,10 @@ public void handle(ErrorCode errCode, Map data) { private void handle(final AttachNetworkServiceToL3Msg msg) { MessageReply reply = new MessageReply(); NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( - msg.getL3NetworkUuid(), "NetworkService", null, "ATTACH_NETWORK_SERVICE"); + msg.getL3NetworkUuid(), "NetworkService", + msg.getContext() == null ? null : msg.getContext().getOperationUuid(), + msg.getContext() == null || msg.getContext().getOperationStep() == null + ? "ATTACH_NETWORK_SERVICE" : msg.getContext().getOperationStep()); for (NetworkDependencyAdmissionExtensionPoint extension : pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { ErrorCode errorCode = extension.admit(admission); @@ -1914,7 +2160,32 @@ private void handle(final AttachNetworkServiceToL3Msg msg) { logger.debug(String.format("successfully attached network service provider[uuid:%s] to l3network[uuid:%s, name:%s] with services%s", e.getKey(), self.getUuid(), self.getName(), e.getValue())); } - dbf.persistCollection(refVOS); + try { + new SQLBatch() { + @Override + protected void scripts() { + NetworkDependencyAdmissionRequest lockedAdmission = new NetworkDependencyAdmissionRequest( + msg.getL3NetworkUuid(), "NetworkService", + msg.getContext() == null ? null : msg.getContext().getOperationUuid(), + msg.getContext() == null || msg.getContext().getOperationStep() == null + ? "ATTACH_NETWORK_SERVICE" : msg.getContext().getOperationStep()); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admitWithLock(lockedAdmission); + if (errorCode != null) { + throw new OperationFailureException(errorCode); + } + } + for (NetworkServiceL3NetworkRefVO ref : refVOS) { + persist(ref); + } + } + }.execute(); + } catch (OperationFailureException e) { + reply.setError(e.getErrorCode()); + bus.reply(msg, reply); + return; + } new While<>(refVOS).each((ref, wcomp) -> { String provideType = providerUuidTypeMap.get(ref.getNetworkServiceProviderUuid()); @@ -1930,7 +2201,8 @@ private void handle(final AttachNetworkServiceToL3Msg msg) { return; } - if (msg.getContext() != null && msg.getContext().isProjection()) { + if (msg.getContext() != null && msg.getContext().isRemoteWriteSuppressed() + && nsType == NetworkServiceType.DHCP) { wcomp.done(); return; } @@ -2044,28 +2316,82 @@ private void handle(APIAttachNetworkServiceToL3NetworkMsg msg) { return; } - AttachNetworkServiceToL3Msg amsg = new AttachNetworkServiceToL3Msg(); - amsg.setL3NetworkUuid(msg.getL3NetworkUuid()); - amsg.setNetworkServices(msg.getNetworkServices()); - if (msg.getSystemTags() != null) { - amsg.setApiSystemTags(msg.getSystemTags()); + ReturnValueCompletion completion = new ReturnValueCompletion(msg) { + @Override + public void success(L3NetworkInventory inventory) { + evt.setInventory(inventory); + bus.publish(evt); + } + + @Override + public void fail(ErrorCode errorCode) { + evt.setError(errorCode); + bus.publish(evt); + } + }; + if (containsDhcp(msg.getNetworkServices())) { + NetworkConfigMutation mutation = NetworkConfigMutation.dhcp( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + msg.getL3NetworkUuid(), true, msg.getSystemTags()); + java.util.concurrent.atomic.AtomicReference result = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> attachNetworkServices(msg, + NetworkCreateContext.cloudCommit(msg.getId()), + new ReturnValueCompletion(localCompletion) { + @Override + public void success(L3NetworkInventory inventory) { + result.set(inventory); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), result, completion)) { + return; + } } + attachNetworkServices(msg, NetworkCreateContext.api(), completion); + } - bus.makeTargetServiceIdByResourceUuid(amsg, L3NetworkConstant.SERVICE_ID, msg.getL3NetworkUuid()); - bus.send(amsg, new CloudBusCallBack(msg) { + private boolean containsDhcp(Map> networkServices) { + if (networkServices == null || networkServices.isEmpty()) { + return false; + } + List services = networkServices.values().stream() + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + return services.stream().anyMatch(NetworkServiceType.DHCP.toString()::equals); + } + + private void attachNetworkServices(APIAttachNetworkServiceToL3NetworkMsg msg, + NetworkCreateContext context, + ReturnValueCompletion completion) { + AttachNetworkServiceToL3Msg attach = new AttachNetworkServiceToL3Msg(); + attach.setL3NetworkUuid(msg.getL3NetworkUuid()); + attach.setNetworkServices(msg.getNetworkServices()); + attach.setContext(context); + if (msg.getSystemTags() != null) { + attach.setApiSystemTags(msg.getSystemTags()); + } + bus.makeTargetServiceIdByResourceUuid(attach, L3NetworkConstant.SERVICE_ID, + msg.getL3NetworkUuid()); + bus.send(attach, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { - if (reply.isSuccess()) { - self = dbf.reload(self); - evt.setInventory(L3NetworkInventory.valueOf(self)); - bus.publish(evt); - } else { - evt.setError(reply.getError()); - bus.publish(evt); + if (!reply.isSuccess()) { + completion.fail(reply.getError()); + return; } + self = dbf.reload(self); + completion.success(L3NetworkInventory.valueOf(self)); } }); - } + } private void doDeleteIpRange(APIDeleteIpRangeMsg msg, Completion completion) { @@ -2139,6 +2465,68 @@ public void handle(ErrorCode errCode, Map data) { }).start(); } + private void deleteIpRangeWithMutation(APIDeleteIpRangeMsg msg, Completion completion) { + IpRangeVO deleting = dbf.findByUuid(msg.getUuid(), IpRangeVO.class); + if (!(deleting instanceof NormalIpRangeVO)) { + doDeleteIpRange(msg, completion); + return; + } + List remaining = Q.New(NormalIpRangeVO.class) + .eq(IpRangeVO_.l3NetworkUuid, deleting.getL3NetworkUuid()) + .eq(IpRangeVO_.ipVersion, deleting.getIpVersion()) + .notEq(IpRangeVO_.uuid, deleting.getUuid()) + .list(); + NetworkConfigMutation mutation; + if (remaining.isEmpty()) { + mutation = NetworkConfigMutation.deleteIpam( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + deleting.getL3NetworkUuid(), deleting.getIpVersion()); + } else { + List targets = remaining.stream() + .map(range -> new NetworkConfigMutation.IpRangeTarget( + range.getUuid(), range.getStartIp(), range.getEndIp())) + .collect(Collectors.toList()); + NormalIpRangeVO first = remaining.get(0); + int prefix = first.getIpVersion() == IPv6Constants.IPv6 + ? first.getPrefixLen() + : NetworkUtils.getPrefixLengthFromNetmask(first.getNetmask()); + mutation = NetworkConfigMutation.ipam( + self.getL2NetworkUuid(), NetworkOperationOrigin.API, msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + deleting.getL3NetworkUuid(), deleting.getIpVersion(), + first.getGateway() + "/" + prefix, targets); + } + java.util.concurrent.atomic.AtomicReference deleted = + new java.util.concurrent.atomic.AtomicReference<>(false); + if (mutateNetworkConfig(mutation, + localCompletion -> doDeleteIpRange(msg, new Completion(localCompletion) { + @Override + public void success() { + deleted.set(true); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), deleted, new ReturnValueCompletion(completion) { + @Override + public void success(Boolean ignored) { + completion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + completion.fail(errorCode); + } + })) { + return; + } + doDeleteIpRange(msg, completion); + } + private void syncManagementServiceTypeWhileDelete(ServiceTypeExtensionPoint ext, L2NetworkVO l2NetworkVO, List hostUuids) { String l2NetworkType = l2NetworkVO.getType(); switch (l2NetworkType) { @@ -2169,7 +2557,7 @@ public String getName() { @Override public void run(SyncTaskChain chain) { - doDeleteIpRange(msg, new Completion(chain) { + deleteIpRangeWithMutation(msg, new Completion(chain) { @Override public void success() { bus.publish(evt); diff --git a/network/src/main/java/org/zstack/network/l3/L3NetworkManager.java b/network/src/main/java/org/zstack/network/l3/L3NetworkManager.java index eebbb11b747..9177bbadacb 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManager.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManager.java @@ -14,6 +14,8 @@ public interface L3NetworkManager { UsedIpInventory reserveIp(IpRangeVO ipRange, String ip); UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDuplicatedAddress); + UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDuplicatedAddress, + String operationUuid, String operationStep); boolean isIpRangeFull(IpRangeVO vo); 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 e8962a19bf9..9070ecb5397 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -34,6 +34,9 @@ import org.zstack.header.network.l2.*; import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; import org.zstack.header.network.NetworkDependencyAdmissionRequest; +import org.zstack.header.network.NetworkConfigLocalContinuation; +import org.zstack.header.network.NetworkConfigMutation; +import org.zstack.header.network.NetworkConfigMutationExtensionPoint; import org.zstack.header.network.l3.*; import org.zstack.header.network.l3.datatypes.IpCapacityData; import org.zstack.header.network.service.GetSdnControllerExtensionPoint; @@ -594,6 +597,35 @@ public void fail(ErrorCode errorCode) { private void handle(APICreateL3NetworkMsg msg, NetworkCreateContext context, ReturnValueCompletion completion) { + if (context.getOrigin() == NetworkOperationOrigin.API) { + if (msg.getResourceUuid() == null) { + msg.setResourceUuid(Platform.getUuid()); + } + NetworkConfigMutation mutation = NetworkConfigMutation.l3Create( + msg.getL2NetworkUuid(), context.getOrigin(), msg.getId(), + msg.getSession() == null ? null : msg.getSession().getAccountUuid(), + msg.getResourceUuid(), msg.getType(), msg.getSystemTags()); + java.util.concurrent.atomic.AtomicReference created = + new java.util.concurrent.atomic.AtomicReference<>(); + if (mutateNetworkConfig(mutation, + localCompletion -> handle(msg, + NetworkCreateContext.cloudCommit(msg.getId()), + new ReturnValueCompletion(localCompletion) { + @Override + public void success(L3NetworkInventory inventory) { + created.set(inventory); + localCompletion.success(); + } + + @Override + public void fail(ErrorCode errorCode) { + localCompletion.fail(errorCode); + } + }), created, completion)) { + return; + } + } + L2NetworkVO l2Vo = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, msg.getL2NetworkUuid()).find(); assert l2Vo.getZoneUuid() != null; @@ -702,6 +734,37 @@ public void handle(Map data) { } + private boolean mutateNetworkConfig(NetworkConfigMutation mutation, + NetworkConfigLocalContinuation continuation, + java.util.concurrent.atomic.AtomicReference result, + ReturnValueCompletion completion) { + List providers = pluginRgty + .getExtensionList(NetworkConfigMutationExtensionPoint.class).stream() + .filter(provider -> provider.supports(mutation)) + .collect(java.util.stream.Collectors.toList()); + if (providers.isEmpty()) { + return false; + } + if (providers.size() != 1) { + completion.fail(errf.stringToInternalError(String.format( + "network mutation[%s] matched[%s] providers", + mutation.getKind(), providers.size()))); + return true; + } + providers.get(0).mutate(mutation, continuation, new Completion(completion) { + @Override + public void success() { + completion.success(result.get()); + } + + @Override + public void fail(ErrorCode errorCode) { + completion.fail(errorCode); + } + }); + return true; + } + @Override public String getId() { return bus.makeLocalServiceId(L3NetworkConstant.SERVICE_ID); @@ -887,22 +950,33 @@ public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip) { @Override public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDuplicatedAddress) { - NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( - ipRange.getL3NetworkUuid(), "UsedIp", null, "RESERVE_IP"); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admit(request); - if (errorCode != null) { - throw new CloudRuntimeException(errorCode.getDetails()); + return reserveIp(ipRange, ip, allowDuplicatedAddress, null, null); + } + + @Override + public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDuplicatedAddress, + String operationUuid, String operationStep) { + return new SQLBatchWithReturn() { + @Override + protected UsedIpInventory scripts() { + NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( + ipRange.getL3NetworkUuid(), "UsedIp", operationUuid, + operationStep == null ? "RESERVE_IP" : operationStep); + for (NetworkDependencyAdmissionExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { + ErrorCode errorCode = extension.admitWithLock(request); + if (errorCode != null) { + throw new CloudRuntimeException(errorCode.getDetails()); + } + } + if (NetworkUtils.isIpv4Address(ip)) { + return reserveIpv4(ipRange, ip, allowDuplicatedAddress); + } else if (IPv6NetworkUtils.isIpv6Address(ip)) { + return reserveIpv6(ipRange, ip, allowDuplicatedAddress); + } + return null; } - } - if (NetworkUtils.isIpv4Address(ip)) { - return reserveIpv4(ipRange, ip, allowDuplicatedAddress); - } else if (IPv6NetworkUtils.isIpv6Address(ip)) { - return reserveIpv6(ipRange, ip, allowDuplicatedAddress); - } else { - return null; - } + }.execute(); } @Override diff --git a/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java b/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java index 044e4e2d454..6cb9aed8c5d 100644 --- a/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java +++ b/network/src/main/java/org/zstack/network/l3/NormalIpRangeFactory.java @@ -127,7 +127,7 @@ public void rollback(FlowRollback trigger, Map data) { @Override public void run(FlowTrigger trigger, Map data) { - if (context.isProjection()) { + if (context.isRemoteWriteSuppressed()) { trigger.next(); return; } @@ -158,7 +158,7 @@ public void run(MessageReply reply) { @Override public void run(FlowTrigger trigger, Map data) { - if (context.isProjection()) { + if (context.isRemoteWriteSuppressed()) { trigger.next(); return; } diff --git a/network/src/main/java/org/zstack/network/l3/RandomIpAllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/RandomIpAllocatorStrategy.java index e4b8d1562f6..d402a22a6d9 100755 --- a/network/src/main/java/org/zstack/network/l3/RandomIpAllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/RandomIpAllocatorStrategy.java @@ -51,7 +51,8 @@ public UsedIpInventory allocateIp(IpAllocateMessage msg) { return null; } - UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed()); + UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); if (inv != null) { return inv; } diff --git a/network/src/main/java/org/zstack/network/l3/RandomIpv6AllocatorStrategy.java b/network/src/main/java/org/zstack/network/l3/RandomIpv6AllocatorStrategy.java index b9ea4737ec7..2b3ead694d8 100755 --- a/network/src/main/java/org/zstack/network/l3/RandomIpv6AllocatorStrategy.java +++ b/network/src/main/java/org/zstack/network/l3/RandomIpv6AllocatorStrategy.java @@ -50,7 +50,8 @@ public UsedIpInventory allocateIp(IpAllocateMessage msg) { return null; } - UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed()); + UsedIpInventory inv = l3NwMgr.reserveIp(tr, ip, msg.isDuplicatedIpAllowed(), + msg.getOperationUuid(), msg.getOperationStep()); if (inv != null) { return inv; } diff --git a/sdk/src/main/java/SourceClassMap.java b/sdk/src/main/java/SourceClassMap.java index 31718bb8205..0d503dedd9a 100644 --- a/sdk/src/main/java/SourceClassMap.java +++ b/sdk/src/main/java/SourceClassMap.java @@ -636,9 +636,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.sdk.network.zns.ZnsSegmentCandidateInventory"); - put("org.zstack.network.zns.ZnsSegmentProjectionPlan", "org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan"); - put("org.zstack.network.zns.ZnsSegmentRefInventory", "org.zstack.sdk.network.zns.ZnsSegmentRefInventory"); + put("org.zstack.network.zns.ZnsSegmentCloudProjectionInventory", "org.zstack.sdk.network.zns.ZnsSegmentCloudProjectionInventory"); put("org.zstack.network.zns.ZnsSegmentSyncOperationInventory", "org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory"); put("org.zstack.network.zns.ZnsTenantInventory", "org.zstack.sdk.network.zns.ZnsTenantInventory"); put("org.zstack.network.zns.ZnsTenantRouterInventory", "org.zstack.sdk.network.zns.ZnsTenantRouterInventory"); @@ -1750,9 +1748,7 @@ public class SourceClassMap { 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.ZnsSegmentCandidateInventory", "org.zstack.network.zns.ZnsSegmentCandidateInventory"); - put("org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan", "org.zstack.network.zns.ZnsSegmentProjectionPlan"); - put("org.zstack.sdk.network.zns.ZnsSegmentRefInventory", "org.zstack.network.zns.ZnsSegmentRefInventory"); + put("org.zstack.sdk.network.zns.ZnsSegmentCloudProjectionInventory", "org.zstack.network.zns.ZnsSegmentCloudProjectionInventory"); put("org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory", "org.zstack.network.zns.ZnsSegmentSyncOperationInventory"); put("org.zstack.sdk.network.zns.ZnsTenantInventory", "org.zstack.network.zns.ZnsTenantInventory"); put("org.zstack.sdk.network.zns.ZnsTenantRouterInventory", "org.zstack.network.zns.ZnsTenantRouterInventory"); diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java deleted file mode 100644 index 8a755e3275b..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsAction.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.zstack.sdk.network.zns; - -import java.util.HashMap; -import java.util.Map; -import org.zstack.sdk.*; - -public class GetCandidateZnsSegmentsAction 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.network.zns.GetCandidateZnsSegmentsResult 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 sdnControllerUuid; - - @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.String zoneUuid; - - @Param(required = false, maxLength = 255, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.String keyword; - - @Param(required = false) - public java.lang.Integer limit = 20; - - @Param(required = false) - public java.lang.Integer start = 0; - - @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; - - - private Result makeResult(ApiResult res) { - Result ret = new Result(); - if (res.error != null) { - ret.error = res.error; - return ret; - } - - org.zstack.sdk.network.zns.GetCandidateZnsSegmentsResult value = res.getResult(org.zstack.sdk.network.zns.GetCandidateZnsSegmentsResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.GetCandidateZnsSegmentsResult() : 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-controllers/{sdnControllerUuid}/zns-segment-candidates"; - info.needSession = true; - info.needPoll = false; - info.parameterName = ""; - return info; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java deleted file mode 100644 index f7902ba069c..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetCandidateZnsSegmentsResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.zstack.sdk.network.zns; - - - -public class GetCandidateZnsSegmentsResult { - public java.util.List candidates; - public void setCandidates(java.util.List candidates) { - this.candidates = candidates; - } - public java.util.List getCandidates() { - return this.candidates; - } - - public long total; - public void setTotal(long total) { - this.total = total; - } - public long getTotal() { - return this.total; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java deleted file mode 100644 index 18825af5908..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusAction.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.zstack.sdk.network.zns; - -import java.util.HashMap; -import java.util.Map; -import org.zstack.sdk.*; - -public class GetZnsSegmentSyncStatusAction 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.network.zns.GetZnsSegmentSyncStatusResult 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; - - - private Result makeResult(ApiResult res) { - Result ret = new Result(); - if (res.error != null) { - ret.error = res.error; - return ret; - } - - org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult value = res.getResult(org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusResult() : 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 = "/zns-segment-refs/{uuid}/sync-status"; - info.needSession = true; - info.needPoll = false; - info.parameterName = ""; - return info; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java deleted file mode 100644 index 38bab211aa8..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/GetZnsSegmentSyncStatusResult.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.zstack.sdk.network.zns; - -import org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory; -import org.zstack.sdk.ErrorCode; - -public class GetZnsSegmentSyncStatusResult { - 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.lang.Long currentConfigVersion; - public void setCurrentConfigVersion(java.lang.Long currentConfigVersion) { - this.currentConfigVersion = currentConfigVersion; - } - public java.lang.Long getCurrentConfigVersion() { - return this.currentConfigVersion; - } - - public java.lang.Long appliedConfigVersion; - public void setAppliedConfigVersion(java.lang.Long appliedConfigVersion) { - this.appliedConfigVersion = appliedConfigVersion; - } - public java.lang.Long getAppliedConfigVersion() { - return this.appliedConfigVersion; - } - - public ZnsSegmentSyncOperationInventory operation; - public void setOperation(ZnsSegmentSyncOperationInventory operation) { - this.operation = operation; - } - public ZnsSegmentSyncOperationInventory getOperation() { - return this.operation; - } - - public ErrorCode error; - public void setError(ErrorCode error) { - this.error = error; - } - public ErrorCode getError() { - return this.error; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionAction.java similarity index 81% rename from sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java rename to sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionAction.java index 9fa9de465f3..2a63d4c13d6 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefAction.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionAction.java @@ -4,7 +4,7 @@ import java.util.Map; import org.zstack.sdk.*; -public class QueryZnsSegmentRefAction extends QueryAction { +public class QueryZnsSegmentCloudProjectionAction extends QueryAction { private static final HashMap parameterMap = new HashMap<>(); @@ -12,7 +12,7 @@ public class QueryZnsSegmentRefAction extends QueryAction { public static class Result { public ErrorCode error; - public org.zstack.sdk.network.zns.QueryZnsSegmentRefResult value; + public org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionResult value; public Result throwExceptionIfError() { if (error != null) { @@ -34,8 +34,8 @@ private Result makeResult(ApiResult res) { return ret; } - org.zstack.sdk.network.zns.QueryZnsSegmentRefResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsSegmentRefResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsSegmentRefResult() : value; + org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionResult value = res.getResult(org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionResult.class); + ret.value = value == null ? new org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionResult() : value; return ret; } @@ -65,7 +65,7 @@ protected Map getNonAPIParameterMap() { protected RestInfo getRestInfo() { RestInfo info = new RestInfo(); info.httpMethod = "GET"; - info.path = "/zns-segment-refs"; + info.path = "/zns-segment-cloud-projections"; info.needSession = true; info.needPoll = false; info.parameterName = ""; diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionResult.java similarity index 89% rename from sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java rename to sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionResult.java index 49b5ebc7eea..6b6331b2094 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentRefResult.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/QueryZnsSegmentCloudProjectionResult.java @@ -2,7 +2,7 @@ -public class QueryZnsSegmentRefResult { +public class QueryZnsSegmentCloudProjectionResult { public java.util.List inventories; public void setInventories(java.util.List inventories) { this.inventories = inventories; diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java deleted file mode 100644 index d11f9131921..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentAction.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.zstack.sdk.network.zns; - -import java.util.HashMap; -import java.util.Map; -import org.zstack.sdk.*; - -public class UseZnsSegmentAction 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.network.zns.UseZnsSegmentResult 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 sdnControllerUuid; - - @Param(required = true, maxLength = 36, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.String znsSegmentUuid; - - @Param(required = true, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public java.lang.String zoneUuid; - - @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 = false, nonempty = false, nullElements = false, emptyString = true, numberRange = {0L,9223372036854775807L}, noTrim = false) - public java.lang.Long expectedConfigVersion; - - @Param(required = false, nonempty = false, nullElements = false, emptyString = true, noTrim = false) - public boolean dryRun = false; - - @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.network.zns.UseZnsSegmentResult value = res.getResult(org.zstack.sdk.network.zns.UseZnsSegmentResult.class); - ret.value = value == null ? new org.zstack.sdk.network.zns.UseZnsSegmentResult() : 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 = "/sdn-controllers/{sdnControllerUuid}/zns-segments/{znsSegmentUuid}/l2-networks"; - info.needSession = true; - info.needPoll = true; - info.parameterName = "params"; - return info; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java b/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java deleted file mode 100644 index 26602c7ebf7..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/UseZnsSegmentResult.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.zstack.sdk.network.zns; - -import org.zstack.sdk.network.zns.ZnsSegmentProjectionPlan; -import org.zstack.sdk.network.zns.ZnsSegmentRefInventory; -import org.zstack.sdk.L2NetworkInventory; -import org.zstack.sdk.L3NetworkInventory; - -public class UseZnsSegmentResult { - public ZnsSegmentProjectionPlan plan; - public void setPlan(ZnsSegmentProjectionPlan plan) { - this.plan = plan; - } - public ZnsSegmentProjectionPlan getPlan() { - return this.plan; - } - - public ZnsSegmentRefInventory relation; - public void setRelation(ZnsSegmentRefInventory relation) { - this.relation = relation; - } - public ZnsSegmentRefInventory getRelation() { - return this.relation; - } - - public L2NetworkInventory l2Network; - public void setL2Network(L2NetworkInventory l2Network) { - this.l2Network = l2Network; - } - public L2NetworkInventory getL2Network() { - return this.l2Network; - } - - public L3NetworkInventory l3Network; - public void setL3Network(L3NetworkInventory l3Network) { - this.l3Network = l3Network; - } - public L3NetworkInventory getL3Network() { - return this.l3Network; - } - - public java.util.List ipRanges; - public void setIpRanges(java.util.List ipRanges) { - this.ipRanges = ipRanges; - } - public java.util.List getIpRanges() { - return this.ipRanges; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java deleted file mode 100644 index 048bfba3679..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCandidateInventory.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.zstack.sdk.network.zns; - - - -public class ZnsSegmentCandidateInventory { - - public java.lang.String znsSegmentUuid; - public void setZnsSegmentUuid(java.lang.String znsSegmentUuid) { - this.znsSegmentUuid = znsSegmentUuid; - } - public java.lang.String getZnsSegmentUuid() { - return this.znsSegmentUuid; - } - - 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 zoneUuid; - public void setZoneUuid(java.lang.String zoneUuid) { - this.zoneUuid = zoneUuid; - } - public java.lang.String getZoneUuid() { - return this.zoneUuid; - } - - 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 transportZoneUuid; - public void setTransportZoneUuid(java.lang.String transportZoneUuid) { - this.transportZoneUuid = transportZoneUuid; - } - public java.lang.String getTransportZoneUuid() { - return this.transportZoneUuid; - } - - public java.lang.String availability; - public void setAvailability(java.lang.String availability) { - this.availability = availability; - } - public java.lang.String getAvailability() { - return this.availability; - } - - public java.lang.String reasonCode; - public void setReasonCode(java.lang.String reasonCode) { - this.reasonCode = reasonCode; - } - public java.lang.String getReasonCode() { - return this.reasonCode; - } - - public java.sql.Timestamp lastSeenDate; - public void setLastSeenDate(java.sql.Timestamp lastSeenDate) { - this.lastSeenDate = lastSeenDate; - } - public java.sql.Timestamp getLastSeenDate() { - return this.lastSeenDate; - } - -} diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCloudProjectionInventory.java similarity index 74% rename from sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java rename to sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCloudProjectionInventory.java index f24489626c9..f5ccc1e2158 100644 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentRefInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentCloudProjectionInventory.java @@ -1,8 +1,10 @@ package org.zstack.sdk.network.zns; +import org.zstack.sdk.L2NetworkInventory; +import org.zstack.sdk.L3NetworkInventory; +import org.zstack.sdk.network.zns.ZnsSegmentSyncOperationInventory; - -public class ZnsSegmentRefInventory { +public class ZnsSegmentCloudProjectionInventory { public java.lang.String uuid; public void setUuid(java.lang.String uuid) { @@ -52,14 +54,6 @@ public java.lang.String getL3NetworkUuid() { return this.l3NetworkUuid; } - public java.lang.String znsTenantRouterUuid; - public void setZnsTenantRouterUuid(java.lang.String znsTenantRouterUuid) { - this.znsTenantRouterUuid = znsTenantRouterUuid; - } - public java.lang.String getZnsTenantRouterUuid() { - return this.znsTenantRouterUuid; - } - public java.lang.String state; public void setState(java.lang.String state) { this.state = state; @@ -68,6 +62,22 @@ public java.lang.String getState() { return this.state; } + public java.lang.Long currentConfigVersion; + public void setCurrentConfigVersion(java.lang.Long currentConfigVersion) { + this.currentConfigVersion = currentConfigVersion; + } + public java.lang.Long getCurrentConfigVersion() { + return this.currentConfigVersion; + } + + public java.lang.Long appliedConfigVersion; + public void setAppliedConfigVersion(java.lang.Long appliedConfigVersion) { + this.appliedConfigVersion = appliedConfigVersion; + } + public java.lang.Long getAppliedConfigVersion() { + return this.appliedConfigVersion; + } + public java.lang.String operationUuid; public void setOperationUuid(java.lang.String operationUuid) { this.operationUuid = operationUuid; @@ -84,14 +94,6 @@ public java.lang.String getOperationStep() { return this.operationStep; } - public java.lang.Long appliedConfigVersion; - public void setAppliedConfigVersion(java.lang.Long appliedConfigVersion) { - this.appliedConfigVersion = appliedConfigVersion; - } - public java.lang.Long getAppliedConfigVersion() { - return this.appliedConfigVersion; - } - public java.lang.String lastErrorCode; public void setLastErrorCode(java.lang.String lastErrorCode) { this.lastErrorCode = lastErrorCode; @@ -124,4 +126,28 @@ public java.sql.Timestamp getLastOpDate() { return this.lastOpDate; } + public L2NetworkInventory l2Network; + public void setL2Network(L2NetworkInventory l2Network) { + this.l2Network = l2Network; + } + public L2NetworkInventory getL2Network() { + return this.l2Network; + } + + public L3NetworkInventory l3Network; + public void setL3Network(L3NetworkInventory l3Network) { + this.l3Network = l3Network; + } + public L3NetworkInventory getL3Network() { + return this.l3Network; + } + + public ZnsSegmentSyncOperationInventory operation; + public void setOperation(ZnsSegmentSyncOperationInventory operation) { + this.operation = operation; + } + public ZnsSegmentSyncOperationInventory getOperation() { + return this.operation; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java b/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java deleted file mode 100644 index e956f858eec..00000000000 --- a/sdk/src/main/java/org/zstack/sdk/network/zns/ZnsSegmentProjectionPlan.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.zstack.sdk.network.zns; - - - -public class ZnsSegmentProjectionPlan { - - public java.lang.String znsSegmentUuid; - public void setZnsSegmentUuid(java.lang.String znsSegmentUuid) { - this.znsSegmentUuid = znsSegmentUuid; - } - public java.lang.String getZnsSegmentUuid() { - return this.znsSegmentUuid; - } - - public java.lang.String zoneUuid; - public void setZoneUuid(java.lang.String zoneUuid) { - this.zoneUuid = zoneUuid; - } - public java.lang.String getZoneUuid() { - return this.zoneUuid; - } - - public java.lang.String l2NetworkType; - public void setL2NetworkType(java.lang.String l2NetworkType) { - this.l2NetworkType = l2NetworkType; - } - public java.lang.String getL2NetworkType() { - return this.l2NetworkType; - } - - public java.lang.String l3NetworkType; - public void setL3NetworkType(java.lang.String l3NetworkType) { - this.l3NetworkType = l3NetworkType; - } - public java.lang.String getL3NetworkType() { - return this.l3NetworkType; - } - - public java.lang.String l3Category; - public void setL3Category(java.lang.String l3Category) { - this.l3Category = l3Category; - } - public java.lang.String getL3Category() { - return this.l3Category; - } - - public java.lang.String znsTenantRouterUuid; - public void setZnsTenantRouterUuid(java.lang.String znsTenantRouterUuid) { - this.znsTenantRouterUuid = znsTenantRouterUuid; - } - public java.lang.String getZnsTenantRouterUuid() { - return this.znsTenantRouterUuid; - } - - public java.util.List warnings; - public void setWarnings(java.util.List warnings) { - this.warnings = warnings; - } - public java.util.List getWarnings() { - return this.warnings; - } - - public java.lang.Integer virtualNetworkId; - public void setVirtualNetworkId(java.lang.Integer virtualNetworkId) { - this.virtualNetworkId = virtualNetworkId; - } - public java.lang.Integer getVirtualNetworkId() { - return this.virtualNetworkId; - } - - public java.lang.Long configVersion; - public void setConfigVersion(java.lang.Long configVersion) { - this.configVersion = configVersion; - } - public java.lang.Long getConfigVersion() { - return this.configVersion; - } - - public java.util.List clusterUuids; - public void setClusterUuids(java.util.List clusterUuids) { - this.clusterUuids = clusterUuids; - } - public java.util.List getClusterUuids() { - return this.clusterUuids; - } - -} diff --git a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java index 4688c38bc26..fd8fe2de988 100644 --- a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java +++ b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java @@ -2,19 +2,69 @@ import org.junit.Test; import org.zstack.header.network.NetworkConfigMutation; +import org.zstack.header.network.l2.NetworkOperationOrigin; -import java.util.HashMap; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collections; import java.util.Map; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + public class NetworkConfigMutationTest { @Test - public void fieldsAreDefensivelyCopied() { - Map fields = new HashMap<>(); - fields.put("mtu", 1500); - NetworkConfigMutation mutation = new NetworkConfigMutation("r", "op", 1, "APPLY_LOCAL", fields); - fields.put("mtu", 9000); - if (!Integer.valueOf(1500).equals(mutation.getFields().get("mtu"))) { - throw new AssertionError("mutation fields changed after construction"); - } + public void encapsulationMutationHasATypedImmutableTarget() { + NetworkConfigMutation mutation = NetworkConfigMutation.encapsulation( + "l2-1", NetworkOperationOrigin.API, "operation-1", "account-1", + "L2GeneveNetwork", 5001); + + assertEquals(NetworkConfigMutation.Kind.ENCAP, mutation.getKind()); + assertEquals("l2-1", mutation.getL2Uuid()); + assertEquals("L2GeneveNetwork", mutation.getEncapsulation().getL2Type()); + assertEquals(5001, mutation.getEncapsulation().getVirtualNetworkId()); + assertFalse(Arrays.stream(NetworkConfigMutation.class.getDeclaredFields()) + .map(Field::getType).anyMatch(Map.class::isAssignableFrom)); + } + + @Test + public void l3AndIpamMutationsKeepTypedImmutableTargets() { + NetworkConfigMutation l3 = NetworkConfigMutation.l3Create( + "l2-1", NetworkOperationOrigin.API, "operation-2", "account-1", + "l3-1", "L3BasicNetwork", Collections.singletonList("router::r1")); + assertEquals(NetworkConfigMutation.Kind.L3_CREATE, l3.getKind()); + assertEquals("l3-1", l3.getL3Create().getL3Uuid()); + + NetworkConfigMutation ipam = NetworkConfigMutation.ipam( + "l2-1", NetworkOperationOrigin.API, "operation-3", "account-1", + "l3-1", 4, "192.0.2.1/24", Collections.singletonList( + new NetworkConfigMutation.IpRangeTarget( + "range-1", "192.0.2.10", "192.0.2.200"))); + assertEquals(NetworkConfigMutation.Kind.IPAM, ipam.getKind()); + assertEquals("l3-1", ipam.getIpam().getL3Uuid()); + assertEquals("range-1", ipam.getIpam().getRanges().get(0).getRangeUuid()); + + NetworkConfigMutation deleteIpam = NetworkConfigMutation.deleteIpam( + "l2-1", NetworkOperationOrigin.API, "operation-5", "account-1", + "l3-1", 4); + assertTrue(deleteIpam.getIpam().isDelete()); + assertEquals("l3-1", deleteIpam.getIpam().getL3Uuid()); + + NetworkConfigMutation dhcp = NetworkConfigMutation.dhcp( + "l2-1", NetworkOperationOrigin.API, "operation-4", "account-1", + "l3-1", true, Collections.singletonList("enableDHCP::true")); + assertEquals(NetworkConfigMutation.Kind.DHCP_DNS, dhcp.getKind()); + assertEquals("l3-1", dhcp.getDhcp().getL3Uuid()); + assertEquals(Collections.singletonList("enableDHCP::true"), + dhcp.getDhcp().getSystemTags()); + + NetworkConfigMutation dns = NetworkConfigMutation.dhcpDns( + "l2-1", NetworkOperationOrigin.API, "operation-6", "account-1", + "l3-1", 4, Collections.singletonList("192.0.2.53")); + assertEquals(Integer.valueOf(4), dns.getDhcp().getIpVersion()); + assertEquals(Collections.singletonList("192.0.2.53"), + dns.getDhcp().getDnsServers()); + assertTrue(dns.getDhcp().isEnabled()); } } diff --git a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java deleted file mode 100644 index 35d99c292f0..00000000000 --- a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/ProjectedMutationPolicyTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.zstack.test.integration.networkservice.provider.zns; - -import org.junit.Test; -import org.zstack.header.network.ProjectedMutationPolicy; - -public class ProjectedMutationPolicyTest { - @Test - public void staleSourceIsRejectedBeforeMutation() { - try { - ProjectedMutationPolicy.requireSourceType("L2VlanNetwork", "L2NoVlanNetwork"); - throw new AssertionError("stale source was accepted"); - } catch (IllegalArgumentException expected) { - } - } - - @Test - public void conversionWithDependenciesIsRejected() { - try { - ProjectedMutationPolicy.requireL2Conversion("L2NoVlanNetwork", "L2VlanNetwork", true); - throw new AssertionError("unsafe conversion was accepted"); - } catch (IllegalArgumentException expected) { - } - } -} diff --git a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy index a3e56a52492..c90481f499e 100644 --- a/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy +++ b/testlib/src/main/java/org/zstack/testlib/ApiHelper.groovy @@ -21,20 +21,20 @@ abstract class ApiHelper { c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a c() - + if (System.getProperty("apipath") != null) { if (a.apiId == null) { a.apiId = Platform.uuid } - + def tracker = new ApiPathTracker(a.apiId) def out = errorOut(a.call()) def path = tracker.getApiPath() if (!path.isEmpty()) { Test.apiPaths[a.class.name] = path.join(" --->\n") } - + return out } else { return errorOut(a.call()) @@ -53309,62 +53309,8 @@ abstract class ApiHelper { } - def getCandidateZnsSegments(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.GetCandidateZnsSegmentsAction.class) Closure c) { - def a = new org.zstack.sdk.network.zns.GetCandidateZnsSegmentsAction() - 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 getZnsSegmentSyncStatus(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusAction.class) Closure c) { - def a = new org.zstack.sdk.network.zns.GetZnsSegmentSyncStatusAction() - 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 queryZnsSegmentRef(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.QueryZnsSegmentRefAction.class) Closure c) { - def a = new org.zstack.sdk.network.zns.QueryZnsSegmentRefAction() + def queryZnsSegmentCloudProjection(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionAction.class) Closure c) { + def a = new org.zstack.sdk.network.zns.QueryZnsSegmentCloudProjectionAction() a.sessionId = Test.currentEnvSpec?.session?.uuid c.resolveStrategy = Closure.OWNER_FIRST c.delegate = a @@ -53450,33 +53396,6 @@ abstract class ApiHelper { } - def useZnsSegment(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.network.zns.UseZnsSegmentAction.class) Closure c) { - def a = new org.zstack.sdk.network.zns.UseZnsSegmentAction() - 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 addSNSSmsReceiver(@DelegatesTo(strategy = Closure.OWNER_FIRST, value = org.zstack.sdk.sns.AddSNSSmsReceiverAction.class) Closure c) { def a = new org.zstack.sdk.sns.AddSNSSmsReceiverAction() 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 305c62c8a16..31cc60cbf40 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -12288,6 +12288,23 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10063 = "ORG_ZSTACK_NETWORK_ZNS_10063"; public static final String ORG_ZSTACK_NETWORK_ZNS_10064 = "ORG_ZSTACK_NETWORK_ZNS_10064"; public static final String ORG_ZSTACK_NETWORK_ZNS_10065 = "ORG_ZSTACK_NETWORK_ZNS_10065"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10066 = "ORG_ZSTACK_NETWORK_ZNS_10066"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10067 = "ORG_ZSTACK_NETWORK_ZNS_10067"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10068 = "ORG_ZSTACK_NETWORK_ZNS_10068"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10069 = "ORG_ZSTACK_NETWORK_ZNS_10069"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10070 = "ORG_ZSTACK_NETWORK_ZNS_10070"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10071 = "ORG_ZSTACK_NETWORK_ZNS_10071"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10072 = "ORG_ZSTACK_NETWORK_ZNS_10072"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10073 = "ORG_ZSTACK_NETWORK_ZNS_10073"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10074 = "ORG_ZSTACK_NETWORK_ZNS_10074"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10075 = "ORG_ZSTACK_NETWORK_ZNS_10075"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10076 = "ORG_ZSTACK_NETWORK_ZNS_10076"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10077 = "ORG_ZSTACK_NETWORK_ZNS_10077"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10078 = "ORG_ZSTACK_NETWORK_ZNS_10078"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10079 = "ORG_ZSTACK_NETWORK_ZNS_10079"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10080 = "ORG_ZSTACK_NETWORK_ZNS_10080"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10081 = "ORG_ZSTACK_NETWORK_ZNS_10081"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10082 = "ORG_ZSTACK_NETWORK_ZNS_10082"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; From 2087063542bdc23d411afe9813083b598ef4d37a Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 10:51:28 +0900 Subject: [PATCH 62/66] [zns]: address MR review findings Resolves: ZCF-5485 Change-Id: Ib08976f297b10b956aa8d217f39e53f1b0b5e9c7 --- .../zstack/compute/vm/VmAllocateNicFlow.java | 13 +- conf/db/upgrade/V5.5.38__schema.sql | 26 ++++ .../header/network/l2/CreateL2NetworkMsg.java | 3 +- .../network/l2/L2NetworkCascadeExtension.java | 37 ++++- .../zstack/network/l2/L2NoVlanNetwork.java | 6 + .../network/l2/CreateL2NetworkMsgTest.java | 32 +++++ .../l2/L2NetworkCascadeExtensionTest.java | 128 ++++++++++++++++++ 7 files changed, 233 insertions(+), 12 deletions(-) create mode 100644 test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java 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 de9bbe68380..e6326ad060d 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -98,6 +98,7 @@ public void run(final FlowTrigger trigger, final Map data) { data.put(VmInstanceConstant.Params.VmAllocateNicFlow_nics.toString(), nics); List errs = new ArrayList<>(); List vmSystemTags = spec.getMessage() instanceof APIMessage ? ((APIMessage) spec.getMessage()).getSystemTags() : null; + String operationUuid = spec.getMessage() == null ? null : spec.getMessage().getId(); new While<>(VmNicSpec.getFirstL3NetworkInventoryOfSpec(spec.getL3Networks())).each((nicSpec, wcomp) -> { L3NetworkInventory nw = nicSpec.getL3Invs().get(0); @@ -133,7 +134,7 @@ public void run(final FlowTrigger trigger, final Map data) { @Override protected VmNicVO scripts() { ErrorCode admissionError = admitDependency(nw.getUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, null, + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, operationUuid, NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); if (admissionError != null) { throw new OperationFailureException(admissionError); @@ -156,13 +157,13 @@ public void success() { protected void scripts() { ErrorCode admissionError = admitDependency(nw.getUuid(), NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, - null, NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); + operationUuid, NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); if (admissionError != null) { throw new OperationFailureException(admissionError); } persistStaticIpIfNeeded(nic, nicVO, nw, nicNetworkInfoMap, spec); VmNicVO updated = dbf.updateAndRefresh(nicVO); - addVmNicConfig(updated, spec, nicSpec); + addVmNicConfig(updated, spec, nicSpec, operationUuid); } }.execute(); } catch (OperationFailureException e) { @@ -286,7 +287,8 @@ private void persistStaticIpIfNeeded(VmNicInventory nic, VmNicVO nicVO, } } - private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec nicSpec) { + private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec nicSpec, + String operationUuid) { if (nicSpec == null) { return; } @@ -300,7 +302,8 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni if (vmNicParm.getInboundBandwidth() != null || vmNicParm.getOutboundBandwidth() != null) { ErrorCode admissionError = admitDependency(vmNicVO.getL3NetworkUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC_QOS, null, + NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC_QOS, + operationUuid, NetworkDependencyAdmissionRequest.OPERATION_ADD_VM_NIC_QOS); if (admissionError != null) { throw new OperationFailureException(admissionError); diff --git a/conf/db/upgrade/V5.5.38__schema.sql b/conf/db/upgrade/V5.5.38__schema.sql index 8d2dd987fbb..c250cdf96b2 100644 --- a/conf/db/upgrade/V5.5.38__schema.sql +++ b/conf/db/upgrade/V5.5.38__schema.sql @@ -94,4 +94,30 @@ CREATE TABLE IF NOT EXISTS `zstack`.`ZnsSegmentRefVO` ( CHECK (`znsSegmentUuid` IS NOT NULL OR `state` = 'MigrationFailed') ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TRIGGER IF EXISTS `zstack`.`trg_zns_seg_ref_validate_insert`; +DELIMITER $$ +CREATE TRIGGER `zstack`.`trg_zns_seg_ref_validate_insert` +BEFORE INSERT ON `zstack`.`ZnsSegmentRefVO` +FOR EACH ROW +BEGIN + IF NEW.`znsSegmentUuid` IS NULL AND NEW.`state` <> 'MigrationFailed' THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'ZnsSegmentRefVO requires znsSegmentUuid unless migration failed'; + END IF; +END$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS `zstack`.`trg_zns_seg_ref_validate_update`; +DELIMITER $$ +CREATE TRIGGER `zstack`.`trg_zns_seg_ref_validate_update` +BEFORE UPDATE ON `zstack`.`ZnsSegmentRefVO` +FOR EACH ROW +BEGIN + IF NEW.`znsSegmentUuid` IS NULL AND NEW.`state` <> 'MigrationFailed' THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'ZnsSegmentRefVO requires znsSegmentUuid unless migration failed'; + END IF; +END$$ +DELIMITER ; + CALL ADD_COLUMN('ZnsSegmentRefVO', 'currentConfigVersion', 'BIGINT', 1, NULL); diff --git a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java index 9ff2ecc5ef1..85ce18295f4 100644 --- a/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/CreateL2NetworkMsg.java @@ -59,7 +59,8 @@ public APICreateL2NetworkMsg getSubtypeMessage() { } try { - Class subtypeClass = Class.forName(subtypeMessageClassName); + Class subtypeClass = Class.forName(subtypeMessageClassName, false, + CreateL2NetworkMsg.class.getClassLoader()); if (!APICreateL2NetworkMsg.class.isAssignableFrom(subtypeClass)) { throw new IllegalArgumentException(String.format( "invalid l2 subtype message class[%s]", subtypeMessageClassName)); diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 9cf9f91d6a8..5ba51a21ab6 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -108,11 +108,6 @@ private void handleDeletionCleanup(CascadeAction action, Completion completion) final List l2invs = l2NetworkFromAction(action); if (l2invs != null) { l2invs.forEach(l -> { - for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { - if (ext.supports(l)) { - ext.deleteLocalMetadata(l); - } - } dbf.eoCleanup(L2NetworkVO.class, l.getUuid()); }); } else { @@ -219,6 +214,7 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { return; } + List begun = new ArrayList<>(); try { for (L2NetworkInventory prinv : l2invs) { extpEmitter.preDelete(prinv); @@ -226,12 +222,14 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { if (ext.supports(prinv)) { ErrorCode errorCode = ext.begin(prinv); if (errorCode != null) { + cancelConfirmedDeletes(begun); completion.fail(errorCode); return; } + begun.add(new ConfirmedDelete(prinv, ext)); errorCode = ext.check(prinv); if (errorCode != null) { - ext.cancel(prinv); + cancelConfirmedDeletes(begun); completion.fail(errorCode); return; } @@ -241,10 +239,37 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { completion.success(); } catch (L2NetworkException e) { + cancelConfirmedDeletes(begun); completion.fail(inerr(ORG_ZSTACK_NETWORK_L2_10000, e.getMessage())); } } + private void cancelConfirmedDeletes(List begun) { + for (int i = begun.size() - 1; i >= 0; i--) { + ConfirmedDelete delete = begun.get(i); + try { + ErrorCode errorCode = delete.extension.cancel(delete.inventory); + if (errorCode != null) { + logger.warn(String.format("failed to cancel confirmed l2 network deletion[uuid:%s]: %s", + delete.inventory.getUuid(), errorCode)); + } + } catch (RuntimeException e) { + logger.warn(String.format("failed to cancel confirmed l2 network deletion[uuid:%s]", + delete.inventory.getUuid()), e); + } + } + } + + private static class ConfirmedDelete { + private final L2NetworkInventory inventory; + private final L2DeleteConfirmExtensionPoint extension; + + private ConfirmedDelete(L2NetworkInventory inventory, L2DeleteConfirmExtensionPoint extension) { + this.inventory = inventory; + this.extension = extension; + } + } + @Override public List getEdgeNames() { return Arrays.asList(ZoneVO.class.getSimpleName(), 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 37b281558eb..9a3bfd15c9a 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -478,6 +478,9 @@ public void run(SyncTaskChain chain) { } catch (OperationFailureException e) { localCompletion.fail(e.getErrorCode()); return; + } catch (Exception e) { + localCompletion.fail(errf.throwableToInternalError(e)); + return; } changeL2NetworkVlanId(msg, new Completion(localCompletion) { @Override @@ -1140,6 +1143,9 @@ protected void scripts() { } catch (OperationFailureException e) { completion.fail(e.getErrorCode()); return; + } catch (Exception e) { + completion.fail(errf.throwableToInternalError(e)); + return; } logger.debug(String.format("successfully attached L2Network[uuid:%s] to cluster [uuid:%s]", self.getUuid(), msg.getClusterUuid())); self = dbf.findByUuid(self.getUuid(), L2NetworkVO.class); diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java index 10f0ea2c1f7..a6122cbf764 100644 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java @@ -19,9 +19,19 @@ import org.zstack.network.l3.AttachNetworkServiceToL3Msg; import org.zstack.utils.gson.JSONObjectUtil; +import java.lang.reflect.Field; import java.util.Collections; +import java.util.concurrent.atomic.AtomicBoolean; public class CreateL2NetworkMsgTest { + private static final AtomicBoolean invalidSubtypeInitialized = new AtomicBoolean(); + + public static class InvalidSubtype { + static { + invalidSubtypeInitialized.set(true); + } + } + @Test public void internalCreateCarriesProviderSubtypeMessage() { CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); @@ -48,6 +58,28 @@ public void internalCreateSubtypeSurvivesCloudBusRoundTrip() { ((APICreateL2VlanNetworkMsg) restored.getSubtypeMessage()).getVlan()); } + @Test + public void internalCreateRejectsInvalidSubtypeWithoutInitializingIt() throws Exception { + invalidSubtypeInitialized.set(false); + CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); + setPrivateField(msg, "subtypeMessage", Collections.emptyMap()); + setPrivateField(msg, "subtypeMessageClassName", InvalidSubtype.class.getName()); + + try { + msg.getSubtypeMessage(); + Assert.fail("invalid subtype must be rejected"); + } catch (IllegalArgumentException ignored) { + } + + Assert.assertFalse(invalidSubtypeInitialized.get()); + } + + private void setPrivateField(Object target, String name, Object value) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + field.set(target, value); + } + @Test public void internalCreateUsesInheritedSystemTags() { CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java new file mode 100644 index 00000000000..bb316476424 --- /dev/null +++ b/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java @@ -0,0 +1,128 @@ +package org.zstack.test.integration.network.l2; + +import org.junit.Assert; +import org.junit.Test; +import org.mockito.InOrder; +import org.zstack.core.cascade.CascadeAction; +import org.zstack.core.cascade.CascadeConstant; +import org.zstack.core.componentloader.PluginRegistry; +import org.zstack.core.db.DatabaseFacade; +import org.zstack.header.core.Completion; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.network.l2.L2DeleteConfirmExtensionPoint; +import org.zstack.header.network.l2.L2NetworkInventory; +import org.zstack.header.network.l2.L2NetworkVO; +import org.zstack.network.l2.L2NetworkCascadeExtension; +import org.zstack.network.l2.L2NetworkExtensionPointEmitter; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collections; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class L2NetworkCascadeExtensionTest { + @Test + public void deletionCheckCancelsAllBegunReservationsWhenLaterCheckFails() throws Exception { + L2NetworkCascadeExtension extension = new L2NetworkCascadeExtension(); + L2NetworkExtensionPointEmitter emitter = mock(L2NetworkExtensionPointEmitter.class); + PluginRegistry pluginRegistry = mock(PluginRegistry.class); + L2DeleteConfirmExtensionPoint confirmedDelete = mock(L2DeleteConfirmExtensionPoint.class); + L2NetworkInventory first = inventory("l2-1"); + L2NetworkInventory second = inventory("l2-2"); + ErrorCode checkFailure = new ErrorCode("TEST", "check failed"); + + setPrivateField(extension, "extpEmitter", emitter); + setPrivateField(extension, "pluginRgty", pluginRegistry); + when(pluginRegistry.getExtensionList(L2DeleteConfirmExtensionPoint.class)) + .thenReturn(Collections.singletonList(confirmedDelete)); + when(confirmedDelete.supports(any(L2NetworkInventory.class))).thenReturn(true); + when(confirmedDelete.check(first)).thenReturn(null); + when(confirmedDelete.check(second)).thenReturn(checkFailure); + + RecordingCompletion completion = new RecordingCompletion(); + extension.asyncCascade(deletionCheckAction(first, second), completion); + + Assert.assertSame(checkFailure, completion.error); + Assert.assertFalse(completion.succeeded); + InOrder order = inOrder(confirmedDelete); + order.verify(confirmedDelete).begin(first); + order.verify(confirmedDelete).check(first); + order.verify(confirmedDelete).begin(second); + order.verify(confirmedDelete).check(second); + order.verify(confirmedDelete).cancel(second); + order.verify(confirmedDelete).cancel(first); + } + + @Test + public void deletionCleanupDoesNotDeleteConfirmedMetadataTwice() throws Exception { + L2NetworkCascadeExtension extension = new L2NetworkCascadeExtension(); + DatabaseFacade dbf = mock(DatabaseFacade.class); + PluginRegistry pluginRegistry = mock(PluginRegistry.class); + L2DeleteConfirmExtensionPoint confirmedDelete = mock(L2DeleteConfirmExtensionPoint.class); + L2NetworkInventory inventory = inventory("l2-1"); + + setPrivateField(extension, "dbf", dbf); + setPrivateField(extension, "pluginRgty", pluginRegistry); + when(pluginRegistry.getExtensionList(L2DeleteConfirmExtensionPoint.class)) + .thenReturn(Collections.singletonList(confirmedDelete)); + when(confirmedDelete.supports(inventory)).thenReturn(true); + + RecordingCompletion completion = new RecordingCompletion(); + extension.asyncCascade(deletionCleanupAction(inventory), completion); + + Assert.assertTrue(completion.succeeded); + verify(dbf).eoCleanup(L2NetworkVO.class, inventory.getUuid()); + verify(confirmedDelete, never()).deleteLocalMetadata(inventory); + } + + private CascadeAction deletionCheckAction(L2NetworkInventory... inventories) { + return new CascadeAction() + .setActionCode(CascadeConstant.DELETION_CHECK_CODE) + .setParentIssuer(L2NetworkVO.class.getSimpleName()) + .setParentIssuerContext(Arrays.asList(inventories)); + } + + private CascadeAction deletionCleanupAction(L2NetworkInventory inventory) { + return new CascadeAction() + .setActionCode(CascadeConstant.DELETION_CLEANUP_CODE) + .setParentIssuer(L2NetworkVO.class.getSimpleName()) + .setParentIssuerContext(Collections.singletonList(inventory)); + } + + private L2NetworkInventory inventory(String uuid) { + L2NetworkInventory inventory = new L2NetworkInventory(); + inventory.setUuid(uuid); + return inventory; + } + + private void setPrivateField(Object target, String name, Object value) throws Exception { + Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + field.set(target, value); + } + + private static class RecordingCompletion extends Completion { + private boolean succeeded; + private ErrorCode error; + + private RecordingCompletion() { + super(null); + } + + @Override + public void success() { + succeeded = true; + } + + @Override + public void fail(ErrorCode errorCode) { + error = errorCode; + } + } +} From 96288fc4fd16d9b0e4b7d6ca7e23efbc8562f814 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 11:13:42 +0900 Subject: [PATCH 63/66] [zns]: use integration coverage Resolves: ZCF-5485 Change-Id: I8ba9b4f503ec5720b0c4c69a712ade0cf112cf17 --- .../l2network/AttachL2NetworkCase.groovy | 38 +++++ .../l2network/L2NetworkCascadeCase.groovy | 149 +++++++++++++++++ .../test/core/rest/TestSyncHttpResponse.java | 14 -- .../network/l2/CreateL2NetworkMsgTest.java | 151 ------------------ .../l2/L2NetworkCascadeExtensionTest.java | 128 --------------- .../SdnControllerServiceConfigTest.java | 39 ----- .../zns/NetworkConfigMutationTest.java | 70 -------- 7 files changed, 187 insertions(+), 402 deletions(-) create mode 100644 test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy delete mode 100644 test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java delete mode 100644 test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java delete mode 100644 test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java delete mode 100644 test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java delete mode 100644 test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java diff --git a/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy b/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy index 7d5e8bbfa1d..90158ba77f9 100644 --- a/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy @@ -2,11 +2,15 @@ package org.zstack.test.integration.network.l2network import org.springframework.http.HttpEntity import org.zstack.core.asyncbatch.While +import org.zstack.core.componentloader.PluginRegistry import org.zstack.core.db.DatabaseFacade import org.zstack.core.db.Q import org.zstack.header.core.NoErrorCompletion import org.zstack.header.core.NopeWhileDoneCompletion import org.zstack.header.core.WhileCompletion +import org.zstack.header.errorcode.ErrorCode +import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint +import org.zstack.header.network.NetworkDependencyAdmissionRequest import org.zstack.header.network.l2.L2NetworkClusterRefVO import org.zstack.header.network.l2.L2NetworkClusterRefVO_ import org.zstack.kvm.KVMAgentCommands @@ -97,6 +101,7 @@ public class AttachL2NetworkCase extends SubCase{ testCreateL2NetworkWithoutPhysicalInterface() testAttachL2NoVlanNetwork() testAttachL2ValnNetwork() + testAttachL2NetworkReturnsFailureWhenAdmissionThrows() testAttachL2NoVlanNetworkSynchronously() testAttachL2VlanNetworkSynchronously() testAddHost() @@ -196,6 +201,31 @@ public class AttachL2NetworkCase extends SubCase{ } } + void testAttachL2NetworkReturnsFailureWhenAdmissionThrows() { + L2NetworkInventory l2 = env.inventoryByName("l2-2") + ClusterInventory cluster = env.inventoryByName("cluster2") + List extensions = bean(PluginRegistry.class) + .getExtensionList(NetworkDependencyAdmissionExtensionPoint.class) + def extension = new ThrowingNetworkDependencyAdmissionExtension() + extensions.add(extension) + + try { + expectError { + attachL2NetworkToCluster { + l2NetworkUuid = l2.uuid + clusterUuid = cluster.uuid + } + } + } finally { + extensions.remove(extension) + } + + assert Q.New(L2NetworkClusterRefVO.class) + .eq(L2NetworkClusterRefVO_.l2NetworkUuid, l2.uuid) + .eq(L2NetworkClusterRefVO_.clusterUuid, cluster.uuid) + .count() == 0L + } + void testAttachL2NoVlanNetworkSynchronously(){ L2NetworkInventory l21 = env.inventoryByName("l2-1") L2NetworkInventory l22 = env.inventoryByName("l2-2") @@ -288,6 +318,14 @@ public class AttachL2NetworkCase extends SubCase{ } } + private static class ThrowingNetworkDependencyAdmissionExtension + implements NetworkDependencyAdmissionExtensionPoint { + @Override + ErrorCode admit(NetworkDependencyAdmissionRequest request) { + throw new IllegalStateException("simulated admission callback failure") + } + } + @Override public void clean() { env.delete() diff --git a/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy b/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy new file mode 100644 index 00000000000..2d95e4a2bc2 --- /dev/null +++ b/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy @@ -0,0 +1,149 @@ +package org.zstack.test.integration.network.l2network + +import org.zstack.core.componentloader.PluginRegistry +import org.zstack.core.db.DatabaseFacade +import org.zstack.header.errorcode.ErrorCode +import org.zstack.header.network.l2.L2DeleteConfirmExtensionPoint +import org.zstack.header.network.l2.L2NetworkInventory +import org.zstack.header.network.l2.L2NetworkVO +import org.zstack.sdk.L2NetworkInventory as SdkL2NetworkInventory +import org.zstack.sdk.ZoneInventory +import org.zstack.test.integration.network.NetworkTest +import org.zstack.testlib.EnvSpec +import org.zstack.testlib.SubCase + +class L2NetworkCascadeCase extends SubCase { + EnvSpec env + DatabaseFacade dbf + + @Override + void setup() { + useSpring(NetworkTest.springSpec) + } + + @Override + void environment() { + env = env { + zone { + name = "check-zone" + + l2NoVlanNetwork { + name = "check-l2-1" + physicalInterface = "eth0" + } + + l2NoVlanNetwork { + name = "check-l2-2" + physicalInterface = "eth1" + } + } + + zone { + name = "cleanup-zone" + + l2NoVlanNetwork { + name = "cleanup-l2" + physicalInterface = "eth2" + } + } + } + } + + @Override + void test() { + env.create { + dbf = bean(DatabaseFacade.class) + testDeleteZoneCancelsEveryConfirmedDeleteOnCheckFailure() + testDeleteL2NetworkRemovesConfirmedMetadataOnce() + } + } + + void testDeleteZoneCancelsEveryConfirmedDeleteOnCheckFailure() { + ZoneInventory zone = env.inventoryByName("check-zone") + def extension = new RecordingDeleteConfirmation(failOnSecondCheck: true) + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + + try { + expectError { + deleteZone { + uuid = zone.uuid + } + } + } finally { + extensions.remove(extension) + } + + assert extension.begun.size() == 2 + assert extension.cancelled == extension.begun.toList().reverse() + assert dbf.isExist(zone.uuid, org.zstack.header.zone.ZoneVO.class) + assert extension.begun.every { dbf.isExist(it, L2NetworkVO.class) } + } + + void testDeleteL2NetworkRemovesConfirmedMetadataOnce() { + SdkL2NetworkInventory l2 = env.inventoryByName("cleanup-l2") + def extension = new RecordingDeleteConfirmation() + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + + try { + deleteL2Network { + uuid = l2.uuid + } + } finally { + extensions.remove(extension) + } + + assert !dbf.isExist(l2.uuid, L2NetworkVO.class) + assert extension.localMetadataDeletes == [l2.uuid] + } + + @Override + void clean() { + env.delete() + } + + private static class RecordingDeleteConfirmation implements L2DeleteConfirmExtensionPoint { + boolean failOnSecondCheck + int checkCount + List begun = [] + List cancelled = [] + List localMetadataDeletes = [] + + @Override + boolean supports(L2NetworkInventory inventory) { + return true + } + + @Override + ErrorCode begin(L2NetworkInventory inventory) { + begun.add(inventory.uuid) + return null + } + + @Override + ErrorCode check(L2NetworkInventory inventory) { + checkCount++ + return failOnSecondCheck && checkCount == 2 ? + new ErrorCode("TEST", "simulated confirmation failure") : null + } + + @Override + ErrorCode delete(L2NetworkInventory inventory) { + return null + } + + @Override + ErrorCode cancel(L2NetworkInventory inventory) { + cancelled.add(inventory.uuid) + return null + } + + @Override + void deleteLocalMetadata(L2NetworkInventory inventory) { + localMetadataDeletes.add(inventory.uuid) + } + } +} diff --git a/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java b/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java deleted file mode 100644 index 776234759c2..00000000000 --- a/test/src/test/java/org/zstack/test/core/rest/TestSyncHttpResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.zstack.test.core.rest; - -import org.junit.Assert; -import org.junit.Test; -import org.zstack.header.rest.SyncHttpResponse; - -public class TestSyncHttpResponse { - @Test - public void preservesStatusAndBody() { - SyncHttpResponse response = new SyncHttpResponse(409, "conflict"); - Assert.assertEquals(409, response.getStatus()); - Assert.assertEquals("conflict", response.getBody()); - } -} diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java deleted file mode 100644 index a6122cbf764..00000000000 --- a/test/src/test/java/org/zstack/test/integration/network/l2/CreateL2NetworkMsgTest.java +++ /dev/null @@ -1,151 +0,0 @@ -package org.zstack.test.integration.network.l2; - -import org.junit.Assert; -import org.junit.Test; -import org.zstack.core.cloudbus.CloudBusGson; -import org.zstack.header.network.l2.APICreateL2NetworkMsg; -import org.zstack.header.network.l2.APICreateL2NoVlanNetworkMsg; -import org.zstack.header.network.l2.APICreateL2VlanNetworkMsg; -import org.zstack.header.network.l2.CreateL2NetworkMsg; -import org.zstack.header.network.l2.ExternalNetworkRef; -import org.zstack.header.network.l2.NetworkCreateContext; -import org.zstack.header.network.l2.NetworkOperationOrigin; -import org.zstack.header.network.l3.CreateL3NetworkMsg; -import org.zstack.header.network.l3.AddIpRangeMsg; -import org.zstack.header.network.l3.DeleteProjectedIpRangeMsg; -import org.zstack.header.network.l3.L3NetworkMessage; -import org.zstack.header.network.l3.UpdateProjectedDnsMsg; -import org.zstack.header.network.l3.UpdateProjectedIpRangeMsg; -import org.zstack.network.l3.AttachNetworkServiceToL3Msg; -import org.zstack.utils.gson.JSONObjectUtil; - -import java.lang.reflect.Field; -import java.util.Collections; -import java.util.concurrent.atomic.AtomicBoolean; - -public class CreateL2NetworkMsgTest { - private static final AtomicBoolean invalidSubtypeInitialized = new AtomicBoolean(); - - public static class InvalidSubtype { - static { - invalidSubtypeInitialized.set(true); - } - } - - @Test - public void internalCreateCarriesProviderSubtypeMessage() { - CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); - APICreateL2NetworkMsg subtype = new APICreateL2NoVlanNetworkMsg(); - - msg.setSubtypeMessage(subtype); - - Assert.assertSame(subtype, msg.getSubtypeMessage()); - } - - @Test - public void internalCreateSubtypeSurvivesCloudBusRoundTrip() { - CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); - APICreateL2VlanNetworkMsg subtype = new APICreateL2VlanNetworkMsg(); - subtype.setVlan(101); - msg.setSubtypeMessage(subtype); - - String json = CloudBusGson.toJson(msg); - CreateL2NetworkMsg restored = (CreateL2NetworkMsg) CloudBusGson.fromJson(json); - - Assert.assertTrue(json.contains(APICreateL2VlanNetworkMsg.class.getName())); - Assert.assertTrue(restored.getSubtypeMessage() instanceof APICreateL2VlanNetworkMsg); - Assert.assertEquals(101, - ((APICreateL2VlanNetworkMsg) restored.getSubtypeMessage()).getVlan()); - } - - @Test - public void internalCreateRejectsInvalidSubtypeWithoutInitializingIt() throws Exception { - invalidSubtypeInitialized.set(false); - CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); - setPrivateField(msg, "subtypeMessage", Collections.emptyMap()); - setPrivateField(msg, "subtypeMessageClassName", InvalidSubtype.class.getName()); - - try { - msg.getSubtypeMessage(); - Assert.fail("invalid subtype must be rejected"); - } catch (IllegalArgumentException ignored) { - } - - Assert.assertFalse(invalidSubtypeInitialized.get()); - } - - private void setPrivateField(Object target, String name, Object value) throws Exception { - Field field = target.getClass().getDeclaredField(name); - field.setAccessible(true); - field.set(target, value); - } - - @Test - public void internalCreateUsesInheritedSystemTags() { - CreateL2NetworkMsg msg = new CreateL2NetworkMsg(); - msg.setSystemTags(Collections.singletonList("projection::zns")); - - String json = JSONObjectUtil.toJsonString(msg); - - Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); - Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); - } - - @Test - public void internalL3CreateUsesInheritedSystemTags() { - CreateL3NetworkMsg msg = new CreateL3NetworkMsg(); - msg.setSystemTags(Collections.singletonList("projection::zns")); - - String json = JSONObjectUtil.toJsonString(msg); - - Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); - Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); - } - - @Test - public void internalIpRangeCreateUsesInheritedSystemTags() { - AddIpRangeMsg msg = new AddIpRangeMsg(); - msg.setSystemTags(Collections.singletonList("projection::zns")); - - String json = JSONObjectUtil.toJsonString(msg); - - Assert.assertEquals(1, json.split("\\\"systemTags\\\"", -1).length - 1); - Assert.assertEquals("projection::zns", msg.getSystemTags().get(0)); - } - - @Test - public void internalDnsProjectionCarriesLocalOnlyContext() { - UpdateProjectedDnsMsg msg = new UpdateProjectedDnsMsg(); - msg.setL3NetworkUuid("l3-uuid"); - msg.setDns(Collections.singletonList("192.0.2.53")); - msg.setContext(NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_REFRESH, - new ExternalNetworkRef("dhcp-config-uuid", "account-uuid"))); - - Assert.assertTrue(msg.getContext().isProjection()); - Assert.assertEquals("192.0.2.53", msg.getDns().get(0)); - } - - @Test - public void internalIpRangeRefreshCarriesLocalOnlyContext() { - NetworkCreateContext context = NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_REFRESH, - new ExternalNetworkRef("range-uuid", "account-uuid")); - UpdateProjectedIpRangeMsg update = new UpdateProjectedIpRangeMsg(); - update.setContext(context); - DeleteProjectedIpRangeMsg delete = new DeleteProjectedIpRangeMsg(); - delete.setContext(context); - - Assert.assertTrue(update.getContext().isProjection()); - Assert.assertTrue(delete.getContext().isProjection()); - Assert.assertTrue(update instanceof L3NetworkMessage); - Assert.assertTrue(delete instanceof L3NetworkMessage); - } - - @Test - public void internalNetworkServiceAttachCarriesLocalOnlyContext() { - AttachNetworkServiceToL3Msg msg = new AttachNetworkServiceToL3Msg(); - msg.setContext(NetworkCreateContext.projection(NetworkOperationOrigin.ZNS_PROJECTION, - new ExternalNetworkRef("dhcp-service-uuid", "account-uuid"))); - - Assert.assertTrue(msg.getContext().isProjection()); - } -} diff --git a/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java b/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java deleted file mode 100644 index bb316476424..00000000000 --- a/test/src/test/java/org/zstack/test/integration/network/l2/L2NetworkCascadeExtensionTest.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.zstack.test.integration.network.l2; - -import org.junit.Assert; -import org.junit.Test; -import org.mockito.InOrder; -import org.zstack.core.cascade.CascadeAction; -import org.zstack.core.cascade.CascadeConstant; -import org.zstack.core.componentloader.PluginRegistry; -import org.zstack.core.db.DatabaseFacade; -import org.zstack.header.core.Completion; -import org.zstack.header.errorcode.ErrorCode; -import org.zstack.header.network.l2.L2DeleteConfirmExtensionPoint; -import org.zstack.header.network.l2.L2NetworkInventory; -import org.zstack.header.network.l2.L2NetworkVO; -import org.zstack.network.l2.L2NetworkCascadeExtension; -import org.zstack.network.l2.L2NetworkExtensionPointEmitter; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.inOrder; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class L2NetworkCascadeExtensionTest { - @Test - public void deletionCheckCancelsAllBegunReservationsWhenLaterCheckFails() throws Exception { - L2NetworkCascadeExtension extension = new L2NetworkCascadeExtension(); - L2NetworkExtensionPointEmitter emitter = mock(L2NetworkExtensionPointEmitter.class); - PluginRegistry pluginRegistry = mock(PluginRegistry.class); - L2DeleteConfirmExtensionPoint confirmedDelete = mock(L2DeleteConfirmExtensionPoint.class); - L2NetworkInventory first = inventory("l2-1"); - L2NetworkInventory second = inventory("l2-2"); - ErrorCode checkFailure = new ErrorCode("TEST", "check failed"); - - setPrivateField(extension, "extpEmitter", emitter); - setPrivateField(extension, "pluginRgty", pluginRegistry); - when(pluginRegistry.getExtensionList(L2DeleteConfirmExtensionPoint.class)) - .thenReturn(Collections.singletonList(confirmedDelete)); - when(confirmedDelete.supports(any(L2NetworkInventory.class))).thenReturn(true); - when(confirmedDelete.check(first)).thenReturn(null); - when(confirmedDelete.check(second)).thenReturn(checkFailure); - - RecordingCompletion completion = new RecordingCompletion(); - extension.asyncCascade(deletionCheckAction(first, second), completion); - - Assert.assertSame(checkFailure, completion.error); - Assert.assertFalse(completion.succeeded); - InOrder order = inOrder(confirmedDelete); - order.verify(confirmedDelete).begin(first); - order.verify(confirmedDelete).check(first); - order.verify(confirmedDelete).begin(second); - order.verify(confirmedDelete).check(second); - order.verify(confirmedDelete).cancel(second); - order.verify(confirmedDelete).cancel(first); - } - - @Test - public void deletionCleanupDoesNotDeleteConfirmedMetadataTwice() throws Exception { - L2NetworkCascadeExtension extension = new L2NetworkCascadeExtension(); - DatabaseFacade dbf = mock(DatabaseFacade.class); - PluginRegistry pluginRegistry = mock(PluginRegistry.class); - L2DeleteConfirmExtensionPoint confirmedDelete = mock(L2DeleteConfirmExtensionPoint.class); - L2NetworkInventory inventory = inventory("l2-1"); - - setPrivateField(extension, "dbf", dbf); - setPrivateField(extension, "pluginRgty", pluginRegistry); - when(pluginRegistry.getExtensionList(L2DeleteConfirmExtensionPoint.class)) - .thenReturn(Collections.singletonList(confirmedDelete)); - when(confirmedDelete.supports(inventory)).thenReturn(true); - - RecordingCompletion completion = new RecordingCompletion(); - extension.asyncCascade(deletionCleanupAction(inventory), completion); - - Assert.assertTrue(completion.succeeded); - verify(dbf).eoCleanup(L2NetworkVO.class, inventory.getUuid()); - verify(confirmedDelete, never()).deleteLocalMetadata(inventory); - } - - private CascadeAction deletionCheckAction(L2NetworkInventory... inventories) { - return new CascadeAction() - .setActionCode(CascadeConstant.DELETION_CHECK_CODE) - .setParentIssuer(L2NetworkVO.class.getSimpleName()) - .setParentIssuerContext(Arrays.asList(inventories)); - } - - private CascadeAction deletionCleanupAction(L2NetworkInventory inventory) { - return new CascadeAction() - .setActionCode(CascadeConstant.DELETION_CLEANUP_CODE) - .setParentIssuer(L2NetworkVO.class.getSimpleName()) - .setParentIssuerContext(Collections.singletonList(inventory)); - } - - private L2NetworkInventory inventory(String uuid) { - L2NetworkInventory inventory = new L2NetworkInventory(); - inventory.setUuid(uuid); - return inventory; - } - - private void setPrivateField(Object target, String name, Object value) throws Exception { - Field field = target.getClass().getDeclaredField(name); - field.setAccessible(true); - field.set(target, value); - } - - private static class RecordingCompletion extends Completion { - private boolean succeeded; - private ErrorCode error; - - private RecordingCompletion() { - super(null); - } - - @Override - public void success() { - succeeded = true; - } - - @Override - public void fail(ErrorCode errorCode) { - error = errorCode; - } - } -} diff --git a/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java b/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java deleted file mode 100644 index 6d2ca5bf359..00000000000 --- a/test/src/test/java/org/zstack/test/integration/network/sdnController/SdnControllerServiceConfigTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.zstack.test.integration.network.sdnController; - -import org.junit.Assert; -import org.junit.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.parsers.DocumentBuilderFactory; -import java.nio.file.Paths; - -public class SdnControllerServiceConfigTest { - @Test - public void pullResourceApiIsRoutedToSdnControllerService() throws Exception { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - Document document = factory.newDocumentBuilder().parse( - Paths.get("../conf/serviceConfig/sdnController.xml").toFile()); - - NodeList messages = document.getElementsByTagNameNS("*", "message"); - for (int i = 0; i < messages.getLength(); i++) { - Element message = (Element) messages.item(i); - NodeList names = message.getElementsByTagNameNS("*", "name"); - if (names.getLength() == 0) { - continue; - } - Node name = names.item(0); - if ("org.zstack.sdnController.header.APIPullSdnControllerMsg" - .equals(name.getTextContent().trim())) { - Assert.assertEquals(0, - message.getElementsByTagNameNS("*", "serviceId").getLength()); - return; - } - } - - Assert.fail("APIPullSdnControllerMsg is not routed to SdnController service"); - } -} diff --git a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java b/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java deleted file mode 100644 index fd8fe2de988..00000000000 --- a/test/src/test/java/org/zstack/test/integration/networkservice/provider/zns/NetworkConfigMutationTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.zstack.test.integration.networkservice.provider.zns; - -import org.junit.Test; -import org.zstack.header.network.NetworkConfigMutation; -import org.zstack.header.network.l2.NetworkOperationOrigin; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class NetworkConfigMutationTest { - @Test - public void encapsulationMutationHasATypedImmutableTarget() { - NetworkConfigMutation mutation = NetworkConfigMutation.encapsulation( - "l2-1", NetworkOperationOrigin.API, "operation-1", "account-1", - "L2GeneveNetwork", 5001); - - assertEquals(NetworkConfigMutation.Kind.ENCAP, mutation.getKind()); - assertEquals("l2-1", mutation.getL2Uuid()); - assertEquals("L2GeneveNetwork", mutation.getEncapsulation().getL2Type()); - assertEquals(5001, mutation.getEncapsulation().getVirtualNetworkId()); - assertFalse(Arrays.stream(NetworkConfigMutation.class.getDeclaredFields()) - .map(Field::getType).anyMatch(Map.class::isAssignableFrom)); - } - - @Test - public void l3AndIpamMutationsKeepTypedImmutableTargets() { - NetworkConfigMutation l3 = NetworkConfigMutation.l3Create( - "l2-1", NetworkOperationOrigin.API, "operation-2", "account-1", - "l3-1", "L3BasicNetwork", Collections.singletonList("router::r1")); - assertEquals(NetworkConfigMutation.Kind.L3_CREATE, l3.getKind()); - assertEquals("l3-1", l3.getL3Create().getL3Uuid()); - - NetworkConfigMutation ipam = NetworkConfigMutation.ipam( - "l2-1", NetworkOperationOrigin.API, "operation-3", "account-1", - "l3-1", 4, "192.0.2.1/24", Collections.singletonList( - new NetworkConfigMutation.IpRangeTarget( - "range-1", "192.0.2.10", "192.0.2.200"))); - assertEquals(NetworkConfigMutation.Kind.IPAM, ipam.getKind()); - assertEquals("l3-1", ipam.getIpam().getL3Uuid()); - assertEquals("range-1", ipam.getIpam().getRanges().get(0).getRangeUuid()); - - NetworkConfigMutation deleteIpam = NetworkConfigMutation.deleteIpam( - "l2-1", NetworkOperationOrigin.API, "operation-5", "account-1", - "l3-1", 4); - assertTrue(deleteIpam.getIpam().isDelete()); - assertEquals("l3-1", deleteIpam.getIpam().getL3Uuid()); - - NetworkConfigMutation dhcp = NetworkConfigMutation.dhcp( - "l2-1", NetworkOperationOrigin.API, "operation-4", "account-1", - "l3-1", true, Collections.singletonList("enableDHCP::true")); - assertEquals(NetworkConfigMutation.Kind.DHCP_DNS, dhcp.getKind()); - assertEquals("l3-1", dhcp.getDhcp().getL3Uuid()); - assertEquals(Collections.singletonList("enableDHCP::true"), - dhcp.getDhcp().getSystemTags()); - - NetworkConfigMutation dns = NetworkConfigMutation.dhcpDns( - "l2-1", NetworkOperationOrigin.API, "operation-6", "account-1", - "l3-1", 4, Collections.singletonList("192.0.2.53")); - assertEquals(Integer.valueOf(4), dns.getDhcp().getIpVersion()); - assertEquals(Collections.singletonList("192.0.2.53"), - dns.getDhcp().getDnsServers()); - assertTrue(dns.getDhcp().isEnabled()); - } -} From f6d91d9740525915429b91691d8edfa011848bed Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 13:22:33 +0900 Subject: [PATCH 64/66] [zns]: converge ZNS network guards Resolves: ZCF-5485 Change-Id: I473af531a4605a34a321e14a7c5874ff41776b04 --- .../zstack/compute/vm/VmAllocateNicFlow.java | 58 +++++++++---------- .../NetworkDeleteGuardExtensionPoint.java | 11 ++++ ...workDependencyAdmissionExtensionPoint.java | 11 ---- .../NetworkDependencyAdmissionRequest.java | 25 -------- .../vm/VmNicQosConfigExtensionPoint.java | 7 +++ .../zstack/network/l2/L2NoVlanNetwork.java | 23 -------- .../org/zstack/network/l3/L3BasicNetwork.java | 28 --------- .../network/l3/L3NetworkManagerImpl.java | 12 ++-- .../l2network/AttachL2NetworkCase.groovy | 37 ------------ 9 files changed, 50 insertions(+), 162 deletions(-) create mode 100644 header/src/main/java/org/zstack/header/network/NetworkDeleteGuardExtensionPoint.java delete mode 100644 header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java delete mode 100644 header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java create mode 100644 header/src/main/java/org/zstack/header/vm/VmNicQosConfigExtensionPoint.java 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 e6326ad060d..3aa81091713 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java @@ -23,8 +23,7 @@ import org.zstack.header.image.ImagePlatform; import org.zstack.header.message.APIMessage; import org.zstack.header.network.l3.*; -import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; -import org.zstack.header.network.NetworkDependencyAdmissionRequest; +import org.zstack.header.network.NetworkDeleteGuardExtensionPoint; import org.zstack.header.vm.*; import org.zstack.network.l3.L3NetworkManager; import org.zstack.resourceconfig.ResourceConfig; @@ -98,8 +97,6 @@ public void run(final FlowTrigger trigger, final Map data) { data.put(VmInstanceConstant.Params.VmAllocateNicFlow_nics.toString(), nics); List errs = new ArrayList<>(); List vmSystemTags = spec.getMessage() instanceof APIMessage ? ((APIMessage) spec.getMessage()).getSystemTags() : null; - String operationUuid = spec.getMessage() == null ? null : spec.getMessage().getId(); - new While<>(VmNicSpec.getFirstL3NetworkInventoryOfSpec(spec.getL3Networks())).each((nicSpec, wcomp) -> { L3NetworkInventory nw = nicSpec.getL3Invs().get(0); int deviceId = deviceIdBitmap.nextClearBit(0); @@ -133,11 +130,9 @@ public void run(final FlowTrigger trigger, final Map data) { nicVO = new SQLBatchWithReturn() { @Override protected VmNicVO scripts() { - ErrorCode admissionError = admitDependency(nw.getUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, operationUuid, - NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); - if (admissionError != null) { - throw new OperationFailureException(admissionError); + ErrorCode guardError = checkNetworkDeleteGuards(nw.getUuid(), true); + if (guardError != null) { + throw new OperationFailureException(guardError); } return vnicFactory.createVmNic(nic, spec); } @@ -155,15 +150,13 @@ public void success() { new SQLBatch() { @Override protected void scripts() { - ErrorCode admissionError = admitDependency(nw.getUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC, - operationUuid, NetworkDependencyAdmissionRequest.OPERATION_CREATE_VM_NIC); - if (admissionError != null) { - throw new OperationFailureException(admissionError); + ErrorCode guardError = checkNetworkDeleteGuards(nw.getUuid(), true); + if (guardError != null) { + throw new OperationFailureException(guardError); } persistStaticIpIfNeeded(nic, nicVO, nw, nicNetworkInfoMap, spec); VmNicVO updated = dbf.updateAndRefresh(nicVO); - addVmNicConfig(updated, spec, nicSpec, operationUuid); + addVmNicConfig(updated, spec, nicSpec); } }.execute(); } catch (OperationFailureException e) { @@ -287,8 +280,7 @@ private void persistStaticIpIfNeeded(VmNicInventory nic, VmNicVO nicVO, } } - private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec nicSpec, - String operationUuid) { + private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec nicSpec) { if (nicSpec == null) { return; } @@ -301,12 +293,9 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni VmNicParam vmNicParm = vmNicParms.get(0); if (vmNicParm.getInboundBandwidth() != null || vmNicParm.getOutboundBandwidth() != null) { - ErrorCode admissionError = admitDependency(vmNicVO.getL3NetworkUuid(), - NetworkDependencyAdmissionRequest.DEPENDENCY_VM_NIC_QOS, - operationUuid, - NetworkDependencyAdmissionRequest.OPERATION_ADD_VM_NIC_QOS); - if (admissionError != null) { - throw new OperationFailureException(admissionError); + ErrorCode qosError = validateVmNicQos(vmNicVO.getL3NetworkUuid()); + if (qosError != null) { + throw new OperationFailureException(qosError); } } @@ -324,13 +313,22 @@ private void addVmNicConfig(VmNicVO vmNicVO, VmInstanceSpec vmSpec, VmNicSpec ni } } - private ErrorCode admitDependency(String resourceUuid, String dependencyType, String operationUuid, - String operationStep) { - NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( - resourceUuid, dependencyType, operationUuid, operationStep); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admitWithLock(request); + private ErrorCode checkNetworkDeleteGuards(String l3NetworkUuid, boolean lock) { + for (NetworkDeleteGuardExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDeleteGuardExtensionPoint.class)) { + ErrorCode errorCode = lock ? extension.checkL3NetworkWithLock(l3NetworkUuid) + : extension.checkL3Network(l3NetworkUuid); + if (errorCode != null) { + return errorCode; + } + } + return null; + } + + private ErrorCode validateVmNicQos(String l3NetworkUuid) { + for (VmNicQosConfigExtensionPoint extension : + pluginRgty.getExtensionList(VmNicQosConfigExtensionPoint.class)) { + ErrorCode errorCode = extension.validateVmNicQos(l3NetworkUuid); if (errorCode != null) { return errorCode; } diff --git a/header/src/main/java/org/zstack/header/network/NetworkDeleteGuardExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkDeleteGuardExtensionPoint.java new file mode 100644 index 00000000000..4b599fbc09b --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/NetworkDeleteGuardExtensionPoint.java @@ -0,0 +1,11 @@ +package org.zstack.header.network; + +import org.zstack.header.errorcode.ErrorCode; + +public interface NetworkDeleteGuardExtensionPoint { + ErrorCode checkL3Network(String l3NetworkUuid); + + default ErrorCode checkL3NetworkWithLock(String l3NetworkUuid) { + return checkL3Network(l3NetworkUuid); + } +} diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java deleted file mode 100644 index de69aeddfd1..00000000000 --- a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionExtensionPoint.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.zstack.header.network; - -import org.zstack.header.errorcode.ErrorCode; - -public interface NetworkDependencyAdmissionExtensionPoint { - ErrorCode admit(NetworkDependencyAdmissionRequest request); - - default ErrorCode admitWithLock(NetworkDependencyAdmissionRequest request) { - return admit(request); - } -} diff --git a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java b/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java deleted file mode 100644 index f1519ff1c1b..00000000000 --- a/header/src/main/java/org/zstack/header/network/NetworkDependencyAdmissionRequest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.zstack.header.network; - -public final class NetworkDependencyAdmissionRequest { - public static final String DEPENDENCY_VM_NIC = "VmNic"; - public static final String DEPENDENCY_VM_NIC_QOS = "VmNicQos"; - public static final String OPERATION_CREATE_VM_NIC = "CREATE_VM_NIC"; - public static final String OPERATION_ADD_VM_NIC_QOS = "ADD_VM_NIC_QOS"; - - private final String resourceUuid; - private final String dependencyType; - private final String operationUuid; - private final String operationStep; - - public NetworkDependencyAdmissionRequest(String resourceUuid, String dependencyType, - String operationUuid, String operationStep) { - this.resourceUuid = resourceUuid; - this.dependencyType = dependencyType; - this.operationUuid = operationUuid; - this.operationStep = operationStep; - } - public String getResourceUuid() { return resourceUuid; } - public String getDependencyType() { return dependencyType; } - public String getOperationUuid() { return operationUuid; } - public String getOperationStep() { return operationStep; } -} diff --git a/header/src/main/java/org/zstack/header/vm/VmNicQosConfigExtensionPoint.java b/header/src/main/java/org/zstack/header/vm/VmNicQosConfigExtensionPoint.java new file mode 100644 index 00000000000..c657b19f0d3 --- /dev/null +++ b/header/src/main/java/org/zstack/header/vm/VmNicQosConfigExtensionPoint.java @@ -0,0 +1,7 @@ +package org.zstack.header.vm; + +import org.zstack.header.errorcode.ErrorCode; + +public interface VmNicQosConfigExtensionPoint { + ErrorCode validateVmNicQos(String l3NetworkUuid); +} 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 9a3bfd15c9a..59ed0c29324 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -39,8 +39,6 @@ import org.zstack.header.network.l2.*; import org.zstack.header.network.l3.L3NetworkVO; import org.zstack.header.network.l3.L3NetworkVO_; -import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; -import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.header.network.NetworkConfigLocalContinuation; import org.zstack.header.network.NetworkConfigMutation; import org.zstack.header.network.NetworkConfigMutationExtensionPoint; @@ -995,17 +993,6 @@ public void handle(ErrorCode errCode, Map data) { } private void attachL2NetworkToCluster(final AttachL2NetworkToClusterMsg msg, final Completion completion){ - NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( - msg.getL2NetworkUuid(), "ClusterAttach", msg.getOperationUuid(), - msg.getOperationStep() == null ? "ATTACH_CLUSTER" : msg.getOperationStep()); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admit(admission); - if (errorCode != null) { - completion.fail(errorCode); - return; - } - } long count = Q.New(L2NetworkClusterRefVO.class).eq(L2NetworkClusterRefVO_.clusterUuid, msg.getClusterUuid()) .eq(L2NetworkClusterRefVO_.l2NetworkUuid, msg.getL2NetworkUuid()).count(); if (count != 0) { @@ -1123,16 +1110,6 @@ public void success() { new SQLBatch() { @Override protected void scripts() { - NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( - msg.getL2NetworkUuid(), "ClusterAttach", msg.getOperationUuid(), - msg.getOperationStep() == null ? "ATTACH_CLUSTER" : msg.getOperationStep()); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admitWithLock(admission); - if (errorCode != null) { - throw new OperationFailureException(errorCode); - } - } L2NetworkClusterRefVO rvo = new L2NetworkClusterRefVO(); rvo.setClusterUuid(msg.getClusterUuid()); rvo.setL2NetworkUuid(self.getUuid()); 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 faec396a702..bf635e02b1b 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -42,8 +42,6 @@ import org.zstack.header.network.l2.L2NetworkConstant; import org.zstack.header.network.l2.L2NetworkVO; import org.zstack.header.network.l2.NetworkCreateContext; -import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; -import org.zstack.header.network.NetworkDependencyAdmissionRequest; import org.zstack.header.network.NetworkConfigLocalContinuation; import org.zstack.header.network.NetworkConfigMutation; import org.zstack.header.network.NetworkConfigMutationExtensionPoint; @@ -2127,20 +2125,6 @@ public void handle(ErrorCode errCode, Map data) { private void handle(final AttachNetworkServiceToL3Msg msg) { MessageReply reply = new MessageReply(); - NetworkDependencyAdmissionRequest admission = new NetworkDependencyAdmissionRequest( - msg.getL3NetworkUuid(), "NetworkService", - msg.getContext() == null ? null : msg.getContext().getOperationUuid(), - msg.getContext() == null || msg.getContext().getOperationStep() == null - ? "ATTACH_NETWORK_SERVICE" : msg.getContext().getOperationStep()); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admit(admission); - if (errorCode != null) { - reply.setError(errorCode); - bus.reply(msg, reply); - return; - } - } L3NetworkVO l3VO = dbf.findByUuid(msg.getL3NetworkUuid(), L3NetworkVO.class); List networkServiceProviderVOS = Q.New(NetworkServiceProviderVO.class).list(); Map providerUuidTypeMap = new HashMap<>(); @@ -2164,18 +2148,6 @@ private void handle(final AttachNetworkServiceToL3Msg msg) { new SQLBatch() { @Override protected void scripts() { - NetworkDependencyAdmissionRequest lockedAdmission = new NetworkDependencyAdmissionRequest( - msg.getL3NetworkUuid(), "NetworkService", - msg.getContext() == null ? null : msg.getContext().getOperationUuid(), - msg.getContext() == null || msg.getContext().getOperationStep() == null - ? "ATTACH_NETWORK_SERVICE" : msg.getContext().getOperationStep()); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admitWithLock(lockedAdmission); - if (errorCode != null) { - throw new OperationFailureException(errorCode); - } - } for (NetworkServiceL3NetworkRefVO ref : refVOS) { persist(ref); } 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 9070ecb5397..757a8ab5932 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkManagerImpl.java @@ -32,8 +32,7 @@ import org.zstack.header.message.Message; import org.zstack.header.message.MessageReply; import org.zstack.header.network.l2.*; -import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint; -import org.zstack.header.network.NetworkDependencyAdmissionRequest; +import org.zstack.header.network.NetworkDeleteGuardExtensionPoint; import org.zstack.header.network.NetworkConfigLocalContinuation; import org.zstack.header.network.NetworkConfigMutation; import org.zstack.header.network.NetworkConfigMutationExtensionPoint; @@ -959,12 +958,9 @@ public UsedIpInventory reserveIp(IpRangeVO ipRange, String ip, boolean allowDupl return new SQLBatchWithReturn() { @Override protected UsedIpInventory scripts() { - NetworkDependencyAdmissionRequest request = new NetworkDependencyAdmissionRequest( - ipRange.getL3NetworkUuid(), "UsedIp", operationUuid, - operationStep == null ? "RESERVE_IP" : operationStep); - for (NetworkDependencyAdmissionExtensionPoint extension : - pluginRgty.getExtensionList(NetworkDependencyAdmissionExtensionPoint.class)) { - ErrorCode errorCode = extension.admitWithLock(request); + for (NetworkDeleteGuardExtensionPoint extension : + pluginRgty.getExtensionList(NetworkDeleteGuardExtensionPoint.class)) { + ErrorCode errorCode = extension.checkL3NetworkWithLock(ipRange.getL3NetworkUuid()); if (errorCode != null) { throw new CloudRuntimeException(errorCode.getDetails()); } diff --git a/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy b/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy index 90158ba77f9..4c6637d5592 100644 --- a/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/network/l2network/AttachL2NetworkCase.groovy @@ -2,15 +2,11 @@ package org.zstack.test.integration.network.l2network import org.springframework.http.HttpEntity import org.zstack.core.asyncbatch.While -import org.zstack.core.componentloader.PluginRegistry import org.zstack.core.db.DatabaseFacade import org.zstack.core.db.Q import org.zstack.header.core.NoErrorCompletion import org.zstack.header.core.NopeWhileDoneCompletion import org.zstack.header.core.WhileCompletion -import org.zstack.header.errorcode.ErrorCode -import org.zstack.header.network.NetworkDependencyAdmissionExtensionPoint -import org.zstack.header.network.NetworkDependencyAdmissionRequest import org.zstack.header.network.l2.L2NetworkClusterRefVO import org.zstack.header.network.l2.L2NetworkClusterRefVO_ import org.zstack.kvm.KVMAgentCommands @@ -201,31 +197,6 @@ public class AttachL2NetworkCase extends SubCase{ } } - void testAttachL2NetworkReturnsFailureWhenAdmissionThrows() { - L2NetworkInventory l2 = env.inventoryByName("l2-2") - ClusterInventory cluster = env.inventoryByName("cluster2") - List extensions = bean(PluginRegistry.class) - .getExtensionList(NetworkDependencyAdmissionExtensionPoint.class) - def extension = new ThrowingNetworkDependencyAdmissionExtension() - extensions.add(extension) - - try { - expectError { - attachL2NetworkToCluster { - l2NetworkUuid = l2.uuid - clusterUuid = cluster.uuid - } - } - } finally { - extensions.remove(extension) - } - - assert Q.New(L2NetworkClusterRefVO.class) - .eq(L2NetworkClusterRefVO_.l2NetworkUuid, l2.uuid) - .eq(L2NetworkClusterRefVO_.clusterUuid, cluster.uuid) - .count() == 0L - } - void testAttachL2NoVlanNetworkSynchronously(){ L2NetworkInventory l21 = env.inventoryByName("l2-1") L2NetworkInventory l22 = env.inventoryByName("l2-2") @@ -318,14 +289,6 @@ public class AttachL2NetworkCase extends SubCase{ } } - private static class ThrowingNetworkDependencyAdmissionExtension - implements NetworkDependencyAdmissionExtensionPoint { - @Override - ErrorCode admit(NetworkDependencyAdmissionRequest request) { - throw new IllegalStateException("simulated admission callback failure") - } - } - @Override public void clean() { env.delete() From 8d93dc5f84233e880d9cc8931a74014b986d9c59 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 14:37:46 +0900 Subject: [PATCH 65/66] [zns]: address MR review findings Write sync callback bodies and propagate IP range failures. Resolves: ZCF-5485 Change-Id: I3739ab72929a0012108992fb5181b9729a843d68 --- .../org/zstack/core/rest/RESTFacadeImpl.java | 12 +++-- .../header/network/l3/SdnControllerL3.java | 2 +- .../core/rest/RestFacadeCase.groovy | 21 ++++++++ .../test/network/TestSdnControllerL3.java | 52 +++++++++++++++++++ 4 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 test/src/test/java/org/zstack/test/network/TestSdnControllerL3.java diff --git a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java index 17774f44137..03e1e940210 100755 --- a/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java +++ b/core/src/main/java/org/zstack/core/rest/RESTFacadeImpl.java @@ -109,10 +109,14 @@ private interface HttpCallHandlerWrapper { default void handle(HttpEntity entity, HttpServletResponse response) { String body = handle(entity); - if (body == null) { - response.setStatus(HttpStatus.SC_OK); - } else { - response.setStatus(HttpStatus.SC_OK, body); + response.setStatus(HttpStatus.SC_OK); + if (body != null) { + response.setContentType(RESTConstant.APP_JSON_UTF8); + try { + response.getWriter().write(body); + } catch (IOException e) { + throw new CloudRuntimeException(e); + } } } diff --git a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java index d64be78ae53..aa63a4bc4ba 100644 --- a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java +++ b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java @@ -27,7 +27,7 @@ public void success() { @Override public void fail(org.zstack.header.errorcode.ErrorCode errorCode) { - completion.success(); + completion.fail(errorCode); } }); } else { diff --git a/test/src/test/groovy/org/zstack/test/integration/core/rest/RestFacadeCase.groovy b/test/src/test/groovy/org/zstack/test/integration/core/rest/RestFacadeCase.groovy index 1e0f335f146..6af93cfba86 100644 --- a/test/src/test/groovy/org/zstack/test/integration/core/rest/RestFacadeCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/core/rest/RestFacadeCase.groovy @@ -1,11 +1,15 @@ package org.zstack.test.integration.core.rest import org.springframework.http.HttpEntity +import org.springframework.http.HttpHeaders +import org.springframework.http.HttpMethod +import org.springframework.http.ResponseEntity import org.zstack.core.rest.RESTFacadeImpl import org.zstack.header.console.ConsoleConstants import org.zstack.header.errorcode.ErrorCode import org.zstack.header.errorcode.SysErrors import org.zstack.header.rest.AsyncRESTCallback +import org.zstack.header.rest.RESTConstant import org.zstack.test.core.rest.RESTBeanForTest import org.zstack.test.integration.ZStackTest import org.zstack.testlib.EnvSpec @@ -40,9 +44,26 @@ class RestFacadeCase extends SubCase { void test() { env.create { testRestFacadeFailureWillBeRecorded() + testSyncHandlerWritesResponseBody() } } + void testSyncHandlerWritesResponseBody() { + RESTFacadeImpl restf = bean(RESTFacadeImpl.class) + String commandPath = "/test-rest-facade-response-body" + String body = '{"result":"ok"}' + restf.registerSyncHttpCallHandler(commandPath, Map.class) { Map ignored -> body } + + HttpHeaders headers = new HttpHeaders() + headers.set(RESTConstant.COMMAND_PATH, commandPath) + ResponseEntity response = restf.getRESTTemplate().exchange(restf.getSendCommandUrl(), + HttpMethod.POST, new HttpEntity("{}", headers), String.class) + + assert response.statusCodeValue == 200 + assert response.body == body + assert response.headers.getFirst(HttpHeaders.CONTENT_TYPE).startsWith("application/json") + } + void testRestFacadeFailureWillBeRecorded() { RESTFacadeImpl restf = bean(RESTFacadeImpl.class) diff --git a/test/src/test/java/org/zstack/test/network/TestSdnControllerL3.java b/test/src/test/java/org/zstack/test/network/TestSdnControllerL3.java new file mode 100644 index 00000000000..add09019ca8 --- /dev/null +++ b/test/src/test/java/org/zstack/test/network/TestSdnControllerL3.java @@ -0,0 +1,52 @@ +package org.zstack.test.network; + +import org.junit.Assert; +import org.junit.Test; +import org.zstack.header.core.Completion; +import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.network.l3.IpRangeInventory; +import org.zstack.header.network.l3.L3NetworkInventory; +import org.zstack.header.network.l3.SdnControllerL3; + +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class TestSdnControllerL3 { + @Test + public void testDeleteLastIpRangePropagatesControllerFailure() { + ErrorCode expected = new ErrorCode("SYS.1006", "Operation Error", "controller failed"); + AtomicReference actual = new AtomicReference<>(); + SdnControllerL3 controller = new SdnControllerL3() { + @Override + public void createL3Network(L3NetworkInventory inv, List systemTags, Completion completion) { + } + + @Override + public void deleteL3Network(L3NetworkInventory inv, Completion completion) { + } + + @Override + public void createIpRange(IpRangeInventory inv, Completion completion) { + } + + @Override + public void deleteIpRange(IpRangeInventory inv, Completion completion) { + completion.fail(expected); + } + }; + + controller.deleteIpRange(null, true, new Completion(null) { + @Override + public void success() { + Assert.fail("controller failure must not be converted to success"); + } + + @Override + public void fail(ErrorCode errorCode) { + actual.set(errorCode); + } + }); + + Assert.assertSame(expected, actual.get()); + } +} From d2e8d0332472b9a601e896508e3ec7d4a8f8da33 Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Fri, 14 Aug 2026 23:08:55 +0900 Subject: [PATCH 66/66] [zns]: confirm cloud segment deletion Add the cascade fence and whole-L2 cleanup context. Propagate provider confirmation before local deletion. Resolves: ZCF-5485 Change-Id: Ic0e7a0486dbf5441a2b26bfab04907190bec52fe --- .../org/zstack/compute/zone/ZoneBase.java | 9 +- .../zstack/core/cascade/CascadeAction.java | 13 ++ .../core/cascade/CascadeFacadeImpl.java | 69 ++++++ .../cascade/CascadePreExtensionPoint.java | 9 + .../rest/webhook/WebhookCallbackClient.java | 18 +- .../l2/L2DeleteConfirmExtensionPoint.java | 15 ++ .../l2/L2NetworkDeleteExtensionPoint.java | 5 + .../network/l2/L2NetworkDeletionMsg.java | 9 + .../network/l2/NetworkDeletionContext.java | 77 ++++++ .../l3/AfterDeleteIpRangeExtensionPoint.java | 4 + .../l3/IpRangeDeletionExtensionPoint.java | 10 + .../header/network/l3/IpRangeDeletionMsg.java | 10 + .../l3/L3NetworkDeleteExtensionPoint.java | 13 ++ .../network/l3/L3NetworkDeletionMsg.java | 10 + .../l3/SdnControllerDisableDHCPMsg.java | 11 +- .../header/network/l3/SdnControllerL3.java | 10 + .../network/l2/L2NetworkCascadeExtension.java | 142 ++++++++--- .../zstack/network/l2/L2NoVlanNetwork.java | 19 +- .../network/l2/NetworkDeletionContexts.java | 19 ++ .../network/l3/IpRangeCascadeExtension.java | 5 + .../org/zstack/network/l3/L3BasicNetwork.java | 40 ++-- .../network/l3/L3NetworkCascadeExtension.java | 6 +- .../l3/L3NetworkExtensionPointEmitter.java | 20 +- .../sdnController/SdnControllerBase.java | 9 +- .../zstack/sdnController/SdnControllerL2.java | 20 ++ .../SdnControllerManagerImpl.java | 71 +++++- .../l2network/L2NetworkCascadeCase.groovy | 220 +++++++++++++++++- .../CloudOperationsErrorCode.java | 27 +++ 28 files changed, 806 insertions(+), 84 deletions(-) create mode 100644 core/src/main/java/org/zstack/core/cascade/CascadePreExtensionPoint.java create mode 100644 header/src/main/java/org/zstack/header/network/l2/NetworkDeletionContext.java create mode 100644 network/src/main/java/org/zstack/network/l2/NetworkDeletionContexts.java diff --git a/compute/src/main/java/org/zstack/compute/zone/ZoneBase.java b/compute/src/main/java/org/zstack/compute/zone/ZoneBase.java index ba1f889a46f..fa483aced4e 100755 --- a/compute/src/main/java/org/zstack/compute/zone/ZoneBase.java +++ b/compute/src/main/java/org/zstack/compute/zone/ZoneBase.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Configurable; import org.zstack.core.cascade.CascadeConstant; +import org.zstack.core.cascade.CascadeAction; import org.zstack.core.cascade.CascadeFacade; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.db.DatabaseFacade; @@ -178,13 +179,15 @@ protected void handle(APIDeleteZoneMsg msg) { final String issuer = ZoneVO.class.getSimpleName(); ZoneInventory zinv = ZoneInventory.valueOf(self); final List ctx = Arrays.asList(zinv); + final CascadeAction cascadeAction = new CascadeAction().setRootIssuer(issuer) + .setRootIssuerContext(ctx).setParentIssuer(issuer).setParentIssuerContext(ctx); FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("delete-zone-%s", msg.getUuid())); if (msg.getDeletionMode() == APIDeleteMessage.DeletionMode.Permissive) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_CHECK_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_CHECK_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -199,7 +202,7 @@ public void fail(ErrorCode errorCode) { }).then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -216,7 +219,7 @@ public void fail(ErrorCode errorCode) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_FORCE_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); diff --git a/core/src/main/java/org/zstack/core/cascade/CascadeAction.java b/core/src/main/java/org/zstack/core/cascade/CascadeAction.java index 75722e03661..e6486d66b4c 100755 --- a/core/src/main/java/org/zstack/core/cascade/CascadeAction.java +++ b/core/src/main/java/org/zstack/core/cascade/CascadeAction.java @@ -2,6 +2,9 @@ import org.zstack.header.exception.CloudRuntimeException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** */ public class CascadeAction implements Cloneable { @@ -11,6 +14,7 @@ public class CascadeAction implements Cloneable { private Object rootIssuerContext; private String actionCode; private boolean fullTraverse; + private Map contexts = new ConcurrentHashMap<>(); public boolean isFullTraverse() { return fullTraverse; @@ -65,6 +69,15 @@ public CascadeAction copy() { } } + public CascadeAction putContext(String key, Object value) { + contexts.put(key, value); + return this; + } + + public T getContext(String key) { + return (T) contexts.get(key); + } + public String getActionCode() { return actionCode; } diff --git a/core/src/main/java/org/zstack/core/cascade/CascadeFacadeImpl.java b/core/src/main/java/org/zstack/core/cascade/CascadeFacadeImpl.java index f7dad373ce1..19aaec82db1 100755 --- a/core/src/main/java/org/zstack/core/cascade/CascadeFacadeImpl.java +++ b/core/src/main/java/org/zstack/core/cascade/CascadeFacadeImpl.java @@ -212,6 +212,14 @@ public void asyncCascade(CascadeAction action, final Completion completion) { TreeNode root = cascadeTree.get(action.getRootIssuer()); DebugUtils.Assert(root != null, String.format("found no CascadeExtension for %s", action.getRootIssuer())); + List prepared = new ArrayList<>(); + ErrorCode prepareError = prepareAsyncCascade(root, true, action.isFullTraverse(), action, + prepared, new HashSet<>()); + if (prepareError != null) { + rollbackPreparedCascade(prepared); + completion.fail(prepareError); + return; + } List paths = new ArrayList<>(); collectPathsForAsyncCascade(root, true, action.isFullTraverse(), action, paths, new HashSet<>()); FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); @@ -248,11 +256,72 @@ public void handle(Map data) { }).error(new FlowErrorHandler(completion) { @Override public void handle(ErrorCode errCode, Map data) { + rollbackPreparedCascade(prepared); completion.fail(errCode); } }).setName(String.format("Cascade: %s", action.getActionCode())).start(); } + private ErrorCode prepareAsyncCascade(TreeNode treeNode, boolean init, boolean fullTraverse, + CascadeAction action, List prepared, + Set mergePaths) { + Node node = treeNode.node; + String cascadePath = getCascadePath(action.getParentIssuer(), node.getName()); + if (mergePaths.add(cascadePath)) { + CascadeExtensionPoint extension = extensionForAction(node, action); + if (extension instanceof CascadePreExtensionPoint) { + ErrorCode error = ((CascadePreExtensionPoint) extension).beforeCascade(action); + if (error != null) { + return error; + } + prepared.add(Bucket.newBucket(extension, action)); + } + } + + CascadeAction childAction = init ? action : node.getExtension().createActionForChildResource(action); + if (fullTraverse && childAction == null) { + childAction = new CascadeAction(); + childAction.setActionCode(action.getActionCode()); + childAction.setRootIssuer(action.getRootIssuer()); + childAction.setRootIssuerContext(action.getRootIssuerContext()); + childAction.setParentIssuer(node.getName()); + childAction.setParentIssuerContext(null); + } + + if (childAction != null) { + checkForNullElement(node, childAction); + for (TreeNode child : treeNode.leafs) { + ErrorCode error = prepareAsyncCascade(child, false, fullTraverse, childAction, + prepared, mergePaths); + if (error != null) { + return error; + } + } + } + return null; + } + + private CascadeExtensionPoint extensionForAction(Node node, CascadeAction action) { + CascadeExtensionPoint extension = node.getExtension(); + if (extension instanceof CascadeWrapper) { + return ((CascadeWrapper) extension).findExtensionPointByParent(action.getParentIssuer()); + } + return extension; + } + + private void rollbackPreparedCascade(List prepared) { + for (int i = prepared.size() - 1; i >= 0; i--) { + CascadePreExtensionPoint extension = prepared.get(i).get(0); + CascadeAction action = prepared.get(i).get(1); + try { + extension.afterCascadeFailure(action); + } catch (RuntimeException e) { + logger.warn(String.format("failed to roll back cascade preparation[%s]", + extension.getClass().getName()), e); + } + } + } + private void runNode(Node node, CascadeAction caction, Completion completion) { List branches = asyncBranchCascadeExtensionPoints.get(node.getName()); boolean skipNode = false; diff --git a/core/src/main/java/org/zstack/core/cascade/CascadePreExtensionPoint.java b/core/src/main/java/org/zstack/core/cascade/CascadePreExtensionPoint.java new file mode 100644 index 00000000000..c1c547911c2 --- /dev/null +++ b/core/src/main/java/org/zstack/core/cascade/CascadePreExtensionPoint.java @@ -0,0 +1,9 @@ +package org.zstack.core.cascade; + +import org.zstack.header.errorcode.ErrorCode; + +public interface CascadePreExtensionPoint { + ErrorCode beforeCascade(CascadeAction action); + + void afterCascadeFailure(CascadeAction action); +} 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 index 0559312b6d2..7dbc0fbe415 100644 --- a/core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java +++ b/core/src/main/java/org/zstack/core/rest/webhook/WebhookCallbackClient.java @@ -99,14 +99,28 @@ public void start() { * @return the generated taskId */ public String submit(ReturnValueCompletion completion, TimeUnit unit, long timeout) { - String taskId = Platform.getUuid(); + return submit(Platform.getUuid(), completion, unit, timeout); + } + + public String submit(String taskId, ReturnValueCompletion completion, + TimeUnit unit, long timeout) { + if (taskId == null || taskId.trim().isEmpty()) { + throw new IllegalArgumentException("taskId cannot be empty"); + } 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)); + PendingEntry previous = pendingCalls.putIfAbsent(taskId, + new PendingEntry<>(completion, timeoutReceipt)); + if (previous != null) { + timeoutReceipt.cancel(); + throw new IllegalStateException(String.format( + "webhook taskId[%s] is already pending for path[%s]", + taskId, protocol.getCallbackPath())); + } return taskId; } diff --git a/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java index ca1912ffc97..b1fa1d36974 100644 --- a/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2DeleteConfirmExtensionPoint.java @@ -6,8 +6,23 @@ public interface L2DeleteConfirmExtensionPoint { boolean supports(L2NetworkInventory inventory); ErrorCode begin(L2NetworkInventory inventory); + default ErrorCode begin(L2NetworkInventory inventory, NetworkDeletionContext context) { + return begin(inventory); + } ErrorCode check(L2NetworkInventory inventory); + default ErrorCode check(L2NetworkInventory inventory, NetworkDeletionContext context) { + return check(inventory); + } ErrorCode delete(L2NetworkInventory inventory); + default ErrorCode delete(L2NetworkInventory inventory, NetworkDeletionContext context) { + return delete(inventory); + } ErrorCode cancel(L2NetworkInventory inventory); + default ErrorCode cancel(L2NetworkInventory inventory, NetworkDeletionContext context) { + return cancel(inventory); + } void deleteLocalMetadata(L2NetworkInventory inventory); + default void deleteLocalMetadata(L2NetworkInventory inventory, NetworkDeletionContext context) { + deleteLocalMetadata(inventory); + } } diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java index 70aaa7a71c7..8137ac6f61c 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeleteExtensionPoint.java @@ -21,5 +21,10 @@ public void done() { }); } + default void deleteL2Network(L2NetworkInventory inv, NetworkDeletionContext context, + Completion completion) { + deleteL2Network(inv, context == null ? null : context.getOperationUuid(), completion); + } + void afterDeleteL2Network(L2NetworkInventory inventory); } diff --git a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java index cb690673d11..b760f43376d 100755 --- a/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java +++ b/header/src/main/java/org/zstack/header/network/l2/L2NetworkDeletionMsg.java @@ -7,6 +7,7 @@ public class L2NetworkDeletionMsg extends DeletionMessage implements L2NetworkMessage { private String l2NetworkUuid; private String operationUuid; + private NetworkDeletionContext networkDeletionContext; public void setL2NetworkUuid(String l2NetworkUuid) { this.l2NetworkUuid = l2NetworkUuid; @@ -24,4 +25,12 @@ public String getOperationUuid() { public void setOperationUuid(String operationUuid) { this.operationUuid = operationUuid; } + + public NetworkDeletionContext getNetworkDeletionContext() { + return networkDeletionContext; + } + + public void setNetworkDeletionContext(NetworkDeletionContext networkDeletionContext) { + this.networkDeletionContext = networkDeletionContext; + } } diff --git a/header/src/main/java/org/zstack/header/network/l2/NetworkDeletionContext.java b/header/src/main/java/org/zstack/header/network/l2/NetworkDeletionContext.java new file mode 100644 index 00000000000..f1fc362ebfc --- /dev/null +++ b/header/src/main/java/org/zstack/header/network/l2/NetworkDeletionContext.java @@ -0,0 +1,77 @@ +package org.zstack.header.network.l2; + +public class NetworkDeletionContext { + public enum Origin { + WHOLE_L2_SEGMENT_DELETE + } + + private Origin origin; + private String operationUuid; + private String l2NetworkUuid; + private String rootIssuer; + private boolean forceDelete; + private boolean sourceUnavailableCleanup; + + public NetworkDeletionContext() { + } + + public NetworkDeletionContext(Origin origin, String operationUuid, String l2NetworkUuid, + String rootIssuer) { + this.origin = origin; + this.operationUuid = operationUuid; + this.l2NetworkUuid = l2NetworkUuid; + this.rootIssuer = rootIssuer; + } + + public Origin getOrigin() { + return origin; + } + + public void setOrigin(Origin origin) { + this.origin = origin; + } + + public String getOperationUuid() { + return operationUuid; + } + + public void setOperationUuid(String operationUuid) { + this.operationUuid = operationUuid; + } + + public String getL2NetworkUuid() { + return l2NetworkUuid; + } + + public void setL2NetworkUuid(String l2NetworkUuid) { + this.l2NetworkUuid = l2NetworkUuid; + } + + public String getRootIssuer() { + return rootIssuer; + } + + public void setRootIssuer(String rootIssuer) { + this.rootIssuer = rootIssuer; + } + + public boolean isWholeL2SegmentDelete() { + return Origin.WHOLE_L2_SEGMENT_DELETE == origin; + } + + public boolean isForceDelete() { + return forceDelete; + } + + public void setForceDelete(boolean forceDelete) { + this.forceDelete = forceDelete; + } + + public boolean isSourceUnavailableCleanup() { + return sourceUnavailableCleanup; + } + + public void setSourceUnavailableCleanup(boolean sourceUnavailableCleanup) { + this.sourceUnavailableCleanup = sourceUnavailableCleanup; + } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/AfterDeleteIpRangeExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/AfterDeleteIpRangeExtensionPoint.java index 70833859dfc..42fba54ce47 100644 --- a/header/src/main/java/org/zstack/header/network/l3/AfterDeleteIpRangeExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l3/AfterDeleteIpRangeExtensionPoint.java @@ -1,10 +1,14 @@ package org.zstack.header.network.l3; import org.zstack.header.core.Completion; +import org.zstack.header.network.l2.NetworkDeletionContext; /** * Created by boce.wang on 07/01/2025. */ public interface AfterDeleteIpRangeExtensionPoint { void afterDeleteIpRange(IpRangeInventory ipr); + default void afterDeleteIpRange(IpRangeInventory ipr, NetworkDeletionContext context) { + afterDeleteIpRange(ipr); + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionExtensionPoint.java index 3761e566dac..6ce6541aee4 100755 --- a/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionExtensionPoint.java @@ -1,16 +1,26 @@ package org.zstack.header.network.l3; import org.zstack.header.errorcode.ErrorCode; +import org.zstack.header.network.l2.NetworkDeletionContext; /** * Created by frank on 11/15/2015. */ public interface IpRangeDeletionExtensionPoint { void preDeleteIpRange(IpRangeInventory ipRange); + default void preDeleteIpRange(IpRangeInventory ipRange, NetworkDeletionContext context) { + preDeleteIpRange(ipRange); + } void beforeDeleteIpRange(IpRangeInventory ipRange); + default void beforeDeleteIpRange(IpRangeInventory ipRange, NetworkDeletionContext context) { + beforeDeleteIpRange(ipRange); + } void afterDeleteIpRange(IpRangeInventory ipRange); + default void afterDeleteIpRange(IpRangeInventory ipRange, NetworkDeletionContext context) { + afterDeleteIpRange(ipRange); + } void failedToDeleteIpRange(IpRangeInventory ipRange, ErrorCode errorCode); } diff --git a/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionMsg.java b/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionMsg.java index d14bdd3591e..3984455f3ab 100755 --- a/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/IpRangeDeletionMsg.java @@ -1,12 +1,14 @@ package org.zstack.header.network.l3; import org.zstack.header.message.DeletionMessage; +import org.zstack.header.network.l2.NetworkDeletionContext; /** */ public class IpRangeDeletionMsg extends DeletionMessage implements L3NetworkMessage { private String l3NetworkUuid; private String ipRangeUuid; + private NetworkDeletionContext networkDeletionContext; @Override public String getL3NetworkUuid() { @@ -24,4 +26,12 @@ public String getIpRangeUuid() { public void setIpRangeUuid(String ipRangeUuid) { this.ipRangeUuid = ipRangeUuid; } + + public NetworkDeletionContext getNetworkDeletionContext() { + return networkDeletionContext; + } + + public void setNetworkDeletionContext(NetworkDeletionContext networkDeletionContext) { + this.networkDeletionContext = networkDeletionContext; + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeleteExtensionPoint.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeleteExtensionPoint.java index 443018bd4fc..3b619ddc7f7 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeleteExtensionPoint.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeleteExtensionPoint.java @@ -1,9 +1,22 @@ package org.zstack.header.network.l3; +import org.zstack.header.network.l2.NetworkDeletionContext; + public interface L3NetworkDeleteExtensionPoint { String preDeleteL3Network(L3NetworkInventory inventory) throws L3NetworkException; + default String preDeleteL3Network(L3NetworkInventory inventory, NetworkDeletionContext context) + throws L3NetworkException { + return preDeleteL3Network(inventory); + } + void beforeDeleteL3Network(L3NetworkInventory inventory); + default void beforeDeleteL3Network(L3NetworkInventory inventory, NetworkDeletionContext context) { + beforeDeleteL3Network(inventory); + } void afterDeleteL3Network(L3NetworkInventory inventory); + default void afterDeleteL3Network(L3NetworkInventory inventory, NetworkDeletionContext context) { + afterDeleteL3Network(inventory); + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeletionMsg.java b/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeletionMsg.java index bb3d0ecf474..67fb0630dc4 100755 --- a/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeletionMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/L3NetworkDeletionMsg.java @@ -1,11 +1,13 @@ package org.zstack.header.network.l3; import org.zstack.header.message.DeletionMessage; +import org.zstack.header.network.l2.NetworkDeletionContext; /** */ public class L3NetworkDeletionMsg extends DeletionMessage implements L3NetworkMessage { private String l3NetworkUuid; + private NetworkDeletionContext networkDeletionContext; public String getL3NetworkUuid() { return l3NetworkUuid; @@ -14,4 +16,12 @@ public String getL3NetworkUuid() { public void setL3NetworkUuid(String l3NetworkUuid) { this.l3NetworkUuid = l3NetworkUuid; } + + public NetworkDeletionContext getNetworkDeletionContext() { + return networkDeletionContext; + } + + public void setNetworkDeletionContext(NetworkDeletionContext networkDeletionContext) { + this.networkDeletionContext = networkDeletionContext; + } } diff --git a/header/src/main/java/org/zstack/header/network/l3/SdnControllerDisableDHCPMsg.java b/header/src/main/java/org/zstack/header/network/l3/SdnControllerDisableDHCPMsg.java index 7d0e0c9dcb7..d530e62b8bb 100644 --- a/header/src/main/java/org/zstack/header/network/l3/SdnControllerDisableDHCPMsg.java +++ b/header/src/main/java/org/zstack/header/network/l3/SdnControllerDisableDHCPMsg.java @@ -2,6 +2,7 @@ import org.zstack.header.message.NeedReplyMessage; import org.zstack.header.network.sdncontroller.SdnControllerMessage; +import org.zstack.header.network.l2.NetworkDeletionContext; import org.zstack.utils.network.IPv6Constants; public class SdnControllerDisableDHCPMsg extends NeedReplyMessage implements SdnControllerMessage { @@ -9,6 +10,7 @@ public class SdnControllerDisableDHCPMsg extends NeedReplyMessage implements Sdn private Integer ipVersion = IPv6Constants.DUAL_STACK; private String sdnControllerUuid; private boolean checkIpRange = false; + private NetworkDeletionContext networkDeletionContext; public Integer getIpVersion() { return ipVersion; @@ -42,5 +44,12 @@ public boolean isCheckIpRange() { public void setCheckIpRange(boolean checkIpRange) { this.checkIpRange = checkIpRange; } -} + public NetworkDeletionContext getNetworkDeletionContext() { + return networkDeletionContext; + } + + public void setNetworkDeletionContext(NetworkDeletionContext networkDeletionContext) { + this.networkDeletionContext = networkDeletionContext; + } +} diff --git a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java index aa63a4bc4ba..0d0d46d3396 100644 --- a/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java +++ b/header/src/main/java/org/zstack/header/network/l3/SdnControllerL3.java @@ -2,6 +2,7 @@ import org.zstack.header.core.Completion; import org.zstack.header.network.l2.NetworkCreateContext; +import org.zstack.header.network.l2.NetworkDeletionContext; import java.util.List; @@ -11,12 +12,21 @@ default void createL3Network(L3NetworkInventory inv, List systemTags, Ne createL3Network(inv, systemTags, completion); } void deleteL3Network(L3NetworkInventory inv, Completion completion); + default void deleteL3Network(L3NetworkInventory inv, NetworkDeletionContext context, + Completion completion) { + deleteL3Network(inv, completion); + } void createIpRange(IpRangeInventory inv, Completion completion); default void createIpRange(IpRangeInventory inv, NetworkCreateContext context, Completion completion) { createIpRange(inv, completion); } void deleteIpRange(IpRangeInventory inv, Completion completion); + default void deleteIpRange(IpRangeInventory inv, boolean lastIpRange, + NetworkDeletionContext context, Completion completion) { + deleteIpRange(inv, lastIpRange, completion); + } + default void deleteIpRange(IpRangeInventory inv, boolean lastIpRange, Completion completion) { if (lastIpRange) { deleteIpRange(inv, new Completion(completion) { diff --git a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java index 5ba51a21ab6..035969c8b5f 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l2/L2NetworkCascadeExtension.java @@ -5,6 +5,7 @@ import org.zstack.core.cascade.AbstractAsyncCascadeExtension; import org.zstack.core.cascade.CascadeAction; import org.zstack.core.cascade.CascadeConstant; +import org.zstack.core.cascade.CascadePreExtensionPoint; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusListCallBack; import org.zstack.core.componentloader.PluginRegistry; @@ -42,7 +43,7 @@ /** */ -public class L2NetworkCascadeExtension extends AbstractAsyncCascadeExtension { +public class L2NetworkCascadeExtension extends AbstractAsyncCascadeExtension implements CascadePreExtensionPoint { private static final CLogger logger = Utils.getLogger(L2NetworkCascadeExtension.class); @Autowired @@ -58,6 +59,73 @@ public class L2NetworkCascadeExtension extends AbstractAsyncCascadeExtension { private static final String NAME = L2NetworkVO.class.getSimpleName(); + @Override + public ErrorCode beforeCascade(CascadeAction action) { + if (!CascadeConstant.DELETION_CODES.contains(action.getActionCode())) { + return null; + } + List inventories = l2NetworkFromAction(action); + if (inventories == null) { + return null; + } + inventories = filterInventories(inventories, action); + List begun = new ArrayList<>(); + for (L2NetworkInventory inventory : inventories) { + NetworkDeletionContext context = NetworkDeletionContexts.get(action, inventory.getUuid()); + if (context != null) { + continue; + } + context = new NetworkDeletionContext(NetworkDeletionContext.Origin.WHOLE_L2_SEGMENT_DELETE, + org.zstack.core.Platform.getUuid(), inventory.getUuid(), action.getRootIssuer()); + context.setForceDelete(action.isActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE)); + List extensions = confirmedExtensions(inventory); + for (L2DeleteConfirmExtensionPoint extension : extensions) { + ErrorCode error = extension.begin(inventory, context); + if (error != null) { + cancelConfirmedDeletes(begun); + return error; + } + begun.add(new ConfirmedDelete(inventory, extension, context)); + } + if (!extensions.isEmpty()) { + NetworkDeletionContexts.put(action, context); + } + if (action.isActionCode(CascadeConstant.DELETION_DELETE_CODE, + CascadeConstant.DELETION_FORCE_DELETE_CODE)) { + for (L2DeleteConfirmExtensionPoint extension : extensions) { + ErrorCode error = extension.check(inventory, context); + if (error != null) { + cancelConfirmedDeletes(begun); + return error; + } + } + } + } + return null; + } + + @Override + public void afterCascadeFailure(CascadeAction action) { + if (!action.isActionCode(CascadeConstant.DELETION_CHECK_CODE)) { + return; + } + List inventories = l2NetworkFromAction(action); + if (inventories == null) { + return; + } + List begun = new ArrayList<>(); + for (L2NetworkInventory inventory : filterInventories(inventories, action)) { + NetworkDeletionContext context = NetworkDeletionContexts.get(action, inventory.getUuid()); + if (context == null) { + continue; + } + for (L2DeleteConfirmExtensionPoint extension : confirmedExtensions(inventory)) { + begun.add(new ConfirmedDelete(inventory, extension, context)); + } + } + cancelConfirmedDeletes(begun); + } + @Override public void asyncCascade(CascadeAction action, Completion completion) { if (action.isActionCode(CascadeConstant.DELETION_CHECK_CODE)) { @@ -128,18 +196,11 @@ private void handleDeletion(final CascadeAction action, final Completion complet return; } - if (!l2invs.isEmpty()) { - for (L2NetworkCascadeFilterExtensionPoint ext : pluginRgty.getExtensionList(L2NetworkCascadeFilterExtensionPoint.class)) { - l2invs = ext.filterL2NetworkCascade(l2invs, action); - } - } + l2invs = filterInventories(l2invs, action); Map> confirmedExtensions = new HashMap<>(); for (L2NetworkInventory l2inv : l2invs) { - List extensions = pluginRgty - .getExtensionList(L2DeleteConfirmExtensionPoint.class).stream() - .filter(ext -> ext.supports(l2inv)) - .collect(Collectors.toList()); + List extensions = confirmedExtensions(l2inv); confirmedExtensions.put(l2inv.getUuid(), extensions); } @@ -148,7 +209,9 @@ private void handleDeletion(final CascadeAction action, final Completion complet L2NetworkDeletionMsg msg = new L2NetworkDeletionMsg(); msg.setForceDelete(action.isActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE)); msg.setL2NetworkUuid(l2inv.getUuid()); - msg.setOperationUuid(org.zstack.core.Platform.getUuid()); + NetworkDeletionContext context = NetworkDeletionContexts.get(action, l2inv.getUuid()); + msg.setNetworkDeletionContext(context); + msg.setOperationUuid(context == null ? org.zstack.core.Platform.getUuid() : context.getOperationUuid()); bus.makeTargetServiceIdByResourceUuid(msg, L2NetworkConstant.SERVICE_ID, l2inv.getUuid()); msgs.add(msg); } @@ -176,7 +239,8 @@ public void run(List replies) { } } for (L2DeleteConfirmExtensionPoint ext : confirmedExtensions.get(inv.getUuid())) { - ErrorCode errorCode = ext.delete(inv); + ErrorCode errorCode = ext.delete(inv, + NetworkDeletionContexts.get(action, inv.getUuid())); if (errorCode != null) { completion.fail(errorCode); return; @@ -192,7 +256,8 @@ public void run(List replies) { protected void scripts() { for (L2NetworkInventory inv : finalL2invs) { for (L2DeleteConfirmExtensionPoint ext : confirmedExtensions.get(inv.getUuid())) { - ext.deleteLocalMetadata(inv); + ext.deleteLocalMetadata(inv, + NetworkDeletionContexts.get(action, inv.getUuid())); } } databaseFacade.removeByPrimaryKeys(uuids, L2NetworkVO.class); @@ -200,7 +265,7 @@ protected void scripts() { }.execute(); completion.success(); } catch (RuntimeException e) { - completion.fail(inerr(ORG_ZSTACK_NETWORK_L2_10000, + completion.fail(inerr(ORG_ZSTACK_NETWORK_L2_10022, "failed to commit confirmed l2 network deletion: %s", e.getMessage())); } } @@ -214,32 +279,21 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { return; } - List begun = new ArrayList<>(); try { for (L2NetworkInventory prinv : l2invs) { extpEmitter.preDelete(prinv); - for (L2DeleteConfirmExtensionPoint ext : pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class)) { - if (ext.supports(prinv)) { - ErrorCode errorCode = ext.begin(prinv); - if (errorCode != null) { - cancelConfirmedDeletes(begun); - completion.fail(errorCode); - return; - } - begun.add(new ConfirmedDelete(prinv, ext)); - errorCode = ext.check(prinv); - if (errorCode != null) { - cancelConfirmedDeletes(begun); - completion.fail(errorCode); - return; - } + for (L2DeleteConfirmExtensionPoint ext : confirmedExtensions(prinv)) { + ErrorCode errorCode = ext.check(prinv, + NetworkDeletionContexts.get(action, prinv.getUuid())); + if (errorCode != null) { + completion.fail(errorCode); + return; } } } completion.success(); } catch (L2NetworkException e) { - cancelConfirmedDeletes(begun); completion.fail(inerr(ORG_ZSTACK_NETWORK_L2_10000, e.getMessage())); } } @@ -248,7 +302,7 @@ private void cancelConfirmedDeletes(List begun) { for (int i = begun.size() - 1; i >= 0; i--) { ConfirmedDelete delete = begun.get(i); try { - ErrorCode errorCode = delete.extension.cancel(delete.inventory); + ErrorCode errorCode = delete.extension.cancel(delete.inventory, delete.context); if (errorCode != null) { logger.warn(String.format("failed to cancel confirmed l2 network deletion[uuid:%s]: %s", delete.inventory.getUuid(), errorCode)); @@ -263,11 +317,33 @@ private void cancelConfirmedDeletes(List begun) { private static class ConfirmedDelete { private final L2NetworkInventory inventory; private final L2DeleteConfirmExtensionPoint extension; + private final NetworkDeletionContext context; - private ConfirmedDelete(L2NetworkInventory inventory, L2DeleteConfirmExtensionPoint extension) { + private ConfirmedDelete(L2NetworkInventory inventory, L2DeleteConfirmExtensionPoint extension, + NetworkDeletionContext context) { this.inventory = inventory; this.extension = extension; + this.context = context; + } + } + + private List confirmedExtensions(L2NetworkInventory inventory) { + return pluginRgty.getExtensionList(L2DeleteConfirmExtensionPoint.class).stream() + .filter(ext -> ext.supports(inventory)) + .collect(Collectors.toList()); + } + + private List filterInventories(List inventories, + CascadeAction action) { + if (inventories.isEmpty()) { + return inventories; + } + List result = inventories; + for (L2NetworkCascadeFilterExtensionPoint ext : + pluginRgty.getExtensionList(L2NetworkCascadeFilterExtensionPoint.class)) { + result = ext.filterL2NetworkCascade(result, action); } + return result; } @Override 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 59ed0c29324..4225837cc5b 100755 --- a/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java +++ b/network/src/main/java/org/zstack/network/l2/L2NoVlanNetwork.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Configurable; import org.zstack.core.asyncbatch.While; import org.zstack.core.cascade.CascadeConstant; +import org.zstack.core.cascade.CascadeAction; import org.zstack.core.cascade.CascadeFacade; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusCallBack; @@ -159,13 +160,15 @@ private void handle(DeleteL2NetworkMsg msg) { DeleteL2NetworkReply reply = new DeleteL2NetworkReply(); final String issuer = L2NetworkVO.class.getSimpleName(); final List ctx = L2NetworkInventory.valueOf(Arrays.asList(self)); + final CascadeAction cascadeAction = new CascadeAction().setRootIssuer(issuer) + .setRootIssuerContext(ctx).setParentIssuer(issuer).setParentIssuerContext(ctx); FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("delete-l2Network-%s", msg.getL2NetworkUuid())); if (msg.isForceDelete() == false) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_CHECK_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_CHECK_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -180,7 +183,7 @@ public void fail(ErrorCode errorCode) { }).then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -197,7 +200,7 @@ public void fail(ErrorCode errorCode) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_FORCE_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -357,7 +360,7 @@ public void run(FlowTrigger trigger, Map data) { new While<>(pluginRgty.getExtensionList(L2NetworkDeleteExtensionPoint.class)) .each((exp, wcompl) -> { if (exp.requiresConfirmedDelete(inv)) { - exp.deleteL2Network(inv, msg.getOperationUuid(), new Completion(trigger) { + exp.deleteL2Network(inv, msg.getNetworkDeletionContext(), new Completion(trigger) { @Override public void success() { wcompl.done(); @@ -923,13 +926,15 @@ private void handle(APIDeleteL2NetworkMsg msg) { final APIDeleteL2NetworkEvent evt = new APIDeleteL2NetworkEvent(msg.getId()); final String issuer = L2NetworkVO.class.getSimpleName(); final List ctx = L2NetworkInventory.valueOf(Arrays.asList(self)); + final CascadeAction cascadeAction = new CascadeAction().setRootIssuer(issuer) + .setRootIssuerContext(ctx).setParentIssuer(issuer).setParentIssuerContext(ctx); FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("delete-l2Network-%s", msg.getL2NetworkUuid())); if (msg.getDeletionMode() == APIDeleteMessage.DeletionMode.Permissive) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_CHECK_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_CHECK_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -944,7 +949,7 @@ public void fail(ErrorCode errorCode) { }).then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -961,7 +966,7 @@ public void fail(ErrorCode errorCode) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_FORCE_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); diff --git a/network/src/main/java/org/zstack/network/l2/NetworkDeletionContexts.java b/network/src/main/java/org/zstack/network/l2/NetworkDeletionContexts.java new file mode 100644 index 00000000000..f2dc5c081bc --- /dev/null +++ b/network/src/main/java/org/zstack/network/l2/NetworkDeletionContexts.java @@ -0,0 +1,19 @@ +package org.zstack.network.l2; + +import org.zstack.core.cascade.CascadeAction; +import org.zstack.header.network.l2.NetworkDeletionContext; + +public final class NetworkDeletionContexts { + private static final String KEY_PREFIX = NetworkDeletionContext.class.getName() + ":"; + + private NetworkDeletionContexts() { + } + + public static NetworkDeletionContext get(CascadeAction action, String l2NetworkUuid) { + return action.getContext(KEY_PREFIX + l2NetworkUuid); + } + + public static void put(CascadeAction action, NetworkDeletionContext context) { + action.putContext(KEY_PREFIX + context.getL2NetworkUuid(), context); + } +} diff --git a/network/src/main/java/org/zstack/network/l3/IpRangeCascadeExtension.java b/network/src/main/java/org/zstack/network/l3/IpRangeCascadeExtension.java index 115dea698ee..977e7659f47 100755 --- a/network/src/main/java/org/zstack/network/l3/IpRangeCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l3/IpRangeCascadeExtension.java @@ -16,6 +16,7 @@ import org.zstack.header.errorcode.ErrorCodeList; import org.zstack.header.message.MessageReply; import org.zstack.header.network.l3.*; +import org.zstack.network.l2.NetworkDeletionContexts; import org.zstack.utils.CollectionUtils; import org.zstack.utils.Utils; import org.zstack.utils.function.Function; @@ -62,6 +63,10 @@ private void deleteIpRanges(final CascadeAction action,List ip msg.setForceDelete(action.isActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE)); msg.setL3NetworkUuid(iprinv.getL3NetworkUuid()); msg.setIpRangeUuid(iprinv.getUuid()); + String l2NetworkUuid = Q.New(L3NetworkVO.class) + .select(L3NetworkVO_.l2NetworkUuid) + .eq(L3NetworkVO_.uuid, iprinv.getL3NetworkUuid()).findValue(); + msg.setNetworkDeletionContext(NetworkDeletionContexts.get(action, l2NetworkUuid)); bus.makeTargetServiceIdByResourceUuid(msg, L3NetworkConstant.SERVICE_ID, iprinv.getL3NetworkUuid()); msgs.add(msg); } 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 bf635e02b1b..6840d2e2867 100755 --- a/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java +++ b/network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java @@ -743,13 +743,13 @@ public void run(SyncTaskChain chainTask) { final IpRangeInventory inv = IpRangeInventory.valueOf(iprvo); for (IpRangeDeletionExtensionPoint ext : exts) { - ext.preDeleteIpRange(inv); + ext.preDeleteIpRange(inv, msg.getNetworkDeletionContext()); } CollectionUtils.safeForEach(exts, new ForEachFunction() { @Override public void run(IpRangeDeletionExtensionPoint arg) { - arg.beforeDeleteIpRange(inv); + arg.beforeDeleteIpRange(inv, msg.getNetworkDeletionContext()); } }); @@ -766,13 +766,14 @@ public void run(FlowTrigger trigger, Map data) { return; } - SdnControllerDisableDHCPMsg msg = new SdnControllerDisableDHCPMsg(); - msg.setL3NetworkUuid(self.getUuid()); - msg.setIpVersion(iprvo.getIpVersion()); - msg.setSdnControllerUuid(sdnControllerUuid); - msg.setCheckIpRange(true); - bus.makeTargetServiceIdByResourceUuid(msg, SdnControllerConstant.SERVICE_ID, sdnControllerUuid); - bus.send(msg, new CloudBusCallBack(trigger) { + SdnControllerDisableDHCPMsg dhcpMsg = new SdnControllerDisableDHCPMsg(); + dhcpMsg.setL3NetworkUuid(self.getUuid()); + dhcpMsg.setIpVersion(iprvo.getIpVersion()); + dhcpMsg.setSdnControllerUuid(sdnControllerUuid); + dhcpMsg.setCheckIpRange(true); + dhcpMsg.setNetworkDeletionContext(msg.getNetworkDeletionContext()); + bus.makeTargetServiceIdByResourceUuid(dhcpMsg, SdnControllerConstant.SERVICE_ID, sdnControllerUuid); + bus.send(dhcpMsg, new CloudBusCallBack(trigger) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { @@ -795,7 +796,8 @@ public void run(FlowTrigger trigger, Map data) { } boolean isLastIpRange = isLastNormalIpRangeOfVersion(msg.getIpRangeUuid(), inv.getIpVersion()); - sdnL3.deleteIpRange(inv, isLastIpRange, new Completion(trigger) { + sdnL3.deleteIpRange(inv, isLastIpRange, msg.getNetworkDeletionContext(), + new Completion(trigger) { @Override public void success() { trigger.next(); @@ -819,7 +821,7 @@ public void run(FlowTrigger trigger, Map data) { CollectionUtils.safeForEach(exts, new ForEachFunction() { @Override public void run(IpRangeDeletionExtensionPoint arg) { - arg.afterDeleteIpRange(inv); + arg.afterDeleteIpRange(inv, msg.getNetworkDeletionContext()); } }); trigger.next(); @@ -831,7 +833,7 @@ public void run(IpRangeDeletionExtensionPoint arg) { public void run (FlowTrigger trigger, Map data){ CollectionUtils.safeForEach( pluginRgty.getExtensionList(AfterDeleteIpRangeExtensionPoint.class), - ext -> ext.afterDeleteIpRange(inv) + ext -> ext.afterDeleteIpRange(inv, msg.getNetworkDeletionContext()) ); trigger.next(); } @@ -886,7 +888,8 @@ public void run(FlowTrigger trigger, Map data) { return; } - controllerL3.deleteL3Network(L3NetworkInventory.valueOf(l3NetworkVO), new Completion(trigger) { + controllerL3.deleteL3Network(L3NetworkInventory.valueOf(l3NetworkVO), + msg.getNetworkDeletionContext(), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -894,7 +897,12 @@ public void success() { @Override public void fail(ErrorCode errorCode) { - trigger.next();//ignore error + if (msg.getNetworkDeletionContext() != null && + msg.getNetworkDeletionContext().isWholeL2SegmentDelete()) { + trigger.fail(errorCode); + } else { + trigger.next(); + } } }); } @@ -928,9 +936,9 @@ public void run(FlowTrigger trigger, Map data) { } L3NetworkInventory inv = L3NetworkInventory.valueOf(self); - extpEmitter.beforeDelete(inv); + extpEmitter.beforeDelete(inv, msg.getNetworkDeletionContext()); deleteHook(); - extpEmitter.afterDelete(inv); + extpEmitter.afterDelete(inv, msg.getNetworkDeletionContext()); trigger.next(); } diff --git a/network/src/main/java/org/zstack/network/l3/L3NetworkCascadeExtension.java b/network/src/main/java/org/zstack/network/l3/L3NetworkCascadeExtension.java index 1d8a5359327..bde03163291 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkCascadeExtension.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkCascadeExtension.java @@ -16,11 +16,13 @@ import org.zstack.header.message.MessageReply; import org.zstack.header.network.l2.L2NetworkInventory; import org.zstack.header.network.l2.L2NetworkVO; +import org.zstack.header.network.l2.NetworkDeletionContext; import org.zstack.header.network.l3.*; import org.zstack.utils.CollectionUtils; import org.zstack.utils.Utils; import org.zstack.utils.function.Function; import org.zstack.utils.logging.CLogger; +import org.zstack.network.l2.NetworkDeletionContexts; import javax.persistence.TypedQuery; import java.util.ArrayList; @@ -87,6 +89,7 @@ private void handleDeletion(final CascadeAction action, final Completion complet L3NetworkDeletionMsg msg = new L3NetworkDeletionMsg(); msg.setL3NetworkUuid(l3inv.getUuid()); msg.setForceDelete(action.isActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE)); + msg.setNetworkDeletionContext(NetworkDeletionContexts.get(action, l3inv.getL2NetworkUuid())); bus.makeTargetServiceIdByResourceUuid(msg, L3NetworkConstant.SERVICE_ID, l3inv.getUuid()); msgs.add(msg); } @@ -125,7 +128,8 @@ private void handleDeletionCheck(CascadeAction action, Completion completion) { try { for (L3NetworkInventory prinv : l3invs) { - extpEmitter.preDelete(prinv); + extpEmitter.preDelete(prinv, + NetworkDeletionContexts.get(action, prinv.getL2NetworkUuid())); } completion.success(); diff --git a/network/src/main/java/org/zstack/network/l3/L3NetworkExtensionPointEmitter.java b/network/src/main/java/org/zstack/network/l3/L3NetworkExtensionPointEmitter.java index 34dc9f35674..9ebb53cb13c 100755 --- a/network/src/main/java/org/zstack/network/l3/L3NetworkExtensionPointEmitter.java +++ b/network/src/main/java/org/zstack/network/l3/L3NetworkExtensionPointEmitter.java @@ -7,6 +7,7 @@ import org.zstack.header.network.l3.L3NetworkDeleteExtensionPoint; import org.zstack.header.network.l3.L3NetworkException; import org.zstack.header.network.l3.L3NetworkInventory; +import org.zstack.header.network.l2.NetworkDeletionContext; import org.zstack.utils.CollectionUtils; import org.zstack.utils.Utils; import org.zstack.utils.function.ForEachFunction; @@ -32,9 +33,14 @@ public void run(L3NetworkCreateExtensionPoint arg) { } public void preDelete(L3NetworkInventory inv) throws L3NetworkException { + preDelete(inv, null); + } + + public void preDelete(L3NetworkInventory inv, NetworkDeletionContext context) + throws L3NetworkException { for (L3NetworkDeleteExtensionPoint ext : deleteExtensions) { try { - ext.preDeleteL3Network(inv); + ext.preDeleteL3Network(inv, context); } catch (L3NetworkException l3e) { throw l3e; } catch (Exception e) { @@ -45,19 +51,27 @@ public void preDelete(L3NetworkInventory inv) throws L3NetworkException { } public void beforeDelete(final L3NetworkInventory inv) { + beforeDelete(inv, null); + } + + public void beforeDelete(final L3NetworkInventory inv, NetworkDeletionContext context) { CollectionUtils.safeForEach(deleteExtensions, new ForEachFunction() { @Override public void run(L3NetworkDeleteExtensionPoint arg) { - arg.beforeDeleteL3Network(inv); + arg.beforeDeleteL3Network(inv, context); } }); } public void afterDelete(final L3NetworkInventory inv) { + afterDelete(inv, null); + } + + public void afterDelete(final L3NetworkInventory inv, NetworkDeletionContext context) { CollectionUtils.safeForEach(deleteExtensions, new ForEachFunction() { @Override public void run(L3NetworkDeleteExtensionPoint arg) { - arg.afterDeleteL3Network(inv); + arg.afterDeleteL3Network(inv, context); } }); } 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 92e748b864e..c256f2c6947 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerBase.java @@ -8,6 +8,7 @@ import org.zstack.core.Platform; import org.zstack.core.asyncbatch.While; import org.zstack.core.cascade.CascadeConstant; +import org.zstack.core.cascade.CascadeAction; import org.zstack.core.cascade.CascadeFacade; import org.zstack.core.cloudbus.CloudBus; import org.zstack.core.cloudbus.CloudBusCallBack; @@ -952,13 +953,15 @@ private void handle(APIRemoveSdnControllerMsg msg) { final String issuer = SdnControllerVO.class.getSimpleName(); SdnControllerVO vo = dbf.findByUuid(msg.getUuid(), SdnControllerVO.class); final List ctx = asList(SdnControllerInventory.valueOf(vo)); + final CascadeAction cascadeAction = new CascadeAction().setRootIssuer(issuer) + .setRootIssuerContext(ctx).setParentIssuer(issuer).setParentIssuerContext(ctx); FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("delete-sdn-controller-%s-name-%s", msg.getUuid(), vo.getName())); if (msg.getDeletionMode() == APIDeleteMessage.DeletionMode.Permissive) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_CHECK_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_CHECK_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -973,7 +976,7 @@ public void fail(ErrorCode errorCode) { }).then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); @@ -990,7 +993,7 @@ public void fail(ErrorCode errorCode) { chain.then(new NoRollbackFlow() { @Override public void run(final FlowTrigger trigger, Map data) { - casf.asyncCascade(CascadeConstant.DELETION_FORCE_DELETE_CODE, issuer, ctx, new Completion(trigger) { + casf.asyncCascade(cascadeAction.setActionCode(CascadeConstant.DELETION_FORCE_DELETE_CODE), new Completion(trigger) { @Override public void success() { trigger.next(); 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 563188ca427..fb348ef4b23 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerL2.java @@ -6,6 +6,7 @@ import org.zstack.header.network.l2.APICreateL2NetworkMsg; import org.zstack.header.network.l2.L2NetworkInventory; import org.zstack.header.network.l2.NetworkCreateContext; +import org.zstack.header.network.l2.NetworkDeletionContext; import org.zstack.header.network.l3.IpRangeInventory; import org.zstack.header.network.l3.L3NetworkInventory; import org.zstack.header.vm.VmNicInventory; @@ -39,11 +40,30 @@ default void createL2Network(L2NetworkInventory inv, APICreateL2NetworkMsg msg, default void deleteL2Network(L2NetworkInventory inv, String operationUuid, Completion completion) { deleteL2Network(inv, completion); } + default void deleteL2Network(L2NetworkInventory inv, NetworkDeletionContext context, + Completion completion) { + deleteL2Network(inv, context == null ? null : context.getOperationUuid(), completion); + } default ErrorCode beginConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode beginConfirmedDelete(L2NetworkInventory inv, NetworkDeletionContext context) { + return beginConfirmedDelete(inv); + } default ErrorCode checkConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode checkConfirmedDelete(L2NetworkInventory inv, NetworkDeletionContext context) { + return checkConfirmedDelete(inv); + } default ErrorCode completeConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode completeConfirmedDelete(L2NetworkInventory inv, NetworkDeletionContext context) { + return completeConfirmedDelete(inv); + } default ErrorCode cancelConfirmedDelete(L2NetworkInventory inv) { return null; } + default ErrorCode cancelConfirmedDelete(L2NetworkInventory inv, NetworkDeletionContext context) { + return cancelConfirmedDelete(inv); + } default void deleteConfirmedLocalMetadata(L2NetworkInventory inv) { } + default void deleteConfirmedLocalMetadata(L2NetworkInventory inv, NetworkDeletionContext context) { + deleteConfirmedLocalMetadata(inv); + } List getVniRange(SdnControllerInventory controller); List getVlanRange(SdnControllerInventory controller); 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 be8963b6dab..d2c116681b9 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java @@ -385,14 +385,23 @@ public boolean requiresConfirmedDelete(L2NetworkInventory inv) { public void deleteL2Network(L2NetworkInventory inv, String operationUuid, Completion completion) { SdnControllerL2 controllerL2 = findSdnControllerL2(inv); if (controllerL2 == null) { - completion.fail(operr(ORG_ZSTACK_SDNCONTROLLER_10002, - "cannot find sdn controller for confirmed l2 network deletion[uuid:%s, vswitchType:%s]", - inv.getUuid(), inv.getvSwitchType())); + completion.fail(confirmedDeleteControllerMissing(inv)); return; } controllerL2.deleteL2Network(inv, operationUuid, completion); } + @Override + public void deleteL2Network(L2NetworkInventory inv, NetworkDeletionContext context, + Completion completion) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inv); + if (controllerL2 == null) { + completion.fail(confirmedDeleteControllerMissing(inv)); + return; + } + controllerL2.deleteL2Network(inv, context, completion); + } + @Override public boolean supports(L2NetworkInventory inventory) { return requiresConfirmedDelete(inventory); @@ -401,35 +410,65 @@ public boolean supports(L2NetworkInventory inventory) { @Override public ErrorCode begin(L2NetworkInventory inventory) { SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); - return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, - "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) : controllerL2.beginConfirmedDelete(inventory); } + @Override + public ErrorCode begin(L2NetworkInventory inventory, NetworkDeletionContext context) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) + : controllerL2.beginConfirmedDelete(inventory, context); + } + @Override public ErrorCode check(L2NetworkInventory inventory) { SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); - return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, - "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) : controllerL2.checkConfirmedDelete(inventory); } + @Override + public ErrorCode check(L2NetworkInventory inventory, NetworkDeletionContext context) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) + : controllerL2.checkConfirmedDelete(inventory, context); + } + @Override public ErrorCode delete(L2NetworkInventory inventory) { SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); - return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, - "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) : controllerL2.completeConfirmedDelete(inventory); } + @Override + public ErrorCode delete(L2NetworkInventory inventory, NetworkDeletionContext context) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) + : controllerL2.completeConfirmedDelete(inventory, context); + } + @Override public ErrorCode cancel(L2NetworkInventory inventory) { SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); - return controllerL2 == null ? operr(ORG_ZSTACK_SDNCONTROLLER_10002, - "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid()) + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) : controllerL2.cancelConfirmedDelete(inventory); } + @Override + public ErrorCode cancel(L2NetworkInventory inventory, NetworkDeletionContext context) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + return controllerL2 == null ? confirmedDeleteControllerMissing(inventory) + : controllerL2.cancelConfirmedDelete(inventory, context); + } + + private ErrorCode confirmedDeleteControllerMissing(L2NetworkInventory inventory) { + return operr(ORG_ZSTACK_SDNCONTROLLER_10034, + "cannot find sdn controller for confirmed L2Network deletion[uuid:%s, vswitchType:%s]", + inventory.getUuid(), inventory.getvSwitchType()); + } + @Override public void deleteLocalMetadata(L2NetworkInventory inventory) { SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); @@ -440,6 +479,16 @@ public void deleteLocalMetadata(L2NetworkInventory inventory) { controllerL2.deleteConfirmedLocalMetadata(inventory); } + @Override + public void deleteLocalMetadata(L2NetworkInventory inventory, NetworkDeletionContext context) { + SdnControllerL2 controllerL2 = findSdnControllerL2(inventory); + if (controllerL2 == null) { + throw new CloudRuntimeException(String.format( + "cannot find sdn controller for confirmed l2 network deletion[uuid:%s]", inventory.getUuid())); + } + controllerL2.deleteConfirmedLocalMetadata(inventory, context); + } + private SdnControllerL2 findSdnControllerL2(L2NetworkInventory inv) { VSwitchType vSwitchType = VSwitchType.valueOf(inv.getvSwitchType()); if (vSwitchType.getSdnControllerType() == null) { diff --git a/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy b/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy index 2d95e4a2bc2..fe5e780e636 100644 --- a/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/network/l2network/L2NetworkCascadeCase.groovy @@ -1,11 +1,21 @@ package org.zstack.test.integration.network.l2network import org.zstack.core.componentloader.PluginRegistry +import org.zstack.core.cloudbus.CloudBus import org.zstack.core.db.DatabaseFacade import org.zstack.header.errorcode.ErrorCode +import org.zstack.header.message.AbstractBeforeDeliveryMessageInterceptor +import org.zstack.header.message.Message import org.zstack.header.network.l2.L2DeleteConfirmExtensionPoint import org.zstack.header.network.l2.L2NetworkInventory import org.zstack.header.network.l2.L2NetworkVO +import org.zstack.header.network.l2.NetworkDeletionContext +import org.zstack.header.network.l3.IpRangeDeletionMsg +import org.zstack.header.network.l3.L3NetworkDeleteExtensionPoint +import org.zstack.header.network.l3.L3NetworkDeletionMsg +import org.zstack.header.network.l3.L3NetworkException +import org.zstack.header.network.l3.L3NetworkInventory +import org.zstack.header.network.l3.L3NetworkVO import org.zstack.sdk.L2NetworkInventory as SdkL2NetworkInventory import org.zstack.sdk.ZoneInventory import org.zstack.test.integration.network.NetworkTest @@ -30,6 +40,10 @@ class L2NetworkCascadeCase extends SubCase { l2NoVlanNetwork { name = "check-l2-1" physicalInterface = "eth0" + + l3Network { + name = "check-l3" + } } l2NoVlanNetwork { @@ -44,6 +58,41 @@ class L2NetworkCascadeCase extends SubCase { l2NoVlanNetwork { name = "cleanup-l2" physicalInterface = "eth2" + + l3Network { + name = "cleanup-l3" + + ip { + startIp = "192.168.80.10" + endIp = "192.168.80.20" + netmask = "255.255.255.0" + gateway = "192.168.80.1" + } + } + } + + l2NoVlanNetwork { + name = "force-l2" + physicalInterface = "eth3" + } + + l2NoVlanNetwork { + name = "force-check-l2" + physicalInterface = "eth6" + + l3Network { + name = "force-check-l3" + } + } + + l2NoVlanNetwork { + name = "metadata-l2" + physicalInterface = "eth4" + } + + l2NoVlanNetwork { + name = "plain-l2" + physicalInterface = "eth5" } } } @@ -53,11 +102,43 @@ class L2NetworkCascadeCase extends SubCase { void test() { env.create { dbf = bean(DatabaseFacade.class) + testFenceExistsBeforeChildCheck() testDeleteZoneCancelsEveryConfirmedDeleteOnCheckFailure() + testWholeL2ContextPropagatesToChildren() + testParentForceChecksBeforeDeletingChildren() + testParentForcePreservesProviderError() + testUnsupportedProviderKeepsExistingDeleteBehavior() testDeleteL2NetworkRemovesConfirmedMetadataOnce() } } + void testFenceExistsBeforeChildCheck() { + ZoneInventory zone = env.inventoryByName("check-zone") + List events = [] + def confirmation = new RecordingDeleteConfirmation(events: events) + def childCheck = new RecordingL3DeleteCheck(events: events, failCheck: true) + List confirmations = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + List childChecks = bean(PluginRegistry.class) + .getExtensionList(L3NetworkDeleteExtensionPoint.class) + confirmations.add(confirmation) + childChecks.add(childCheck) + + try { + expectError { + deleteZone { + uuid = zone.uuid + } + } + } finally { + childChecks.remove(childCheck) + confirmations.remove(confirmation) + } + + assert events.findIndexOf { it.startsWith("child-check:") } > + events.findLastIndexOf { it.startsWith("begin:") } + } + void testDeleteZoneCancelsEveryConfirmedDeleteOnCheckFailure() { ZoneInventory zone = env.inventoryByName("check-zone") def extension = new RecordingDeleteConfirmation(failOnSecondCheck: true) @@ -82,7 +163,7 @@ class L2NetworkCascadeCase extends SubCase { } void testDeleteL2NetworkRemovesConfirmedMetadataOnce() { - SdkL2NetworkInventory l2 = env.inventoryByName("cleanup-l2") + SdkL2NetworkInventory l2 = env.inventoryByName("metadata-l2") def extension = new RecordingDeleteConfirmation() List extensions = bean(PluginRegistry.class) .getExtensionList(L2DeleteConfirmExtensionPoint.class) @@ -97,42 +178,151 @@ class L2NetworkCascadeCase extends SubCase { } assert !dbf.isExist(l2.uuid, L2NetworkVO.class) + assert extension.checkCount == 1 assert extension.localMetadataDeletes == [l2.uuid] } + void testWholeL2ContextPropagatesToChildren() { + SdkL2NetworkInventory l2 = env.inventoryByName("cleanup-l2") + def extension = new RecordingDeleteConfirmation() + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + List contexts = [] + bean(CloudBus.class).installBeforeDeliveryMessageInterceptor( + new AbstractBeforeDeliveryMessageInterceptor() { + @Override + void beforeDeliveryMessage(Message msg) { + contexts.add(msg.networkDeletionContext) + } + }, L3NetworkDeletionMsg.class, IpRangeDeletionMsg.class) + + try { + deleteL2Network { + uuid = l2.uuid + } + } finally { + extensions.remove(extension) + } + + assert contexts.size() == 2 + assert contexts.every { it?.origin == NetworkDeletionContext.Origin.WHOLE_L2_SEGMENT_DELETE } + assert contexts.every { it.rootIssuer == L2NetworkVO.simpleName } + assert contexts*.operationUuid.toSet() == extension.operationUuids.toSet() + } + + void testParentForcePreservesProviderError() { + SdkL2NetworkInventory l2 = env.inventoryByName("force-l2") + def extension = new RecordingDeleteConfirmation(failDelete: true) + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + + try { + expectError { + deleteL2Network { + uuid = l2.uuid + deleteMode = "Enforcing" + } + } + } finally { + extensions.remove(extension) + } + + assert dbf.isExist(l2.uuid, L2NetworkVO.class) + assert extension.forceDeleteFlags == [true] + } + + void testParentForceChecksBeforeDeletingChildren() { + SdkL2NetworkInventory l2 = env.inventoryByName("force-check-l2") + def l3 = env.inventoryByName("force-check-l3") + def extension = new RecordingDeleteConfirmation(failCheck: true) + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + + try { + expectError { + deleteL2Network { + uuid = l2.uuid + deleteMode = "Enforcing" + } + } + } finally { + extensions.remove(extension) + } + + assert extension.checkCount == 1 + assert dbf.isExist(l2.uuid, L2NetworkVO.class) + assert dbf.isExist(l3.uuid, L3NetworkVO.class) + } + + void testUnsupportedProviderKeepsExistingDeleteBehavior() { + SdkL2NetworkInventory l2 = env.inventoryByName("plain-l2") + def extension = new RecordingDeleteConfirmation(supported: false, failDelete: true) + List extensions = bean(PluginRegistry.class) + .getExtensionList(L2DeleteConfirmExtensionPoint.class) + extensions.add(extension) + + try { + deleteL2Network { + uuid = l2.uuid + } + } finally { + extensions.remove(extension) + } + + assert !dbf.isExist(l2.uuid, L2NetworkVO.class) + assert extension.begun.isEmpty() + } + @Override void clean() { env.delete() } private static class RecordingDeleteConfirmation implements L2DeleteConfirmExtensionPoint { + boolean supported = true boolean failOnSecondCheck + boolean failCheck + boolean failDelete int checkCount + List events = [] List begun = [] List cancelled = [] List localMetadataDeletes = [] + List operationUuids = [] + List forceDeleteFlags = [] @Override boolean supports(L2NetworkInventory inventory) { - return true + return supported } @Override ErrorCode begin(L2NetworkInventory inventory) { begun.add(inventory.uuid) + events.add("begin:${inventory.uuid}") return null } + @Override + ErrorCode begin(L2NetworkInventory inventory, NetworkDeletionContext context) { + operationUuids.add(context.operationUuid) + forceDeleteFlags.add(context.forceDelete) + return begin(inventory) + } + @Override ErrorCode check(L2NetworkInventory inventory) { checkCount++ - return failOnSecondCheck && checkCount == 2 ? + return failCheck || failOnSecondCheck && checkCount == 2 ? new ErrorCode("TEST", "simulated confirmation failure") : null } @Override ErrorCode delete(L2NetworkInventory inventory) { - return null + return failDelete ? new ErrorCode("TEST", "simulated provider delete failure") : null } @Override @@ -146,4 +336,26 @@ class L2NetworkCascadeCase extends SubCase { localMetadataDeletes.add(inventory.uuid) } } + + private static class RecordingL3DeleteCheck implements L3NetworkDeleteExtensionPoint { + List events + boolean failCheck + + @Override + String preDeleteL3Network(L3NetworkInventory inventory) throws L3NetworkException { + events.add("child-check:${inventory.uuid}") + if (failCheck) { + throw new L3NetworkException("simulated child check failure") + } + return null + } + + @Override + void beforeDeleteL3Network(L3NetworkInventory inventory) { + } + + @Override + void afterDeleteL3Network(L3NetworkInventory inventory) { + } + } } 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 31cc60cbf40..73e02694bd8 100644 --- a/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java +++ b/utils/src/main/java/org/zstack/utils/clouderrorcode/CloudOperationsErrorCode.java @@ -1053,6 +1053,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_L2_10021 = "ORG_ZSTACK_NETWORK_L2_10021"; + public static final String ORG_ZSTACK_NETWORK_L2_10022 = "ORG_ZSTACK_NETWORK_L2_10022"; + public static final String ORG_ZSTACK_CONSOLE_10000 = "ORG_ZSTACK_CONSOLE_10000"; public static final String ORG_ZSTACK_CONSOLE_10001 = "ORG_ZSTACK_CONSOLE_10001"; @@ -12305,6 +12307,29 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_NETWORK_ZNS_10080 = "ORG_ZSTACK_NETWORK_ZNS_10080"; public static final String ORG_ZSTACK_NETWORK_ZNS_10081 = "ORG_ZSTACK_NETWORK_ZNS_10081"; public static final String ORG_ZSTACK_NETWORK_ZNS_10082 = "ORG_ZSTACK_NETWORK_ZNS_10082"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10083 = "ORG_ZSTACK_NETWORK_ZNS_10083"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10084 = "ORG_ZSTACK_NETWORK_ZNS_10084"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10085 = "ORG_ZSTACK_NETWORK_ZNS_10085"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10086 = "ORG_ZSTACK_NETWORK_ZNS_10086"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10087 = "ORG_ZSTACK_NETWORK_ZNS_10087"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10088 = "ORG_ZSTACK_NETWORK_ZNS_10088"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10089 = "ORG_ZSTACK_NETWORK_ZNS_10089"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10090 = "ORG_ZSTACK_NETWORK_ZNS_10090"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10091 = "ORG_ZSTACK_NETWORK_ZNS_10091"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10092 = "ORG_ZSTACK_NETWORK_ZNS_10092"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10093 = "ORG_ZSTACK_NETWORK_ZNS_10093"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10094 = "ORG_ZSTACK_NETWORK_ZNS_10094"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10095 = "ORG_ZSTACK_NETWORK_ZNS_10095"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10096 = "ORG_ZSTACK_NETWORK_ZNS_10096"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10097 = "ORG_ZSTACK_NETWORK_ZNS_10097"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10098 = "ORG_ZSTACK_NETWORK_ZNS_10098"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10099 = "ORG_ZSTACK_NETWORK_ZNS_10099"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10100 = "ORG_ZSTACK_NETWORK_ZNS_10100"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10101 = "ORG_ZSTACK_NETWORK_ZNS_10101"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10102 = "ORG_ZSTACK_NETWORK_ZNS_10102"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10103 = "ORG_ZSTACK_NETWORK_ZNS_10103"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10104 = "ORG_ZSTACK_NETWORK_ZNS_10104"; + public static final String ORG_ZSTACK_NETWORK_ZNS_10105 = "ORG_ZSTACK_NETWORK_ZNS_10105"; public static final String ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000 = "ORG_ZSTACK_PREMIUM_EXTERNALSERVICE_MARKETPLACE_10000"; @@ -15792,6 +15817,8 @@ public class CloudOperationsErrorCode { public static final String ORG_ZSTACK_SDNCONTROLLER_10033 = "ORG_ZSTACK_SDNCONTROLLER_10033"; + public static final String ORG_ZSTACK_SDNCONTROLLER_10034 = "ORG_ZSTACK_SDNCONTROLLER_10034"; + 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";