adding applyStaticRoutes to the new visitor pattern.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0de16e03 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0de16e03 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0de16e03 Branch: refs/heads/vpc-refactor Commit: 0de16e0398725a659e02c1145820f979a24c4601 Parents: 51df3aa Author: wrodrigues <wrodrig...@schubergphilis.com> Authored: Tue Aug 19 18:04:24 2014 +0200 Committer: Wilder Rodrigues <wrodrig...@schubergphilis.com> Committed: Fri Oct 3 06:21:27 2014 +0200 ---------------------------------------------------------------------- .../element/VpcVirtualRouterElement.java | 5 +++- .../VpcVirtualNetworkApplianceManager.java | 8 ------ .../VpcVirtualNetworkApplianceManagerImpl.java | 29 ------------------- .../cloud/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(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/com/cloud/network/element/VpcVirtualRouterElement.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 5bc62c0..5504df3 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); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java index db8a1dc..7aecba5 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java @@ -49,14 +49,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<StaticRouteProfile> routes, List<DomainRouterVO> routers) throws ResourceUnavailableException; - - /** * @param conn * @param routers * @return http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 9af35d6..b3993d9 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<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> 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<StaticRouteProfile> 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 http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/com/cloud/network/rules/StaticRoutesRules.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/StaticRoutesRules.java b/server/src/com/cloud/network/rules/StaticRoutesRules.java index f7c4de9..b94cea2 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<StaticRouteProfile> staticRoutes, final DomainRouterVO router, final Commands cmds) { + public void createStaticRouteCommands(final List<StaticRouteProfile> 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()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java index 4815cbf..2ea092d 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<StaticRouteProfile> staticRoutes) { + StaticRoutesRules routesRules = new StaticRoutesRules(staticRoutes); + + initBeans(routesRules); + + return routesRules; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java index bea28cf..8cc47d2 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<StaticRouteProfile> staticRoutes, - final List<DomainRouterVO> routers) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return super.applyStaticRoutes(staticRoutes, routers); + public boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> 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 http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java index d1e5175..464dd1f 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<StaticRouteProfile> 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 http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0de16e03/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 8802f9b..7153ed7 100644 --- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -227,15 +227,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement } /* (non-Javadoc) - * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyStaticRoutes(java.util.List, java.util.List) - */ - @Override - public boolean applyStaticRoutes(final List<StaticRouteProfile> routes, final List<DomainRouterVO> 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) */ @Override