You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2021/06/16 15:50:12 UTC

[cloudstack] branch 4.15 updated: server: set correct gateway when update vm nic on shared networks (#5105)

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

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


The following commit(s) were added to refs/heads/4.15 by this push:
     new 46a3032  server: set correct gateway when update vm nic on shared networks (#5105)
46a3032 is described below

commit 46a303217839a8abe22de300fce982a8ad662308
Author: Wei Zhou <57...@users.noreply.github.com>
AuthorDate: Wed Jun 16 17:49:42 2021 +0200

    server: set correct gateway when update vm nic on shared networks (#5105)
    
    This PR fixes the issue that nic has wrong gateway after updating vm nic.
    
    Steps to reproduce the issue
    (1) create shared network (in advanced zone or advanced zone with sg)
    (2) create new shared network (with same startip/endip/netmask, but different gateway).
    (3) create a vm in new network
    (4) stop vm and update vm nic ip address
    
    Expected result:
    The vm has correct gateway and netmask (of second network)
    
    Actual result:
    The vm has wrong gateway and netmask (of first network)
---
 server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +-
 server/src/test/java/com/cloud/vm/UserVmManagerTest.java | 5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index adc8c32..6d85874 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -1728,7 +1728,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
                     throw new InvalidParameterValueException("Allocating ip to guest nic " + nicVO.getUuid() + " failed, please choose another ip");
                 }
 
-                final IPAddressVO newIp = _ipAddressDao.findByIpAndDcId(dc.getId(), ipaddr);
+                final IPAddressVO newIp = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), ipaddr);
                 final Vlan vlan = _vlanDao.findById(newIp.getVlanId());
                 nicVO.setIPv4Gateway(vlan.getVlanGateway());
                 nicVO.setIPv4Netmask(vlan.getVlanNetmask());
diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
index 9d58f4f..1103fb1 100644
--- a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
+++ b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java
@@ -604,6 +604,7 @@ public class UserVmManagerTest {
 
         NicVO nic = new NicVO("nic", 1L, 2L, VirtualMachine.Type.User);
         when(_nicDao.findById(anyLong())).thenReturn(nic);
+        nic.setIPv4Address("10.10.10.9");
         when(_vmDao.findById(anyLong())).thenReturn(_vmMock);
         when(_networkDao.findById(anyLong())).thenReturn(_networkMock);
         doReturn(9L).when(_networkMock).getNetworkOfferingId();
@@ -630,9 +631,9 @@ public class UserVmManagerTest {
         when(vlan.getVlanNetmask()).thenReturn("255.255.255.0");
 
         when(_ipAddrMgr.allocatePublicIpForGuestNic(Mockito.eq(_networkMock), nullable(Long.class), Mockito.eq(_accountMock), anyString())).thenReturn("10.10.10.10");
-        lenient().when(_ipAddressDao.findByIpAndSourceNetworkId(anyLong(), anyString())).thenReturn(null);
+        when(_ipAddressDao.findByIpAndSourceNetworkId(anyLong(), eq("10.10.10.10"))).thenReturn(newIp);
+        when(_ipAddressDao.findByIpAndSourceNetworkId(anyLong(), eq("10.10.10.9"))).thenReturn(null);
         when(_nicDao.persist(any(NicVO.class))).thenReturn(nic);
-        when(_ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(newIp);
         when(_vlanDao.findById(anyLong())).thenReturn(vlan);
 
         Account caller = new AccountVO("testaccount", 1, "networkdomain", (short)0, UUID.randomUUID().toString());