mirror of https://github.com/apache/cloudstack.git
adding applyStaticRoutes to the new visitor pattern.
This commit is contained in:
parent
b96035f356
commit
adebaf2bd0
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue