adding new bean to spring context file; renaming package from "com" to "org"
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6852f312 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6852f312 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6852f312 Branch: refs/heads/vpc-refactor Commit: 6852f312716fe400483714662e5589994517ccb7 Parents: ea34c11 Author: Wilder Rodrigues <wrodrig...@schubergphilis.com> Authored: Thu Jul 17 10:00:02 2014 +0200 Committer: Wilder Rodrigues <wrodrig...@schubergphilis.com> Committed: Fri Oct 3 06:21:26 2014 +0200 ---------------------------------------------------------------------- .../spring-server-core-managers-context.xml | 3 + .../network/element/VirtualRouterElement.java | 4 +- .../element/VpcVirtualRouterElement.java | 81 +-- .../network/router/NetworkGeneralHelper.java | 2 +- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../deployment/RouterDeploymentDefinition.java | 530 ------------------- .../RouterDeploymentDefinitionBuilder.java | 188 ------- .../VpcRouterDeploymentDefinition.java | 241 --------- .../deployment/RouterDeploymentDefinition.java | 530 +++++++++++++++++++ .../RouterDeploymentDefinitionBuilder.java | 188 +++++++ .../VpcRouterDeploymentDefinition.java | 241 +++++++++ 11 files changed, 1009 insertions(+), 1001 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml ---------------------------------------------------------------------- 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 b6cfa16..37004d2 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 @@ -209,6 +209,9 @@ <bean id="vpcVirtualNetworkHelper" class="com.cloud.network.router.VpcVirtualNetworkHelperImpl" /> + <bean id="routerDeploymentDefinitionBuilder" + class="org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder" /> + <bean id="ApiAsyncJobDispatcher" class="com.cloud.api.ApiAsyncJobDispatcher"> <property name="name" value="ApiAsyncJobDispatcher" /> </bean> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/element/VirtualRouterElement.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 0ea6c18..4481a20 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -34,6 +34,8 @@ import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.network.topology.NetworkTopology; import org.apache.cloudstack.network.topology.NetworkTopologyContext; import org.apache.log4j.Logger; +import org.cloud.network.router.deployment.RouterDeploymentDefinition; +import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.configuration.ConfigurationManager; @@ -75,8 +77,6 @@ import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; -import com.cloud.network.router.deployment.RouterDeploymentDefinition; -import com.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.LbStickinessMethod; import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/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 77346c8..c1bfb9f 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -24,9 +24,13 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; +import org.apache.cloudstack.network.topology.NetworkTopology; import org.apache.log4j.Logger; +import org.cloud.network.router.deployment.RouterDeploymentDefinition; +import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterVO; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -50,8 +54,6 @@ import com.cloud.network.dao.Site2SiteVpnGatewayDao; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; -import com.cloud.network.router.deployment.RouterDeploymentDefinition; -import com.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.network.vpc.NetworkACLItem; import com.cloud.network.vpc.NetworkACLItemDao; import com.cloud.network.vpc.NetworkACLItemVO; @@ -71,8 +73,8 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; @Local(value = {NetworkElement.class, FirewallServiceProvider.class, DhcpServiceProvider.class, UserDataServiceProvider.class, StaticNatServiceProvider.class, - LoadBalancingServiceProvider.class, PortForwardingServiceProvider.class, IpDeployer.class, VpcProvider.class, Site2SiteVpnServiceProvider.class, - NetworkACLServiceProvider.class}) + LoadBalancingServiceProvider.class, PortForwardingServiceProvider.class, IpDeployer.class, VpcProvider.class, Site2SiteVpnServiceProvider.class, + NetworkACLServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider { private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); @Inject @@ -100,7 +102,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities(); @Override - protected boolean canHandle(Network network, Service service) { + protected boolean canHandle(final Network network, final Service service) { Long physicalNetworkId = _networkMdl.getPhysicalNetworkId(network); if (physicalNetworkId == null) { return false; @@ -130,14 +132,14 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { + public boolean implementVpc(final Vpc vpc, final DeployDestination dest, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { Map<VirtualMachineProfile.Param, Object> params = new HashMap<VirtualMachineProfile.Param, Object>(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); RouterDeploymentDefinition routerDeploymentDefinition = - this.routerDeploymentDefinitionBuilder.create() + routerDeploymentDefinitionBuilder.create() .setVpc(vpc) .setDeployDestination(dest) .setAccountOwner(_accountMgr.getAccount(vpc.getAccountId())) @@ -150,21 +152,21 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean shutdownVpc(Vpc vpc, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { + public boolean shutdownVpc(final Vpc vpc, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { List<DomainRouterVO> routers = _routerDao.listByVpcId(vpc.getId()); if (routers == null || routers.isEmpty()) { return true; } boolean result = true; for (DomainRouterVO router : routers) { - result = result && (_routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null); + result = result && _routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null; } return result; } @Override - public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException, - ConcurrentOperationException, InsufficientCapacityException { + public boolean implement(final Network network, final NetworkOffering offering, final DeployDestination dest, final ReservationContext context) throws ResourceUnavailableException, + ConcurrentOperationException, InsufficientCapacityException { Long vpcId = network.getVpcId(); if (vpcId == null) { @@ -182,7 +184,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); RouterDeploymentDefinition routerDeploymentDefinition = - this.routerDeploymentDefinitionBuilder.create() + routerDeploymentDefinitionBuilder.create() .setVpc(vpc) .setDeployDestination(dest) .setAccountOwner(_accountMgr.getAccount(vpc.getAccountId())) @@ -191,7 +193,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter(); - if ((routers == null) || (routers.size() == 0)) { + if (routers == null || routers.size() == 0) { throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } @@ -217,8 +219,8 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + public boolean prepare(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest, final ReservationContext context) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { Long vpcId = network.getVpcId(); if (vpcId == null) { @@ -237,7 +239,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); RouterDeploymentDefinition routerDeploymentDefinition = - this.routerDeploymentDefinitionBuilder.create() + routerDeploymentDefinitionBuilder.create() .setVpc(vpc) .setDeployDestination(dest) .setAccountOwner(_accountMgr.getAccount(vpc.getAccountId())) @@ -245,7 +247,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc .build(); List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter(); - if ((routers == null) || (routers.size() == 0)) { + if (routers == null || routers.size() == 0) { throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } @@ -273,7 +275,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { + public boolean shutdown(final Network network, final ReservationContext context, final boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { boolean success = true; Long vpcId = network.getVpcId(); if (vpcId == null) { @@ -301,7 +303,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean destroy(Network config, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { + public boolean destroy(final Network config, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { boolean success = true; Long vpcId = config.getVpcId(); if (vpcId == null) { @@ -364,7 +366,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean createPrivateGateway(PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { + public boolean createPrivateGateway(final PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { if (gateway.getType() != VpcGateway.Type.Private) { s_logger.warn("Type of vpc gateway is not " + VpcGateway.Type.Private); return false; @@ -373,7 +375,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId()); if (routers == null || routers.isEmpty()) { s_logger.debug(getName() + " element doesn't need to create Private gateway on the backend; VPC virtual " + "router doesn't exist in the vpc id=" + - gateway.getVpcId()); + gateway.getVpcId()); return true; } @@ -402,7 +404,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean deletePrivateGateway(PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { + public boolean deletePrivateGateway(final PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { if (gateway.getType() != VpcGateway.Type.Private) { s_logger.warn("Type of vpc gateway is not " + VpcGateway.Type.Private); return false; @@ -411,7 +413,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId()); if (routers == null || routers.isEmpty()) { s_logger.debug(getName() + " element doesn't need to delete Private gateway on the backend; VPC virtual " + "router doesn't exist in the vpc id=" + - gateway.getVpcId()); + gateway.getVpcId()); return true; } @@ -425,7 +427,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean applyIps(Network network, List<? extends PublicIpAddress> ipAddress, Set<Service> services) throws ResourceUnavailableException { + public boolean applyIps(final Network network, final List<? extends PublicIpAddress> ipAddress, final Set<Service> services) throws ResourceUnavailableException { boolean canHandle = true; for (Service service : services) { if (!canHandle(network, service)) { @@ -437,10 +439,13 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug(getName() + " element doesn't need to associate ip addresses on the backend; VPC virtual " + "router doesn't exist in the network " + - network.getId()); + network.getId()); return true; } + DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId()); + NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + return _vpcRouterMgr.associatePublicIP(network, ipAddress, routers); } else { return false; @@ -448,12 +453,12 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean applyNetworkACLs(Network config, List<? extends NetworkACLItem> rules) throws ResourceUnavailableException { + public boolean applyNetworkACLs(final Network config, final List<? extends NetworkACLItem> rules) throws ResourceUnavailableException { if (canHandle(config, Service.NetworkACL)) { List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(config.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual " + "router doesn't exist in the network " + - config.getId()); + config.getId()); return true; } @@ -478,7 +483,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean applyStaticRoutes(Vpc vpc, List<StaticRouteProfile> routes) throws ResourceUnavailableException { + public boolean applyStaticRoutes(final Vpc vpc, final List<StaticRouteProfile> routes) throws ResourceUnavailableException { List<DomainRouterVO> routers = _routerDao.listByVpcId(vpc.getId()); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to static routes on the backend; virtual " + "router doesn't exist in the vpc " + vpc); @@ -494,14 +499,14 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean applyACLItemsToPrivateGw(PrivateGateway gateway, List<? extends NetworkACLItem> rules) throws ResourceUnavailableException { + public boolean applyACLItemsToPrivateGw(final PrivateGateway gateway, final List<? extends NetworkACLItem> rules) throws ResourceUnavailableException { Network config = _networkDao.findById(gateway.getNetworkId()); boolean isPrivateGateway = true; List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(gateway.getVpcId()); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router element doesn't need to apply network acl rules on the backend; virtual " + "router doesn't exist in the network " + - config.getId()); + config.getId()); return true; } @@ -513,7 +518,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + public boolean startSite2SiteVpn(final Site2SiteVpnConnection conn) throws ResourceUnavailableException { Site2SiteVpnGateway vpnGw = _vpnGatewayDao.findById(conn.getVpnGatewayId()); IpAddress ip = _ipAddressDao.findById(vpnGw.getAddrId()); @@ -533,14 +538,14 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(ip.getVpcId()); if (routers == null || routers.size() != 1) { throw new ResourceUnavailableException("Cannot enable site-to-site VPN on the backend; virtual router doesn't exist in the vpc " + ip.getVpcId(), - DataCenter.class, vpc.getZoneId()); + DataCenter.class, vpc.getZoneId()); } return _vpcRouterMgr.startSite2SiteVpn(conn, routers.get(0)); } @Override - public boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + public boolean stopSite2SiteVpn(final Site2SiteVpnConnection conn) throws ResourceUnavailableException { Site2SiteVpnGateway vpnGw = _vpnGatewayDao.findById(conn.getVpnGatewayId()); IpAddress ip = _ipAddressDao.findById(vpnGw.getAddrId()); @@ -560,14 +565,14 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List<DomainRouterVO> routers = _vpcRouterMgr.getVpcRouters(ip.getVpcId()); if (routers == null || routers.size() != 1) { throw new ResourceUnavailableException("Cannot enable site-to-site VPN on the backend; virtual router doesn't exist in the vpc " + ip.getVpcId(), - DataCenter.class, vpc.getZoneId()); + DataCenter.class, vpc.getZoneId()); } return _vpcRouterMgr.stopSite2SiteVpn(conn, routers.get(0)); } @Override - public String[] applyVpnUsers(RemoteAccessVpn vpn, List<? extends VpnUser> users) throws ResourceUnavailableException { + public String[] applyVpnUsers(final RemoteAccessVpn vpn, final List<? extends VpnUser> users) throws ResourceUnavailableException { if (vpn.getVpcId() == null) { return null; } @@ -581,7 +586,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean startVpn(RemoteAccessVpn vpn) throws ResourceUnavailableException { + public boolean startVpn(final RemoteAccessVpn vpn) throws ResourceUnavailableException { if (vpn.getVpcId() == null) { return false; } @@ -595,7 +600,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } @Override - public boolean stopVpn(RemoteAccessVpn vpn) throws ResourceUnavailableException { + public boolean stopVpn(final RemoteAccessVpn vpn) throws ResourceUnavailableException { if (vpn.getVpcId() == null) { return false; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/router/NetworkGeneralHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/NetworkGeneralHelper.java b/server/src/com/cloud/network/router/NetworkGeneralHelper.java index 4b331f7..fc249aa 100644 --- a/server/src/com/cloud/network/router/NetworkGeneralHelper.java +++ b/server/src/com/cloud/network/router/NetworkGeneralHelper.java @@ -27,6 +27,7 @@ import javax.inject.Inject; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.log4j.Logger; +import org.cloud.network.router.deployment.RouterDeploymentDefinition; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@ -68,7 +69,6 @@ import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.UserIpv6AddressDao; import com.cloud.network.router.VirtualRouter.RedundantState; import com.cloud.network.router.VirtualRouter.Role; -import com.cloud.network.router.deployment.RouterDeploymentDefinition; import com.cloud.network.vpn.Site2SiteVpnManager; import com.cloud.offering.NetworkOffering; import com.cloud.resource.ResourceManager; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 76cadd9..4bf3c60 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -58,6 +58,7 @@ import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO; import org.apache.cloudstack.managed.context.ManagedContextRunnable; import org.apache.cloudstack.utils.identity.ManagementServerNode; import org.apache.log4j.Logger; +import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; @@ -192,7 +193,6 @@ import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.router.VirtualRouter.RedundantState; import com.cloud.network.router.VirtualRouter.Role; -import com.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinition.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinition.java b/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinition.java deleted file mode 100644 index 5d740a4..0000000 --- a/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinition.java +++ /dev/null @@ -1,530 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.network.router.deployment; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - -import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; -import org.apache.log4j.Logger; - -import com.cloud.dc.DataCenter.NetworkType; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.Pod; -import com.cloud.dc.dao.HostPodDao; -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.ResourceUnavailableException; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.Network.Provider; -import com.cloud.network.Network.Service; -import com.cloud.network.NetworkModel; -import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Networks.IsolationType; -import com.cloud.network.Networks.TrafficType; -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.NetworkDao; -import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; -import com.cloud.network.dao.UserIpv6AddressDao; -import com.cloud.network.dao.VirtualRouterProviderDao; -import com.cloud.network.router.NetworkGeneralHelper; -import com.cloud.network.router.VirtualNwStatus; -import com.cloud.network.router.VirtualRouter.Role; -import com.cloud.network.router.VpcVirtualNetworkHelperImpl; -import com.cloud.network.vpc.Vpc; -import com.cloud.offering.NetworkOffering; -import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import com.cloud.utils.Pair; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.JoinBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.exception.CloudRuntimeException; -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.NicVO; -import com.cloud.vm.VMInstanceVO; -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; - -public class RouterDeploymentDefinition { - private static final Logger logger = Logger.getLogger(RouterDeploymentDefinition.class); - - protected NetworkDao networkDao; - protected DomainRouterDao routerDao; - protected PhysicalNetworkServiceProviderDao physicalProviderDao; - protected NetworkModel networkModel; - protected VirtualRouterProviderDao vrProviderDao; - protected NetworkOfferingDao networkOfferingDao; - protected IpAddressManager ipAddrMgr; - protected VMInstanceDao vmDao; - protected HostPodDao podDao; - protected AccountManager accountMgr; - protected NetworkOrchestrationService networkMgr; - protected NicDao nicDao; - protected UserIpv6AddressDao ipv6Dao; - protected IPAddressDao ipAddressDao; - - - @Inject - protected NetworkGeneralHelper nwHelper; - @Inject - protected VpcVirtualNetworkHelperImpl vpcHelper; - - - protected Network guestNetwork; - protected DeployDestination dest; - protected Account owner; - protected Map<Param, Object> params; - protected boolean isRedundant; - protected DeploymentPlan plan; - protected List<DomainRouterVO> routers = new ArrayList<>(); - protected ServiceOfferingVO offering; - - - - - protected RouterDeploymentDefinition(final Network guestNetwork, final DeployDestination dest, - final Account owner, final Map<Param, Object> params, final boolean isRedundant) { - - this.guestNetwork = guestNetwork; - this.dest = dest; - this.owner = owner; - this.params = params; - this.isRedundant = isRedundant; - } - - public void setOffering(ServiceOfferingVO offering) { - this.offering = offering; - } - public Vpc getVpc() { - return null; - } - public Network getGuestNetwork() { - return guestNetwork; - } - public void setGuestNetwork(final Network guestNetwork) { - this.guestNetwork = guestNetwork; - } - public DeployDestination getDest() { - return dest; - } - public void setDest(final DeployDestination dest) { - this.dest = dest; - } - public Account getOwner() { - return owner; - } - public void setOwner(final Account owner) { - this.owner = owner; - } - public Map<Param, Object> getParams() { - return params; - } - public void setParams(final Map<Param, Object> params) { - this.params = params; - } - public boolean isRedundant() { - return isRedundant; - } - public void setRedundant(final boolean isRedundant) { - this.isRedundant = isRedundant; - } - public DeploymentPlan getPlan() { - return plan; - } - - public boolean isVpcRouter() { - return false; - } - public Pod getPod() { - return dest.getPod(); - } - public Long getPodId() { - return dest.getPod().getId(); - } - - public List<DomainRouterVO> getRouters() { - return routers; - } - public void setRouters(List<DomainRouterVO> routers) { - this.routers = routers; - } - - public boolean isBasic() { - return this.dest.getDataCenter().getNetworkType() == NetworkType.Basic; - } - - public Long getOfferingId() { - return offering == null ? null : offering.getId(); - } - - public void generateDeploymentPlan() { - final long dcId = this.dest.getDataCenter().getId(); - Long podId = null; - if (this.isBasic()) { - if (this.dest.getPod() == null) { - throw new CloudRuntimeException("Pod id is expected in deployment destination"); - } - podId = this.dest.getPod().getId(); - } - this.plan = new DataCenterDeployment(dcId, podId, null, null, null, null); - } - - - public List<DomainRouterVO> deployVirtualRouter() - throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { - - findOrDeployVirtualRouter(); - - return nwHelper.startRouters(this); - } - - @DB - protected void findOrDeployVirtualRouter() - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - final Network lock = networkDao.acquireInLockTable(guestNetwork.getId(), NetworkOrchestrationService.NetworkLockTimeout.value()); - if (lock == null) { - throw new ConcurrentOperationException("Unable to lock network " + guestNetwork.getId()); - } - - if (logger.isDebugEnabled()) { - logger.debug("Lock is acquired for network id " + lock.getId() + " as a part of router startup in " + dest); - } - - try { - - assert guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup || - guestNetwork.getState() == Network.State.Implementing : "Network is not yet fully implemented: " + guestNetwork; - assert guestNetwork.getTrafficType() == TrafficType.Guest; - - // 1) Get deployment plan and find out the list of routers - - // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods - final List<DeployDestination> destinations = new ArrayList<DeployDestination>(); - - // for basic zone, if 'dest' has pod set to null then this is network restart scenario otherwise it is a vm deployment scenario - if (this.isBasic() && dest.getPod() == null) { - // Find all pods in the data center with running or starting user vms - final long dcId = dest.getDataCenter().getId(); - final List<HostPodVO> pods = listByDataCenterIdVMTypeAndStates(dcId, VirtualMachine.Type.User, VirtualMachine.State.Starting, VirtualMachine.State.Running); - - // Loop through all the pods skip those with running or starting VRs - for (final HostPodVO pod : pods) { - // Get list of VRs in starting or running state - final long podId = pod.getId(); - final List<DomainRouterVO> virtualRouters = routerDao.listByPodIdAndStates(podId, VirtualMachine.State.Starting, VirtualMachine.State.Running); - - assert (virtualRouters.size() <= 1) : "Pod can have utmost one VR in Basic Zone, please check!"; - - // Add virtualRouters to the routers, this avoids the situation when - // all routers are skipped and VirtualRouterElement throws exception - this.routers.addAll(virtualRouters); - - // If List size is one, we already have a starting or running VR, skip deployment - if (virtualRouters.size() == 1) { - logger.debug("Skipping VR deployment: Found a running or starting VR in Pod " + pod.getName() + " id=" + podId); - continue; - } - // Add new DeployDestination for this pod - destinations.add(new DeployDestination(dest.getDataCenter(), pod, null, null)); - } - } else { - // Else, just add the supplied dest - destinations.add(dest); - } - - // Except for Basic Zone, the for loop will iterate only once - for (final DeployDestination destination : destinations) { - this.dest = destination; - planDeploymentRouters(); - this.generateDeploymentPlan(); - - // 2) Figure out required routers count - int routerCount = 1; - if (this.isRedundant) { - routerCount = 2; - //Check current redundant routers, if possible(all routers are stopped), reset the priority - if (this.routers.size() != 0) { - checkAndResetPriorityOfRedundantRouter(this.routers); - } - } - - // If old network is redundant but new is single router, then routers.size() = 2 but routerCount = 1 - if (this.routers.size() >= routerCount) { - return; - } - - if (this.routers.size() >= 5) { - logger.error("Too much redundant routers!"); - } - - // Check if providers are supported in the physical networks - final Type type = Type.VirtualRouter; - final Long physicalNetworkId = networkModel.getPhysicalNetworkId(guestNetwork); - final PhysicalNetworkServiceProvider provider = physicalProviderDao.findByServiceProvider(physicalNetworkId, type.toString()); - if (provider == null) { - throw new CloudRuntimeException("Cannot find service provider " + type.toString() + " in physical network " + physicalNetworkId); - } - final VirtualRouterProvider vrProvider = vrProviderDao.findByNspIdAndType(provider.getId(), type); - if (vrProvider == null) { - throw new CloudRuntimeException("Cannot find virtual router provider " + type.toString() + " as service provider " + provider.getId()); - } - - if (networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { - this.owner = accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); - } - - // Check if public network has to be set on VR - boolean publicNetwork = false; - if (networkModel.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { - publicNetwork = true; - } - if (this.isRedundant && !publicNetwork) { - logger.error("Didn't support redundant virtual router without public network!"); - this.routers = null; - return; - } - - Long offeringId = networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId(); - if (offeringId == null) { - offeringId = getOfferingId(); - } - - PublicIp sourceNatIp = null; - if (publicNetwork) { - sourceNatIp = ipAddrMgr.assignSourceNatIpAddressToGuestNetwork( - this.owner, guestNetwork); - } - - // 3) deploy virtual router(s) - final int count = routerCount - this.routers.size(); - for (int i = 0; i < count; i++) { - LinkedHashMap<Network, List<? extends NicProfile>> networks = - createRouterNetworks(new Pair<Boolean, PublicIp>( - 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 - DomainRouterVO router = nwHelper.deployRouter(this, vrProvider, offeringId, networks, false, null); - - if (router != null) { - routerDao.addRouterToGuestNetwork(router, guestNetwork); - this.routers.add(router); - } - } - } - } finally { - if (lock != null) { - networkDao.releaseFromLockTable(lock.getId()); - if (logger.isDebugEnabled()) { - logger.debug("Lock is released for network id " + lock.getId() + " as a part of router startup in " + dest); - } - } - } - } - - - protected List<HostPodVO> listByDataCenterIdVMTypeAndStates(final long id, final VirtualMachine.Type type, final VirtualMachine.State... states) { - final SearchBuilder<VMInstanceVO> vmInstanceSearch = vmDao.createSearchBuilder(); - vmInstanceSearch.and("type", vmInstanceSearch.entity().getType(), SearchCriteria.Op.EQ); - vmInstanceSearch.and("states", vmInstanceSearch.entity().getState(), SearchCriteria.Op.IN); - - final SearchBuilder<HostPodVO> podIdSearch = podDao.createSearchBuilder(); - podIdSearch.and("dc", podIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - podIdSearch.select(null, SearchCriteria.Func.DISTINCT, podIdSearch.entity().getId()); - podIdSearch.join("vmInstanceSearch", vmInstanceSearch, podIdSearch.entity().getId(), vmInstanceSearch.entity().getPodIdToDeployIn(), JoinBuilder.JoinType.INNER); - podIdSearch.done(); - - final SearchCriteria<HostPodVO> sc = podIdSearch.create(); - sc.setParameters("dc", id); - sc.setJoinParameters("vmInstanceSearch", "type", type); - sc.setJoinParameters("vmInstanceSearch", "states", (Object[])states); - return podDao.search(sc, null); - } - - protected void planDeploymentRouters() { - if (this.isBasic()) { - this.routers = routerDao.listByNetworkAndPodAndRole(this.guestNetwork.getId(), - this.getPodId(), Role.VIRTUAL_ROUTER); - } else { - this.routers = routerDao.listByNetworkAndRole(this.guestNetwork.getId(), - Role.VIRTUAL_ROUTER); - } - } - - private void checkAndResetPriorityOfRedundantRouter(final List<DomainRouterVO> routers) { - boolean allStopped = true; - for (final DomainRouterVO router : routers) { - if (!router.getIsRedundantRouter() || router.getState() != VirtualMachine.State.Stopped) { - allStopped = false; - break; - } - } - if (!allStopped) { - return; - } - - for (final DomainRouterVO router : routers) { - // getUpdatedPriority() would update the value later - router.setPriority(0); - router.setIsPriorityBumpUp(false); - routerDao.update(router.getId(), router); - } - } - protected LinkedHashMap<Network, List<? extends NicProfile>> createRouterNetworks( - final Pair<Boolean, PublicIp> publicNetwork) - throws ConcurrentOperationException, InsufficientAddressCapacityException { - - final Network guestNetwork = this.guestNetwork; - boolean setupPublicNetwork = false; - if (publicNetwork != null) { - setupPublicNetwork = publicNetwork.first(); - } - - //Form networks - LinkedHashMap<Network, List<? extends NicProfile>> networks = new LinkedHashMap<Network, List<? extends NicProfile>>(3); - //1) Guest network - boolean hasGuestNetwork = false; - if (guestNetwork != null) { - logger.debug("Adding nic for Virtual Router in Guest network " + guestNetwork); - String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null; - if (!setupPublicNetwork) { - final Nic placeholder = networkModel.getPlaceholderNicForRouter(guestNetwork, this.getPodId()); - if (guestNetwork.getCidr() != null) { - if (placeholder != null && placeholder.getIp4Address() != null) { - logger.debug("Requesting ipv4 address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + guestNetwork); - defaultNetworkStartIp = placeholder.getIp4Address(); - } else { - final String startIp = networkModel.getStartIpAddress(guestNetwork.getId()); - if (startIp != null && ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) { - defaultNetworkStartIp = startIp; - } else if (logger.isDebugEnabled()) { - logger.debug("First ipv4 " + startIp + " in network id=" + guestNetwork.getId() + - " is already allocated, can't use it for domain router; will get random ip address from the range"); - } - } - } - - if (guestNetwork.getIp6Cidr() != null) { - if (placeholder != null && placeholder.getIp6Address() != null) { - logger.debug("Requesting ipv6 address " + placeholder.getIp6Address() + " stored in placeholder nic for the network " + guestNetwork); - defaultNetworkStartIpv6 = placeholder.getIp6Address(); - } else { - final String startIpv6 = networkModel.getStartIpv6Address(guestNetwork.getId()); - if (startIpv6 != null && ipv6Dao.findByNetworkIdAndIp(guestNetwork.getId(), startIpv6) == null) { - defaultNetworkStartIpv6 = startIpv6; - } else if (logger.isDebugEnabled()) { - logger.debug("First ipv6 " + startIpv6 + " in network id=" + guestNetwork.getId() + - " is already allocated, can't use it for domain router; will get random ipv6 address from the range"); - } - } - } - } - - final NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, defaultNetworkStartIpv6); - if (setupPublicNetwork) { - if (this.isRedundant) { - gatewayNic.setIp4Address(ipAddrMgr.acquireGuestIpAddress(guestNetwork, null)); - } else { - gatewayNic.setIp4Address(guestNetwork.getGateway()); - } - gatewayNic.setBroadcastUri(guestNetwork.getBroadcastUri()); - gatewayNic.setBroadcastType(guestNetwork.getBroadcastDomainType()); - gatewayNic.setIsolationUri(guestNetwork.getBroadcastUri()); - gatewayNic.setMode(guestNetwork.getMode()); - final String gatewayCidr = guestNetwork.getCidr(); - gatewayNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr)); - } else { - gatewayNic.setDefaultNic(true); - } - - networks.put(guestNetwork, new ArrayList<NicProfile>(Arrays.asList(gatewayNic))); - hasGuestNetwork = true; - } - - //2) Control network - logger.debug("Adding nic for Virtual Router in Control network "); - List<? extends NetworkOffering> offerings = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); - NetworkOffering controlOffering = offerings.get(0); - Network controlConfig = networkMgr.setupNetwork(VirtualNwStatus.account, controlOffering, this.plan, - null, null, false).get(0); - networks.put(controlConfig, new ArrayList<NicProfile>()); - //3) Public network - if (setupPublicNetwork) { - final PublicIp sourceNatIp = publicNetwork.second(); - logger.debug("Adding nic for Virtual Router in Public network "); - //if source nat service is supported by the network, get the source nat ip address - final NicProfile defaultNic = new NicProfile(); - defaultNic.setDefaultNic(true); - defaultNic.setIp4Address(sourceNatIp.getAddress().addr()); - defaultNic.setGateway(sourceNatIp.getGateway()); - defaultNic.setNetmask(sourceNatIp.getNetmask()); - defaultNic.setMacAddress(sourceNatIp.getMacAddress()); - // get broadcast from public network - final Network pubNet = networkDao.findById(sourceNatIp.getNetworkId()); - if (pubNet.getBroadcastDomainType() == BroadcastDomainType.Vxlan) { - defaultNic.setBroadcastType(BroadcastDomainType.Vxlan); - defaultNic.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag())); - defaultNic.setIsolationUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag())); - } else { - defaultNic.setBroadcastType(BroadcastDomainType.Vlan); - defaultNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(sourceNatIp.getVlanTag())); - defaultNic.setIsolationUri(IsolationType.Vlan.toUri(sourceNatIp.getVlanTag())); - } - if (hasGuestNetwork) { - defaultNic.setDeviceId(2); - } - final NetworkOffering publicOffering = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - final List<? extends Network> publicNetworks = networkMgr.setupNetwork(VirtualNwStatus.account, publicOffering, - this.plan, null, null, false); - final String publicIp = defaultNic.getIp4Address(); - // We want to use the identical MAC address for RvR on public interface if possible - final NicVO peerNic = nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); - if (peerNic != null) { - logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); - defaultNic.setMacAddress(peerNic.getMacAddress()); - } - networks.put(publicNetworks.get(0), new ArrayList<NicProfile>(Arrays.asList(defaultNic))); - } - - return networks; - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java b/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java deleted file mode 100644 index f06cb4c..0000000 --- a/server/src/com/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.cloud.network.router.deployment; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - -import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; - -import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.PhysicalNetworkDao; -import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; -import com.cloud.network.dao.UserIpv6AddressDao; -import com.cloud.network.dao.VirtualRouterProviderDao; -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.offerings.dao.NetworkOfferingDao; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.VirtualMachineProfile.Param; -import com.cloud.vm.dao.DomainRouterDao; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.VMInstanceDao; - -public class RouterDeploymentDefinitionBuilder { - - @Inject - private NetworkDao networkDao; - @Inject - private DomainRouterDao routerDao = null; - @Inject - private PhysicalNetworkServiceProviderDao physicalProviderDao; - @Inject - private NetworkModel networkModel; - @Inject - private VirtualRouterProviderDao vrProviderDao; - @Inject - private NetworkOfferingDao networkOfferingDao; - @Inject - private IpAddressManager ipAddrMgr; - @Inject - private VMInstanceDao vmDao; - @Inject - private HostPodDao podDao; - @Inject - private AccountManager accountMgr; - @Inject - private NetworkOrchestrationService networkMgr; - @Inject - private NicDao nicDao; - @Inject - private UserIpv6AddressDao ipv6Dao; - @Inject - private IPAddressDao ipAddressDao; - @Inject - private VpcDao vpcDao; - @Inject - private VpcOfferingDao vpcOffDao; - @Inject - private PhysicalNetworkDao pNtwkDao; - @Inject - private VpcManager vpcMgr; - @Inject - private VlanDao vlanDao; - - protected ServiceOfferingVO offering; - - public void setOffering(ServiceOfferingVO offering) { - this.offering = offering; - } - - public IntermediateStateBuilder create() { - return new IntermediateStateBuilder(this); - } - - protected RouterDeploymentDefinition injectDependencies( - final RouterDeploymentDefinition routerDeploymentDefinition) { - - routerDeploymentDefinition.networkDao = this.networkDao; - routerDeploymentDefinition.routerDao = this.routerDao; - routerDeploymentDefinition.physicalProviderDao = this.physicalProviderDao; - routerDeploymentDefinition.networkModel = this.networkModel; - routerDeploymentDefinition.vrProviderDao = this.vrProviderDao; - routerDeploymentDefinition.networkOfferingDao = this.networkOfferingDao; - routerDeploymentDefinition.ipAddrMgr = this.ipAddrMgr; - routerDeploymentDefinition.vmDao = this.vmDao; - routerDeploymentDefinition.podDao = this.podDao; - routerDeploymentDefinition.accountMgr = this.accountMgr; - routerDeploymentDefinition.networkMgr = this.networkMgr; - routerDeploymentDefinition.nicDao = this.nicDao; - routerDeploymentDefinition.ipv6Dao = this.ipv6Dao; - routerDeploymentDefinition.ipAddressDao = this.ipAddressDao; - routerDeploymentDefinition.offering = this.offering; - - if (routerDeploymentDefinition instanceof VpcRouterDeploymentDefinition) { - this.injectVpcDependencies((VpcRouterDeploymentDefinition) routerDeploymentDefinition); - } - - return routerDeploymentDefinition; - } - - protected void injectVpcDependencies( - final VpcRouterDeploymentDefinition routerDeploymentDefinition) { - - routerDeploymentDefinition.vpcDao = this.vpcDao; - routerDeploymentDefinition.vpcOffDao = this.vpcOffDao; - routerDeploymentDefinition.pNtwkDao = this.pNtwkDao; - routerDeploymentDefinition.vpcMgr = this.vpcMgr; - routerDeploymentDefinition.vlanDao = this.vlanDao; - } - - - public class IntermediateStateBuilder { - - RouterDeploymentDefinitionBuilder builder; - - protected Vpc vpc; - protected Network guestNetwork; - protected DeployDestination dest; - protected Account owner; - protected Map<Param, Object> params; - protected boolean isRedundant; - protected List<DomainRouterVO> routers = new ArrayList<>(); - - protected IntermediateStateBuilder(RouterDeploymentDefinitionBuilder builder) { - this.builder = builder; - } - - public IntermediateStateBuilder makeRedundant() { - this.isRedundant = true; - return this; - } - - public IntermediateStateBuilder setRedundant(boolean isRedundant) { - this.isRedundant = isRedundant; - return this; - } - - public IntermediateStateBuilder setVpc(final Vpc vpc) { - this.vpc = vpc; - return this; - } - - public IntermediateStateBuilder setGuestNetwork(final Network nw) { - this.guestNetwork = nw; - return this; - } - - public IntermediateStateBuilder setAccountOwner(final Account owner) { - this.owner = owner; - return this; - } - - public IntermediateStateBuilder setDeployDestination(final DeployDestination dest) { - this.dest = dest; - return this; - } - - public IntermediateStateBuilder setParams(final Map<Param, Object> params) { - this.params = params; - return this; - } - - public RouterDeploymentDefinition build() { - RouterDeploymentDefinition routerDeploymentDefinition = null; - if (this.vpc != null) { - routerDeploymentDefinition = new VpcRouterDeploymentDefinition(vpc, dest, owner, params, isRedundant); - } else { - routerDeploymentDefinition = new RouterDeploymentDefinition(guestNetwork, dest, owner, params, isRedundant); - } - - return builder.injectDependencies(routerDeploymentDefinition); - } - } - -} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6852f312/server/src/com/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java b/server/src/com/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java deleted file mode 100644 index c3e6327..0000000 --- a/server/src/com/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.cloud.network.router.deployment; - -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.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.DeployDestination; -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.router.VirtualNwStatus; -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.user.Account; -import com.cloud.utils.Pair; -import com.cloud.utils.db.DB; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.NicProfile; -import com.cloud.vm.VirtualMachineProfile.Param; - -public class VpcRouterDeploymentDefinition extends RouterDeploymentDefinition { - private static final Logger logger = Logger.getLogger(VpcRouterDeploymentDefinition.class); - - @Inject - protected VpcDao vpcDao; - @Inject - protected VpcOfferingDao vpcOffDao; - @Inject - protected PhysicalNetworkDao pNtwkDao; - @Inject - protected VpcManager vpcMgr; - @Inject - protected PhysicalNetworkServiceProviderDao physicalProviderDao; - @Inject - protected VlanDao vlanDao; - @Inject - protected IPAddressDao ipAddressDao; - @Inject - protected NetworkOrchestrationService networkMgr; - @Inject - protected NetworkModel networkModel; - @Inject - protected VirtualRouterProviderDao vrProviderDao; - - - protected Vpc vpc; - - - protected VpcRouterDeploymentDefinition(final Vpc vpc, final DeployDestination dest, final Account owner, - final Map<Param, Object> params, final boolean isRedundant) { - - super(null, dest, owner, params, isRedundant); - - this.vpc = vpc; - } - - @Override - public boolean isVpcRouter() { - return true; - } - - @Override - @DB - protected void findOrDeployVirtualRouter() - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - 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) Find out the list of routers and generate deployment plan - planDeploymentRouters(); - this.generateDeploymentPlan(); - - //2) Return routers if exist, otherwise... - if (this.routers.size() < 1) { - try { - - Long offeringId = vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId(); - if (offeringId == null) { - offeringId = offering.getId(); - } - //3) Deploy Virtual Router - List<? extends PhysicalNetwork> 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(this.owner, vpc); - - DomainRouterVO router = deployVpcRouter(vpcVrProvider, offeringId, sourceNatIp); - this.routers.add(router); - - } finally { - // TODO Should we do this after the pre or after the whole?? - if (vpcLock != null) { - vpcDao.releaseFromLockTable(vpc.getId()); - } - } - } - } - - - protected DomainRouterVO deployVpcRouter(final VirtualRouterProvider vrProvider, - final long svcOffId, final PublicIp sourceNatIp) throws ConcurrentOperationException, InsufficientAddressCapacityException, - InsufficientServerCapacityException, InsufficientCapacityException, StorageUnavailableException, ResourceUnavailableException { - - LinkedHashMap<Network, List<? extends NicProfile>> networks = createVpcRouterNetworks( - new Pair<Boolean, PublicIp>(true, sourceNatIp), this.vpc.getId()); - - DomainRouterVO router = - nwHelper.deployRouter(this, vrProvider, svcOffId, networks, true, vpcMgr.getSupportedVpcHypervisors()); - - return router; - } - - protected LinkedHashMap<Network, List<? extends NicProfile>> createVpcRouterNetworks( - final Pair<Boolean, PublicIp> sourceNatIp, final long vpcId) - throws ConcurrentOperationException, InsufficientAddressCapacityException { - - TreeSet<String> publicVlans = new TreeSet<String>(); - publicVlans.add(sourceNatIp.second().getVlanTag()); - - //1) allocate nic for control and source nat public ip - LinkedHashMap<Network, List<? extends NicProfile>> networks = nwHelper.createRouterNetworks(this, null, sourceNatIp); - - - //2) allocate nic for private gateways if needed - List<PrivateGateway> privateGateways = vpcMgr.getVpcPrivateGateways(vpcId); - if (privateGateways != null && !privateGateways.isEmpty()) { - for (PrivateGateway privateGateway : privateGateways) { - NicProfile privateNic = vpcHelper.createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = networkModel.getNetwork(privateGateway.getNetworkId()); - networks.put(privateNetwork, new ArrayList<NicProfile>(Arrays.asList(privateNic))); - } - } - - //3) allocate nic for guest gateway if needed - List<? extends Network> 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 = vpcHelper.createGuestNicProfileForVpcRouter(guestNetwork); - networks.put(guestNetwork, new ArrayList<NicProfile>(Arrays.asList(guestNic))); - } - } - - //4) allocate nic for additional public network(s) - List<IPAddressVO> ips = ipAddressDao.listByAssociatedVpc(vpcId, false); - List<NicProfile> publicNics = new ArrayList<NicProfile>(); - 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<? extends Network> publicNetworks = networkMgr.setupNetwork(VirtualNwStatus.account, - publicOffering, this.plan, null, null, false); - publicNetwork = publicNetworks.get(0); - } - publicNics.add(publicNic); - publicVlans.add(publicIp.getVlanTag()); - } - } - if (publicNetwork != null) { - if (networks.get(publicNetwork) != null) { - List<NicProfile> publicNicProfiles = (List<NicProfile>)networks.get(publicNetwork); - publicNicProfiles.addAll(publicNics); - networks.put(publicNetwork, publicNicProfiles); - } else { - networks.put(publicNetwork, publicNics); - } - } - - return networks; - } - - @Override - protected void planDeploymentRouters() { - this.routers = vpcHelper.getVpcRouters(this.getVpc().getId()); - } - -}