From 44fa33c18db499f4dabefa4dc76b895cff188c5e Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Fri, 2 Feb 2024 11:58:48 -0300 Subject: [PATCH] Fix VPC restart with cleanup (#12) --- .../src/main/java/com/cloud/vm/dao/NicDao.java | 2 ++ .../main/java/com/cloud/vm/dao/NicDaoImpl.java | 15 ++++++++++++--- .../network/router/NicProfileHelperImpl.java | 10 +++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java index 68f57329d77..23c26ea0718 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java @@ -44,6 +44,8 @@ public interface NicDao extends GenericDao { NicVO findByNetworkIdAndType(long networkId, VirtualMachine.Type vmType); + NicVO findByNetworkIdAndTypeIncludingRemoved(long networkId, VirtualMachine.Type vmType); + NicVO findByIp4AddressAndNetworkId(String ip4Address, long networkId); NicVO findByNetworkIdAndMacAddress(long networkId, String mac); diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java index 59d2417b073..3eee1d4e749 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java @@ -176,12 +176,21 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { return findOneIncludingRemovedBy(sc); } - @Override - public NicVO findByNetworkIdAndType(long networkId, VirtualMachine.Type vmType) { + private NicVO findByNetworkIdAndTypeInternal(long networkId, VirtualMachine.Type vmType, boolean includingRemoved) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("network", networkId); sc.setParameters("vmType", vmType); - return findOneBy(sc); + return includingRemoved ? findOneIncludingRemovedBy(sc) : findOneBy(sc); + } + + @Override + public NicVO findByNetworkIdAndType(long networkId, VirtualMachine.Type vmType) { + return findByNetworkIdAndTypeInternal(networkId, vmType, false); + } + + @Override + public NicVO findByNetworkIdAndTypeIncludingRemoved(long networkId, VirtualMachine.Type vmType) { + return findByNetworkIdAndTypeInternal(networkId, vmType, true); } @Override diff --git a/server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java b/server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java index 15c8a2b4155..399019db3e2 100644 --- a/server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java +++ b/server/src/main/java/com/cloud/network/router/NicProfileHelperImpl.java @@ -21,6 +21,8 @@ import java.net.URI; import javax.inject.Inject; +import com.cloud.vm.NicVO; +import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.network.router.deployment.RouterDeploymentDefinition; import com.cloud.network.IpAddressManager; @@ -118,7 +120,13 @@ public class NicProfileHelperImpl implements NicProfileHelper { public NicProfile createGuestNicProfileForVpcRouter(final RouterDeploymentDefinition vpcRouterDeploymentDefinition, final Network guestNetwork) { final NicProfile guestNic = new NicProfile(); - if (vpcRouterDeploymentDefinition.isRedundant()) { + if (BroadcastDomainType.NSX == guestNetwork.getBroadcastDomainType()) { + NicVO vrNic = _nicDao.findByNetworkIdAndTypeIncludingRemoved(guestNetwork.getId(), VirtualMachine.Type.DomainRouter); + if (vrNic != null) { + guestNic.setIPv4Address(vrNic.getIPv4Address()); + guestNic.setIPv4Gateway(vrNic.getIPv4Gateway()); + } + } else if (vpcRouterDeploymentDefinition.isRedundant()) { guestNic.setIPv4Address(this.acquireGuestIpAddressForVrouterRedundant(guestNetwork)); } else { guestNic.setIPv4Address(guestNetwork.getGateway());