mirror of https://github.com/apache/cloudstack.git
VPC: CS-15447 - fail vpc creation when vpc provider is not enabled at least in one physical network in the target zone
This commit is contained in:
parent
a39a08a40d
commit
2699e2c508
|
|
@ -2084,7 +2084,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
List<Provider> providersToImplement = getNetworkProviders(network.getId());
|
||||
for (NetworkElement element : _networkElements) {
|
||||
if (providersToImplement.contains(element.getProvider())) {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), "VirtualRouter")) {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) {
|
||||
// The physicalNetworkId will not get translated into a uuid by the reponse serializer,
|
||||
// because the serializer would look up the NetworkVO class's table and retrieve the
|
||||
// network id instead of the physical network id.
|
||||
|
|
@ -3521,7 +3521,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
for (NetworkElement element : _networkElements) {
|
||||
if (providersToShutdown.contains(element.getProvider())) {
|
||||
try {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), "VirtualRouter")) {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) {
|
||||
s_logger.warn("Unable to complete shutdown of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network "
|
||||
+ getPhysicalNetworkId(network));
|
||||
success = false;
|
||||
|
|
@ -3608,7 +3608,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
for (NetworkElement element : _networkElements) {
|
||||
if (providersToDestroy.contains(element.getProvider())) {
|
||||
try {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), "VirtualRouter")) {
|
||||
if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) {
|
||||
s_logger.warn("Unable to complete destroy of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network "
|
||||
+ getPhysicalNetworkId(network));
|
||||
success = false;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ import com.cloud.network.Networks.TrafficType;
|
|||
import com.cloud.network.PhysicalNetwork;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.element.VpcProvider;
|
||||
import com.cloud.network.vpc.VpcOffering.State;
|
||||
import com.cloud.network.vpc.Dao.PrivateIpDao;
|
||||
|
|
@ -132,6 +133,8 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
NetworkOfferingServiceMapDao _ntwkOffServiceDao ;
|
||||
@Inject
|
||||
VpcOfferingServiceMapDao _vpcOffServiceDao;
|
||||
@Inject
|
||||
PhysicalNetworkDao _pNtwkDao;
|
||||
|
||||
private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
|
||||
|
||||
|
|
@ -502,7 +505,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
if (networkDomain == null) {
|
||||
networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkMgr.getDefaultNetworkDomain();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return createVpc(zoneId, vpcOffId, owner, vpcName, displayText, cidr, networkDomain);
|
||||
}
|
||||
|
|
@ -511,6 +514,20 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
public Vpc createVpc(long zoneId, long vpcOffId, Account vpcOwner, String vpcName, String displayText, String cidr,
|
||||
String networkDomain) {
|
||||
|
||||
//the provider has to be enabled at least in one network in the zone
|
||||
boolean providerEnabled = false;
|
||||
for (PhysicalNetwork pNtwk : _pNtwkDao.listByZone(zoneId)) {
|
||||
if (_ntwkMgr.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), Provider.VPCVirtualRouter.getName())) {
|
||||
providerEnabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!providerEnabled) {
|
||||
throw new InvalidParameterValueException("Provider " + Provider.VPCVirtualRouter.getName() +
|
||||
" should be enabled in at least one physical network of the zone specified");
|
||||
}
|
||||
|
||||
//Validate CIDR
|
||||
if (!NetUtils.isValidCIDR(cidr)) {
|
||||
throw new InvalidParameterValueException("Invalid CIDR specified " + cidr);
|
||||
|
|
|
|||
Loading…
Reference in New Issue