From abaaac2119142da40974e0aceb738ce8c867935f Mon Sep 17 00:00:00 2001 From: Rakesh Vekatesh Date: Thu, 30 Jan 2020 09:34:28 +0000 Subject: [PATCH] Start all (instead of Disconencted) Site-to-Site VPN connections when VPC VR starts When we restart the VPC after destroying the master VR, the backup VR becomes the master and the site to site connections are not in connected state. The passive VPN connection will be in connected state but the active VPN connection will be in disconnected state --- .../com/cloud/network/router/NetworkHelperImpl.java | 4 +++- .../router/VpcVirtualNetworkApplianceManager.java | 9 ++++++++- .../VpcVirtualNetworkApplianceManagerImpl.java | 12 ++++++++++++ .../vpc/MockVpcVirtualNetworkApplianceManager.java | 6 ++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java index 18f4a45994e5..a549adbc6b3e 100644 --- a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java +++ b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java @@ -154,6 +154,8 @@ public class NetworkHelperImpl implements NetworkHelper { protected IpAddressManager _ipAddrMgr; @Inject ConfigurationDao _configDao; + @Inject + VpcVirtualNetworkApplianceManager _vpcRouterMgr; protected final Map> hypervisorsMap = new HashMap<>(); @@ -288,7 +290,7 @@ protected DomainRouterVO start(DomainRouterVO router, final User user, final Acc // only after router start successfully final Long vpcId = router.getVpcId(); if (vpcId != null) { - _s2sVpnMgr.reconnectDisconnectedVpnByVpc(vpcId); + _vpcRouterMgr.startSite2SiteVpn(_routerDao.findById(router.getId())); } return _routerDao.findById(router.getId()); } diff --git a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java index c6181e9851ae..8c661c798a4c 100644 --- a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java +++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java @@ -74,4 +74,11 @@ public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplian * @throws ResourceUnavailableException */ boolean stopRemoteAccessVpn(RemoteAccessVpn vpn, VirtualRouter router) throws ResourceUnavailableException; -} \ No newline at end of file + + /** + * @param router + * @return + * @throws ResourceUnavailableException + */ + boolean startSite2SiteVpn(DomainRouterVO router) throws ResourceUnavailableException; +} diff --git a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 4b6da55b2382..e9d32a2152b1 100644 --- a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -66,6 +66,7 @@ import com.cloud.network.dao.MonitoringServiceVO; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.RemoteAccessVpnVO; +import com.cloud.network.dao.Site2SiteVpnConnectionVO; import com.cloud.network.vpc.NetworkACLItemDao; import com.cloud.network.vpc.NetworkACLItemVO; import com.cloud.network.vpc.NetworkACLManager; @@ -656,6 +657,17 @@ public boolean startSite2SiteVpn(final Site2SiteVpnConnection conn, final Virtua return applySite2SiteVpn(true, router, conn); } + @Override + public boolean startSite2SiteVpn(DomainRouterVO router) throws ResourceUnavailableException { + boolean result = true; + List conns = _s2sVpnMgr.getConnectionsForRouter(router); + for (Site2SiteVpnConnectionVO conn : conns) { + result = result && startSite2SiteVpn(conn, router); + } + + return result; + } + @Override public boolean stopSite2SiteVpn(final Site2SiteVpnConnection conn, final VirtualRouter router) throws ResourceUnavailableException { if (router.getState() != State.Running) { diff --git a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index d1b951a92015..45bf4c1763b5 100644 --- a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -274,4 +274,10 @@ public boolean stopRemoteAccessVpn(final RemoteAccessVpn vpn, final VirtualRoute // TODO Auto-generated method stub return false; } + + @Override + public boolean startSite2SiteVpn(DomainRouterVO router) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } } \ No newline at end of file