From 0575b83ec0e1ac3f03fb95a2f35b493a53a81565 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 16 Jul 2012 11:00:06 -0700 Subject: [PATCH] VPC: CS-15598 - update ipVO object after getting system ip as a part of elastic LB --- .../com/cloud/network/NetworkManagerImpl.java | 3 +- .../lb/LoadBalancingRulesManagerImpl.java | 51 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 72d120b3b50..4e39640e8a6 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -7197,7 +7197,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } if (network.getVpcId() != null) { - throw new InvalidParameterValueException("Specify vpcId to associate ip address to VPC", null); + throw new InvalidParameterValueException("Can't assign ip to the network directly when network belongs" + + " to VPC.Specify vpcId to associate ip address to VPC", null); } return associateIPToGuestNetwork(ipId, networkId); } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index c87bf5b5f6e..e75cd0c01be 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -728,44 +728,43 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa IPAddressVO ipVO = null; if (ipAddrId != null) { ipVO = _ipAddressDao.findById(ipAddrId); - - // Validate ip address - if (ipVO == null) { - throw new InvalidParameterValueException("Unable to create load balance rule; source ip doesn't exist in the system", null); - } else if (ipVO.isOneToOneNat()) { - throw new NetworkRuleConflictException("Can't do load balance on ip address: " + ipVO.getAddress()); - } } + + Network network = _networkMgr.getNetwork(lb.getNetworkId()); LoadBalancer result = _elbMgr.handleCreateLoadBalancerRule(lb, lbOwner, lb.getNetworkId()); boolean performedIpAssoc = false; if (result == null) { IpAddress systemIp = null; - Network guestNetwork = _networkMgr.getNetwork(lb.getNetworkId()); - NetworkOffering off = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - if (off.getElasticLb() && ipVO == null) { + NetworkOffering off = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + if (off.getElasticLb() && ipVO == null && network.getVpcId() == null) { systemIp = _networkMgr.assignSystemIp(lb.getNetworkId(), lbOwner, true, false); lb.setSourceIpAddressId(systemIp.getId()); + ipVO = _ipAddressDao.findById(systemIp.getId()); + } + + // Validate ip address + if (ipVO == null) { + throw new InvalidParameterValueException("Unable to create load balance rule; can't find/allocate source IP", null); + } else if (ipVO.isOneToOneNat()) { + throw new NetworkRuleConflictException("Can't do load balance on ip address: " + ipVO.getAddress()); } try { - Network network = _networkMgr.getNetwork(lb.getNetworkId()); - if (ipVO != null) { - if (ipVO.getAssociatedWithNetworkId() == null) { - boolean assignToVpcNtwk = network.getVpcId() != null - && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); - if (assignToVpcNtwk) { - //set networkId just for verification purposes - ipVO.setAssociatedWithNetworkId(lb.getNetworkId()); - _networkMgr.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); + if (ipVO.getAssociatedWithNetworkId() == null) { + boolean assignToVpcNtwk = network.getVpcId() != null + && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); + if (assignToVpcNtwk) { + //set networkId just for verification purposes + ipVO.setAssociatedWithNetworkId(lb.getNetworkId()); + _networkMgr.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); - s_logger.debug("The ip is not associated with the VPC network id="+ lb.getNetworkId() + " so assigning"); - ipVO = _networkMgr.associateIPToGuestNetwork(ipAddrId, lb.getNetworkId()); - performedIpAssoc = true; - } - } else { - _networkMgr.checkIpForService(ipVO, Service.Lb, null); - } + s_logger.debug("The ip is not associated with the VPC network id="+ lb.getNetworkId() + " so assigning"); + ipVO = _networkMgr.associateIPToGuestNetwork(ipAddrId, lb.getNetworkId()); + performedIpAssoc = true; + } + } else { + _networkMgr.checkIpForService(ipVO, Service.Lb, null); } if (ipVO.getAssociatedWithNetworkId() == null) {