adding applyStaticRoutes to the new visitor pattern.

This commit is contained in:
wrodrigues 2014-08-19 18:04:24 +02:00 committed by wilderrodrigues
parent b96035f356
commit adebaf2bd0
8 changed files with 48 additions and 55 deletions

View File

@ -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);

View File

@ -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<StaticRouteProfile> routes, List<DomainRouterVO> routers) throws ResourceUnavailableException;
/**
* @param conn
* @param routers

View File

@ -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

View File

@ -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());

View File

@ -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;
}
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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<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)
*/