From 24b230d11bd35b0a9f1fb7a5e49ba745f61ac483 Mon Sep 17 00:00:00 2001 From: Antonio Fornie Date: Fri, 11 Jul 2014 08:07:35 -0500 Subject: [PATCH] Fix dependency problem. Extract and unify router deployment stuff Conflicts: server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java --- .../spring-server-core-managers-context.xml | 2 + .../network/element/VirtualRouterElement.java | 18 +- .../element/VpcVirtualRouterElement.java | 13 +- .../network/router/NetworkGeneralHelper.java | 55 ++-- .../router/RouterDeploymentDefinition.java | 93 ++++++ .../router/RouterDeploymentManager.java | 271 ++++++++++++++++++ .../VirtualNetworkApplianceManager.java | 5 +- .../VirtualNetworkApplianceManagerImpl.java | 43 +-- .../VpcVirtualNetworkApplianceManager.java | 35 --- ...VpcVirtualNetworkApplianceManagerImpl.java | 230 +-------------- .../router/VpcVirtualNetworkHelper.java | 27 -- .../router/VpcVirtualNetworkHelperImpl.java | 230 +-------------- ...MockVpcVirtualNetworkApplianceManager.java | 26 +- 13 files changed, 458 insertions(+), 590 deletions(-) create mode 100644 server/src/com/cloud/network/router/RouterDeploymentDefinition.java create mode 100644 server/src/com/cloud/network/router/RouterDeploymentManager.java delete mode 100644 server/src/com/cloud/network/router/VpcVirtualNetworkHelper.java diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml index 6dd3526718b..55420c03b97 100644 --- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml +++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml @@ -190,6 +190,8 @@ class="com.cloud.network.router.NetworkGeneralHelper" /> + diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 552d4211250..8ac3d230ed1 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -69,6 +69,7 @@ import com.cloud.network.dao.VirtualRouterProviderDao; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.router.RouterDeploymentDefinition; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; @@ -196,9 +197,11 @@ NetworkMigrationResponder, AggregatedCommandExecutor { Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - List routers = _routerMgr.deployVirtualRouterInGuestNetwork(network, dest, - _accountMgr.getAccount(network.getAccountId()), params, - offering.getRedundantRouter()); + RouterDeploymentDefinition routerDeploymentDefinition = + new RouterDeploymentDefinition(network, dest,_accountMgr.getAccount(network.getAccountId()), + params, offering.getRedundantRouter()); + List routers = _routerMgr.deployVirtualRouter(routerDeploymentDefinition); + int routerCounts = 1; if (offering.getRedundantRouter()) { routerCounts = 2; @@ -230,11 +233,12 @@ NetworkMigrationResponder, AggregatedCommandExecutor { return false; } - @SuppressWarnings("unchecked") - VirtualMachineProfile uservm = vm; + RouterDeploymentDefinition routerDeploymentDefinition = + new RouterDeploymentDefinition(network, dest,_accountMgr.getAccount(network.getAccountId()), + vm.getParameters(), offering.getRedundantRouter()); List routers = - _routerMgr.deployVirtualRouterInGuestNetwork(network, dest, _accountMgr.getAccount(network.getAccountId()), uservm.getParameters(), - offering.getRedundantRouter()); + _routerMgr.deployVirtualRouter(routerDeploymentDefinition); + if (routers == null || routers.size() == 0) { throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index d583383add9..0cc083ba0d2 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -47,6 +47,7 @@ import com.cloud.network.VpnUser; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.Site2SiteVpnGatewayDao; +import com.cloud.network.router.RouterDeploymentDefinition; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; @@ -131,7 +132,9 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params); + RouterDeploymentDefinition routerDeploymentDefinition = + new RouterDeploymentDefinition(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params, false); + _vpcRouterMgr.deployVirtualRouter(routerDeploymentDefinition); return true; } @@ -168,7 +171,9 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params); + RouterDeploymentDefinition routerDeploymentDefinition = + new RouterDeploymentDefinition(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params, false); + List routers = _vpcRouterMgr.deployVirtualRouter(routerDeploymentDefinition); if ((routers == null) || (routers.size() == 0)) { throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } @@ -213,7 +218,9 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc if (vm.getType() == VirtualMachine.Type.User) { Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params); + RouterDeploymentDefinition routerDeploymentDefinition = + new RouterDeploymentDefinition(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params, false); + List routers = _vpcRouterMgr.deployVirtualRouter(routerDeploymentDefinition); if ((routers == null) || (routers.size() == 0)) { throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } diff --git a/server/src/com/cloud/network/router/NetworkGeneralHelper.java b/server/src/com/cloud/network/router/NetworkGeneralHelper.java index 7311adb7bde..db6f4bc0f35 100644 --- a/server/src/com/cloud/network/router/NetworkGeneralHelper.java +++ b/server/src/com/cloud/network/router/NetworkGeneralHelper.java @@ -393,10 +393,8 @@ public class NetworkGeneralHelper { // @Override - public DomainRouterVO deployRouter(Account owner, - DeployDestination dest, DeploymentPlan plan, - Map params, boolean isRedundant, - VirtualRouterProvider vrProvider, long svcOffId, Long vpcId, + public DomainRouterVO deployRouter(final RouterDeploymentDefinition routerDeploymentDefinition, + VirtualRouterProvider vrProvider, long svcOffId, LinkedHashMap> networks, boolean startRouter, List supportedHypervisors) throws InsufficientAddressCapacityException, @@ -404,10 +402,12 @@ public class NetworkGeneralHelper { StorageUnavailableException, ResourceUnavailableException { final ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(svcOffId); + final DeployDestination dest = routerDeploymentDefinition.getDest(); + final Account owner = routerDeploymentDefinition.getOwner(); // Router is the network element, we don't know the hypervisor type yet. // Try to allocate the domR twice using diff hypervisors, and when failed both times, throw the exception up - final List hypervisors = getHypervisors(dest, plan, supportedHypervisors); + final List hypervisors = getHypervisors(routerDeploymentDefinition, supportedHypervisors); int allocateRetry = 0; int startRetry = 0; @@ -449,19 +449,18 @@ public class NetworkGeneralHelper { boolean offerHA = routerOffering.getOfferHA(); /* We don't provide HA to redundant router VMs, admin should own it all, and redundant router themselves are HA */ - if (isRedundant) { + if (routerDeploymentDefinition.isRedundant()) { offerHA = false; } - router = - new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(), - VirtualMachineName.getRouterName(id, VirtualNwStatus.instance), template.getId(), template.getHypervisorType(), - template.getGuestOSId(), owner.getDomainId(), owner.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, - offerHA, false, vpcId); + router = new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(), + VirtualMachineName.getRouterName(id, VirtualNwStatus.instance), template.getId(), template.getHypervisorType(), + template.getGuestOSId(), owner.getDomainId(), owner.getId(), routerDeploymentDefinition.isRedundant(), 0, + false, RedundantState.UNKNOWN, offerHA, false, routerDeploymentDefinition.getVpc().getId()); router.setDynamicallyScalable(template.isDynamicallyScalable()); router.setRole(Role.VIRTUAL_ROUTER); router = _routerDao.persist(router); - _itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, plan, null); + _itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, routerDeploymentDefinition.getPlan(), null); router = _routerDao.findById(router.getId()); } catch (final InsufficientCapacityException ex) { if (allocateRetry < 2 && iter.hasNext()) { @@ -476,7 +475,7 @@ public class NetworkGeneralHelper { if (startRouter) { try { - router = startVirtualRouter(router, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount(), params); + router = startVirtualRouter(router, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount(), routerDeploymentDefinition.getParams()); break; } catch (final InsufficientCapacityException ex) { if (startRetry < 2 && iter.hasNext()) { @@ -499,8 +498,9 @@ public class NetworkGeneralHelper { return router; } - protected List getHypervisors(final DeployDestination dest, final DeploymentPlan plan, final List supportedHypervisors) + protected List getHypervisors(final RouterDeploymentDefinition routerDeploymentDefinition, final List supportedHypervisors) throws InsufficientServerCapacityException { + final DeployDestination dest = routerDeploymentDefinition.getDest(); List hypervisors = new ArrayList(); if (dest.getCluster() != null) { @@ -515,7 +515,7 @@ public class NetworkGeneralHelper { hypervisors.add(defaults); } else { //if there is no default hypervisor, get it from the cluster - hypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId(), true, plan.getPodId()); + hypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId(), true, routerDeploymentDefinition.getPodId()); } } @@ -530,9 +530,9 @@ public class NetworkGeneralHelper { if (hypervisors.isEmpty()) { final String errMsg = (hTypesStr.capacity() > 0) ? "supporting hypervisors " + hTypesStr.toString() : ""; - if (plan.getPodId() != null) { + if (routerDeploymentDefinition.getPodId() != null) { throw new InsufficientServerCapacityException("Unable to create virtual router, " + "there are no clusters in the pod " + errMsg, Pod.class, - plan.getPodId()); + routerDeploymentDefinition.getPodId()); } throw new InsufficientServerCapacityException("Unable to create virtual router, " + "there are no clusters in the zone " + errMsg, DataCenter.class, dest.getDataCenter().getId()); @@ -564,16 +564,19 @@ public class NetworkGeneralHelper { } final String errMsg = - "Cannot find an available cluster in Pod " + podId + " to start domain router for Ovm. \n Ovm won't support any system vm including domain router, " + - "please make sure you have a cluster with hypervisor type of any of xenserver/KVM/Vmware in the same pod" + - " with Ovm cluster. And there is at least one host in UP status in that cluster."; + new StringBuilder("Cannot find an available cluster in Pod ") + .append(podId) + .append(" to start domain router for Ovm. \n Ovm won't support any system vm including domain router, ") + .append("please make sure you have a cluster with hypervisor type of any of xenserver/KVM/Vmware in the same pod") + .append(" with Ovm cluster. And there is at least one host in UP status in that cluster.") + .toString(); throw new CloudRuntimeException(errMsg); } // @Override public LinkedHashMap> createRouterNetworks( - Account owner, boolean isRedundant, DeploymentPlan plan, + final RouterDeploymentDefinition routerDeploymentDefinition, Network guestNetwork, Pair publicNetwork) throws ConcurrentOperationException, InsufficientAddressCapacityException { @@ -595,7 +598,7 @@ public class NetworkGeneralHelper { if (!setupPublicNetwork) { final Nic placeholder = _networkModel .getPlaceholderNicForRouter(guestNetwork, - plan.getPodId()); + routerDeploymentDefinition.getPodId()); if (guestNetwork.getCidr() != null) { if (placeholder != null && placeholder.getIp4Address() != null) { @@ -651,7 +654,7 @@ public class NetworkGeneralHelper { final NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, defaultNetworkStartIpv6); if (setupPublicNetwork) { - if (isRedundant) { + if (routerDeploymentDefinition.isRedundant()) { gatewayNic.setIp4Address(_ipAddrMgr.acquireGuestIpAddress( guestNetwork, null)); } else { @@ -679,7 +682,7 @@ public class NetworkGeneralHelper { .getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); NetworkOffering controlOffering = offerings.get(0); Network controlConfig = _networkMgr.setupNetwork(VirtualNwStatus.account, - controlOffering, plan, null, null, false).get(0); + controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0); networks.put(controlConfig, new ArrayList()); // 3) Public network if (setupPublicNetwork) { @@ -716,8 +719,8 @@ public class NetworkGeneralHelper { .getSystemAccountNetworkOfferings( NetworkOffering.SystemPublicNetwork).get(0); final List publicNetworks = _networkMgr - .setupNetwork(VirtualNwStatus.account, publicOffering, plan, null, - null, false); + .setupNetwork(VirtualNwStatus.account, publicOffering, routerDeploymentDefinition.getPlan(), + null, null, false); final String publicIp = defaultNic.getIp4Address(); // We want to use the identical MAC address for RvR on public // interface if possible diff --git a/server/src/com/cloud/network/router/RouterDeploymentDefinition.java b/server/src/com/cloud/network/router/RouterDeploymentDefinition.java new file mode 100644 index 00000000000..6a147e0929e --- /dev/null +++ b/server/src/com/cloud/network/router/RouterDeploymentDefinition.java @@ -0,0 +1,93 @@ +package com.cloud.network.router; + +import java.util.Map; + +import com.cloud.deploy.DeployDestination; +import com.cloud.deploy.DeploymentPlan; +import com.cloud.network.Network; +import com.cloud.network.vpc.Vpc; +import com.cloud.user.Account; +import com.cloud.vm.VirtualMachineProfile.Param; + +public class RouterDeploymentDefinition { + + protected Vpc vpc; + protected Network guestNetwork; + protected DeployDestination dest; + protected Account owner; + protected Map params; + protected boolean isRedundant; + protected DeploymentPlan plan; + + public RouterDeploymentDefinition(Vpc vpc, DeployDestination dest, + Account owner, Map params, + boolean isRedundant) { + + this.vpc = vpc; + this.dest = dest; + this.owner = owner; + this.params = params; + this.isRedundant = isRedundant; + } + + public RouterDeploymentDefinition(Network guestNetwork, DeployDestination dest, + Account owner, Map params, boolean isRedundant) { + + this.guestNetwork = guestNetwork; + this.dest = dest; + this.owner = owner; + this.params = params; + this.isRedundant = isRedundant; + } + + public Vpc getVpc() { + return vpc; + } + public void setVpc(Vpc vpc) { + this.vpc = vpc; + } + public Network getGuestNetwork() { + return guestNetwork; + } + public void setGuestNetwork(Network guestNetwork) { + this.guestNetwork = guestNetwork; + } + public DeployDestination getDest() { + return dest; + } + public void setDest(DeployDestination dest) { + this.dest = dest; + } + public Account getOwner() { + return owner; + } + public void setOwner(Account owner) { + this.owner = owner; + } + public Map getParams() { + return params; + } + public void setParams(Map params) { + this.params = params; + } + public boolean isRedundant() { + return isRedundant; + } + public void setRedundant(boolean isRedundant) { + this.isRedundant = isRedundant; + } + public DeploymentPlan getPlan() { + return plan; + } + public void setPlan(DeploymentPlan plan) { + this.plan = plan; + } + + public boolean isVpcRouter() { + return this.vpc != null; + } + public Long getPodId() { + return this.plan.getPodId(); + } + +} diff --git a/server/src/com/cloud/network/router/RouterDeploymentManager.java b/server/src/com/cloud/network/router/RouterDeploymentManager.java new file mode 100644 index 00000000000..b000e11c918 --- /dev/null +++ b/server/src/com/cloud/network/router/RouterDeploymentManager.java @@ -0,0 +1,271 @@ +package com.cloud.network.router; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.TreeSet; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; +import org.apache.log4j.Logger; + +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DataCenterDeployment; +import com.cloud.deploy.DeploymentPlan; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientServerCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.network.IpAddress; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.IsolationType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.VirtualRouterProvider; +import com.cloud.network.VirtualRouterProvider.Type; +import com.cloud.network.addr.PublicIp; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.VirtualRouterProviderDao; +import com.cloud.network.vpc.PrivateGateway; +import com.cloud.network.vpc.Vpc; +import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.dao.VpcDao; +import com.cloud.network.vpc.dao.VpcOfferingDao; +import com.cloud.offering.NetworkOffering; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.utils.Pair; +import com.cloud.utils.db.DB; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.NicProfile; + +public class RouterDeploymentManager { + + private static final Logger logger = Logger.getLogger(RouterDeploymentManager.class); + + @Inject + VpcDao vpcDao; + @Inject + VpcOfferingDao vpcOffDao; + @Inject + PhysicalNetworkDao pNtwkDao; + @Inject + VpcManager vpcMgr; + @Inject + PhysicalNetworkServiceProviderDao physicalProviderDao; + @Inject + VlanDao vlanDao; + @Inject + IPAddressDao ipAddressDao; + @Inject + NetworkOrchestrationService networkMgr; + @Inject + NetworkModel networkModel; + @Inject + VirtualRouterProviderDao vrProviderDao; + + @Inject + protected NetworkGeneralHelper nwHelper; + @Inject + protected VpcVirtualNetworkHelperImpl vpcHelper; + + + protected ServiceOfferingVO _offering; + + + /////////////////////////////////////////////////////////////////////// + // Non-VPC behavior + /////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////// + // VPC Specific behavior + /////////////////////////////////////////////////////////////////////// + + public List deployVirtualRouterInVpc(final RouterDeploymentDefinition routerDeploymentDefinition) + throws InsufficientCapacityException, + ConcurrentOperationException, ResourceUnavailableException { + + List routers = this.findOrDeployVirtualRouterInVpc(routerDeploymentDefinition); + + return this.nwHelper.startRouters(routerDeploymentDefinition.getParams(), routers); + } + + @DB + protected List findOrDeployVirtualRouterInVpc(final RouterDeploymentDefinition routerDeploymentDefinition) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + + final Vpc vpc = routerDeploymentDefinition.getVpc(); + logger.debug("Deploying Virtual Router in VPC " + vpc); + Vpc vpcLock = vpcDao.acquireInLockTable(vpc.getId()); + if (vpcLock == null) { + throw new ConcurrentOperationException("Unable to lock vpc " + vpc.getId()); + } + + //1) Get deployment plan and find out the list of routers + Pair> planAndRouters = getDeploymentPlanAndRouters(routerDeploymentDefinition); + DeploymentPlan plan = planAndRouters.first(); + List routers = planAndRouters.second(); + try { + //2) Return routers if exist + if (routers.size() >= 1) { + return routers; + } + + Long offeringId = vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId(); + if (offeringId == null) { + offeringId = _offering.getId(); + } + //3) Deploy Virtual Router + List pNtwks = pNtwkDao.listByZone(vpc.getZoneId()); + + VirtualRouterProvider vpcVrProvider = null; + + for (PhysicalNetwork pNtwk : pNtwks) { + PhysicalNetworkServiceProvider provider = physicalProviderDao.findByServiceProvider(pNtwk.getId(), Type.VPCVirtualRouter.toString()); + if (provider == null) { + throw new CloudRuntimeException("Cannot find service provider " + Type.VPCVirtualRouter.toString() + " in physical network " + pNtwk.getId()); + } + vpcVrProvider = vrProviderDao.findByNspIdAndType(provider.getId(), Type.VPCVirtualRouter); + if (vpcVrProvider != null) { + break; + } + } + + PublicIp sourceNatIp = vpcMgr.assignSourceNatIpAddressToVpc(routerDeploymentDefinition.getOwner(), vpc); + + DomainRouterVO router = deployVpcRouter(routerDeploymentDefinition, vpcVrProvider, offeringId, sourceNatIp); + routers.add(router); + + } finally { + // TODO Should we do this after the pre or after the whole?? + if (vpcLock != null) { + vpcDao.releaseFromLockTable(vpc.getId()); + } + } + return routers; + } + + protected Pair> getDeploymentPlanAndRouters(final RouterDeploymentDefinition routerDeploymentDefinition) { + long dcId = routerDeploymentDefinition.getDest().getDataCenter().getId(); + + DeploymentPlan plan = new DataCenterDeployment(dcId); + List routers = this.vpcHelper.getVpcRouters(routerDeploymentDefinition.getVpc().getId()); + + return new Pair>(plan, routers); + } + + + protected DomainRouterVO deployVpcRouter(final RouterDeploymentDefinition routerDeploymentDefinition, VirtualRouterProvider vrProvider, + long svcOffId, PublicIp sourceNatIp) throws ConcurrentOperationException, InsufficientAddressCapacityException, + InsufficientServerCapacityException, InsufficientCapacityException, StorageUnavailableException, ResourceUnavailableException { + + LinkedHashMap> networks = createVpcRouterNetworks(routerDeploymentDefinition, + new Pair(true, sourceNatIp), routerDeploymentDefinition.getVpc().getId()); + + DomainRouterVO router = + this.nwHelper.deployRouter(routerDeploymentDefinition, vrProvider, svcOffId, networks, true, vpcMgr.getSupportedVpcHypervisors()); + + return router; + } + + protected LinkedHashMap> createVpcRouterNetworks(final RouterDeploymentDefinition routerDeploymentDefinition, + Pair sourceNatIp, long vpcId) + throws ConcurrentOperationException, InsufficientAddressCapacityException { + + LinkedHashMap> networks = new LinkedHashMap>(4); + + TreeSet publicVlans = new TreeSet(); + publicVlans.add(sourceNatIp.second().getVlanTag()); + + //1) allocate nic for control and source nat public ip + networks = this.nwHelper.createRouterNetworks(routerDeploymentDefinition, null, sourceNatIp); + + + //2) allocate nic for private gateways if needed + List privateGateways = vpcMgr.getVpcPrivateGateways(vpcId); + if (privateGateways != null && !privateGateways.isEmpty()) { + for (PrivateGateway privateGateway : privateGateways) { + NicProfile privateNic = this.vpcHelper.createPrivateNicProfileForGateway(privateGateway); + Network privateNetwork = networkModel.getNetwork(privateGateway.getNetworkId()); + networks.put(privateNetwork, new ArrayList(Arrays.asList(privateNic))); + } + } + + //3) allocate nic for guest gateway if needed + List guestNetworks = vpcMgr.getVpcNetworks(vpcId); + for (Network guestNetwork : guestNetworks) { + if (networkModel.isPrivateGateway(guestNetwork.getId())) { + continue; + } + if (guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup) { + NicProfile guestNic = createGuestNicProfileForVpcRouter(guestNetwork); + networks.put(guestNetwork, new ArrayList(Arrays.asList(guestNic))); + } + } + + //4) allocate nic for additional public network(s) + List ips = ipAddressDao.listByAssociatedVpc(vpcId, false); + List publicNics = new ArrayList(); + Network publicNetwork = null; + for (IPAddressVO ip : ips) { + PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, vlanDao.findById(ip.getVlanId())); + if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && vpcMgr.isIpAllocatedToVpc(ip) && + !publicVlans.contains(publicIp.getVlanTag())) { + logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag()); + NicProfile publicNic = new NicProfile(); + publicNic.setDefaultNic(false); + publicNic.setIp4Address(publicIp.getAddress().addr()); + publicNic.setGateway(publicIp.getGateway()); + publicNic.setNetmask(publicIp.getNetmask()); + publicNic.setMacAddress(publicIp.getMacAddress()); + publicNic.setBroadcastType(BroadcastDomainType.Vlan); + publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); + publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); + NetworkOffering publicOffering = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); + if (publicNetwork == null) { + List publicNetworks = networkMgr.setupNetwork(VirtualNwStatus.account, + publicOffering, routerDeploymentDefinition.getPlan(), null, null, false); + publicNetwork = publicNetworks.get(0); + } + publicNics.add(publicNic); + publicVlans.add(publicIp.getVlanTag()); + } + } + if (publicNetwork != null) { + if (networks.get(publicNetwork) != null) { + List publicNicProfiles = (List)networks.get(publicNetwork); + publicNicProfiles.addAll(publicNics); + networks.put(publicNetwork, publicNicProfiles); + } else { + networks.put(publicNetwork, publicNics); + } + } + + return networks; + } + + protected NicProfile createGuestNicProfileForVpcRouter(Network guestNetwork) { + NicProfile guestNic = new NicProfile(); + guestNic.setIp4Address(guestNetwork.getGateway()); + guestNic.setBroadcastUri(guestNetwork.getBroadcastUri()); + guestNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); + guestNic.setIsolationUri(guestNetwork.getBroadcastUri()); + guestNic.setMode(guestNetwork.getMode()); + String gatewayCidr = guestNetwork.getCidr(); + guestNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr)); + + return guestNic; + } + +} diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java index 85ce8b9dcc8..f277e1aa8bb 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java @@ -17,7 +17,6 @@ package com.cloud.network.router; import java.util.List; -import java.util.Map; import org.apache.cloudstack.framework.config.ConfigKey; @@ -98,8 +97,8 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA boolean saveUserDataToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, List routers) throws ResourceUnavailableException; - List deployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, Account owner, Map params, - boolean isRedundant) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; + List deployVirtualRouter(RouterDeploymentDefinition routerDeploymentDefinition) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) throws ResourceUnavailableException; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 18a1e2de6ca..065b904ac83 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -404,6 +404,8 @@ Configurable, StateListener { @Inject protected NetworkGeneralHelper nwHelper; + @Inject + protected RouterDeploymentManager routerDeploymentManager; int _routerRamSize; int _routerCpuMHz; @@ -1539,8 +1541,11 @@ Configurable, StateListener { } @DB - protected List findOrDeployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, Account owner, final boolean isRedundant, - final Map params) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + protected List findOrDeployVirtualRouterInGuestNetwork(final RouterDeploymentDefinition routerDeploymentDefinition) throws ConcurrentOperationException, + InsufficientCapacityException, ResourceUnavailableException { + + final Network guestNetwork = routerDeploymentDefinition.getGuestNetwork(); + final DeployDestination dest = routerDeploymentDefinition.getDest(); final List routers = new ArrayList(); final Network lock = _networkDao.acquireInLockTable(guestNetwork.getId(), NetworkOrchestrationService.NetworkLockTimeout.value()); @@ -1608,7 +1613,7 @@ Configurable, StateListener { // 2) Figure out required routers count int routerCount = 1; - if (isRedundant) { + if (routerDeploymentDefinition.isRedundant()) { routerCount = 2; // Check current redundant routers, if possible(all routers // are stopped), reset the priority @@ -1640,7 +1645,7 @@ Configurable, StateListener { } if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { - owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); + routerDeploymentDefinition.setOwner(_accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM)); } // Check if public network has to be set on VR @@ -1648,7 +1653,7 @@ Configurable, StateListener { if (_networkModel.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { publicNetwork = true; } - if (isRedundant && !publicNetwork) { + if (routerDeploymentDefinition.isRedundant() && !publicNetwork) { s_logger.error("Didn't support redundant virtual router without public network!"); return null; } @@ -1660,18 +1665,19 @@ Configurable, StateListener { PublicIp sourceNatIp = null; if (publicNetwork) { - sourceNatIp = _ipAddrMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); + sourceNatIp = _ipAddrMgr.assignSourceNatIpAddressToGuestNetwork(routerDeploymentDefinition.getOwner(), guestNetwork); } // 3) deploy virtual router(s) final int count = routerCount - destRouters.size(); final DeploymentPlan plan = planAndRouters.first(); + routerDeploymentDefinition.setPlan(plan); for (int i = 0; i < count; i++) { - final LinkedHashMap> networks = createRouterNetworks(owner, isRedundant, plan, guestNetwork, new Pair( + final LinkedHashMap> networks = createRouterNetworks(routerDeploymentDefinition, new Pair( publicNetwork, sourceNatIp)); // don't start the router as we are holding the network lock // that needs to be released at the end of router allocation - final DomainRouterVO router = nwHelper.deployRouter(owner, destination, plan, params, isRedundant, vrProvider, offeringId, null, networks, false, null); + final DomainRouterVO router = nwHelper.deployRouter(routerDeploymentDefinition, vrProvider, offeringId, networks, false, null); if (router != null) { _routerDao.addRouterToGuestNetwork(router, guestNetwork); @@ -1708,9 +1714,10 @@ Configurable, StateListener { return _podDao.search(sc, null); } - protected LinkedHashMap> createRouterNetworks(final Account owner, final boolean isRedundant, final DeploymentPlan plan, - final Network guestNetwork, final Pair publicNetwork) throws ConcurrentOperationException, InsufficientAddressCapacityException { + protected LinkedHashMap> createRouterNetworks(final RouterDeploymentDefinition routerDeploymentDefinition, + final Pair publicNetwork) throws ConcurrentOperationException, InsufficientAddressCapacityException { + final Network guestNetwork = routerDeploymentDefinition.getGuestNetwork(); boolean setupPublicNetwork = false; if (publicNetwork != null) { setupPublicNetwork = publicNetwork.first(); @@ -1724,7 +1731,7 @@ Configurable, StateListener { s_logger.debug("Adding nic for Virtual Router in Guest network " + guestNetwork); String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null; if (!setupPublicNetwork) { - final Nic placeholder = _networkModel.getPlaceholderNicForRouter(guestNetwork, plan.getPodId()); + final Nic placeholder = _networkModel.getPlaceholderNicForRouter(guestNetwork, routerDeploymentDefinition.getPodId()); if (guestNetwork.getCidr() != null) { if (placeholder != null && placeholder.getIp4Address() != null) { s_logger.debug("Requesting ipv4 address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + guestNetwork); @@ -1758,7 +1765,7 @@ Configurable, StateListener { final NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, defaultNetworkStartIpv6); if (setupPublicNetwork) { - if (isRedundant) { + if (routerDeploymentDefinition.isRedundant()) { gatewayNic.setIp4Address(_ipAddrMgr.acquireGuestIpAddress(guestNetwork, null)); } else { gatewayNic.setIp4Address(guestNetwork.getGateway()); @@ -1781,7 +1788,7 @@ Configurable, StateListener { s_logger.debug("Adding nic for Virtual Router in Control network "); final List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); final NetworkOffering controlOffering = offerings.get(0); - final Network controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); + final Network controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0); networks.put(controlConfig, new ArrayList()); // 3) Public network if (setupPublicNetwork) { @@ -1810,7 +1817,7 @@ Configurable, StateListener { defaultNic.setDeviceId(2); } final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - final List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); + final List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, routerDeploymentDefinition.getPlan(), null, null, false); final String publicIp = defaultNic.getIp4Address(); // We want to use the identical MAC address for RvR on public // interface if possible @@ -1847,12 +1854,12 @@ Configurable, StateListener { } @Override - public List deployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, final Account owner, final Map params, - final boolean isRedundant) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { + public List deployVirtualRouter(final RouterDeploymentDefinition routerDeploymentDefinition) throws InsufficientCapacityException, + ConcurrentOperationException, ResourceUnavailableException { - final List routers = findOrDeployVirtualRouterInGuestNetwork(guestNetwork, dest, owner, isRedundant, params); + final List routers = findOrDeployVirtualRouterInGuestNetwork(routerDeploymentDefinition); - return nwHelper.startRouters(params, routers); + return nwHelper.startRouters(routerDeploymentDefinition.getParams(), routers); } @Override diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java index 7f9ff8d8ea1..ab94d02f8c0 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java @@ -17,11 +17,8 @@ package com.cloud.network.router; import java.util.List; -import java.util.Map; -import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.RemoteAccessVpn; @@ -31,42 +28,10 @@ import com.cloud.network.VpnUser; import com.cloud.network.vpc.NetworkACLItem; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRouteProfile; -import com.cloud.network.vpc.Vpc; -import com.cloud.user.Account; import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.VirtualMachineProfile.Param; public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplianceManager, VpcVirtualNetworkApplianceService { - /** - * - * @param vpc - * @param dest - * @param owner - * @param params - * @param isRedundant - * @return - * @throws InsufficientCapacityException - * @throws ConcurrentOperationException - * @throws ResourceUnavailableException - */ - List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, Map params, boolean isRedundant) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException; - - /** - * - * @param vpc - * @param dest - * @param owner - * @param params - * @return - * @throws InsufficientCapacityException - * @throws ConcurrentOperationException - * @throws ResourceUnavailableException - */ - List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, Map params) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException; - /** * * @param network diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 3ca8b12f9ba..ebb0b53ef1a 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -19,14 +19,11 @@ package com.cloud.network.router; import java.net.URI; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.TreeSet; import javax.ejb.Local; import javax.inject.Inject; @@ -54,33 +51,24 @@ import com.cloud.agent.api.to.NetworkACLTO; import com.cloud.agent.manager.Commands; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; -import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlan; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InsufficientServerCapacityException; import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.exception.StorageUnavailableException; import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkService; -import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.IsolationType; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.PhysicalNetwork; -import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.VirtualRouterProvider; -import com.cloud.network.VirtualRouterProvider.Type; import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.VpnUser; import com.cloud.network.addr.PublicIp; @@ -112,11 +100,9 @@ import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpc.dao.VpcGatewayDao; import com.cloud.network.vpc.dao.VpcOfferingDao; import com.cloud.network.vpn.Site2SiteVpnManager; -import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.UserStatisticsVO; import com.cloud.utils.Pair; -import com.cloud.utils.db.DB; import com.cloud.utils.db.EntityManager; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; @@ -174,7 +160,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian @Inject protected NetworkGeneralHelper nwHelper; @Inject - protected VpcVirtualNetworkHelper vpcHelper; + protected VpcVirtualNetworkHelperImpl vpcHelper; + @Inject + protected RouterDeploymentManager routerDeploymentManager; @Override public boolean configure(final String name, final Map params) throws ConfigurationException { @@ -183,79 +171,10 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } @Override - public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, - Map params) throws InsufficientCapacityException, + public List deployVirtualRouter(final RouterDeploymentDefinition routerDeploymentDefinition) + throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { - return this.deployVirtualRouterInVpc(vpc, dest, owner, params, false); - } - - @Override - public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, - Map params, final boolean isRedundant) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { - return this.vpcHelper.deployVirtualRouterInVpc(vpc, dest, owner, params, isRedundant); - } - - @DB - protected List findOrDeployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, Map params) - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - s_logger.debug("Deploying Virtual Router in VPC " + vpc); - Vpc vpcLock = _vpcDao.acquireInLockTable(vpc.getId()); - if (vpcLock == null) { - throw new ConcurrentOperationException("Unable to lock vpc " + vpc.getId()); - } - - //1) Get deployment plan and find out the list of routers - Pair> planAndRouters = getDeploymentPlanAndRouters(vpc.getId(), dest); - DeploymentPlan plan = planAndRouters.first(); - List routers = planAndRouters.second(); - try { - //2) Return routers if exist - if (routers.size() >= 1) { - return routers; - } - - Long offeringId = _vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId(); - if (offeringId == null) { - offeringId = _offering.getId(); - } - //3) Deploy Virtual Router - List pNtwks = _pNtwkDao.listByZone(vpc.getZoneId()); - - VirtualRouterProvider vpcVrProvider = null; - - for (PhysicalNetwork pNtwk : pNtwks) { - PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(pNtwk.getId(), Type.VPCVirtualRouter.toString()); - if (provider == null) { - throw new CloudRuntimeException("Cannot find service provider " + Type.VPCVirtualRouter.toString() + " in physical network " + pNtwk.getId()); - } - vpcVrProvider = _vrProviderDao.findByNspIdAndType(provider.getId(), Type.VPCVirtualRouter); - if (vpcVrProvider != null) { - break; - } - } - - PublicIp sourceNatIp = _vpcMgr.assignSourceNatIpAddressToVpc(owner, vpc); - - DomainRouterVO router = deployVpcRouter(owner, dest, plan, params, false, vpcVrProvider, offeringId, vpc.getId(), sourceNatIp); - routers.add(router); - - } finally { - if (vpcLock != null) { - _vpcDao.releaseFromLockTable(vpc.getId()); - } - } - return routers; - } - - protected Pair> getDeploymentPlanAndRouters(long vpcId, DeployDestination dest) { - long dcId = dest.getDataCenter().getId(); - - DeploymentPlan plan = new DataCenterDeployment(dcId); - List routers = getVpcRouters(vpcId); - - return new Pair>(plan, routers); + return this.routerDeploymentManager.deployVirtualRouterInVpc(routerDeploymentDefinition); } @Override @@ -337,17 +256,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return result; } - protected DomainRouterVO deployVpcRouter(Account owner, DeployDestination dest, DeploymentPlan plan, Map params, boolean isRedundant, - VirtualRouterProvider vrProvider, long svcOffId, Long vpcId, PublicIp sourceNatIp) throws ConcurrentOperationException, InsufficientAddressCapacityException, - InsufficientServerCapacityException, InsufficientCapacityException, StorageUnavailableException, ResourceUnavailableException { - - LinkedHashMap> networks = createVpcRouterNetworks(owner, isRedundant, plan, new Pair(true, sourceNatIp),vpcId); - DomainRouterVO router = - nwHelper.deployRouter(owner, dest, plan, params, isRedundant, vrProvider, svcOffId, vpcId, networks, true, _vpcMgr.getSupportedVpcHypervisors()); - - return router; - } - protected boolean setupVpcGuestNetwork(Network network, VirtualRouter router, boolean add, NicProfile guestNic) throws ConcurrentOperationException, ResourceUnavailableException { @@ -921,7 +829,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian boolean result = true; try { Network network = _networkModel.getNetwork(gateway.getNetworkId()); - NicProfile requested = createPrivateNicProfileForGateway(gateway); + NicProfile requested = this.vpcHelper.createPrivateNicProfileForGateway(gateway); if (!nwHelper.checkRouterVersion(router)) { s_logger.warn("Router requires upgrade. Unable to send command to router: " + router.getId()); @@ -1182,130 +1090,6 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } } - protected LinkedHashMap> createVpcRouterNetworks(Account owner, boolean isRedundant, DeploymentPlan plan, Pair sourceNatIp, - long vpcId) throws ConcurrentOperationException, InsufficientAddressCapacityException { - - TreeSet publicVlans = new TreeSet(); - publicVlans.add(sourceNatIp.second().getVlanTag()); - - //1) allocate nic for control and source nat public ip - LinkedHashMap> networks = super.createRouterNetworks(owner, isRedundant, plan, null, sourceNatIp); - - //2) allocate nic for private gateways if needed - List privateGateways = _vpcMgr.getVpcPrivateGateways(vpcId); - if (privateGateways != null && !privateGateways.isEmpty()) { - for (PrivateGateway privateGateway : privateGateways) { - NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); - networks.put(privateNetwork, new ArrayList(Arrays.asList(privateNic))); - } - } - - //3) allocate nic for guest gateway if needed - List guestNetworks = _vpcMgr.getVpcNetworks(vpcId); - for (Network guestNetwork : guestNetworks) { - if (_networkModel.isPrivateGateway(guestNetwork.getId())) { - continue; - } - if (guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup) { - NicProfile guestNic = createGuestNicProfileForVpcRouter(guestNetwork); - networks.put(guestNetwork, new ArrayList(Arrays.asList(guestNic))); - } - } - - //4) allocate nic for additional public network(s) - List ips = _ipAddressDao.listByAssociatedVpc(vpcId, false); - List publicNics = new ArrayList(); - Network publicNetwork = null; - for (IPAddressVO ip : ips) { - PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId())); - if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && _vpcMgr.isIpAllocatedToVpc(ip) && - !publicVlans.contains(publicIp.getVlanTag())) { - s_logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag()); - NicProfile publicNic = new NicProfile(); - publicNic.setDefaultNic(false); - publicNic.setIp4Address(publicIp.getAddress().addr()); - publicNic.setGateway(publicIp.getGateway()); - publicNic.setNetmask(publicIp.getNetmask()); - publicNic.setMacAddress(publicIp.getMacAddress()); - publicNic.setBroadcastType(BroadcastDomainType.Vlan); - publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); - publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - if (publicNetwork == null) { - List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); - publicNetwork = publicNetworks.get(0); - } - publicNics.add(publicNic); - publicVlans.add(publicIp.getVlanTag()); - } - } - if (publicNetwork != null) { - if (networks.get(publicNetwork) != null) { - List publicNicProfiles = (List)networks.get(publicNetwork); - publicNicProfiles.addAll(publicNics); - networks.put(publicNetwork, publicNicProfiles); - } else { - networks.put(publicNetwork, publicNics); - } - } - - return networks; - } - - @DB - protected NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway) { - Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); - PrivateIpVO ipVO = _privateIpDao.allocateIpAddress(privateNetwork.getDataCenterId(), privateNetwork.getId(), privateGateway.getIp4Address()); - if (ipVO == null) { - throw new CloudRuntimeException("Unable to assign a private IP for private gateway " + privateGateway.getUuid()); - } - Nic privateNic = _nicDao.findByIp4AddressAndNetworkId(ipVO.getIpAddress(), privateNetwork.getId()); - - NicProfile privateNicProfile = new NicProfile(); - - if (privateNic != null) { - VirtualMachine vm = _vmDao.findById(privateNic.getInstanceId()); - privateNicProfile = - new NicProfile(privateNic, privateNetwork, privateNic.getBroadcastUri(), privateNic.getIsolationUri(), _networkModel.getNetworkRate( - privateNetwork.getId(), vm.getId()), _networkModel.isSecurityGroupSupportedInNetwork(privateNetwork), _networkModel.getNetworkTag( - vm.getHypervisorType(), privateNetwork)); - } else { - String netmask = NetUtils.getCidrNetmask(privateNetwork.getCidr()); - PrivateIpAddress ip = - new PrivateIpAddress(ipVO, privateNetwork.getBroadcastUri().toString(), privateNetwork.getGateway(), netmask, - NetUtils.long2Mac(NetUtils.createSequenceBasedMacAddress(ipVO.getMacAddress()))); - - URI netUri = BroadcastDomainType.fromString(ip.getBroadcastUri()); - privateNicProfile.setIp4Address(ip.getIpAddress()); - privateNicProfile.setGateway(ip.getGateway()); - privateNicProfile.setNetmask(ip.getNetmask()); - privateNicProfile.setIsolationUri(netUri); - privateNicProfile.setBroadcastUri(netUri); - // can we solve this in setBroadcastUri()??? - // or more plugable construct is desirable - privateNicProfile.setBroadcastType(BroadcastDomainType.getSchemeValue(netUri)); - privateNicProfile.setFormat(AddressFormat.Ip4); - privateNicProfile.setReservationId(String.valueOf(ip.getBroadcastUri())); - privateNicProfile.setMacAddress(ip.getMacAddress()); - } - - return privateNicProfile; - } - - protected NicProfile createGuestNicProfileForVpcRouter(Network guestNetwork) { - NicProfile guestNic = new NicProfile(); - guestNic.setIp4Address(guestNetwork.getGateway()); - guestNic.setBroadcastUri(guestNetwork.getBroadcastUri()); - guestNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); - guestNic.setIsolationUri(guestNetwork.getBroadcastUri()); - guestNic.setMode(guestNetwork.getMode()); - String gatewayCidr = guestNetwork.getCidr(); - guestNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr)); - - return guestNic; - } - protected Pair, Map> getNicsToChangeOnRouter(final List publicIps, VirtualRouter router) { //1) check which nics need to be plugged/unplugged and plug/unplug them diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkHelper.java b/server/src/com/cloud/network/router/VpcVirtualNetworkHelper.java deleted file mode 100644 index 481f46f5153..00000000000 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.cloud.network.router; - -import java.util.List; -import java.util.Map; - -import com.cloud.deploy.DeployDestination; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.vpc.Vpc; -import com.cloud.network.vpc.VpcGateway; -import com.cloud.user.Account; -import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.NicProfile; -import com.cloud.vm.VirtualMachineProfile.Param; - -public interface VpcVirtualNetworkHelper { - - List deployVirtualRouterInVpc(Vpc vpc, - DeployDestination dest, Account owner, Map params, boolean isRedundant) - throws InsufficientCapacityException, ConcurrentOperationException, - ResourceUnavailableException; - - NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway); - - List getVpcRouters(long vpcId); -} diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkHelperImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkHelperImpl.java index bd3b71ec0fd..54563639d97 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkHelperImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkHelperImpl.java @@ -18,79 +18,45 @@ package com.cloud.network.router; import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; -import java.util.TreeSet; import javax.ejb.Local; import javax.inject.Inject; -import javax.persistence.EntityManager; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; -import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DataCenterDeployment; -import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientAddressCapacityException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InsufficientServerCapacityException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.exception.StorageUnavailableException; -import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.NetworkService; import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Networks.IsolationType; -import com.cloud.network.PhysicalNetwork; -import com.cloud.network.PhysicalNetworkServiceProvider; -import com.cloud.network.VirtualRouterProvider; -import com.cloud.network.VirtualRouterProvider.Type; -import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.Site2SiteVpnConnectionDao; import com.cloud.network.dao.Site2SiteVpnGatewayDao; import com.cloud.network.dao.VirtualRouterProviderDao; import com.cloud.network.vpc.NetworkACLItemDao; import com.cloud.network.vpc.NetworkACLManager; -import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.PrivateIpAddress; import com.cloud.network.vpc.PrivateIpVO; -import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcGateway; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.PrivateIpDao; import com.cloud.network.vpc.dao.StaticRouteDao; -import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpc.dao.VpcGatewayDao; -import com.cloud.network.vpc.dao.VpcOfferingDao; -import com.cloud.offering.NetworkOffering; import com.cloud.server.ConfigurationServer; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.user.Account; -import com.cloud.utils.Pair; import com.cloud.utils.db.DB; -import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.db.EntityManager; import com.cloud.utils.net.NetUtils; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile.Param; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.VMInstanceDao; @@ -98,19 +64,11 @@ import com.cloud.vm.dao.VMInstanceDao; @Component // This will not be a public service anymore, but a helper for the only public service -@Local(value = {VpcVirtualNetworkHelper.class}) -public class VpcVirtualNetworkHelperImpl implements VpcVirtualNetworkHelper { -//implements VpcVirtualNetworkApplianceManager { +@Local(value = {VpcVirtualNetworkHelperImpl.class}) +public class VpcVirtualNetworkHelperImpl { - private static final Logger s_logger = Logger.getLogger(VpcVirtualNetworkHelperImpl.class); String _name; @Inject - VpcDao _vpcDao; - @Inject - VpcOfferingDao _vpcOffDao; - @Inject - PhysicalNetworkDao _pNtwkDao; - @Inject NetworkService _ntwkService; @Inject NetworkACLManager _networkACLMgr; @@ -159,193 +117,15 @@ public class VpcVirtualNetworkHelperImpl implements VpcVirtualNetworkHelper { @Inject VirtualRouterProviderDao _vrProviderDao; - protected ServiceOfferingVO _offering; - protected NetworkGeneralHelper nwHelper = new NetworkGeneralHelper(); - @Override - public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, - Map params, boolean isRedundant) - throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { - - List routers = findOrDeployVirtualRouterInVpc(vpc, dest, owner, params, isRedundant); - - return this.nwHelper.startRouters(params, routers); - } - - @DB - protected List findOrDeployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, - Map params, boolean isRedundant) - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - s_logger.debug("Deploying Virtual Router in VPC " + vpc); - Vpc vpcLock = _vpcDao.acquireInLockTable(vpc.getId()); - if (vpcLock == null) { - throw new ConcurrentOperationException("Unable to lock vpc " + vpc.getId()); - } - - //1) Get deployment plan and find out the list of routers - Pair> planAndRouters = getDeploymentPlanAndRouters(vpc.getId(), dest); - DeploymentPlan plan = planAndRouters.first(); - List routers = planAndRouters.second(); - try { - //2) Return routers if exist - if (routers.size() >= 1) { - return routers; - } - - Long offeringId = _vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId(); - if (offeringId == null) { - offeringId = _offering.getId(); - } - //3) Deploy Virtual Router - List pNtwks = _pNtwkDao.listByZone(vpc.getZoneId()); - - VirtualRouterProvider vpcVrProvider = null; - - for (PhysicalNetwork pNtwk : pNtwks) { - PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(pNtwk.getId(), Type.VPCVirtualRouter.toString()); - if (provider == null) { - throw new CloudRuntimeException("Cannot find service provider " + Type.VPCVirtualRouter.toString() + " in physical network " + pNtwk.getId()); - } - vpcVrProvider = _vrProviderDao.findByNspIdAndType(provider.getId(), Type.VPCVirtualRouter); - if (vpcVrProvider != null) { - break; - } - } - - PublicIp sourceNatIp = _vpcMgr.assignSourceNatIpAddressToVpc(owner, vpc); - - DomainRouterVO router = deployVpcRouter(owner, dest, plan, params, isRedundant, vpcVrProvider, offeringId, vpc.getId(), sourceNatIp); - routers.add(router); - - } finally { - // TODO Should we do this after the pre or after the whole?? - if (vpcLock != null) { - _vpcDao.releaseFromLockTable(vpc.getId()); - } - } - return routers; - } - - protected Pair> getDeploymentPlanAndRouters(long vpcId, DeployDestination dest) { - long dcId = dest.getDataCenter().getId(); - - DeploymentPlan plan = new DataCenterDeployment(dcId); - List routers = getVpcRouters(vpcId); - - return new Pair>(plan, routers); - } - - - protected DomainRouterVO deployVpcRouter(Account owner, DeployDestination dest, DeploymentPlan plan, Map params, boolean isRedundant, - VirtualRouterProvider vrProvider, long svcOffId, Long vpcId, PublicIp sourceNatIp) throws ConcurrentOperationException, InsufficientAddressCapacityException, - InsufficientServerCapacityException, InsufficientCapacityException, StorageUnavailableException, ResourceUnavailableException { - - LinkedHashMap> networks = createVpcRouterNetworks(owner, isRedundant, plan, new Pair(true, sourceNatIp),vpcId); - - DomainRouterVO router = - this.nwHelper.deployRouter(owner, dest, plan, params, isRedundant, vrProvider, svcOffId, vpcId, networks, true, _vpcMgr.getSupportedVpcHypervisors()); - - return router; - } - - protected LinkedHashMap> createVpcRouterNetworks(Account owner, boolean isRedundant, DeploymentPlan plan, Pair sourceNatIp, - long vpcId) throws ConcurrentOperationException, InsufficientAddressCapacityException { - - LinkedHashMap> networks = new LinkedHashMap>(4); - - TreeSet publicVlans = new TreeSet(); - publicVlans.add(sourceNatIp.second().getVlanTag()); - - //1) allocate nic for control and source nat public ip - networks = this.nwHelper.createRouterNetworks(owner, isRedundant, plan, null, sourceNatIp); - - - //2) allocate nic for private gateways if needed - List privateGateways = _vpcMgr.getVpcPrivateGateways(vpcId); - if (privateGateways != null && !privateGateways.isEmpty()) { - for (PrivateGateway privateGateway : privateGateways) { - NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); - networks.put(privateNetwork, new ArrayList(Arrays.asList(privateNic))); - } - } - - //3) allocate nic for guest gateway if needed - List guestNetworks = _vpcMgr.getVpcNetworks(vpcId); - for (Network guestNetwork : guestNetworks) { - if (_networkModel.isPrivateGateway(guestNetwork.getId())) { - continue; - } - if (guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup) { - NicProfile guestNic = createGuestNicProfileForVpcRouter(guestNetwork); - networks.put(guestNetwork, new ArrayList(Arrays.asList(guestNic))); - } - } - - //4) allocate nic for additional public network(s) - List ips = _ipAddressDao.listByAssociatedVpc(vpcId, false); - List publicNics = new ArrayList(); - Network publicNetwork = null; - for (IPAddressVO ip : ips) { - PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId())); - if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && _vpcMgr.isIpAllocatedToVpc(ip) && - !publicVlans.contains(publicIp.getVlanTag())) { - s_logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag()); - NicProfile publicNic = new NicProfile(); - publicNic.setDefaultNic(false); - publicNic.setIp4Address(publicIp.getAddress().addr()); - publicNic.setGateway(publicIp.getGateway()); - publicNic.setNetmask(publicIp.getNetmask()); - publicNic.setMacAddress(publicIp.getMacAddress()); - publicNic.setBroadcastType(BroadcastDomainType.Vlan); - publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); - publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - if (publicNetwork == null) { - List publicNetworks = _networkMgr.setupNetwork(VirtualNwStatus.account, - publicOffering, plan, null, null, false); - publicNetwork = publicNetworks.get(0); - } - publicNics.add(publicNic); - publicVlans.add(publicIp.getVlanTag()); - } - } - if (publicNetwork != null) { - if (networks.get(publicNetwork) != null) { - List publicNicProfiles = (List)networks.get(publicNetwork); - publicNicProfiles.addAll(publicNics); - networks.put(publicNetwork, publicNicProfiles); - } else { - networks.put(publicNetwork, publicNics); - } - } - - return networks; - } - - protected NicProfile createGuestNicProfileForVpcRouter(Network guestNetwork) { - NicProfile guestNic = new NicProfile(); - guestNic.setIp4Address(guestNetwork.getGateway()); - guestNic.setBroadcastUri(guestNetwork.getBroadcastUri()); - guestNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); - guestNic.setIsolationUri(guestNetwork.getBroadcastUri()); - guestNic.setMode(guestNetwork.getMode()); - String gatewayCidr = guestNetwork.getCidr(); - guestNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr)); - - return guestNic; - } - - @Override + //@Override public List getVpcRouters(long vpcId) { return _routerDao.listByVpcId(vpcId); } - @Override + //@Override @DB public NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway) { Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 185ea2311cd..218b04560e7 100644 --- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -39,6 +39,7 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.router.RouterDeploymentDefinition; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallRule; @@ -46,14 +47,12 @@ import com.cloud.network.rules.StaticNat; import com.cloud.network.vpc.NetworkACLItem; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRouteProfile; -import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.component.ManagerBase; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfile.Param; @Component @Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class}) @@ -98,8 +97,8 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement * @see com.cloud.network.router.VirtualNetworkApplianceManager#deployVirtualRouterInGuestNetwork(com.cloud.network.Network, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map, boolean) */ @Override - public List deployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, final Account owner, final Map params, - final boolean isRedundant) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException { + public List deployVirtualRouter(final RouterDeploymentDefinition routerDeploymentDefinition) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } @@ -329,16 +328,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement return false; } - /* (non-Javadoc) - * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#deployVirtualRouterInVpc(com.cloud.network.vpc.Vpc, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map) - */ - @Override - public List deployVirtualRouterInVpc(final Vpc vpc, final DeployDestination dest, final Account owner, final Map params) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - @Override public boolean applyNetworkACLs(final Network network, final List rules, final List routers, final boolean privateGateway) throws ResourceUnavailableException { @@ -447,13 +436,4 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement // TODO Auto-generated method stub return null; } - - @Override - public List deployVirtualRouterInVpc(final Vpc vpc, - final DeployDestination dest, final Account owner, final Map params, - final boolean isRedundant) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } }