mirror of https://github.com/apache/cloudstack.git
VPC: CS-15925 - when vpc provider is speficied for a new network offering, no other providers can be used
Conflicts: server/src/com/cloud/network/NetworkManagerImpl.java server/src/com/cloud/network/vpc/VpcManagerImpl.java server/test/com/cloud/network/MockNetworkManagerImpl.java
This commit is contained in:
parent
dabb827922
commit
71ead9ef4e
|
|
@ -120,6 +120,7 @@ import com.cloud.network.dao.NetworkDao;
|
|||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
|
||||
import com.cloud.network.vpc.VpcManager;
|
||||
import com.cloud.offering.DiskOffering;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offering.NetworkOffering.Availability;
|
||||
|
|
@ -230,6 +231,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
NicDao _nicDao;
|
||||
@Inject
|
||||
FirewallRulesDao _firewallDao;
|
||||
@Inject
|
||||
VpcManager _vpcMgr;
|
||||
|
||||
// FIXME - why don't we have interface for DataCenterLinkLocalIpAddressDao?
|
||||
protected static final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class);
|
||||
|
|
@ -3247,11 +3250,21 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
for (Network.Service service : serviceProviderMap.keySet()) {
|
||||
Set<Provider> providers = serviceProviderMap.get(service);
|
||||
if (providers != null && !providers.isEmpty()) {
|
||||
boolean vpcOff = false;
|
||||
for (Network.Provider provider : providers) {
|
||||
if (provider == Provider.VPCVirtualRouter) {
|
||||
vpcOff = true;
|
||||
}
|
||||
NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, provider);
|
||||
_ntwkOffServiceMapDao.persist(offService);
|
||||
s_logger.trace("Added service for the network offering: " + offService + " with provider " + provider.getName());
|
||||
}
|
||||
|
||||
if (vpcOff) {
|
||||
List<Service> supportedSvcs = new ArrayList<Service>();
|
||||
supportedSvcs.addAll(serviceProviderMap.keySet());
|
||||
_vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
|
||||
}
|
||||
} else {
|
||||
NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, null);
|
||||
_ntwkOffServiceMapDao.persist(offService);
|
||||
|
|
|
|||
|
|
@ -331,10 +331,10 @@ public interface NetworkManager extends NetworkService {
|
|||
|
||||
|
||||
/**
|
||||
* @param networkId
|
||||
* @param ntwkOffId
|
||||
* @return
|
||||
*/
|
||||
List<Provider> getNtwkOffDistinctProviders(long networkId);
|
||||
List<Provider> getNtwkOffDistinctProviders(long ntwkOffId);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7126,8 +7126,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Provider> getNtwkOffDistinctProviders(long networkId) {
|
||||
List<String> providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(networkId);
|
||||
public List<Provider> getNtwkOffDistinctProviders(long ntkwOffId) {
|
||||
List<String> providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId);
|
||||
List<Provider> providers = new ArrayList<Provider>();
|
||||
for (String providerName : providerNames) {
|
||||
providers.add(Network.Provider.getProvider(providerName));
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ import com.cloud.exception.ResourceAllocationException;
|
|||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.IpAddress;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.Network.Service;
|
||||
import com.cloud.network.PhysicalNetwork;
|
||||
import com.cloud.network.addr.PublicIp;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
|
||||
|
|
@ -127,4 +129,11 @@ public interface VpcManager extends VpcService{
|
|||
*/
|
||||
PublicIp assignSourceNatIpAddressToVpc(Account owner, Vpc vpc) throws InsufficientAddressCapacityException, ConcurrentOperationException;
|
||||
|
||||
|
||||
/**
|
||||
* @param guestNtwkOff
|
||||
* @param supportedSvcs TODO
|
||||
*/
|
||||
void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List<Service> supportedSvcs);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -961,27 +961,12 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
//1) Validate attributes that has to be passed in when create new guest network
|
||||
validateNewVpcGuestNetwork(cidr, gateway, networkOwner, vpc, networkDomain);
|
||||
}
|
||||
|
||||
//2) Only Isolated networks with Source nat service enabled can be added to vpc
|
||||
if (!(guestNtwkOff.getGuestType() == GuestType.Isolated
|
||||
&& _ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.SourceNat))) {
|
||||
|
||||
throw new InvalidParameterValueException("Only networks of type " + GuestType.Isolated + " with service "
|
||||
+ Service.SourceNat + " can be added as a part of VPC");
|
||||
|
||||
}
|
||||
|
||||
//3) No redundant router support
|
||||
if (guestNtwkOff.getRedundantRouter()) {
|
||||
throw new InvalidParameterValueException("No redunant router support when network belnogs to VPC");
|
||||
}
|
||||
|
||||
//4) Conserve mode should be off
|
||||
if (guestNtwkOff.isConserveMode()) {
|
||||
throw new InvalidParameterValueException("Only networks with conserve mode Off can belong to VPC");
|
||||
}
|
||||
|
||||
//5) Check services/providers against VPC providers
|
||||
//2) validate network offering attributes
|
||||
List<Service> svcs = _ntwkMgr.listNetworkOfferingServices(guestNtwkOff.getId());
|
||||
validateNtwkOffForVpc(guestNtwkOff, svcs);
|
||||
|
||||
//3) Check services/providers against VPC providers
|
||||
List<NetworkOfferingServiceMapVO> networkProviders = _ntwkOffServiceDao.listByNetworkOfferingId(guestNtwkOff.getId());
|
||||
|
||||
for (NetworkOfferingServiceMapVO nSvcVO : networkProviders) {
|
||||
|
|
@ -992,8 +977,8 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
pr + " is not supported by VPC " + vpc);
|
||||
}
|
||||
}
|
||||
|
||||
//6) Only one network in the VPC can support LB
|
||||
|
||||
//4) Only one network in the VPC can support LB
|
||||
if (_ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) {
|
||||
List<? extends Network> networks = getVpcNetworks(vpc.getId());
|
||||
for (Network network : networks) {
|
||||
|
|
@ -1010,6 +995,37 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List<Service> supportedSvcs) {
|
||||
//1) in current release, only vpc provider is supported by Vpc offering
|
||||
List<Provider> providers = _ntwkMgr.getNtwkOffDistinctProviders(guestNtwkOff.getId());
|
||||
for (Provider provider : providers) {
|
||||
if (provider != Provider.VPCVirtualRouter) {
|
||||
throw new InvalidParameterValueException("Only provider of type " + Provider.VPCVirtualRouter.getName()
|
||||
+ " is supported for network offering that can be used in VPC");
|
||||
}
|
||||
}
|
||||
|
||||
//2) Only Isolated networks with Source nat service enabled can be added to vpc
|
||||
if (!(guestNtwkOff.getGuestType() == GuestType.Isolated
|
||||
&& supportedSvcs.contains(Service.SourceNat))) {
|
||||
|
||||
throw new InvalidParameterValueException("Only network offerings of type " + GuestType.Isolated + " with service "
|
||||
+ Service.SourceNat.getName() +
|
||||
" are valid for vpc ");
|
||||
}
|
||||
|
||||
//3) No redundant router support
|
||||
if (guestNtwkOff.getRedundantRouter()) {
|
||||
throw new InvalidParameterValueException("No redunant router support when network belnogs to VPC");
|
||||
}
|
||||
|
||||
//4) Conserve mode should be off
|
||||
if (guestNtwkOff.isConserveMode()) {
|
||||
throw new InvalidParameterValueException("Only networks with conserve mode Off can belong to VPC");
|
||||
}
|
||||
}
|
||||
|
||||
@DB
|
||||
protected void validateNewVpcGuestNetwork(String cidr, String gateway, Account networkOwner, Vpc vpc, String networkDomain) {
|
||||
|
||||
|
|
|
|||
|
|
@ -764,14 +764,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
|
|||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long)
|
||||
*/
|
||||
@Override
|
||||
public List<Provider> getNtwkOffDistinctProviders(long networkId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile)
|
||||
|
|
@ -888,7 +880,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
|
|||
* @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public Provider getDefaultUniqueProviderForService(String serviceName) {
|
||||
public List<Provider> getNtwkOffDistinctProviders(long ntwkOffId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
|
@ -1136,4 +1128,13 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
|
|||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public Provider getDefaultUniqueProviderForService(String serviceName) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1294,7 +1294,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{
|
|||
* @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long)
|
||||
*/
|
||||
@Override
|
||||
public List<Provider> getNtwkOffDistinctProviders(long networkId) {
|
||||
public List<Provider> getNtwkOffDistinctProviders(long ntwkOffId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue