From 2117d6a3590291e237c3846332215d4afb63afa8 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 8 Mar 2019 12:22:19 +0000 Subject: [PATCH] server: update dhcp configurations in vrs while update default nic of running vms In virtual routers, there are different dnsmasq settings for default nic and non-default nic on vm. We need to update dhcp informations on network vrs when default nic is changed. For example, if 172.16.1.135 is non-default nic of vm VPC1-001-001, then root@r-22-VM:~# cat /etc/dhcphosts.txt 02:00:1d:15:00:05,set:172_16_1_135,172.16.1.135,VPC1-001-001,710h root@r-22-VM:~# cat /etc/dhcpopts.txt 172_16_1_135,3 172_16_1_135,6 172_16_1_135,15 If it is default nic,then root@r-22-VM:~# cat /etc/dhcpopts.txt root@r-22-VM:~# cat /etc/dhcphosts.txt 02:00:1d:15:00:05,172.16.1.135,VPC1-001-001,757h --- server/src/com/cloud/vm/UserVmManagerImpl.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 7ba282f4b184..8857fe91ee16 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1448,6 +1448,19 @@ public UserVm updateDefaultNicForVirtualMachine(UpdateDefaultNicForVMCmd cmd) th newNetworkOfferingId, null, 0L, VirtualMachine.class.getName(), vmInstance.getUuid(), vmInstance.isDisplay()); UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vmInstance.getAccountId(), vmInstance.getDataCenterId(), vmInstance.getId(), oldNicIdString, oldNetworkOfferingId, null, 0L, VirtualMachine.class.getName(), vmInstance.getUuid(), vmInstance.isDisplay()); + + if (vmInstance.getState() != State.Stopped) { + try { + VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vmInstance); + User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId()); + ReservationContext context = new ReservationContextImpl(null, null, callerUser, caller); + DeployDestination dest = new DeployDestination(dc, null, null, null); + _networkMgr.prepare(vmProfile, dest, context); + } catch (final Exception e) { + s_logger.info("Got exception: ", e); + } + } + return _vmDao.findById(vmInstance.getId()); }