From b46f17ed0cb3ad801569e2185a33cd8a6b5026ed Mon Sep 17 00:00:00 2001 From: fuwei Date: Wed, 29 Mar 2023 09:18:59 +0800 Subject: [PATCH] [sugon_sdn]fix illegal delete tf port. Fix illegal delete tf port when tow zstack cloud work with one tf. --- .../sugonSdnController/network/TfZstackPortSync.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java index 4b3ce53b28..a86b988231 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/network/TfZstackPortSync.java @@ -5,9 +5,14 @@ import org.zstack.core.db.Q; import org.zstack.core.thread.PeriodicTask; import org.zstack.core.thread.ThreadFacade; import org.zstack.header.managementnode.ManagementNodeReadyExtensionPoint; +import org.zstack.header.network.l2.L2NetworkVO; +import org.zstack.header.network.l2.L2NetworkVO_; import org.zstack.header.vm.VmNicVO; import org.zstack.header.vm.VmNicVO_; +import org.zstack.sugonSdnController.controller.api.ApiPropertyBase; +import org.zstack.sugonSdnController.controller.api.ObjectReference; import org.zstack.sugonSdnController.controller.api.types.VirtualMachineInterface; +import org.zstack.sugonSdnController.controller.api.types.VirtualNetwork; import org.zstack.sugonSdnController.controller.neutronClient.TfPortResponse; import org.zstack.utils.StringDSL; import org.zstack.utils.Utils; @@ -55,10 +60,16 @@ public class TfZstackPortSync implements ManagementNodeReadyExtensionPoint { private HashSet getPortToDelete() { List zstackPortsUuid = Q.New(VmNicVO.class).select(VmNicVO_.uuid).listValues(); + List zstackL2NetworksUuid = Q.New(L2NetworkVO.class).select(L2NetworkVO_.uuid).listValues(); List tfPortsUuid = new ArrayList<>(); try{ List tfPorts = tfPortService.getTfPortsDetail(); for (VirtualMachineInterface vmi : tfPorts) { + // skip port if it's network not in zstack + List> tfNetworks = vmi.getVirtualNetwork(); + if (!zstackL2NetworksUuid.contains(StringDSL.transToZstackUuid(tfNetworks.get(0).getUuid()))) { + continue; + } // exclude the virtualmachineinterface of vip if ("neutron:LOADBALANCER".equals(vmi.getDeviceOwner()) || "VIP".equals(vmi.getDeviceOwner())) { continue; -- Gitee