Skip to content

Commit fefbc3c

Browse files
committed
Update apache#5757: create 3 separated methods for DNAT/LB/PF update
1 parent 1208fc1 commit fefbc3c

1 file changed

Lines changed: 44 additions & 29 deletions

File tree

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,36 +1751,12 @@ public UserVm updateNicIpForVirtualMachine(UpdateVmNicIpCmd cmd) {
17511751
throw new InvalidParameterValueException("Allocating ip to guest nic " + nicVO.getUuid() + " failed, please choose another ip");
17521752
}
17531753

1754-
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.StaticNat)) {
1755-
List<IPAddressVO> publicIps = _ipAddressDao.listByAssociatedVmId(vm.getId());
1756-
for (IPAddressVO publicIp : publicIps) {
1757-
if (nicVO.getIPv4Address().equals(publicIp.getVmIp() ) && publicIp.getAssociatedWithNetworkId() == network.getId()) {
1758-
publicIp.setVmIp(ipaddr);
1759-
_ipAddressDao.persist(publicIp);
1760-
}
1761-
}
1762-
}
1763-
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb)) {
1764-
List<LoadBalancerVMMapVO> loadBalancerVMMaps = _loadBalancerVMMapDao.listByInstanceId(vm.getId());
1765-
for (LoadBalancerVMMapVO map : loadBalancerVMMaps) {
1766-
long lbId = map.getLoadBalancerId();
1767-
FirewallRuleVO rule = _rulesDao.findById(lbId);
1768-
if (nicVO.getIPv4Address().equals(map.getInstanceIp()) && network.getId() == rule.getNetworkId()) {
1769-
map.setInstanceIp(ipaddr);
1770-
_loadBalancerVMMapDao.persist(map);
1771-
}
1772-
}
1773-
}
1774-
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.PortForwarding)) {
1775-
List<PortForwardingRuleVO> firewallRules = _portForwardingDao.listByVm(vm.getId());
1776-
for (PortForwardingRuleVO firewallRule : firewallRules) {
1777-
FirewallRuleVO rule = _rulesDao.findById(firewallRule.getId());
1778-
if (nicVO.getIPv4Address().equals(firewallRule.getDestinationIpAddress().toString()) && network.getId() == rule.getNetworkId()) {
1779-
firewallRule.setDestinationIpAddress(new Ip(ipaddr));
1780-
_portForwardingDao.persist(firewallRule);
1781-
}
1782-
}
1754+
if (nicVO.getIPv4Address() != null) {
1755+
updatePublicIpDnatVmIp(vm.getId(), network.getId(), nicVO.getIPv4Address(), ipaddr);
1756+
updateLoadBalancerRulesVmIp(vm.getId(), network.getId(), nicVO.getIPv4Address(), ipaddr);
1757+
updatePortForwardingRulesVmIp(vm.getId(), network.getId(), nicVO.getIPv4Address(), ipaddr);
17831758
}
1759+
17841760
} else if (dc.getNetworkType() == NetworkType.Basic || network.getGuestType() == Network.GuestType.Shared) {
17851761
//handle the basic networks here
17861762
//for basic zone, need to provide the podId to ensure proper ip alloation
@@ -1828,6 +1804,45 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
18281804
return vm;
18291805
}
18301806

1807+
private void updatePublicIpDnatVmIp(long vmId, long networkId, String oldIp, String newIp) {
1808+
if (_networkModel.areServicesSupportedInNetwork(networkId, Service.StaticNat)) {
1809+
List<IPAddressVO> publicIps = _ipAddressDao.listByAssociatedVmId(vmId);
1810+
for (IPAddressVO publicIp : publicIps) {
1811+
if (oldIp.equals(publicIp.getVmIp()) && publicIp.getAssociatedWithNetworkId() == networkId) {
1812+
publicIp.setVmIp(newIp);
1813+
_ipAddressDao.persist(publicIp);
1814+
}
1815+
}
1816+
}
1817+
}
1818+
1819+
private void updateLoadBalancerRulesVmIp(long vmId, long networkId, String oldIp, String newIp) {
1820+
if (_networkModel.areServicesSupportedInNetwork(networkId, Service.Lb)) {
1821+
List<LoadBalancerVMMapVO> loadBalancerVMMaps = _loadBalancerVMMapDao.listByInstanceId(vmId);
1822+
for (LoadBalancerVMMapVO map : loadBalancerVMMaps) {
1823+
long lbId = map.getLoadBalancerId();
1824+
FirewallRuleVO rule = _rulesDao.findById(lbId);
1825+
if (oldIp.equals(map.getInstanceIp()) && networkId == rule.getNetworkId()) {
1826+
map.setInstanceIp(newIp);
1827+
_loadBalancerVMMapDao.persist(map);
1828+
}
1829+
}
1830+
}
1831+
}
1832+
1833+
private void updatePortForwardingRulesVmIp(long vmId, long networkId, String oldIp, String newIp) {
1834+
if (_networkModel.areServicesSupportedInNetwork(networkId, Service.PortForwarding)) {
1835+
List<PortForwardingRuleVO> firewallRules = _portForwardingDao.listByVm(vmId);
1836+
for (PortForwardingRuleVO firewallRule : firewallRules) {
1837+
FirewallRuleVO rule = _rulesDao.findById(firewallRule.getId());
1838+
if (oldIp.equals(firewallRule.getDestinationIpAddress().toString()) && networkId == rule.getNetworkId()) {
1839+
firewallRule.setDestinationIpAddress(new Ip(newIp));
1840+
_portForwardingDao.persist(firewallRule);
1841+
}
1842+
}
1843+
}
1844+
}
1845+
18311846
@Override
18321847
@ActionEvent(eventType = EventTypes.EVENT_VM_UPGRADE, eventDescription = "Upgrading VM", async = true)
18331848
public UserVm upgradeVirtualMachine(ScaleVMCmd cmd) throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,

0 commit comments

Comments
 (0)