From 8859e1869b01ef7a5960eedbcead36d1dddc0caf Mon Sep 17 00:00:00 2001 From: nvazquez Date: Thu, 2 Nov 2023 00:29:16 -0300 Subject: [PATCH 1/3] [NSX] Fix update source NAT IP --- .../cloud/network/{ => nsx}/NsxProvider.java | 2 +- .../com/cloud/network/nsx}/NsxService.java | 6 ++++- .../cloud/network/element/NsxProviderVO.java | 2 +- ...CreateOrUpdateNsxTier1NatRuleCommand.java} | 6 ++--- .../api/command/AddNsxControllerCmd.java | 2 +- .../api/response/NsxControllerResponse.java | 2 +- .../cloudstack/resource/NsxResource.java | 8 +++--- .../service/NsxProviderService.java | 2 +- .../service/NsxProviderServiceImpl.java | 2 +- .../service/NsxPublicNetworkGuru.java | 5 ++-- .../cloudstack/service/NsxServiceImpl.java | 27 +++++++++++++++++++ .../apache/cloudstack/utils/NsxHelper.java | 10 +++---- .../service/NsxProviderServiceImplTest.java | 2 +- .../com/cloud/network/vpc/VpcManagerImpl.java | 8 ++++++ 14 files changed, 62 insertions(+), 22 deletions(-) rename api/src/main/java/com/cloud/network/{ => nsx}/NsxProvider.java (97%) rename {plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service => api/src/main/java/com/cloud/network/nsx}/NsxService.java (85%) rename plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/{CreateNsxTier1NatRuleCommand.java => CreateOrUpdateNsxTier1NatRuleCommand.java} (83%) diff --git a/api/src/main/java/com/cloud/network/NsxProvider.java b/api/src/main/java/com/cloud/network/nsx/NsxProvider.java similarity index 97% rename from api/src/main/java/com/cloud/network/NsxProvider.java rename to api/src/main/java/com/cloud/network/nsx/NsxProvider.java index 0e7d4fa79460..19cb3b4b939e 100644 --- a/api/src/main/java/com/cloud/network/NsxProvider.java +++ b/api/src/main/java/com/cloud/network/nsx/NsxProvider.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network; +package com.cloud.network.nsx; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxService.java b/api/src/main/java/com/cloud/network/nsx/NsxService.java similarity index 85% rename from plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxService.java rename to api/src/main/java/com/cloud/network/nsx/NsxService.java index 7365ea176cc6..79ad9547c736 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxService.java +++ b/api/src/main/java/com/cloud/network/nsx/NsxService.java @@ -14,9 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.service; +package com.cloud.network.nsx; + +import com.cloud.network.IpAddress; +import com.cloud.network.vpc.Vpc; public interface NsxService { boolean createVpcNetwork(Long zoneId, long accountId, long domainId, Long vpcId, String vpcName, boolean sourceNatEnabled); + boolean updateVpcSourceNatIp(Vpc vpc, IpAddress address); } diff --git a/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java b/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java index a791d3ace9e7..274038b74bbc 100644 --- a/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java +++ b/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network.element; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import com.cloud.utils.db.Encrypt; import javax.persistence.Column; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1NatRuleCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateOrUpdateNsxTier1NatRuleCommand.java similarity index 83% rename from plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1NatRuleCommand.java rename to plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateOrUpdateNsxTier1NatRuleCommand.java index 66726053316f..7e3c03fd28c4 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1NatRuleCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateOrUpdateNsxTier1NatRuleCommand.java @@ -16,15 +16,15 @@ // under the License. package org.apache.cloudstack.agent.api; -public class CreateNsxTier1NatRuleCommand extends NsxCommand { +public class CreateOrUpdateNsxTier1NatRuleCommand extends NsxCommand { private String tier1GatewayName; private String action; private String translatedIpAddress; private String natRuleId; - public CreateNsxTier1NatRuleCommand(long domainId, long accountId, long zoneId, - String tier1GatewayName, String action, String translatedIpAddress, String natRuleId) { + public CreateOrUpdateNsxTier1NatRuleCommand(long domainId, long accountId, long zoneId, + String tier1GatewayName, String action, String translatedIpAddress, String natRuleId) { super(domainId, accountId, zoneId); this.tier1GatewayName = tier1GatewayName; this.action = action; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java index 5c057265d180..b35939ff13a0 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java index db6252f77100..910c5e115bf5 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.response; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.ApiConstants; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java index 76bcca298d27..7ca38bb748c7 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java @@ -41,7 +41,7 @@ import org.apache.cloudstack.agent.api.CreateNsxSegmentCommand; import org.apache.cloudstack.agent.api.CreateNsxStaticNatCommand; import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand; -import org.apache.cloudstack.agent.api.CreateNsxTier1NatRuleCommand; +import org.apache.cloudstack.agent.api.CreateOrUpdateNsxTier1NatRuleCommand; import org.apache.cloudstack.agent.api.DeleteNsxLoadBalancerRuleCommand; import org.apache.cloudstack.agent.api.DeleteNsxSegmentCommand; import org.apache.cloudstack.agent.api.DeleteNsxNatRuleCommand; @@ -111,8 +111,8 @@ public Answer executeRequest(Command cmd) { return executeRequest((CreateNsxTier1GatewayCommand) cmd); } else if (cmd instanceof CreateNsxDhcpRelayConfigCommand) { return executeRequest((CreateNsxDhcpRelayConfigCommand) cmd); - } else if (cmd instanceof CreateNsxTier1NatRuleCommand) { - return executeRequest((CreateNsxTier1NatRuleCommand) cmd); + } else if (cmd instanceof CreateOrUpdateNsxTier1NatRuleCommand) { + return executeRequest((CreateOrUpdateNsxTier1NatRuleCommand) cmd); } else if (cmd instanceof CreateNsxStaticNatCommand) { return executeRequest((CreateNsxStaticNatCommand) cmd); } else if (cmd instanceof DeleteNsxNatRuleCommand) { @@ -229,7 +229,7 @@ public boolean configure(String name, Map params) throws Configu return true; } - private Answer executeRequest(CreateNsxTier1NatRuleCommand cmd) { + private Answer executeRequest(CreateOrUpdateNsxTier1NatRuleCommand cmd) { String tier1GatewayName = cmd.getTier1GatewayName(); String action = cmd.getAction(); String translatedIpAddress = cmd.getTranslatedIpAddress(); diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java index d007cc5b6eba..47dfe04db3ef 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.service; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import com.cloud.utils.component.PluggableService; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.command.AddNsxControllerCmd; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java index 78239b01cc22..08b9dfb76e71 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java @@ -25,7 +25,7 @@ import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.Network; import com.cloud.network.Networks; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NsxProviderDao; import com.cloud.network.dao.PhysicalNetworkDao; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxPublicNetworkGuru.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxPublicNetworkGuru.java index e0f8ae00e1d8..b9fcb53883a8 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxPublicNetworkGuru.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxPublicNetworkGuru.java @@ -24,6 +24,7 @@ import com.cloud.exception.InsufficientVirtualNetworkCapacityException; import com.cloud.network.Network; import com.cloud.network.Networks; +import com.cloud.network.nsx.NsxService; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.NetworkVO; import com.cloud.network.guru.PublicNetworkGuru; @@ -36,7 +37,7 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachineProfile; import org.apache.cloudstack.NsxAnswer; -import org.apache.cloudstack.agent.api.CreateNsxTier1NatRuleCommand; +import org.apache.cloudstack.agent.api.CreateOrUpdateNsxTier1NatRuleCommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.utils.NsxControllerUtils; import org.apache.cloudstack.utils.NsxHelper; @@ -142,7 +143,7 @@ public NicProfile allocate(Network network, NicProfile nic, VirtualMachineProfil String translatedIp = ipAddress.getAddress().addr(); s_logger.debug(String.format("Creating NSX Nat Rule for Tier1 GW %s for translated IP %s", tier1GatewayName, translatedIp)); String natRuleId = NsxControllerUtils.getNsxNatRuleId(domainId, accountId, dataCenterId, resourceId, isForVpc); - CreateNsxTier1NatRuleCommand cmd = NsxHelper.createNsxNatRuleCommand(domainId, accountId, dataCenterId, tier1GatewayName, "SNAT", translatedIp, natRuleId); + CreateOrUpdateNsxTier1NatRuleCommand cmd = NsxHelper.createOrUpdateNsxNatRuleCommand(domainId, accountId, dataCenterId, tier1GatewayName, "SNAT", translatedIp, natRuleId); NsxAnswer nsxAnswer = nsxControllerUtils.sendNsxCommand(cmd, dataCenterId); if (!nsxAnswer.getResult()) { String msg = String.format("Could not create NSX Nat Rule on Tier1 Gateway %s for IP %s", tier1GatewayName, translatedIp); diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java index 9d9c896df6ca..6fe5285231c0 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java @@ -16,9 +16,12 @@ // under the License. package org.apache.cloudstack.service; +import com.cloud.network.IpAddress; import com.cloud.network.Network; +import com.cloud.network.nsx.NsxService; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; +import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.utils.exception.CloudRuntimeException; @@ -27,12 +30,14 @@ import org.apache.cloudstack.agent.api.CreateNsxPortForwardRuleCommand; import org.apache.cloudstack.agent.api.CreateNsxStaticNatCommand; import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand; +import org.apache.cloudstack.agent.api.CreateOrUpdateNsxTier1NatRuleCommand; import org.apache.cloudstack.agent.api.DeleteNsxLoadBalancerRuleCommand; import org.apache.cloudstack.agent.api.DeleteNsxSegmentCommand; import org.apache.cloudstack.agent.api.DeleteNsxNatRuleCommand; import org.apache.cloudstack.agent.api.DeleteNsxTier1GatewayCommand; import org.apache.cloudstack.resource.NsxNetworkRule; import org.apache.cloudstack.utils.NsxControllerUtils; +import org.apache.cloudstack.utils.NsxHelper; import org.apache.log4j.Logger; import javax.inject.Inject; @@ -55,6 +60,28 @@ public boolean createVpcNetwork(Long zoneId, long accountId, long domainId, Long return result.getResult(); } + @Override + public boolean updateVpcSourceNatIp(Vpc vpc, IpAddress address) { + if (vpc == null || address == null) { + return false; + } + long accountId = vpc.getAccountId(); + long domainId = vpc.getDomainId(); + long zoneId = vpc.getZoneId(); + long vpcId = vpc.getId(); + + LOGGER.debug(String.format("Updating the source NAT IP for NSX VPC %s to IP: %s", vpc.getName(), address.getAddress().addr())); + String tier1GatewayName = NsxControllerUtils.getTier1GatewayName(domainId, accountId, zoneId, vpcId, true); + String sourceNatRuleId = NsxControllerUtils.getNsxNatRuleId(domainId, accountId, zoneId, vpcId, true); + CreateOrUpdateNsxTier1NatRuleCommand cmd = NsxHelper.createOrUpdateNsxNatRuleCommand(domainId, accountId, zoneId, tier1GatewayName, "SNAT", address.getAddress().addr(), sourceNatRuleId); + NsxAnswer answer = nsxControllerUtils.sendNsxCommand(cmd, zoneId); + if (!answer.getResult()) { + LOGGER.error(String.format("Could not update the source NAT IP address for VPC %s: %s", vpc.getName(), answer.getDetails())); + return false; + } + return true; + } + public boolean createNetwork(Long zoneId, long accountId, long domainId, Long networkId, String networkName) { CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand = new CreateNsxTier1GatewayCommand(domainId, accountId, zoneId, networkId, networkName, false, false); diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java index 819b68dd2fb4..1d1dd0339289 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.agent.api.CreateNsxDhcpRelayConfigCommand; import org.apache.cloudstack.agent.api.CreateNsxSegmentCommand; import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand; -import org.apache.cloudstack.agent.api.CreateNsxTier1NatRuleCommand; +import org.apache.cloudstack.agent.api.CreateOrUpdateNsxTier1NatRuleCommand; import java.util.List; @@ -48,9 +48,9 @@ public static CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand(DomainVO return new CreateNsxTier1GatewayCommand(domain.getId(), account.getId(), zone.getId(), networkResourceId, networkResourceName, isResourceVpc, false); } - public static CreateNsxTier1NatRuleCommand createNsxNatRuleCommand(long domainId, long accountId, long zoneId, - String tier1Gateway, String action, String ipAddress, - String natRuleId) { - return new CreateNsxTier1NatRuleCommand(domainId, accountId, zoneId, tier1Gateway, action, ipAddress, natRuleId); + public static CreateOrUpdateNsxTier1NatRuleCommand createOrUpdateNsxNatRuleCommand(long domainId, long accountId, long zoneId, + String tier1Gateway, String action, String ipAddress, + String natRuleId) { + return new CreateOrUpdateNsxTier1NatRuleCommand(domainId, accountId, zoneId, tier1Gateway, action, ipAddress, natRuleId); } } diff --git a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxProviderServiceImplTest.java b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxProviderServiceImplTest.java index 97717ac15248..315eb92af3b6 100644 --- a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxProviderServiceImplTest.java +++ b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxProviderServiceImplTest.java @@ -20,7 +20,7 @@ import com.cloud.dc.dao.DataCenterDao; import com.cloud.host.Host; import com.cloud.host.dao.HostDetailsDao; -import com.cloud.network.NsxProvider; +import com.cloud.network.nsx.NsxProvider; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.NsxProviderDao; diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java index 7737d17cacab..e32f53ff55e3 100644 --- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java @@ -40,6 +40,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.network.nsx.NsxService; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.alert.AlertService; import org.apache.cloudstack.annotation.AnnotationService; @@ -264,6 +265,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis @Autowired @Qualifier("networkHelper") protected NetworkHelper networkHelper; + @Inject + private NsxService nsxService; @Inject private VpcPrivateGatewayTransactionCallable vpcTxCallable; @@ -1410,6 +1413,11 @@ private boolean checkAndUpdateRouterSourceNatIp(Vpc vpc, String sourceNatIp) { if (! userIps.isEmpty()) { try { _ipAddrMgr.updateSourceNatIpAddress(requestedIp, userIps); + if (isVpcForNsx(vpc)) { + nsxService.updateVpcSourceNatIp(vpc, requestedIp); + // The NSX source NAT IP change does not require to update the VPC VR + return false; + } } catch (Exception e) { // pokemon exception from transaction String msg = String.format("Update of source NAT ip to %s for network \"%s\"/%s failed due to %s", requestedIp.getAddress().addr(), vpc.getName(), vpc.getUuid(), e.getLocalizedMessage()); From cfc2e36f99b2002d29059ea5873195d2c7c03cec Mon Sep 17 00:00:00 2001 From: nvazquez Date: Fri, 3 Nov 2023 11:24:20 -0300 Subject: [PATCH 2/3] Fix startup --- .../core/spring-nsx-core-managers-context.xml | 32 +++++++++++++++++++ .../cloudstack/nsx/spring-nsx-context.xml | 2 -- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/core/spring-nsx-core-managers-context.xml diff --git a/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/core/spring-nsx-core-managers-context.xml b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/core/spring-nsx-core-managers-context.xml new file mode 100644 index 000000000000..7010b8c07f44 --- /dev/null +++ b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/core/spring-nsx-core-managers-context.xml @@ -0,0 +1,32 @@ + + + + + + + diff --git a/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml index d7a2ae2e7650..d5e3e212de1c 100644 --- a/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml +++ b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml @@ -35,7 +35,5 @@ - - From 7888406f543e9697397dfdd5f061e256cd386f64 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Fri, 3 Nov 2023 12:03:57 -0300 Subject: [PATCH 3/3] Fix API result --- .../src/main/java/com/cloud/network/vpc/VpcManagerImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java index e32f53ff55e3..de946634fe4d 100644 --- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java @@ -1399,6 +1399,11 @@ public Vpc updateVpc(final long vpcId, final String vpcName, final String displa } } return vpcDao.findById(vpcId); + } else if (isVpcForNsx(vpcToUpdate)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("no restart needed."); + } + return vpcDao.findById(vpcId); } else { s_logger.error(String.format("failed to update vpc %s/%s",vpc.getName(), vpc.getUuid())); return null;