mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-1242: Fix inline mode
Network refactor dropped many inline mode codes. I've added at least part of them back. Now I can create LB rule for inline mode.
This commit is contained in:
parent
06a733a89f
commit
2776ad14c8
|
|
@ -98,6 +98,7 @@ import com.cloud.network.dao.PhysicalNetworkVO;
|
|||
import com.cloud.network.dao.UserIpv6AddressDao;
|
||||
import com.cloud.network.element.DhcpServiceProvider;
|
||||
import com.cloud.network.element.IpDeployer;
|
||||
import com.cloud.network.element.IpDeployingRequester;
|
||||
import com.cloud.network.element.LoadBalancingServiceProvider;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
import com.cloud.network.element.StaticNatServiceProvider;
|
||||
|
|
@ -536,9 +537,11 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
|
|||
}
|
||||
IpDeployer deployer = null;
|
||||
NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName());
|
||||
if (element instanceof IpDeployer) {
|
||||
deployer = (IpDeployer) element;
|
||||
} else {
|
||||
if (!(element instanceof IpDeployingRequester)) {
|
||||
throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!");
|
||||
}
|
||||
deployer = ((IpDeployingRequester)element).getIpDeployer(network);
|
||||
if (deployer == null) {
|
||||
throw new CloudRuntimeException("Fail to get ip deployer for element: " + element);
|
||||
}
|
||||
Set<Service> services = new HashSet<Service>();
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
|
|||
import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
|
||||
import com.cloud.network.dao.PhysicalNetworkVO;
|
||||
import com.cloud.network.dao.UserIpv6AddressDao;
|
||||
import com.cloud.network.element.IpDeployer;
|
||||
import com.cloud.network.element.IpDeployingRequester;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
import com.cloud.network.element.UserDataServiceProvider;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
|
|
@ -390,9 +392,18 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
|
|||
throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!");
|
||||
}
|
||||
Provider newProvider = (Provider) newProviders.toArray()[0];
|
||||
if (!oldProvider.equals(newProvider)) {
|
||||
throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!");
|
||||
}
|
||||
Network network = _networksDao.findById(networkId);
|
||||
NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName());
|
||||
NetworkElement newElement = getElementImplementingProvider(newProvider.getName());
|
||||
if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) {
|
||||
IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network);
|
||||
IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network);
|
||||
if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) {
|
||||
throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!");
|
||||
}
|
||||
} else {
|
||||
throw new InvalidParameterException("Ip cannot be applied for new provider!");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -333,6 +333,18 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
|
|||
private boolean canIpsUseOffering(List<PublicIp> publicIps, long offeringId) {
|
||||
Map<PublicIp, Set<Service>> ipToServices = getIpToServices(publicIps, false, true);
|
||||
Map<Service, Set<Provider>> serviceToProviders = _networkModel.getNetworkOfferingServiceProvidersMap(offeringId);
|
||||
NetworkOfferingVO offering = _networkOfferingDao.findById(offeringId);
|
||||
//For inline mode checking, using firewall provider for LB instead, because public ip would apply on firewall provider
|
||||
if (offering.isInline()) {
|
||||
Provider firewallProvider = null;
|
||||
if (serviceToProviders.containsKey(Service.Firewall)) {
|
||||
firewallProvider = (Provider)serviceToProviders.get(Service.Firewall).toArray()[0];
|
||||
}
|
||||
Set<Provider> p = new HashSet<Provider>();
|
||||
p.add(firewallProvider);
|
||||
serviceToProviders.remove(Service.Lb);
|
||||
serviceToProviders.put(Service.Lb, p);
|
||||
}
|
||||
for (PublicIp ip : ipToServices.keySet()) {
|
||||
Set<Service> services = ipToServices.get(ip);
|
||||
Provider provider = null;
|
||||
|
|
|
|||
Loading…
Reference in New Issue