This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 35b4339 CLOUDSTACK-10212: Update Netmask/Gateway when Changing IPv4
address (#2388)
35b4339 is described below
commit 35b43399467737c23ec8d1b1337f1bcfb8e88aa1
Author: Wido den Hollander <[email protected]>
AuthorDate: Tue Jan 9 09:23:16 2018 +0100
CLOUDSTACK-10212: Update Netmask/Gateway when Changing IPv4 address (#2388)
This can otherwise cause problems in Basic Networking where multiple
IPv4 ranges are configured in a POD.
Signed-off-by: Wido den Hollander <[email protected]>
---
server/src/com/cloud/vm/UserVmManagerImpl.java | 11 +++++++++--
server/test/com/cloud/vm/UserVmManagerTest.java | 15 +++++++++++++++
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java
b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 71935ff..362786b 100644
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -137,6 +137,7 @@ import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.DedicatedResourceDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.VlanDao;
+import com.cloud.dc.Vlan;
import com.cloud.dc.Vlan.VlanType;
import com.cloud.dc.VlanVO;
import com.cloud.deploy.DataCenterDeployment;
@@ -473,7 +474,7 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
@Inject
private UserStatisticsDao _userStatsDao;
@Inject
- private VlanDao _vlanDao;
+ protected VlanDao _vlanDao;
@Inject
VolumeService _volService;
@Inject
@@ -1565,6 +1566,12 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
if (ipaddr == null) {
throw new InvalidParameterValueException("Allocating ip to
guest nic " + nicVO.getUuid() + " failed, please choose another ip");
}
+
+ final IPAddressVO newIp =
_ipAddressDao.findByIpAndDcId(dc.getId(), ipaddr);
+ final Vlan vlan = _vlanDao.findById(newIp.getVlanId());
+ nicVO.setIPv4Gateway(vlan.getVlanGateway());
+ nicVO.setIPv4Netmask(vlan.getVlanNetmask());
+
final IPAddressVO ip =
_ipAddressDao.findByIpAndSourceNetworkId(nicVO.getNetworkId(),
nicVO.getIPv4Address());
if (ip != null) {
Transaction.execute(new TransactionCallbackNoReturn() {
@@ -1584,7 +1591,7 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
return null;
}
- // update nic ipaddress
+ s_logger.debug("Updating IPv4 address of NIC " + nicVO + " to " +
ipaddr + "/" + nicVO.getIPv4Netmask() + " with gateway " +
nicVO.getIPv4Gateway());
nicVO.setIPv4Address(ipaddr);
_nicDao.persist(nicVO);
diff --git a/server/test/com/cloud/vm/UserVmManagerTest.java
b/server/test/com/cloud/vm/UserVmManagerTest.java
index 89555a2..c61d5cd 100644
--- a/server/test/com/cloud/vm/UserVmManagerTest.java
+++ b/server/test/com/cloud/vm/UserVmManagerTest.java
@@ -42,6 +42,9 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import com.cloud.dc.VlanVO;
+import com.cloud.dc.dao.VlanDao;
+import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.element.UserDataServiceProvider;
import com.cloud.storage.Storage;
import com.cloud.user.User;
@@ -195,6 +198,8 @@ public class UserVmManagerTest {
@Mock
NicDao _nicDao;
@Mock
+ VlanDao _vlanDao;
+ @Mock
NicVO _nicMock;
@Mock
NetworkModel _networkModel;
@@ -243,6 +248,7 @@ public class UserVmManagerTest {
_userVmMgr._vmSnapshotDao = _vmSnapshotDao;
_userVmMgr._configDao = _configDao;
_userVmMgr._nicDao = _nicDao;
+ _userVmMgr._vlanDao = _vlanDao;
_userVmMgr._networkModel = _networkModel;
_userVmMgr._networkDao = _networkDao;
_userVmMgr._dcDao = _dcDao;
@@ -843,9 +849,18 @@ public class UserVmManagerTest {
when(_dcDao.findById(anyLong())).thenReturn(_dcMock);
when(_dcMock.getNetworkType()).thenReturn(NetworkType.Advanced);
+ IPAddressVO newIp = mock(IPAddressVO.class);
+ when(newIp.getVlanId()).thenReturn(1L);
+
+ VlanVO vlan = mock(VlanVO.class);
+ when(vlan.getVlanGateway()).thenReturn("10.10.10.1");
+ when(vlan.getVlanNetmask()).thenReturn("255.255.255.0");
+
when(_ipAddrMgr.allocatePublicIpForGuestNic(Mockito.eq(_networkMock),
anyLong(), Mockito.eq(_accountMock), anyString())).thenReturn("10.10.10.10");
when(_ipAddressDao.findByIpAndSourceNetworkId(anyLong(),
anyString())).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());
UserVO user = new UserVO(1, "testuser", "password", "firstname",
"lastName", "email", "timezone", UUID.randomUUID().toString(),
User.Source.UNKNOWN);
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].