mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Introduced new NetworkElement - DhcpElement.
This commit is contained in:
		
							parent
							
								
									e9ba4263f9
								
							
						
					
					
						commit
						954756d69b
					
				| @ -94,4 +94,5 @@ public interface NetworkElement extends Adapter { | |||||||
|      * @throws ResourceUnavailableException |      * @throws ResourceUnavailableException | ||||||
|      */ |      */ | ||||||
|     boolean applyRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException; |     boolean applyRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException; | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -76,6 +76,7 @@ | |||||||
|         </adapters> |         </adapters> | ||||||
|         <adapters key="com.cloud.network.element.NetworkElement"> |         <adapters key="com.cloud.network.element.NetworkElement"> | ||||||
|             <adapter name="DomainRouter" class="com.cloud.network.element.DomainRouterElement"/> |             <adapter name="DomainRouter" class="com.cloud.network.element.DomainRouterElement"/> | ||||||
|  |             <adapter name="Dhcp" class="com.cloud.network.element.DhcpElement"/> | ||||||
|         </adapters> |         </adapters> | ||||||
|         <adapters key="com.cloud.acl.SecurityChecker"> |         <adapters key="com.cloud.acl.SecurityChecker"> | ||||||
|             <adapter name="DomainChecker" class="com.cloud.acl.DomainChecker"/> |             <adapter name="DomainChecker" class="com.cloud.acl.DomainChecker"/> | ||||||
|  | |||||||
							
								
								
									
										151
									
								
								server/src/com/cloud/network/element/DhcpElement.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								server/src/com/cloud/network/element/DhcpElement.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,151 @@ | |||||||
|  | /** | ||||||
|  |  *  Copyright (C) 2010 Cloud.com, Inc.  All rights reserved. | ||||||
|  |  *  | ||||||
|  |  * This software is licensed under the GNU General Public License v3 or later. | ||||||
|  |  *  | ||||||
|  |  * It is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or any later version. | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  *  | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | package com.cloud.network.element; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | import javax.ejb.Local; | ||||||
|  | 
 | ||||||
|  | import org.apache.log4j.Logger; | ||||||
|  | 
 | ||||||
|  | import com.cloud.dc.DataCenter; | ||||||
|  | import com.cloud.deploy.DeployDestination; | ||||||
|  | import com.cloud.exception.ConcurrentOperationException; | ||||||
|  | import com.cloud.exception.InsufficientCapacityException; | ||||||
|  | import com.cloud.exception.InsufficientNetworkCapacityException; | ||||||
|  | import com.cloud.exception.ResourceUnavailableException; | ||||||
|  | import com.cloud.network.Network; | ||||||
|  | import com.cloud.network.NetworkManager; | ||||||
|  | import com.cloud.network.Networks.TrafficType; | ||||||
|  | import com.cloud.network.dao.NetworkDao; | ||||||
|  | import com.cloud.network.router.DomainRouterManager; | ||||||
|  | import com.cloud.network.rules.FirewallRule; | ||||||
|  | import com.cloud.network.service.Providers; | ||||||
|  | import com.cloud.offering.NetworkOffering; | ||||||
|  | import com.cloud.offering.NetworkOffering.GuestIpType; | ||||||
|  | import com.cloud.uservm.UserVm; | ||||||
|  | import com.cloud.utils.component.AdapterBase; | ||||||
|  | import com.cloud.utils.component.Inject; | ||||||
|  | import com.cloud.utils.net.Ip; | ||||||
|  | import com.cloud.vm.DomainRouterVO; | ||||||
|  | import com.cloud.vm.NicProfile; | ||||||
|  | import com.cloud.vm.ReservationContext; | ||||||
|  | import com.cloud.vm.UserVmManager; | ||||||
|  | import com.cloud.vm.VirtualMachine; | ||||||
|  | import com.cloud.vm.VirtualMachine.Type; | ||||||
|  | import com.cloud.vm.VirtualMachineProfile; | ||||||
|  | import com.cloud.vm.dao.DomainRouterDao; | ||||||
|  | import com.cloud.vm.dao.UserVmDao; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @Local(value=NetworkElement.class) | ||||||
|  | public class DhcpElement extends AdapterBase implements NetworkElement { | ||||||
|  |     private static final Logger s_logger = Logger.getLogger(DhcpElement.class); | ||||||
|  |      | ||||||
|  |     @Inject NetworkDao _networkConfigDao; | ||||||
|  |     @Inject NetworkManager _networkMgr; | ||||||
|  |     @Inject DomainRouterManager _routerMgr; | ||||||
|  |     @Inject UserVmManager _userVmMgr; | ||||||
|  |     @Inject UserVmDao _userVmDao; | ||||||
|  |     @Inject DomainRouterDao _routerDao; | ||||||
|  |      | ||||||
|  |     private boolean canHandle(GuestIpType ipType, DeployDestination dest) { | ||||||
|  |         DataCenter dc = dest.getDataCenter(); | ||||||
|  |         String provider = dc.getGatewayProvider(); | ||||||
|  |         if (!dc.getDhcpProvider().equals(Providers.VirtualRouter)) { | ||||||
|  |             return false;  | ||||||
|  |         } | ||||||
|  |         return ((ipType == GuestIpType.Virtual && !provider.equals(Providers.VirtualRouter)) || (ipType == GuestIpType.Direct || ipType == GuestIpType.DirectPodBased)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException { | ||||||
|  |         if (canHandle(offering.getGuestIpType(), dest)) { | ||||||
|  |             DomainRouterVO router = _routerMgr.deployDhcp(guestConfig, dest, context.getAccount()); | ||||||
|  |             if (router == null) { | ||||||
|  |                 throw new ResourceUnavailableException("Unable to deploy the router for " + guestConfig); | ||||||
|  |             } | ||||||
|  |             return true; | ||||||
|  |          | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException { | ||||||
|  |         if (canHandle(config.getGuestType(), dest)) { | ||||||
|  |             if (config.getTrafficType() != TrafficType.Guest || vm.getType() != Type.User) { | ||||||
|  |                 s_logger.trace("DHCP only cares about guest network and User VMs"); | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             if (vm.getType() != VirtualMachine.Type.User) { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             @SuppressWarnings("unchecked") | ||||||
|  |             VirtualMachineProfile<UserVm> uservm = (VirtualMachineProfile<UserVm>)vm; | ||||||
|  |              | ||||||
|  |             return _routerMgr.addVirtualMachineIntoNetwork(config, nic, uservm, dest, context, true) != null; | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean release(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, ReservationContext context) { | ||||||
|  |         if (config.getTrafficType() != TrafficType.Guest || vm.getType() != Type.User) { | ||||||
|  |             s_logger.trace("DHCP only cares about guest network and User VMs"); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean shutdown(Network config, ReservationContext context) throws ConcurrentOperationException { | ||||||
|  |         if (config.getTrafficType() != TrafficType.Guest) { | ||||||
|  |             s_logger.trace("DHCP only cares about guet network."); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         DomainRouterVO router = _routerDao.findByNetworkConfiguration(config.getId()); | ||||||
|  |         if (router == null) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         return _routerMgr.stopRouter(router.getId(), 1); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     protected DhcpElement() { | ||||||
|  |         super(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean applyRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean associate(Network network, Ip ipAddress) throws ResourceUnavailableException { | ||||||
|  |        return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean disassociate(Network network, Ip ipAddress) throws ResourceUnavailableException { | ||||||
|  |        return true; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -23,6 +23,7 @@ import javax.ejb.Local; | |||||||
| 
 | 
 | ||||||
| import org.apache.log4j.Logger; | import org.apache.log4j.Logger; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.dc.DataCenter; | ||||||
| import com.cloud.deploy.DeployDestination; | import com.cloud.deploy.DeployDestination; | ||||||
| import com.cloud.exception.ConcurrentOperationException; | import com.cloud.exception.ConcurrentOperationException; | ||||||
| import com.cloud.exception.InsufficientCapacityException; | import com.cloud.exception.InsufficientCapacityException; | ||||||
| @ -34,8 +35,11 @@ import com.cloud.network.Networks.TrafficType; | |||||||
| import com.cloud.network.dao.NetworkDao; | import com.cloud.network.dao.NetworkDao; | ||||||
| import com.cloud.network.router.DomainRouterManager; | import com.cloud.network.router.DomainRouterManager; | ||||||
| import com.cloud.network.rules.FirewallRule; | import com.cloud.network.rules.FirewallRule; | ||||||
|  | import com.cloud.network.service.Providers; | ||||||
| import com.cloud.offering.NetworkOffering; | import com.cloud.offering.NetworkOffering; | ||||||
| import com.cloud.offering.NetworkOffering.GuestIpType; | import com.cloud.offering.NetworkOffering.GuestIpType; | ||||||
|  | import com.cloud.offerings.NetworkOfferingVO; | ||||||
|  | import com.cloud.offerings.dao.NetworkOfferingDao; | ||||||
| import com.cloud.uservm.UserVm; | import com.cloud.uservm.UserVm; | ||||||
| import com.cloud.utils.component.AdapterBase; | import com.cloud.utils.component.AdapterBase; | ||||||
| import com.cloud.utils.component.Inject; | import com.cloud.utils.component.Inject; | ||||||
| @ -57,41 +61,52 @@ public class DomainRouterElement extends AdapterBase implements NetworkElement { | |||||||
|      |      | ||||||
|     @Inject NetworkDao _networkConfigDao; |     @Inject NetworkDao _networkConfigDao; | ||||||
|     @Inject NetworkManager _networkMgr; |     @Inject NetworkManager _networkMgr; | ||||||
|  |     @Inject NetworkOfferingDao _networkOfferingDao; | ||||||
|     @Inject DomainRouterManager _routerMgr; |     @Inject DomainRouterManager _routerMgr; | ||||||
|     @Inject UserVmManager _userVmMgr; |     @Inject UserVmManager _userVmMgr; | ||||||
|     @Inject UserVmDao _userVmDao; |     @Inject UserVmDao _userVmDao; | ||||||
|     @Inject DomainRouterDao _routerDao; |     @Inject DomainRouterDao _routerDao; | ||||||
|      |      | ||||||
|  |     private boolean canHandle(GuestIpType ipType, DeployDestination dest) { | ||||||
|  |         DataCenter dc = dest.getDataCenter(); | ||||||
|  |         String provider = dc.getGatewayProvider(); | ||||||
|  |         return (ipType == GuestIpType.Virtual && provider.equals(Providers.VirtualRouter)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException { |     public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException { | ||||||
|         if (offering.getGuestIpType() != GuestIpType.Virtual) { |         if (canHandle(offering.getGuestIpType(), dest)) { | ||||||
|             s_logger.trace("Not handling guest ip type = " + offering.getGuestIpType()); |             DomainRouterVO router = _routerMgr.deployVirtualRouter(guestConfig, dest, context.getAccount()); | ||||||
|  |             if (router == null) { | ||||||
|  |                 throw new ResourceUnavailableException("Unable to deploy the router for " + guestConfig); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             return true; | ||||||
|  |         } else { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|          |  | ||||||
|         DomainRouterVO router = _routerMgr.deploy(guestConfig, dest, context.getAccount()); |  | ||||||
|         if (router == null) { |  | ||||||
|             throw new ResourceUnavailableException("Unable to deploy the router for " + guestConfig); |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         return true; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException { |     public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException { | ||||||
|         if (config.getTrafficType() != TrafficType.Guest || vm.getType() != Type.User) { |         if (canHandle(config.getGuestType(), dest)) { | ||||||
|             s_logger.trace("Domain Router only cares about guest network and User VMs"); |             if (config.getTrafficType() != TrafficType.Guest || vm.getType() != Type.User) { | ||||||
|  |                 s_logger.trace("Domain Router only cares about guest network and User VMs"); | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             if (vm.getType() != VirtualMachine.Type.User) { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             @SuppressWarnings("unchecked") | ||||||
|  |             VirtualMachineProfile<UserVm> uservm = (VirtualMachineProfile<UserVm>)vm; | ||||||
|  |              | ||||||
|  |             return _routerMgr.addVirtualMachineIntoNetwork(config, nic, uservm, dest, context, false) != null; | ||||||
|  |         } else { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         |         | ||||||
|         if (vm.getType() != VirtualMachine.Type.User) { |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         @SuppressWarnings("unchecked") |  | ||||||
|         VirtualMachineProfile<UserVm> uservm = (VirtualMachineProfile<UserVm>)vm; |  | ||||||
|          |  | ||||||
|         return _routerMgr.addVirtualMachineIntoNetwork(config, nic, uservm, dest, context) != null; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
| @ -100,8 +115,6 @@ public class DomainRouterElement extends AdapterBase implements NetworkElement { | |||||||
|             s_logger.trace("Domain Router only cares about guest network and User VMs"); |             s_logger.trace("Domain Router only cares about guest network and User VMs"); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|          |  | ||||||
|          |  | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -169,8 +169,10 @@ public class GuestNetworkGuru extends AdapterBase implements NetworkGuru { | |||||||
|          |          | ||||||
|         if (nic == null) { |         if (nic == null) { | ||||||
|             nic = new NicProfile(ReservationStrategy.Start, null, null, null, null); |             nic = new NicProfile(ReservationStrategy.Start, null, null, null, null); | ||||||
|         } else { |         } else if (nic.getIp4Address() != null){ | ||||||
|             nic.setStrategy(ReservationStrategy.Create); |             nic.setStrategy(ReservationStrategy.Create); | ||||||
|  |         } else { | ||||||
|  |             nic.setStrategy(ReservationStrategy.Start); | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         if (nic.getMacAddress() == null) { |         if (nic.getMacAddress() == null) { | ||||||
|  | |||||||
| @ -147,7 +147,9 @@ public interface DomainRouterManager extends Manager { | |||||||
| 	DomainRouterVO getRouter(long accountId, long zoneId); | 	DomainRouterVO getRouter(long accountId, long zoneId); | ||||||
| 	DomainRouterVO getRouter(String publicIpAddress); | 	DomainRouterVO getRouter(String publicIpAddress); | ||||||
| 	 | 	 | ||||||
| 	DomainRouterVO deploy(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; | 	DomainRouterVO deployVirtualRouter(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; | ||||||
|  | 	 | ||||||
|  | 	DomainRouterVO deployDhcp(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; | ||||||
| 	 | 	 | ||||||
| 	RemoteAccessVpnVO startRemoteAccessVpn(RemoteAccessVpnVO vpnVO) throws ResourceUnavailableException; | 	RemoteAccessVpnVO startRemoteAccessVpn(RemoteAccessVpnVO vpnVO) throws ResourceUnavailableException; | ||||||
| 	 | 	 | ||||||
| @ -155,5 +157,5 @@ public interface DomainRouterManager extends Manager { | |||||||
| 
 | 
 | ||||||
| 	boolean deleteRemoteAccessVpn(RemoteAccessVpnVO vpnVO); | 	boolean deleteRemoteAccessVpn(RemoteAccessVpnVO vpnVO); | ||||||
| 	 | 	 | ||||||
| 	DomainRouterVO addVirtualMachineIntoNetwork(Network config, NicProfile nic, VirtualMachineProfile<UserVm> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException; | 	DomainRouterVO addVirtualMachineIntoNetwork(Network config, NicProfile nic, VirtualMachineProfile<UserVm> vm, DeployDestination dest, ReservationContext context, Boolean startDhcp) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException; | ||||||
| } | } | ||||||
|  | |||||||
| @ -2069,7 +2069,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	@Override | 	@Override | ||||||
| 	public DomainRouterVO deploy(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException { | 	public DomainRouterVO deployVirtualRouter(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException { | ||||||
| 	    long dcId = dest.getDataCenter().getId(); | 	    long dcId = dest.getDataCenter().getId(); | ||||||
| 	     | 	     | ||||||
|         if (s_logger.isDebugEnabled()) { |         if (s_logger.isDebugEnabled()) { | ||||||
| @ -2123,6 +2123,49 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute | |||||||
|         return _itMgr.start(router, null, _accountService.getSystemUser(), _accountService.getSystemAccount()); |         return _itMgr.start(router, null, _accountService.getSystemUser(), _accountService.getSystemAccount()); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | 	 | ||||||
|  | 	   @Override | ||||||
|  | 	    public DomainRouterVO deployDhcp(Network guestConfig, DeployDestination dest, Account owner) throws InsufficientCapacityException, StorageUnavailableException, ConcurrentOperationException, ResourceUnavailableException { | ||||||
|  | 	        long dcId = dest.getDataCenter().getId(); | ||||||
|  | 	         | ||||||
|  | 	        if (s_logger.isDebugEnabled()) { | ||||||
|  | 	            s_logger.debug("Starting a dhcp for network configurations: dhcp="  + guestConfig + " in " + dest); | ||||||
|  | 	        } | ||||||
|  | 	        assert guestConfig.getState() == Network.State.Implemented || guestConfig.getState() == Network.State.Setup : "Network is not yet fully implemented: " + guestConfig; | ||||||
|  | 	        assert guestConfig.getTrafficType() == TrafficType.Guest; | ||||||
|  | 	         | ||||||
|  | 	        DataCenterDeployment plan = new DataCenterDeployment(dcId); | ||||||
|  | 	         | ||||||
|  | 	        guestConfig = _networkConfigurationDao.lockRow(guestConfig.getId(), true); | ||||||
|  | 	        if (guestConfig == null) { | ||||||
|  | 	            throw new ConcurrentOperationException("Unable to get the lock on " + guestConfig); | ||||||
|  | 	        } | ||||||
|  | 	         | ||||||
|  | 	        DomainRouterVO router = _routerDao.findByNetworkConfiguration(guestConfig.getId()); | ||||||
|  | 	        if (router == null) { | ||||||
|  | 	            long id = _routerDao.getNextInSequence(Long.class, "id"); | ||||||
|  | 	            if (s_logger.isDebugEnabled()) { | ||||||
|  | 	                s_logger.debug("Creating the router " + id); | ||||||
|  | 	            } | ||||||
|  | 	         | ||||||
|  | 	            List<NetworkOfferingVO> offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemVmControlNetwork); | ||||||
|  | 	            NetworkOfferingVO controlOffering = offerings.get(0); | ||||||
|  | 	            NetworkVO controlConfig = _networkMgr.setupNetworkConfiguration(_systemAcct, controlOffering, plan, null, null, false).get(0); | ||||||
|  | 	             | ||||||
|  | 	            List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO, NicProfile>>(3); | ||||||
|  | 	            NicProfile gatewayNic = new NicProfile(); | ||||||
|  | 	            gatewayNic.setDefaultNic(true); | ||||||
|  | 	            networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO)guestConfig, gatewayNic)); | ||||||
|  | 	            networks.add(new Pair<NetworkVO, NicProfile>(controlConfig, null)); | ||||||
|  | 	             | ||||||
|  | 	            router = new DomainRouterVO(id, _offering.getId(), VirtualMachineName.getRouterName(id, _instance), _template.getId(), _template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestConfig.getId(), _offering.getOfferHA()); | ||||||
|  | 	            router.setRole(Role.DHCP_USERDATA); | ||||||
|  | 	            router = _itMgr.allocate(router, _template, _offering, networks, plan, owner); | ||||||
|  | 	        } | ||||||
|  | 	         | ||||||
|  | 	        return _itMgr.start(router, null, _accountService.getSystemUser(), _accountService.getSystemAccount()); | ||||||
|  | 	    } | ||||||
|  | 	 | ||||||
| 	@Override | 	@Override | ||||||
|     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, ReservationContext context) { |     public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, ReservationContext context) { | ||||||
|         StringBuilder buf = profile.getBootArgsBuilder(); |         StringBuilder buf = profile.getBootArgsBuilder(); | ||||||
| @ -2277,10 +2320,15 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public DomainRouterVO addVirtualMachineIntoNetwork(Network config, NicProfile nic, VirtualMachineProfile<UserVm> profile, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException { |     public DomainRouterVO addVirtualMachineIntoNetwork(Network config, NicProfile nic, VirtualMachineProfile<UserVm> profile, DeployDestination dest, ReservationContext context, Boolean startDhcp) throws ConcurrentOperationException, InsufficientNetworkCapacityException, ResourceUnavailableException { | ||||||
|         DomainRouterVO router = _routerDao.findByNetworkConfiguration(config.getId()); |         DomainRouterVO router = _routerDao.findByNetworkConfiguration(config.getId()); | ||||||
|         try { |         try { | ||||||
|             router = this.deploy(config, dest, profile.getOwner()); |             if (startDhcp) { | ||||||
|  |                 router = this.deployDhcp(config, dest, profile.getOwner()); | ||||||
|  |             } else { | ||||||
|  |                 router = this.deployVirtualRouter(config, dest, profile.getOwner()); | ||||||
|  |             } | ||||||
|  |              | ||||||
|         } catch (InsufficientNetworkCapacityException e) { |         } catch (InsufficientNetworkCapacityException e) { | ||||||
|             throw e; |             throw e; | ||||||
|         } catch (InsufficientCapacityException e) { |         } catch (InsufficientCapacityException e) { | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								vmops.log.2010-12-06.gz
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vmops.log.2010-12-06.gz
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user