From adebaf2bd0b7e1e3734846385d589ca63dc38795 Mon Sep 17 00:00:00 2001 From: wrodrigues Date: Tue, 19 Aug 2014 18:04:24 +0200 Subject: [PATCH] adding applyStaticRoutes to the new visitor pattern. --- .../element/VpcVirtualRouterElement.java | 5 +++- .../VpcVirtualNetworkApplianceManager.java | 8 ----- ...VpcVirtualNetworkApplianceManagerImpl.java | 29 ------------------ .../network/rules/StaticRoutesRules.java | 3 +- .../rules/VirtualNetworkApplianceFactory.java | 9 ++++++ .../topology/AdvancedNetworkTopology.java | 30 ++++++++++++++++--- .../topology/AdvancedNetworkVisitor.java | 10 +++++-- ...MockVpcVirtualNetworkApplianceManager.java | 9 ------ 8 files changed, 48 insertions(+), 55 deletions(-) diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 5bc62c00139..5504df35d47 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -493,7 +493,10 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return true; } - if (!_vpcRouterMgr.applyStaticRoutes(routes, routers)) { + DataCenterVO dcVO = _dcDao.findById(vpc.getZoneId()); + NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + + if (!networkTopology.applyStaticRoutes(routes, routers)) { throw new CloudRuntimeException("Failed to apply static routes in vpc " + vpc); } else { s_logger.debug("Applied static routes on vpc " + vpc); diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java index db8a1dca282..7aecba56152 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java @@ -48,14 +48,6 @@ public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplian */ boolean destroyPrivateGateway(PrivateGateway gateway, VirtualRouter router) throws ConcurrentOperationException, ResourceUnavailableException; - /** - * @param routes - * @param routers - * @return - * @throws ResourceUnavailableException - */ - boolean applyStaticRoutes(List routes, List routers) throws ResourceUnavailableException; - /** * @param conn * @param routers diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 32954291c35..b358cd2e448 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -774,35 +774,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } } - @Override - public boolean applyStaticRoutes(final List staticRoutes, final List routers) throws ResourceUnavailableException { - if (staticRoutes == null || staticRoutes.isEmpty()) { - s_logger.debug("No static routes to apply"); - return true; - } - - boolean result = true; - for (VirtualRouter router : routers) { - if (router.getState() == State.Running) { - result = result && sendStaticRoutes(staticRoutes, routers.get(0)); - } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) { - s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending StaticRoute command to the backend"); - } else { - s_logger.warn("Unable to apply StaticRoute, virtual router is not in the right state " + router.getState()); - - throw new ResourceUnavailableException("Unable to apply StaticRoute on the backend," + " virtual router is not in the right state", DataCenter.class, - router.getDataCenterId()); - } - } - return result; - } - - protected boolean sendStaticRoutes(final List staticRoutes, final DomainRouterVO router) throws ResourceUnavailableException { - Commands cmds = new Commands(Command.OnError.Continue); - createStaticRouteCommands(staticRoutes, router, cmds); - return _nwHelper.sendCommandsToRouter(router, cmds); - } - /** * @param staticRoutes * @param router diff --git a/server/src/com/cloud/network/rules/StaticRoutesRules.java b/server/src/com/cloud/network/rules/StaticRoutesRules.java index f7c4de90292..b94cea2514e 100644 --- a/server/src/com/cloud/network/rules/StaticRoutesRules.java +++ b/server/src/com/cloud/network/rules/StaticRoutesRules.java @@ -28,7 +28,6 @@ import com.cloud.dc.DataCenterVO; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.router.VirtualRouter; import com.cloud.network.vpc.StaticRouteProfile; -import com.cloud.vm.DomainRouterVO; public class StaticRoutesRules extends RuleApplier { @@ -50,7 +49,7 @@ public class StaticRoutesRules extends RuleApplier { return visitor.visit(this); } - public void createStaticRouteCommands(final List staticRoutes, final DomainRouterVO router, final Commands cmds) { + public void createStaticRouteCommands(final List staticRoutes, final VirtualRouter router, final Commands cmds) { SetStaticRouteCommand cmd = new SetStaticRouteCommand(staticRoutes); cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _networkHelper.getRouterControlIp(router.getId())); cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); diff --git a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java index 4815cbfdf6b..2ea092dbf4b 100644 --- a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java +++ b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java @@ -41,6 +41,7 @@ import com.cloud.network.router.NetworkHelper; import com.cloud.network.router.RouterControlHelper; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -303,4 +304,12 @@ public class VirtualNetworkApplianceFactory { return pvlanRules; } + + public StaticRoutesRules createStaticRoutesRules(List staticRoutes) { + StaticRoutesRules routesRules = new StaticRoutesRules(staticRoutes); + + initBeans(routesRules); + + return routesRules; + } } \ No newline at end of file diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java index bea28cf1d93..8cc47d2d5d6 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java @@ -41,6 +41,7 @@ import com.cloud.network.rules.NetworkAclsRules; import com.cloud.network.rules.NicPlugInOutRules; import com.cloud.network.rules.RuleApplier; import com.cloud.network.rules.RuleApplierWrapper; +import com.cloud.network.rules.StaticRoutesRules; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.VpcIpAssociationRules; import com.cloud.network.vpc.NetworkACLItem; @@ -60,10 +61,31 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology { protected AdvancedNetworkVisitor _advancedVisitor; @Override - public boolean applyStaticRoutes(final List staticRoutes, - final List routers) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return super.applyStaticRoutes(staticRoutes, routers); + public boolean applyStaticRoutes(final List staticRoutes, final List routers) throws ResourceUnavailableException { + + if (staticRoutes == null || staticRoutes.isEmpty()) { + s_logger.debug("No static routes to apply"); + return true; + } + + StaticRoutesRules routesRules = _virtualNetworkApplianceFactory.createStaticRoutesRules(staticRoutes); + + boolean result = true; + for (VirtualRouter router : routers) { + if (router.getState() == State.Running) { + + result = result && routesRules.accept(_advancedVisitor, router); + + } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) { + s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending StaticRoute command to the backend"); + } else { + s_logger.warn("Unable to apply StaticRoute, virtual router is not in the right state " + router.getState()); + + throw new ResourceUnavailableException("Unable to apply StaticRoute on the backend," + " virtual router is not in the right state", DataCenter.class, + router.getDataCenterId()); + } + } + return result; } @Override diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java index d1e5175cd9f..464dd1f9957 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java @@ -41,6 +41,7 @@ import com.cloud.network.rules.StaticRoutesRules; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.VpcIpAssociationRules; import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.vm.NicVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachineProfile; @@ -164,7 +165,12 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { @Override public boolean visit(final StaticRoutesRules staticRoutesRules) throws ResourceUnavailableException { - - return false; + final VirtualRouter router = staticRoutesRules.getRouter(); + List staticRoutes = staticRoutesRules.getStaticRoutes(); + + Commands cmds = new Commands(Command.OnError.Continue); + staticRoutesRules.createStaticRouteCommands(staticRoutes, router, cmds); + + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } } \ No newline at end of file diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 8802f9b14de..7153ed744da 100644 --- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -226,15 +226,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement return false; } - /* (non-Javadoc) - * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyStaticRoutes(java.util.List, java.util.List) - */ - @Override - public boolean applyStaticRoutes(final List routes, final List routers) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - /* (non-Javadoc) * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#startSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection, com.cloud.network.router.VirtualRouter) */