This is an automated email from the ASF dual-hosted git repository.
pearl11594 pushed a commit to branch nsx-l2-shared-nw-unsupported
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/nsx-l2-shared-nw-unsupported
by this push:
new 7ef57c150ee add checks to backend to prevent creation of l2 and shared
networks in nsx zones and filter only nsx offerings when creating isolated
networks
7ef57c150ee is described below
commit 7ef57c150eec65b5570e7f45edd7a730bc67309b
Author: Pearl Dsilva <[email protected]>
AuthorDate: Mon Jan 8 09:03:07 2024 -0500
add checks to backend to prevent creation of l2 and shared networks in nsx
zones and filter only nsx offerings when creating isolated networks
---
.../main/java/com/cloud/network/NetworkServiceImpl.java | 15 +++++++++++++++
.../java/com/cloud/network/NetworkServiceImplTest.java | 4 ++++
ui/src/views/network/CreateIsolatedNetworkForm.vue | 3 +++
3 files changed, 22 insertions(+)
diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index 1b634d5b904..9bdb3305a9c 100644
--- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -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) {
diff --git a/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
b/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
index c993f7b7095..f2ab2a08ae7 100644
--- a/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
+++ b/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
@@ -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);
diff --git a/ui/src/views/network/CreateIsolatedNetworkForm.vue
b/ui/src/views/network/CreateIsolatedNetworkForm.vue
index 8336277a702..437630e10ea 100644
--- a/ui/src/views/network/CreateIsolatedNetworkForm.vue
+++ b/ui/src/views/network/CreateIsolatedNetworkForm.vue
@@ -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(() => {