CLOUDSTACK-573: check if external provider enabled, only when finalize the service/provider list for the network

This commit is contained in:
Alena Prokharchyk 2012-11-30 13:03:05 -08:00
parent 1aa4ad6a3c
commit 7857b1f62a
3 changed files with 20 additions and 15 deletions

View File

@ -23,6 +23,7 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -2664,10 +2665,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
} }
} }
if (cidr != null && networkOfferingIsConfiguredForExternalNetworking(networkOfferingId)) { Collection<String> ntwkProviders = finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values();
if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) {
throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!");
} }
// Vlan is created in 2 cases - works in Advance zone only: // Vlan is created in 2 cases - works in Advance zone only:
// 1) GuestType is Shared // 1) GuestType is Shared
// 2) GuestType is Isolated, but SourceNat service is disabled // 2) GuestType is Isolated, but SourceNat service is disabled
@ -4367,16 +4370,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
} }
} }
public boolean networkOfferingIsConfiguredForExternalNetworking(long networkOfferingId) { public boolean providersConfiguredForExternalNetworking(Collection<String> providers) {
boolean netscalerInNetworkOffering = isProviderForNetworkOffering(Network.Provider.Netscaler, networkOfferingId); for(String providerStr : providers){
boolean juniperInNetworkOffering = isProviderForNetworkOffering(Network.Provider.JuniperSRX, networkOfferingId); Provider provider = Network.Provider.getProvider(providerStr);
boolean f5InNetworkOffering = isProviderForNetworkOffering(Network.Provider.F5BigIp, networkOfferingId); if(provider.isExternal()){
return true;
if (netscalerInNetworkOffering || juniperInNetworkOffering || f5InNetworkOffering) { }
return true;
} else {
return false;
} }
return false;
} }
@Override @Override
@ -4651,7 +4652,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
} }
if (networkOfferingId != oldNetworkOfferingId) { if (networkOfferingId != oldNetworkOfferingId) {
if (networkOfferingIsConfiguredForExternalNetworking(networkOfferingId) != networkOfferingIsConfiguredForExternalNetworking(oldNetworkOfferingId) NetworkOffering oldNtwkOff = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId);
Collection<String> newProviders = finalizeServicesAndProvidersForNetwork(networkOffering, network.getPhysicalNetworkId()).values();
Collection<String> oldProviders = finalizeServicesAndProvidersForNetwork(oldNtwkOff, network.getPhysicalNetworkId()).values();
if (providersConfiguredForExternalNetworking(newProviders) != providersConfiguredForExternalNetworking(oldProviders)
&& !changeCidr) { && !changeCidr) {
throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!"); throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!");
} }

View File

@ -2195,7 +2195,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
if (!(network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared)) { if (!(network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared)) {
throw new InvalidParameterValueException("Can specify only Shared Guest networks when" + throw new InvalidParameterValueException("Can specify only Shared Guest networks when" +
" deploy vm in Advance Security Group enabled zone", null); " deploy vm in Advance Security Group enabled zone");
} }
// Perform account permission check // Perform account permission check