From aa842565423f675739701c7ece16fcdcf04fbf7f Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Sun, 10 Jun 2012 12:24:43 -0700 Subject: [PATCH] 1) Added VpcVirtualNetworkApplianceService interface 2) Pass dns1/dns2 to setupGuestNetworkCommand 3) Network implement - don't get source nat ip address for Vpc if it already has one --- .../VirtualNetworkApplianceService.java | 1 + .../VpcVirtualNetworkApplianceService.java | 36 ++++++++++ awsapi.log.2012-05-30.gz | Bin 14294 -> 0 bytes .../src/com/cloud/network/NetworkManager.java | 8 +++ .../com/cloud/network/NetworkManagerImpl.java | 44 +++++++++--- .../network/element/VirtualRouterElement.java | 26 +++---- .../element/VpcVirtualRouterElement.java | 66 +++++++++++++----- .../VirtualNetworkApplianceManager.java | 1 + .../VirtualNetworkApplianceManagerImpl.java | 65 +++++++++++------ .../VpcVirtualNetworkApplianceManager.java | 3 +- ...VpcVirtualNetworkApplianceManagerImpl.java | 20 +++++- .../cloud/vm/VirtualMachineManagerImpl.java | 13 ++-- .../src/com/cloud/vm/dao/DomainRouterDao.java | 7 ++ .../com/cloud/vm/dao/DomainRouterDaoImpl.java | 6 ++ setup/db/create-schema.sql | 3 +- wscript | 3 +- 16 files changed, 229 insertions(+), 73 deletions(-) create mode 100644 api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java delete mode 100644 awsapi.log.2012-05-30.gz diff --git a/api/src/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/com/cloud/network/VirtualNetworkApplianceService.java index e35573f3609..2642d0fe1ff 100644 --- a/api/src/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/com/cloud/network/VirtualNetworkApplianceService.java @@ -66,6 +66,7 @@ public interface VirtualNetworkApplianceService { * @param router * @param network * @param isRedundant TODO + * @param setupDns TODO * @return * @throws ConcurrentOperationException * @throws ResourceUnavailableException diff --git a/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java b/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java new file mode 100644 index 00000000000..139de989459 --- /dev/null +++ b/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java @@ -0,0 +1,36 @@ +// Copyright 2012 Citrix Systems, Inc. Licensed under the +// Apache License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. Citrix Systems, Inc. +// reserves all rights not expressly granted by 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. +// +// Automatically generated by addcopyright.py at 04/03/2012 +package com.cloud.network; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.router.VirtualRouter; + +/** + * @author Alena Prokharchyk + */ +public interface VpcVirtualNetworkApplianceService { + + /** + * @param router + * @param network + * @param isRedundant + * @return + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws InsufficientCapacityException + */ + boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; + +} diff --git a/awsapi.log.2012-05-30.gz b/awsapi.log.2012-05-30.gz deleted file mode 100644 index 2f45884fddf0a648283159025233f2c0b0aa2414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14294 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 diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 5873115f1c5..18b1154305c 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -423,6 +423,14 @@ public interface NetworkManager extends NetworkService { * @return */ NicProfile getNicProfile(VirtualMachine vm, long networkId); + + + /** + * @param network + * @param provider + * @return + */ + boolean setupDns(Network network, Provider provider); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 52865bf6c63..3ef93ddb238 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1939,7 +1939,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, + public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { Transaction.currentTxn(); Pair implemented = new Pair(null, null); @@ -2000,7 +2001,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) + private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { // If this is a 1) guest virtual network 2) network has sourceNat service 3) network offering does not support a // Shared source NAT rule, @@ -2008,14 +2010,29 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean sharedSourceNat = offering.getSharedSourceNat(); - if (network.getGuestType() == Network.GuestType.Isolated && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + if (network.getGuestType() == Network.GuestType.Isolated + && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) && !sharedSourceNat) { - List ips = _ipAddressDao.listByAssociatedNetwork(network.getId(), true); + + List ips = null; + Vpc vpc = null; + if (network.getVpcId() != null) { + vpc = _vpcMgr.getVpc(network.getVpcId()); + ips = _ipAddressDao.listByAssociatedVpc(vpc.getId(), true); + } else { + ips = _ipAddressDao.listByAssociatedNetwork(network.getId(), true); + } + if (ips.isEmpty()) { - s_logger.debug("Creating a source nat ip for " + network); + String target = vpc != null ? vpc.toString() : network.toString(); + s_logger.debug("Creating a source nat ip for " + target); Account owner = _accountMgr.getAccount(network.getAccountId()); - assignSourceNatIpAddressToGuestNetwork(owner, network); + if (vpc != null) { + assignSourceNatIpAddressToVpc(owner, vpc); + } else { + assignSourceNatIpAddressToGuestNetwork(owner, network); + } } } @@ -2119,14 +2136,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - @DB public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - Integer networkRate = getNetworkRate(network.getId(), vmProfile.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); NicVO nic = _nicDao.findById(nicId); @@ -2174,7 +2188,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("Asking " + element.getName() + " to prepare for " + nic); } - prepareElement(element, network, profile, vmProfile, dest, context); + prepareElement(element, network, profile, vmProfile, dest, context); } profile.setSecurityGroupEnabled(isSecurityGroupSupportedInNetwork(network)); @@ -7094,4 +7108,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return privateNetwork; } + @Override + public boolean setupDns(Network network, Provider provider) { + boolean dnsProvided = isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); + boolean dhcpProvided =isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + provider); + + boolean setupDns = dnsProvided || dhcpProvided; + return setupDns; + } + } diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index b2f139ee9de..f22b3484617 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -129,8 +129,12 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl if (physicalNetworkId == null) { return false; } + + if (network.getVpcId() != null) { + return false; + } - if (!_networkMgr.isProviderEnabledInPhysicalNetwork(physicalNetworkId, "VirtualRouter")) { + if (!_networkMgr.isProviderEnabledInPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName())) { return false; } @@ -170,18 +174,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl DataCenter.class, network.getDataCenterId()); } - boolean success = true; for (VirtualRouter router : routers) { //Add router to guest network - success = success && _routerMgr.addRouterToGuestNetwork(router, network, false); - if (!success) { - s_logger.warn("Failed to plug nic in network " + network + " for virtual router router " + router); + if (!_routerMgr.addRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add router " + router + " to guest network " + network); } else { - s_logger.debug("Successfully plugged nic in network " + network + " for virtual router " + router); + s_logger.debug("Successfully added router " + router + " to guest network " + network); } } - return success; + return true; } @Override @@ -214,18 +216,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl DataCenter.class, network.getDataCenterId()); } - boolean success = true; for (VirtualRouter router : routers) { //Add router to guest network - success = success && _routerMgr.addRouterToGuestNetwork(router, network, false); - if (!success) { - s_logger.warn("Failed to plug nic in network " + network + " for virtual router " + router); + if (!_routerMgr.addRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add router " + router + " to guest network " + network); } else { - s_logger.debug("Successfully plugged nic in network " + network + " for virtual router " + router); + s_logger.debug("Successfully added router " + router + " to guest network " + network); } } - return success; + return true; } @Override diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 738b663aaf0..cf4bd0b4479 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -31,12 +31,14 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkService; +import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcService; import com.cloud.offering.NetworkOffering; import com.cloud.utils.component.Inject; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; @@ -53,6 +55,8 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc NetworkService _ntwkService; @Inject VpcService _vpcService; + @Inject + VpcVirtualNetworkApplianceService _vpcMgr; private static final Map> capabilities = setCapabilities(); @@ -60,6 +64,39 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc @Inject VpcVirtualNetworkApplianceManager _vpcRouterMgr; + + @Override + protected boolean canHandle(Network network, Service service) { + Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(network); + if (physicalNetworkId == null) { + return false; + } + + if (network.getVpcId() == null) { + return false; + } + + if (!_networkMgr.isProviderEnabledInPhysicalNetwork(physicalNetworkId, Network.Provider.VPCVirtualRouter.getName())) { + return false; + } + + if (service == null) { + if (!_networkMgr.isProviderForNetwork(getProvider(), network.getId())) { + s_logger.trace("Element " + getProvider().getName() + " is not a provider for the network " + network); + return false; + } + } else { + if (!_networkMgr.isProviderSupportServiceInNetwork(network.getId(), service, getProvider())) { + s_logger.trace("Element " + getProvider().getName() + " doesn't support service " + service.getName() + + " in the network " + network); + return false; + } + } + + return true; + } + + @Override public boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -111,19 +148,16 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc DataCenter.class, network.getDataCenterId()); } - boolean success = true; for (VirtualRouter router : routers) { - //Add router to guest network - success = success && _routerMgr.addRouterToGuestNetwork(router, network, false); + //Add router to guest network + if (!_vpcMgr.addVpcRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); + } else { + s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); + } } - if (!success) { - s_logger.warn("Failed to plug nic in network " + network + " for virtual router in vpc id=" + vpcId); - } else { - s_logger.debug("Successfully plugged nic in network " + network + " for virtual router in vpc id=" + vpcId); - } - - return success; + return true; } @Override @@ -153,18 +187,16 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc DataCenter.class, network.getDataCenterId()); } - boolean success = true; for (VirtualRouter router : routers) { - //2) Add router to guest network - success = success && _routerMgr.addRouterToGuestNetwork(router, network, false); - if (!success) { - s_logger.warn("Failed to plug nic in network " + network + " for virtual router " + router); + //Add router to guest network + if (!_vpcMgr.addVpcRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); } else { - s_logger.debug("Successfully plugged nic in network " + network + " for virtual router " + router); + s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); } } - return success; + return true; } @Override diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java index f6d83c3f865..56ceac1309c 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java @@ -93,4 +93,5 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA boolean applyUserData(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, 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 f79eabf5bbc..ea9083e3242 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1949,7 +1949,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } try { - //add router to public and guest networks + //add router to public and guest networks for (Nic publicNic : publicNics.keySet()) { Network publicNtwk = publicNics.get(publicNic); if (!addRouterToPublicNetwork(router, publicNtwk, _ipAddressDao.findByIpAndSourceNetworkId(publicNtwk.getId(), @@ -1959,9 +1959,15 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - for (Nic guestNic : guestNics.keySet()) { + for (Nic guestNic : guestNics.keySet()) { Network guestNtwk = guestNics.get(guestNic); - if (!addRouterToGuestNetwork(router, guestNtwk, false)) { + //FIXME - move vpc code to the vpc manager + boolean setupDnsRouter = _networkMgr.setupDns(guestNtwk, Provider.VirtualRouter); + boolean setupDnsVpc = _networkMgr.setupDns(guestNtwk, Provider.VPCVirtualRouter); + + boolean setupDns = setupDnsRouter ? setupDnsRouter : setupDnsVpc; + + if (!addRouterToGuestNetwork(router, guestNtwk, false, setupDns)) { s_logger.warn("Failed to plug nic " + guestNic + " to router " + router); return false; } @@ -1969,8 +1975,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } catch (Exception ex) { s_logger.warn("Failed to plug nic for router " + router + " due to exception ", ex); return false; - } - + } return result; } @@ -3058,7 +3063,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } protected boolean setupGuestNetwork(Network network, VirtualRouter router, boolean add, boolean isRedundant, - NicProfile guestNic) + NicProfile guestNic, boolean setupDns) throws ConcurrentOperationException, ResourceUnavailableException{ String networkDomain = network.getNetworkDomain(); @@ -3082,16 +3087,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String defaultDns1 = null; String defaultDns2 = null; - boolean dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(guestNic.getNetworkId(), Service.Dns, Provider.VirtualRouter); - boolean dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(guestNic.getNetworkId(), Service.Dhcp, Provider.VirtualRouter); - - if (guestNic.isDefaultNic() && (dnsProvided || dhcpProvided)) { + if (setupDns) { defaultDns1 = guestNic.getDns1(); defaultDns2 = guestNic.getDns2(); } NicVO nic = _nicDao.findByInstanceIdAndNetworkId(network.getId(), router.getId()); - NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), _networkMgr.getNetworkRate(network.getId(), router.getId()), + NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + _networkMgr.getNetworkRate(network.getId(), router.getId()), _networkMgr.isSecurityGroupSupportedInNetwork(network), _networkMgr.getNetworkTag(router.getHypervisorType(), network)); SetupGuestNetworkCommand setupCmd = new SetupGuestNetworkCommand(dhcpRange, networkDomain, isRedundant, priority, @@ -3116,10 +3119,19 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return result; } - + @Override - public boolean addRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) throws ConcurrentOperationException, - ResourceUnavailableException, InsufficientCapacityException { + public boolean addRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + boolean setupDns = _networkMgr.setupDns(network, Provider.VirtualRouter); + + return addRouterToGuestNetwork(router, network, isRedundant, setupDns); + } + + + + protected boolean addRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant, boolean setupDns) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { if (network.getTrafficType() != TrafficType.Guest) { s_logger.warn("Network " + network + " is not of type " + TrafficType.Guest); @@ -3129,19 +3141,22 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Add router to the Guest network boolean result = true; try { - DomainRouterVO routerVO = _routerDao.findById(router.getId()); - s_logger.debug("Plugging nic for vpc virtual router " + router + " in network " + network); - _routerDao.addRouterToGuestNetwork(routerVO, network); + if (_routerDao.isRouterPartOfGuestNetwork(router.getId(), network.getId())) { + DomainRouterVO routerVO = _routerDao.findById(router.getId()); + s_logger.debug("Plugging nic for virtual router " + router + " in network " + network); + _routerDao.addRouterToGuestNetwork(routerVO, network); + } NicProfile guestNic = _itMgr.addVmToNetwork(router, network); //setup guest network if (guestNic != null) { - result = setupGuestNetwork(network, router, true, isRedundant, guestNic); + result = setupGuestNetwork(network, router, true, isRedundant, guestNic, setupDns); } else { s_logger.warn("Failed to add router " + router + " to guest network " + network); + result = false; } } catch (Exception ex) { - s_logger.warn("Failed to add router " + router + " to network " + network); + s_logger.warn("Failed to add router " + router + " to network " + network + " due to ", ex); result = false; } finally { if (!result) { @@ -3157,7 +3172,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return result; } - @Override public boolean removeRouterFromGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) throws ConcurrentOperationException, ResourceUnavailableException { @@ -3166,13 +3180,19 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return false; } + //check if router is already part of network + if (!_routerDao.isRouterPartOfGuestNetwork(router.getId(), network.getId())) { + s_logger.debug("Router " + router + " is not a part of guest network " + network + "; no need to unplug guest nic"); + return true; + } + //Check if router is a part of the Guest network if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { s_logger.debug("Router " + router + " is not a part of the Guest network " + network); return true; } - boolean result = setupGuestNetwork(network, router, false, isRedundant, _networkMgr.getNicProfile(router, network.getId())); + boolean result = setupGuestNetwork(network, router, false, isRedundant, _networkMgr.getNicProfile(router, network.getId()), false); if (!result) { s_logger.warn("Failed to destroy guest network config " + network + " on router " + router); return false; @@ -3204,6 +3224,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian NicProfile publicNic = _itMgr.addVmToNetwork(router, publicNetwork); //setup public network if (publicNic != null) { + publicNic.setDefaultNic(true); if (publicIpAddr != null) { IPAddressVO ipVO = _ipAddressDao.findById(publicIpAddr.getId()); PublicIp publicIp = new PublicIp(ipVO, _vlanDao.findById(ipVO.getVlanId()), @@ -3215,7 +3236,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.warn("Failed to add router " + router + " to the public network " + publicNetwork); } } catch (Exception ex) { - s_logger.warn("Failed to add router " + router + " to the public network " + publicNetwork); + s_logger.warn("Failed to add router " + router + " to the public network " + publicNetwork + " due to ", ex); } finally { if (!result) { s_logger.debug("Removing the router " + router + " from public network " + publicNetwork + " as a part of cleanup"); diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java index ef2feda9537..68164138d11 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java @@ -19,6 +19,7 @@ import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; import com.cloud.vm.DomainRouterVO; @@ -27,7 +28,7 @@ import com.cloud.vm.VirtualMachineProfile.Param; /** * @author Alena Prokharchyk */ -public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplianceManager{ +public interface VpcVirtualNetworkApplianceManager extends VirtualNetworkApplianceManager, VpcVirtualNetworkApplianceService{ /** * @param vpc diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index b967e8048c5..c0632392bee 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -19,17 +19,23 @@ import javax.ejb.Local; import org.apache.log4j.Logger; +import sun.security.jca.ProviderList; + import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; +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.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; +import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.vpc.Vpc; @@ -47,7 +53,7 @@ import com.cloud.vm.VirtualMachineProfile.Param; * @author Alena Prokharchyk */ -@Local(value = {VpcVirtualNetworkApplianceManager.class}) +@Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class}) public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplianceManagerImpl implements VpcVirtualNetworkApplianceManager{ private static final Logger s_logger = Logger.getLogger(VpcVirtualNetworkApplianceManagerImpl.class); @@ -139,4 +145,16 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian return new Pair>(plan, routers); } + @Override + public boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + boolean dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter); + boolean dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + Provider.VPCVirtualRouter); + + boolean setupDns = dnsProvided || dhcpProvided; + + return super.addRouterToGuestNetwork(router, network, isRedundant, setupDns); + } + } diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 11cb7337dd3..8522a034124 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -2432,7 +2432,6 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene } @Override - @DB public NicProfile addVmToNetwork(VirtualMachine vm, Network network) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -2451,27 +2450,27 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene NicProfile nic = null; NicVO nicVO = _nicsDao.findByInstanceIdAndNetworkId(network.getId(), vm.getId()); if (nicVO != null) { - nic = new NicProfile(nicVO, network, nicVO.getBroadcastUri(), nicVO.getIsolationUri(), _networkMgr.getNetworkRate(network.getId(), vm.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(network), _networkMgr.getNetworkTag(vm.getHypervisorType(), network)); + nic = _networkMgr.getNicProfile(vm, network.getId()); } if (nic == null) { s_logger.debug("Allocating nic for the " + vm + " in network " + network); - Transaction txn = Transaction.currentTxn(); - txn.start(); //1) allocate nic and prepare nic if needed int deviceId = _nicsDao.countNics(vm.getId()); nic = _networkMgr.allocateNic(null, network, false, deviceId, vmProfile).first(); + if (nic == null) { + throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); + } + s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); nic = _networkMgr.prepareNic(vmProfile, dest, context, nic.getId(), networkVO); s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); - - txn.commit(); + } //2) Convert vmProfile to vmTO diff --git a/server/src/com/cloud/vm/dao/DomainRouterDao.java b/server/src/com/cloud/vm/dao/DomainRouterDao.java index cfc73a00e55..11f93bbb6ca 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDao.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDao.java @@ -123,5 +123,12 @@ public interface DomainRouterDao extends GenericDao { * @param guestNetworkId */ void removeRouterFromNetwork(long routerId, long guestNetworkId); + + /** + * @param routerId + * @param guestNetworkId + * @return + */ + boolean isRouterPartOfGuestNetwork(long routerId, long guestNetworkId); } diff --git a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index b40cb8c2fcf..f0257ac12d7 100755 --- a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -309,5 +309,11 @@ public class DomainRouterDaoImpl extends GenericDaoBase im sc.setParameters("role", Role.VIRTUAL_ROUTER); return listBy(sc); } + + @Override + public boolean isRouterPartOfGuestNetwork(long routerId, long guestNetworkId) { + RouterNetworkVO routerNtwkMap = _routerNetworkDao.findByRouterAndNetwork(routerId, guestNetworkId); + return routerNtwkMap != null; + } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index ff771212214..797ce47df82 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2197,7 +2197,8 @@ CREATE TABLE `cloud`.`router_network_ref` ( `guest_type` char(32) COMMENT 'type of guest network that can be shared or isolated', PRIMARY KEY (`id`), CONSTRAINT `fk_router_network_ref__router_id` FOREIGN KEY (`router_id`) REFERENCES `domain_router`(`id`) ON DELETE CASCADE, - CONSTRAINT `fk_router_network_ref__networks_id` FOREIGN KEY (`network_id`) REFERENCES `networks`(`id`) ON DELETE CASCADE + CONSTRAINT `fk_router_network_ref__networks_id` FOREIGN KEY (`network_id`) REFERENCES `networks`(`id`) ON DELETE CASCADE, + UNIQUE `i_router_network_ref__router_id__network_id`(`router_id`, `network_id`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/wscript b/wscript index 19b74dc229c..60149ba533b 100644 --- a/wscript +++ b/wscript @@ -4,7 +4,8 @@ # the following two variables are used by the target "waf dist" # if you change 'em here, you need to change it also in cloud.spec, add a %changelog entry there, and add an entry in debian/changelog -VERSION = '3.0.3.2012-06-08T01:50:26Z' + +VERSION = '3.0.3.2012-06-10T19:26:47Z' APPNAME = 'cloud' import shutil,os