mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-573: check if external provider enabled, only when finalize the service/provider list for the network
This commit is contained in:
parent
1aa4ad6a3c
commit
7857b1f62a
@ -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;
|
||||||
@ -1672,7 +1673,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
NetworkVO vo = new NetworkVO(id, network, offering.getId(), guru.getName(), owner.getDomainId(), owner.getId(),
|
NetworkVO vo = new NetworkVO(id, network, offering.getId(), guru.getName(), owner.getDomainId(), owner.getId(),
|
||||||
related, name, displayText, predefined.getNetworkDomain(), offering.getGuestType(),
|
related, name, displayText, predefined.getNetworkDomain(), offering.getGuestType(),
|
||||||
plan.getDataCenterId(), plan.getPhysicalNetworkId(), aclType, offering.getSpecifyIpRanges(), vpcId);
|
plan.getDataCenterId(), plan.getPhysicalNetworkId(), aclType, offering.getSpecifyIpRanges(), vpcId);
|
||||||
networks.add(_networksDao.persist(vo, vo.getGuestType() == Network.GuestType.Isolated,
|
networks.add(_networksDao.persist(vo, vo.getGuestType() == Network.GuestType.Isolated,
|
||||||
finalizeServicesAndProvidersForNetwork(offering, plan.getPhysicalNetworkId())));
|
finalizeServicesAndProvidersForNetwork(offering, plan.getPhysicalNetworkId())));
|
||||||
|
|
||||||
if (domainId != null && aclType == ACLType.Domain) {
|
if (domainId != null && aclType == ACLType.Domain) {
|
||||||
@ -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
|
||||||
@ -4366,17 +4369,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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!");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -304,7 +304,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
|
|||||||
Map<Capability, String> networkACLCapabilities = new HashMap<Capability, String>();
|
Map<Capability, String> networkACLCapabilities = new HashMap<Capability, String>();
|
||||||
networkACLCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
|
networkACLCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
|
||||||
capabilities.put(Service.NetworkACL, networkACLCapabilities);
|
capabilities.put(Service.NetworkACL, networkACLCapabilities);
|
||||||
|
|
||||||
return capabilities;
|
return capabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user