CLOUDSTACK-1771: fixed VirtualRouter nics assignment in the Shared networks. Before the fix VR could get a different IP address from the network upon recreation. With the fix the IP address assigned to the first VR in the network, will remain with the network till its entire lifecycle (stored in placeholder nic) and will be assigned to the VR every time it recreates in the network. Shared networks in both - Advance and Basic - zone types are covered by this checkin
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/70566dd3 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/70566dd3 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/70566dd3 Branch: refs/heads/marvin_refactor Commit: 70566dd3e4b7ba31b44144ff8b411cbd59531d50 Parents: f4fad9e Author: Alena Prokharchyk <[email protected]> Authored: Mon Mar 25 16:34:04 2013 -0700 Committer: Prasanna Santhanam <[email protected]> Committed: Sun Mar 31 22:05:04 2013 +0530 ---------------------------------------------------------------------- api/src/com/cloud/network/NetworkModel.java | 2 - .../network/ExternalFirewallDeviceManagerImpl.java | 2 +- server/src/com/cloud/network/NetworkManager.java | 4 +- .../src/com/cloud/network/NetworkManagerImpl.java | 104 ++++++--------- server/src/com/cloud/network/NetworkModelImpl.java | 33 +---- .../com/cloud/network/guru/DirectNetworkGuru.java | 10 +- .../network/guru/DirectPodBasedNetworkGuru.java | 8 +- .../router/VirtualNetworkApplianceManagerImpl.java | 53 +++---- .../src/com/cloud/upgrade/dao/Upgrade410to420.java | 45 +------ server/src/com/cloud/vm/dao/NicDao.java | 4 +- .../com/cloud/network/MockNetworkModelImpl.java | 6 - .../test/com/cloud/vpc/MockNetworkModelImpl.java | 6 - 12 files changed, 90 insertions(+), 187 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/api/src/com/cloud/network/NetworkModel.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index c1f1674..916f28a 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -261,6 +261,4 @@ public interface NetworkModel { String getStartIpv6Address(long id); Nic getPlaceholderNic(Network network, Long podId); - - boolean isProviderEnabledInZone(long zoneId, String provider); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index ae00bf2..d0ef1bd 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -428,7 +428,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl IPAddressVO sourceNatIp = null; if (!sharedSourceNat) { // Get the source NAT IP address for this account - List<? extends IpAddress> sourceNatIps = _networkModel.listPublicIpsAssignedToAccount(network.getAccountId(), + List<? extends IpAddress> sourceNatIps = _networkModel.listPublicIpsAssignedToAccount(network.getAccountId(), zoneId, true); if (sourceNatIps.size() != 1) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/NetworkManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 851f7f5..e961f04 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -20,8 +20,8 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.acl.ControlledEntity.ACLType; - import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterVO; import com.cloud.dc.Pod; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; @@ -51,11 +51,13 @@ import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; +import com.cloud.vm.NicSecondaryIp; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; /** * NetworkManager manages the network for the different end users. http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index c0685ba..226bf05 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -243,41 +243,16 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L @Inject PodVlanMapDao _podVlanMapDao; + @Inject List<NetworkGuru> _networkGurus; - public List<NetworkGuru> getNetworkGurus() { - return _networkGurus; - } - public void setNetworkGurus(List<NetworkGuru> _networkGurus) { - this._networkGurus = _networkGurus; - } - - List<NetworkElement> _networkElements; - public List<NetworkElement> getNetworkElements() { - return _networkElements; - } - public void setNetworkElements(List<NetworkElement> _networkElements) { - this._networkElements = _networkElements; - } - - @Inject NetworkDomainDao _networkDomainDao; - - List<IpDeployer> _ipDeployers; - public List<IpDeployer> getIpDeployers() { - return _ipDeployers; - } - public void setIpDeployers(List<IpDeployer> _ipDeployers) { - this._ipDeployers = _ipDeployers; - } - - List<DhcpServiceProvider> _dhcpProviders; - public List<DhcpServiceProvider> getDhcpProviders() { - return _dhcpProviders; - } - public void setDhcpProviders(List<DhcpServiceProvider> _dhcpProviders) { - this._dhcpProviders = _dhcpProviders; - } - - @Inject + + @Inject protected List<NetworkElement> _networkElements; + + @Inject NetworkDomainDao _networkDomainDao; + @Inject List<IpDeployer> _ipDeployers; + @Inject List<DhcpServiceProvider> _dhcpProviders; + + @Inject VMInstanceDao _vmDao; @Inject FirewallManager _firewallMgr; @@ -611,10 +586,10 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L } IpDeployer deployer = null; NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName()); - if (!(element instanceof IpDeployingRequester)) { + if (!(ComponentContext.getTargetObject(element) instanceof IpDeployingRequester)) { throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!"); } - deployer = ((IpDeployingRequester)element).getIpDeployer(network); + deployer = ((IpDeployingRequester)ComponentContext.getTargetObject(element)).getIpDeployer(network); if (deployer == null) { throw new CloudRuntimeException("Fail to get ip deployer for element: " + element); } @@ -1528,6 +1503,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L // associate a source NAT IP (if one isn't already associated with the network) boolean sharedSourceNat = offering.getSharedSourceNat(); + DataCenter zone = _dcDao.findById(network.getDataCenterId()); if (network.getGuestType() == Network.GuestType.Isolated && _networkModel.areServicesSupportedInNetwork(network.getId(), Service.SourceNat) && !sharedSourceNat) { @@ -1593,13 +1569,13 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L if (vmProfile.getType() == Type.User && element.getProvider() != null) { if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) && _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) && - element instanceof DhcpServiceProvider) { + (ComponentContext.getTargetObject(element) instanceof DhcpServiceProvider)) { DhcpServiceProvider sp = (DhcpServiceProvider) element; sp.addDhcpEntry(network, profile, vmProfile, dest, context); } if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData) && _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && - element instanceof UserDataServiceProvider) { + (ComponentContext.getTargetObject(element) instanceof UserDataServiceProvider)) { UserDataServiceProvider sp = (UserDataServiceProvider) element; sp.addPasswordAndUserdata(network, profile, vmProfile, dest, context); } @@ -2063,7 +2039,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L userNetwork.setIp6Cidr(ip6Cidr); userNetwork.setIp6Gateway(ip6Gateway); } - + if (vlanId != null) { userNetwork.setBroadcastUri(URI.create("vlan://" + vlanId)); userNetwork.setBroadcastDomainType(BroadcastDomainType.Vlan); @@ -3469,29 +3445,29 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L String requestedIpv4, String requestedIpv6) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { boolean ipv4 = false, ipv6 = false; - - Transaction txn = Transaction.currentTxn(); + + Transaction txn = Transaction.currentTxn(); txn.start(); - + if (network.getGateway() != null) { if (nic.getIp4Address() == null) { ipv4 = true; - PublicIp ip = null; - - //Get ip address from the placeholder and don't allocate a new one - if (requestedIpv4 != null && vm.getType() == VirtualMachine.Type.DomainRouter) { - Nic placeholderNic = _networkModel.getPlaceholderNic(network, null); - if (placeholderNic != null) { - IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address()); + PublicIp ip = null; + + //Get ip address from the placeholder and don't allocate a new one + if (requestedIpv4 != null && vm.getType() == VirtualMachine.Type.DomainRouter) { + Nic placeholderNic = _networkModel.getPlaceholderNic(network, null); + if (placeholderNic != null) { + IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), placeholderNic.getIp4Address()); ip = PublicIp.createFromAddrAndVlan(userIp, _vlanDao.findById(userIp.getVlanId())); s_logger.debug("Nic got an ip address " + placeholderNic.getIp4Address() + " stored in placeholder nic for the network " + network); } - } - - if (ip == null) { + } + + if (ip == null) { ip = assignPublicIpAddress(dc.getId(), null, vm.getOwner(), VlanType.DirectAttached, network.getId(), requestedIpv4, false); - } - + } + nic.setIp4Address(ip.getAddress().toString()); nic.setGateway(ip.getGateway()); nic.setNetmask(ip.getNetmask()); @@ -3506,7 +3482,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L nic.setDns2(dc.getDns2()); } - //FIXME - get ipv6 address from the placeholder if it's stored there + //FIXME - get ipv6 address from the placeholder if it's stored there if (network.getIp6Gateway() != null) { if (nic.getIp6Address() == null) { ipv6 = true; @@ -3529,8 +3505,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L nic.setIp6Dns1(dc.getIp6Dns1()); nic.setIp6Dns2(dc.getIp6Dns2()); } - - txn.commit(); + + txn.commit(); } @Override @@ -3677,15 +3653,15 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L @Override public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) { NetworkElement element = getElementForServiceInNetwork(network, Service.StaticNat); - assert element instanceof StaticNatServiceProvider; - return (StaticNatServiceProvider)element; + assert ComponentContext.getTargetObject(element) instanceof StaticNatServiceProvider; + return (StaticNatServiceProvider)ComponentContext.getTargetObject(element); } @Override public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) { NetworkElement element = getElementForServiceInNetwork(network, Service.Lb); - assert element instanceof LoadBalancingServiceProvider; - return (LoadBalancingServiceProvider)element; + assert ComponentContext.getTargetObject(element) instanceof LoadBalancingServiceProvider; + return ( LoadBalancingServiceProvider)ComponentContext.getTargetObject(element); } @Override public boolean isNetworkInlineMode(Network network) { @@ -3734,14 +3710,14 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L Ip ipAddr = ip.getAddress(); return ipAddr.addr(); } - + @Override public NicVO savePlaceholderNic(Network network, String ip4Address) { - NicVO nic = new NicVO(null, null, network.getId(), null); + NicVO nic = new NicVO(null, null, network.getId(), null); nic.setIp4Address(ip4Address); nic.setReservationStrategy(ReservationStrategy.PlaceHolder); nic.setState(Nic.State.Reserved); return _nicDao.persist(nic); } - + } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/NetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index d967f33..d1326b5 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -143,15 +143,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { @Inject PodVlanMapDao _podVlanMapDao; - List<NetworkElement> _networkElements; - public List<NetworkElement> getNetworkElements() { - return _networkElements; - } - public void setNetworkElements(List<NetworkElement> _networkElements) { - this._networkElements = _networkElements; - } - - @Inject + @Inject List<NetworkElement> _networkElements; + + @Inject NetworkDomainDao _networkDomainDao; @Inject VMInstanceDao _vmDao; @@ -404,9 +398,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { Network network = _networksDao.findById(networkId); NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName()); NetworkElement newElement = getElementImplementingProvider(newProvider.getName()); - if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) { - IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network); - IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network); + if (ComponentContext.getTargetObject(oldElement) instanceof IpDeployingRequester && ComponentContext.getTargetObject(newElement) instanceof IpDeployingRequester) { + IpDeployer oldIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(oldElement)).getIpDeployer(network); + IpDeployer newIpDeployer = ((IpDeployingRequester)ComponentContext.getTargetObject(newElement)).getIpDeployer(network); if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) { throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); } @@ -1212,19 +1206,6 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { } return isProviderEnabled(ntwkSvcProvider); } - - @Override - public boolean isProviderEnabledInZone(long zoneId, String provider) - { - //the provider has to be enabled at least in one network in the zone - for (PhysicalNetwork pNtwk : _physicalNetworkDao.listByZone(zoneId)) { - if (isProviderEnabledInPhysicalNetwork(pNtwk.getId(), provider)) { - return true; - } - } - - return false; - } @Override public String getNetworkTag(HypervisorType hType, Network network) { @@ -2012,7 +1993,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { } return startIpv6; } - + @Override public NicVO getPlaceholderNic(Network network, Long podId) { List<NicVO> nics = _nicDao.listPlaceholderNicsByNetworkId(network.getId()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/guru/DirectNetworkGuru.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java index 2c8acbb..c53bbb7 100755 --- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java @@ -220,7 +220,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { protected void allocateDirectIp(NicProfile nic, Network network, VirtualMachineProfile<? extends VirtualMachine> vm, DataCenter dc, String requestedIp4Addr, String requestedIp6Addr) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { - + //FIXME - save ipv6 informaiton in the placeholder nic Transaction txn = Transaction.currentTxn(); txn.start(); @@ -257,7 +257,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { if (ip != null) { Transaction txn = Transaction.currentTxn(); txn.start(); - + // if the ip address a part of placeholder, don't release it Nic placeholderNic = _networkModel.getPlaceholderNic(network, null); if (placeholderNic != null && placeholderNic.getIp4Address().equalsIgnoreCase(ip.getAddress().addr())) { @@ -266,7 +266,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { _networkMgr.markIpAsUnavailable(ip.getId()); _ipAddressDao.unassignIpAddress(ip.getId()); } - + //unassign nic secondary ip address s_logger.debug("remove nic " + nic.getId() + " secondary ip "); List<String> nicSecIps = null; @@ -276,7 +276,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { _networkMgr.markIpAsUnavailable(pubIp.getId()); _ipAddressDao.unassignIpAddress(pubIp.getId()); } - + txn.commit(); } } @@ -308,7 +308,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { _nicDao.remove(nic.getId()); } } - + txn.commit(); return true; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java index d74cd06..8f15d5a 100755 --- a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java @@ -164,7 +164,7 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru { if (nic.getIp4Address() == null) { Transaction txn = Transaction.currentTxn(); txn.start(); - + PublicIp ip = null; List<PodVlanMapVO> podRefs = _podVlanDao.listPodVlanMapsByPod(pod.getId()); String podRangeGateway = null; @@ -180,11 +180,11 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru { s_logger.debug("Nic got an ip address " + placeholderNic.getIp4Address() + " stored in placeholder nic for the network " + network + " and gateway " + podRangeGateway); } } - + if (ip == null) { ip = _networkMgr.assignPublicIpAddress(dc.getId(), pod.getId(), vm.getOwner(), VlanType.DirectAttached, network.getId(), null, false); } - + nic.setIp4Address(ip.getAddress().toString()); nic.setFormat(AddressFormat.Ip4); nic.setGateway(ip.getGateway()); @@ -196,7 +196,7 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru { } nic.setReservationId(String.valueOf(ip.getVlanTag())); nic.setMacAddress(ip.getMacAddress()); - + //save the placeholder nic if the vm is the Virtual router if (vm.getType() == VirtualMachine.Type.DomainRouter) { Nic placeholderNic = _networkModel.getPlaceholderNic(network, null); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/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 67c94fc..50188e7 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -303,6 +303,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V @Inject VpnUserDao _vpnUsersDao; @Inject + RemoteAccessVpnDao _remoteAccessVpnDao; + @Inject RulesManager _rulesMgr; @Inject NetworkDao _networkDao; @@ -1275,22 +1277,13 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V * We update the router pair which the lower id router owned by this mgmt server, in order * to prevent duplicate update of router status from cluster mgmt servers */ - DomainRouterVO router0 = routers.get(0); - DomainRouterVO router1 = routers.get(1); - DomainRouterVO router = router0; - if ((router0.getId() < router1.getId()) && router0.getHostId() != null) { - router = router0; - } else { - router = router1; - } - if (router.getHostId() == null) { - s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to can't find host"); - continue; + DomainRouterVO router = routers.get(0); + if (routers.get(1).getId() < router.getId()) { + router = routers.get(1); } HostVO host = _hostDao.findById(router.getHostId()); if (host == null || host.getManagementServerId() == null || host.getManagementServerId() != ManagementServerNode.getManagementServerId()) { - s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to not belong to this mgmt server"); continue; } updateRoutersRedundantState(routers); @@ -1706,30 +1699,30 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null; if (!setupPublicNetwork) { if (guestNetwork.getCidr() != null) { - //Check the placeholder nic, and if it's ip address is not empty, allocate it from there - String requestedGateway = null; - if (guestNetwork.getGateway() != null) { - requestedGateway = guestNetwork.getGateway(); - } else if (plan != null && plan.getPodId() != null) { - Pod pod = _configMgr.getPod(plan.getPodId()); - requestedGateway = pod.getGateway(); - } - Nic placeholder = _networkModel.getPlaceholderNic(guestNetwork, null); - if (placeholder != null) { - s_logger.debug("Requesting ip address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + guestNetwork); - defaultNetworkStartIp = placeholder.getIp4Address(); - } else { - String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); + //Check the placeholder nic, and if it's ip address is not empty, allocate it from there + String requestedGateway = null; + if (guestNetwork.getGateway() != null) { + requestedGateway = guestNetwork.getGateway(); + } else if (plan != null && plan.getPodId() != null) { + Pod pod = _configMgr.getPod(plan.getPodId()); + requestedGateway = pod.getGateway(); + } + Nic placeholder = _networkModel.getPlaceholderNic(guestNetwork, null); + if (placeholder != null) { + s_logger.debug("Requesting ip address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + guestNetwork); + defaultNetworkStartIp = placeholder.getIp4Address(); + } else { + String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); if (startIp != null && _ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) { defaultNetworkStartIp = startIp; } else if (s_logger.isDebugEnabled()){ - s_logger.debug("First ip " + startIp + " in network id=" + guestNetwork.getId() + + s_logger.debug("First ip " + startIp + " in network id=" + guestNetwork.getId() + " is already allocated, can't use it for domain router; will get random ip address from the range"); } - } + } } - //FIXME - get ipv6 stored in the placeholder + //FIXME - get ipv6 stored in the placeholder if (guestNetwork.getIp6Cidr() != null) { String startIpv6 = _networkModel.getStartIpv6Address(guestNetwork.getId()); if (startIpv6 != null && _ipv6Dao.findByNetworkIdAndIp(guestNetwork.getId(), startIpv6) == null) { @@ -2344,7 +2337,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, provider)) { - RemoteAccessVpn vpn = _vpnDao.findByPublicIpAddress(ip.getId()); + RemoteAccessVpn vpn = _vpnDao.findById(ip.getId()); if (vpn != null) { vpns.add(vpn); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/upgrade/dao/Upgrade410to420.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java b/server/src/com/cloud/upgrade/dao/Upgrade410to420.java index d26da4d..dd0aa3e 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade410to420.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade410to420.java @@ -17,6 +17,9 @@ package com.cloud.upgrade.dao; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; + import java.io.File; import java.sql.Connection; import java.sql.PreparedStatement; @@ -26,9 +29,6 @@ import java.util.UUID; import org.apache.log4j.Logger; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.Script; - public class Upgrade410to420 implements DbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade410to420.class); @@ -61,7 +61,6 @@ public class Upgrade410to420 implements DbUpgrade { public void performDataMigration(Connection conn) { upgradeVmwareLabels(conn); createPlaceHolderNics(conn); - updateRemoteAccessVpn(conn); PreparedStatement sql = null; try { sql = conn.prepareStatement("update vm_template set image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'"); @@ -160,7 +159,7 @@ public class Upgrade410to420 implements DbUpgrade { } } } - + private void createPlaceHolderNics(Connection conn) { PreparedStatement pstmt = null; ResultSet rs = null; @@ -181,44 +180,10 @@ public class Upgrade410to420 implements DbUpgrade { pstmt.setLong(4, networkId); pstmt.executeUpdate(); s_logger.debug("Created placeholder nic for the ipAddress " + ip); - - } - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to create placeholder nics", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } - } - } - - - private void updateRemoteAccessVpn(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - pstmt = conn.prepareStatement("SELECT vpn_server_addr_id FROM `cloud`.`remote_access_vpn`"); - rs = pstmt.executeQuery(); - long id=1; - while (rs.next()) { - String uuid = UUID.randomUUID().toString(); - Long ipId = rs.getLong(1); - pstmt = conn.prepareStatement("UPDATE `cloud`.`remote_access_vpn` set uuid=?, id=? where vpn_server_addr_id=?"); - pstmt.setString(1, uuid); - pstmt.setLong(2, id); - pstmt.setLong(3, ipId); - pstmt.executeUpdate(); - id++; } } catch (SQLException e) { - throw new CloudRuntimeException("Unable to update id/uuid of remote_access_vpn table", e); + throw new CloudRuntimeException("Unable to create placeholder nics", e); } finally { try { if (rs != null) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/src/com/cloud/vm/dao/NicDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/dao/NicDao.java b/server/src/com/cloud/vm/dao/NicDao.java index eb38a8d..67b9d12 100644 --- a/server/src/com/cloud/vm/dao/NicDao.java +++ b/server/src/com/cloud/vm/dao/NicDao.java @@ -62,7 +62,7 @@ public interface NicDao extends GenericDao<NicVO, Long> { List<NicVO> listByVmIdAndNicId(Long vmId, Long nicId); NicVO findByIp4AddressAndVmId(String ip4Address, long instance); - + List<NicVO> listPlaceholderNicsByNetworkId(long networkId); - + } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/test/com/cloud/network/MockNetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index c578965..b926519 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -844,10 +844,4 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { // TODO Auto-generated method stub return null; } - - @Override - public boolean isProviderEnabledInZone(long zoneId, String provider) { - // TODO Auto-generated method stub - return false; - } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70566dd3/server/test/com/cloud/vpc/MockNetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java index e1534cb..b05e8ea 100644 --- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java @@ -857,10 +857,4 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return null; } - @Override - public boolean isProviderEnabledInZone(long zoneId, String provider) { - // TODO Auto-generated method stub - return false; - } - }
