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 <pearl1...@gmail.com> 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(() => {