mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 11:52:28 +01:00
add checks to backend to prevent creation of l2 and shared networks in nsx zones and filter only nsx offerings when creating isolated networks
This commit is contained in:
parent
516fbf4710
commit
7ef57c150e
@ -34,6 +34,7 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
@ -43,7 +44,9 @@ import javax.naming.ConfigurationException;
|
||||
|
||||
import com.cloud.dc.VlanDetailsVO;
|
||||
import com.cloud.dc.dao.VlanDetailsDao;
|
||||
import com.cloud.network.dao.NsxProviderDao;
|
||||
import com.cloud.network.dao.PublicIpQuarantineDao;
|
||||
import com.cloud.network.element.NsxProviderVO;
|
||||
import com.cloud.offering.ServiceOffering;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
|
||||
@ -410,6 +413,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
ServiceOfferingDao serviceOfferingDao;
|
||||
@Inject
|
||||
PublicIpQuarantineDao publicIpQuarantineDao;
|
||||
@Inject
|
||||
NsxProviderDao nsxProviderDao;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("networkHelper")
|
||||
@ -1472,6 +1477,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
_accountMgr.checkAccess(owner, ntwkOff, zone);
|
||||
|
||||
validateZoneAvailability(caller, zone);
|
||||
validateNetworkCreationSupported(zone.getId(), zone.getName(), ntwkOff.getGuestType());
|
||||
|
||||
ACLType aclType = getAclType(caller, cmd.getAclType(), ntwkOff);
|
||||
|
||||
@ -1728,6 +1734,15 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
return network;
|
||||
}
|
||||
|
||||
private void validateNetworkCreationSupported(long zoneId, String zoneName, GuestType guestType) {
|
||||
NsxProviderVO nsxProviderVO = nsxProviderDao.findByZoneId(zoneId);
|
||||
if (Objects.nonNull(nsxProviderVO) && List.of(GuestType.L2, GuestType.Shared).contains(guestType)) {
|
||||
throw new InvalidParameterValueException(
|
||||
String.format("Creation of %s networks is not supported in NSX enabled zone %s", guestType.name(), zoneName)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void checkAndSetRouterSourceNatIp(Account owner, CreateNetworkCmd cmd, Network network) throws InsufficientAddressCapacityException, ResourceAllocationException {
|
||||
String sourceNatIp = cmd.getSourceNatIP();
|
||||
if (sourceNatIp == null) {
|
||||
|
||||
@ -40,6 +40,7 @@ import java.util.UUID;
|
||||
import com.cloud.domain.Domain;
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.domain.dao.DomainDao;
|
||||
import com.cloud.network.dao.NsxProviderDao;
|
||||
import com.cloud.network.dao.PublicIpQuarantineDao;
|
||||
import com.cloud.network.vo.PublicIpQuarantineVO;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
@ -212,6 +213,8 @@ public class NetworkServiceImplTest {
|
||||
|
||||
@Mock
|
||||
private Ip ipMock;
|
||||
@Mock
|
||||
private NsxProviderDao nsxProviderDao;
|
||||
|
||||
private static Date beforeDate;
|
||||
|
||||
@ -295,6 +298,7 @@ public class NetworkServiceImplTest {
|
||||
service.commandSetupHelper = commandSetupHelper;
|
||||
service.networkHelper = networkHelper;
|
||||
service._ipAddrMgr = ipAddressManagerMock;
|
||||
service.nsxProviderDao = nsxProviderDao;
|
||||
callContextMocked = Mockito.mockStatic(CallContext.class);
|
||||
CallContext callContextMock = Mockito.mock(CallContext.class);
|
||||
callContextMocked.when(CallContext::current).thenReturn(callContextMock);
|
||||
|
||||
@ -573,6 +573,9 @@ export default {
|
||||
this.selectedNetworkOffering = {}
|
||||
api('listNetworkOfferings', params).then(json => {
|
||||
this.networkOfferings = json.listnetworkofferingsresponse.networkoffering
|
||||
if (this.selectedZone.isnsxenabled) {
|
||||
this.networkOfferings = this.networkOfferings.filter(offering => offering.fornsx)
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
}).finally(() => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user