From 4e12e7f62d510274d841d606e35120ee35eedfe4 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 29 Jan 2024 10:53:33 -0500 Subject: [PATCH] NSX: Improve NSX resource cleanup process (#3) --- .../apache/cloudstack/service/NsxApiClient.java | 17 ++++++++++++++--- .../network/firewall/FirewallManagerImpl.java | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java index cb81a736c37..0ad9f94512a 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java @@ -100,6 +100,7 @@ import static org.apache.cloudstack.utils.NsxControllerUtils.getServiceEntryName import static org.apache.cloudstack.utils.NsxControllerUtils.getLoadBalancerName; import static org.apache.cloudstack.utils.NsxControllerUtils.getLoadBalancerAlgorithm; import static org.apache.cloudstack.utils.NsxControllerUtils.getActiveMonitorProfileName; +import static org.apache.cloudstack.utils.NsxControllerUtils.getTier1GatewayName; public class NsxApiClient { @@ -429,6 +430,10 @@ public class NsxApiClient { public void deleteSegment(long zoneId, long domainId, long accountId, Long vpcId, long networkId, String segmentName) { try { removeSegmentDistributedFirewallRules(segmentName); + if (Objects.isNull(vpcId)) { + String t1GatewayName = getTier1GatewayName(domainId, accountId, zoneId, networkId, false); + deleteLoadBalancer(getLoadBalancerName(t1GatewayName)); + } removeSegment(segmentName); DhcpRelayConfigs dhcpRelayConfig = (DhcpRelayConfigs) nsxService.apply(DhcpRelayConfigs.class); String dhcpRelayConfigId = NsxControllerUtils.getNsxDhcpRelayConfigId(zoneId, domainId, accountId, vpcId, networkId); @@ -445,9 +450,15 @@ public class NsxApiClient { protected void removeSegment(String segmentName) { LOGGER.debug(String.format("Removing the segment with ID %s", segmentName)); Segments segmentService = (Segments) nsxService.apply(Segments.class); - Segment segment = segmentService.get(segmentName); - if (segment == null) { - LOGGER.error(String.format("The segment with ID %s is not found, skipping removal", segmentName)); + String errMsg = String.format("The segment with ID %s is not found, skipping removal", segmentName); + try { + Segment segment = segmentService.get(segmentName); + if (segment == null) { + LOGGER.warn(errMsg); + return; + } + } catch (Exception e) { + LOGGER.warn(errMsg); return; } String siteId = getDefaultSiteId(); diff --git a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java index 4be933aaf11..0aae8f5beb6 100644 --- a/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/main/java/com/cloud/network/firewall/FirewallManagerImpl.java @@ -732,7 +732,8 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService, return; } - if (NetUtils.ICMP_PROTO.equals(protocol.toLowerCase(Locale.ROOT)) && (rule.getIcmpType() == -1 || rule.getIcmpCode() == -1)) { + if (NetUtils.ICMP_PROTO.equals(protocol.toLowerCase(Locale.ROOT)) && (rule.getIcmpType() == -1 || rule.getIcmpCode() == -1) + && State.Add.equals(rule.getState())) { String errorMsg = "Passing -1 for ICMP type is not supported for NSX enabled zones"; s_logger.error(errorMsg); throw new InvalidParameterValueException(errorMsg);