mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
importvm: fix IP address allocation on Shared networks (#11811)
This commit is contained in:
parent
4d95f08a3a
commit
86cad79c15
@ -4772,6 +4772,18 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (selectedIp != null && GuestType.Shared.equals(network.getGuestType())) {
|
||||||
|
IPAddressVO ipAddressVO = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), selectedIp);
|
||||||
|
if (ipAddressVO != null && IpAddress.State.Free.equals(ipAddressVO.getState())) {
|
||||||
|
ipAddressVO.setState(IPAddressVO.State.Allocated);
|
||||||
|
ipAddressVO.setAllocatedTime(new Date());
|
||||||
|
Account account = _accountDao.findById(vm.getAccountId());
|
||||||
|
ipAddressVO.setAllocatedInDomainId(account.getDomainId());
|
||||||
|
ipAddressVO.setAllocatedToAccountId(account.getId());
|
||||||
|
_ipAddressDao.update(ipAddressVO.getId(), ipAddressVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId());
|
final Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId());
|
||||||
final NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network),
|
final NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network),
|
||||||
_networkModel.getNetworkTag(vm.getHypervisorType(), network));
|
_networkModel.getNetworkTag(vm.getHypervisorType(), network));
|
||||||
@ -4783,15 +4795,15 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
|||||||
if (network.getGuestType() == GuestType.L2) {
|
if (network.getGuestType() == GuestType.L2) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return dataCenter.getNetworkType() == NetworkType.Basic ?
|
return GuestType.Shared.equals(network.getGuestType()) ?
|
||||||
getSelectedIpForNicImportOnBasicZone(ipAddresses.getIp4Address(), network, dataCenter):
|
getSelectedIpForNicImportOnSharedNetwork(ipAddresses.getIp4Address(), network, dataCenter):
|
||||||
_ipAddrMgr.acquireGuestIpAddress(network, ipAddresses.getIp4Address());
|
_ipAddrMgr.acquireGuestIpAddress(network, ipAddresses.getIp4Address());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getSelectedIpForNicImportOnBasicZone(String requestedIp, Network network, DataCenter dataCenter) {
|
protected String getSelectedIpForNicImportOnSharedNetwork(String requestedIp, Network network, DataCenter dataCenter) {
|
||||||
IPAddressVO ipAddressVO = StringUtils.isBlank(requestedIp) ?
|
IPAddressVO ipAddressVO = StringUtils.isBlank(requestedIp) ?
|
||||||
_ipAddressDao.findBySourceNetworkIdAndDatacenterIdAndState(network.getId(), dataCenter.getId(), IpAddress.State.Free):
|
_ipAddressDao.findBySourceNetworkIdAndDatacenterIdAndState(network.getId(), dataCenter.getId(), IpAddress.State.Free):
|
||||||
_ipAddressDao.findByIp(requestedIp);
|
_ipAddressDao.findByIpAndSourceNetworkId(network.getId(), requestedIp);
|
||||||
if (ipAddressVO == null || ipAddressVO.getState() != IpAddress.State.Free) {
|
if (ipAddressVO == null || ipAddressVO.getState() != IpAddress.State.Free) {
|
||||||
String msg = String.format("Cannot find a free IP to assign to VM NIC on network %s", network.getName());
|
String msg = String.format("Cannot find a free IP to assign to VM NIC on network %s", network.getName());
|
||||||
logger.error(msg);
|
logger.error(msg);
|
||||||
|
|||||||
@ -822,7 +822,7 @@ public class NetworkOrchestratorTest extends TestCase {
|
|||||||
Mockito.when(network.getId()).thenReturn(networkId);
|
Mockito.when(network.getId()).thenReturn(networkId);
|
||||||
Mockito.when(dataCenter.getId()).thenReturn(dataCenterId);
|
Mockito.when(dataCenter.getId()).thenReturn(dataCenterId);
|
||||||
Mockito.when(ipAddresses.getIp4Address()).thenReturn(requestedIp);
|
Mockito.when(ipAddresses.getIp4Address()).thenReturn(requestedIp);
|
||||||
Mockito.when(testOrchestrator._ipAddressDao.findByIp(requestedIp)).thenReturn(ipAddressVO);
|
Mockito.when(testOrchestrator._ipAddressDao.findByIpAndSourceNetworkId(networkId, requestedIp)).thenReturn(ipAddressVO);
|
||||||
String ipAddress = testOrchestrator.getSelectedIpForNicImport(network, dataCenter, ipAddresses);
|
String ipAddress = testOrchestrator.getSelectedIpForNicImport(network, dataCenter, ipAddresses);
|
||||||
Assert.assertEquals(requestedIp, ipAddress);
|
Assert.assertEquals(requestedIp, ipAddress);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,7 +71,6 @@ import com.cloud.host.dao.HostDao;
|
|||||||
import com.cloud.hypervisor.Hypervisor;
|
import com.cloud.hypervisor.Hypervisor;
|
||||||
import com.cloud.hypervisor.HypervisorGuru;
|
import com.cloud.hypervisor.HypervisorGuru;
|
||||||
import com.cloud.hypervisor.HypervisorGuruManager;
|
import com.cloud.hypervisor.HypervisorGuruManager;
|
||||||
import com.cloud.network.IpAddressManager;
|
|
||||||
import com.cloud.network.Network;
|
import com.cloud.network.Network;
|
||||||
import com.cloud.network.NetworkModel;
|
import com.cloud.network.NetworkModel;
|
||||||
import com.cloud.network.Networks;
|
import com.cloud.network.Networks;
|
||||||
@ -271,8 +270,6 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
|
|||||||
@Inject
|
@Inject
|
||||||
private PhysicalNetworkDao physicalNetworkDao;
|
private PhysicalNetworkDao physicalNetworkDao;
|
||||||
@Inject
|
@Inject
|
||||||
private IpAddressManager ipAddressManager;
|
|
||||||
@Inject
|
|
||||||
private StoragePoolHostDao storagePoolHostDao;
|
private StoragePoolHostDao storagePoolHostDao;
|
||||||
@Inject
|
@Inject
|
||||||
private HypervisorGuruManager hypervisorGuruManager;
|
private HypervisorGuruManager hypervisorGuruManager;
|
||||||
@ -2613,10 +2610,8 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String macAddress = networkModel.getNextAvailableMacAddressInNetwork(networkId);
|
String macAddress = networkModel.getNextAvailableMacAddressInNetwork(networkId);
|
||||||
String ipAddress = null;
|
|
||||||
if (network.getGuestType() != Network.GuestType.L2) {
|
String ipAddress = network.getGuestType() != Network.GuestType.L2 ? "auto" : null;
|
||||||
ipAddress = ipAddressManager.acquireGuestIpAddress(network, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
Network.IpAddresses requestedIpPair = new Network.IpAddresses(ipAddress, null, macAddress);
|
Network.IpAddresses requestedIpPair = new Network.IpAddresses(ipAddress, null, macAddress);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user