This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.20 by this push:
     new 86cad79c156 importvm: fix IP address allocation on Shared networks 
(#11811)
86cad79c156 is described below

commit 86cad79c156298e66dcabf668a05dc79fd46a129
Author: Wei Zhou <[email protected]>
AuthorDate: Mon Oct 13 08:16:46 2025 +0200

    importvm: fix IP address allocation on Shared networks (#11811)
---
 .../engine/orchestration/NetworkOrchestrator.java    | 20 ++++++++++++++++----
 .../orchestration/NetworkOrchestratorTest.java       |  2 +-
 .../cloudstack/vm/UnmanagedVMsManagerImpl.java       |  9 ++-------
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index a9c15afc2cf..4c7641fb79b 100644
--- 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -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 NicProfile vmNic = new NicProfile(vo, network, 
vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, 
_networkModel.isSecurityGroupSupportedInNetwork(network),
                 _networkModel.getNetworkTag(vm.getHypervisorType(), network));
@@ -4783,15 +4795,15 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
         if (network.getGuestType() == GuestType.L2) {
             return null;
         }
-        return dataCenter.getNetworkType() == NetworkType.Basic ?
-                
getSelectedIpForNicImportOnBasicZone(ipAddresses.getIp4Address(), network, 
dataCenter):
+        return GuestType.Shared.equals(network.getGuestType()) ?
+                
getSelectedIpForNicImportOnSharedNetwork(ipAddresses.getIp4Address(), network, 
dataCenter):
                 _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) ?
                 
_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) {
             String msg = String.format("Cannot find a free IP to assign to VM 
NIC on network %s", network.getName());
             logger.error(msg);
diff --git 
a/engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
 
b/engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
index 064ca44c69a..a95f0e36475 100644
--- 
a/engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
+++ 
b/engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java
@@ -822,7 +822,7 @@ public class NetworkOrchestratorTest extends TestCase {
         Mockito.when(network.getId()).thenReturn(networkId);
         Mockito.when(dataCenter.getId()).thenReturn(dataCenterId);
         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);
         Assert.assertEquals(requestedIp, ipAddress);
     }
diff --git 
a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java 
b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
index e5eb29a798d..0cf921f36be 100644
--- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
@@ -71,7 +71,6 @@ import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor;
 import com.cloud.hypervisor.HypervisorGuru;
 import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.network.IpAddressManager;
 import com.cloud.network.Network;
 import com.cloud.network.NetworkModel;
 import com.cloud.network.Networks;
@@ -271,8 +270,6 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
     @Inject
     private PhysicalNetworkDao physicalNetworkDao;
     @Inject
-    private IpAddressManager ipAddressManager;
-    @Inject
     private StoragePoolHostDao storagePoolHostDao;
     @Inject
     private HypervisorGuruManager hypervisorGuruManager;
@@ -2613,10 +2610,8 @@ public class UnmanagedVMsManagerImpl implements 
UnmanagedVMsManager {
         }
 
         String macAddress = 
networkModel.getNextAvailableMacAddressInNetwork(networkId);
-        String ipAddress = null;
-        if (network.getGuestType() != Network.GuestType.L2) {
-            ipAddress = ipAddressManager.acquireGuestIpAddress(network, null);
-        }
+
+        String ipAddress = network.getGuestType() != Network.GuestType.L2 ? 
"auto" : null;
 
         Network.IpAddresses requestedIpPair = new 
Network.IpAddresses(ipAddress, null, macAddress);
 

Reply via email to