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 <[email protected]>
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());