This is an automated email from the ASF dual-hosted git repository.

pearl11594 pushed a commit to branch netris-update-vpc-and-tier-names
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 48481945d1f02d27d765bf9ed1ecd91befa98c07
Author: Nicolas Vazquez <nicovazque...@gmail.com>
AuthorDate: Tue Feb 4 00:16:31 2025 -0300

    Add global routing flag on subnet creation (#45)
---
 .../main/java/com/cloud/network/netris/NetrisService.java  |  2 +-
 .../cloudstack/agent/api/CreateNetrisVnetCommand.java      |  9 +++++++++
 .../org/apache/cloudstack/service/NetrisApiClientImpl.java | 14 +++++++++-----
 .../apache/cloudstack/service/NetrisGuestNetworkGuru.java  | 11 ++++++++---
 .../org/apache/cloudstack/service/NetrisServiceImpl.java   |  3 ++-
 .../apache/cloudstack/service/NetrisServiceMockTest.java   |  2 +-
 6 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/api/src/main/java/com/cloud/network/netris/NetrisService.java 
b/api/src/main/java/com/cloud/network/netris/NetrisService.java
index 750a82ffe70..76a239422e0 100644
--- a/api/src/main/java/com/cloud/network/netris/NetrisService.java
+++ b/api/src/main/java/com/cloud/network/netris/NetrisService.java
@@ -30,7 +30,7 @@ public interface NetrisService {
 
     boolean deleteVpcResource(long zoneId, long accountId, long domainId, Vpc 
vpc);
 
-    boolean createVnetResource(Long zoneId, long accountId, long domainId, 
String vpcName, Long vpcId, String networkName, Long networkId, String cidr);
+    boolean createVnetResource(Long zoneId, long accountId, long domainId, 
String vpcName, Long vpcId, String networkName, Long networkId, String cidr, 
Boolean globalRouting);
 
     boolean deleteVnetResource(long zoneId, long accountId, long domainId, 
String vpcName, Long vpcId, String networkName, Long networkId, String cidr);
 
diff --git 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/CreateNetrisVnetCommand.java
 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/CreateNetrisVnetCommand.java
index 7095c4549b1..e6de0244e48 100644
--- 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/CreateNetrisVnetCommand.java
+++ 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/CreateNetrisVnetCommand.java
@@ -24,6 +24,7 @@ public class CreateNetrisVnetCommand extends NetrisCommand {
     private String gateway;
     private String netrisTag;
     private String ipv6Cidr;
+    private Boolean globalRouting;
 
     public CreateNetrisVnetCommand(Long zoneId, Long accountId, Long domainId, 
String vpcName, Long vpcId, String vNetName, Long networkId, String cidr, 
String gateway, boolean isVpc) {
         super(zoneId, accountId, domainId, vNetName, networkId, isVpc);
@@ -73,4 +74,12 @@ public class CreateNetrisVnetCommand extends NetrisCommand {
     public void setIpv6Cidr(String ipv6Cidr) {
         this.ipv6Cidr = ipv6Cidr;
     }
+
+    public Boolean isGlobalRouting() {
+        return globalRouting;
+    }
+
+    public void setGlobalRouting(Boolean globalRouting) {
+        this.globalRouting = globalRouting;
+    }
 }
diff --git 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java
 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java
index 77d5aa40591..681924d82d8 100644
--- 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java
+++ 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java
@@ -716,6 +716,7 @@ public class NetrisApiClientImpl implements NetrisApiClient 
{
         String netrisGateway = cmd.getGateway() + "/" + netmask;
         String netrisV6Cidr = cmd.getIpv6Cidr();
         boolean isVpc = cmd.isVpc();
+        Boolean isGlobalRouting = cmd.isGlobalRouting();
 
         String netrisVpcName = getNetrisVpcName(cmd, vpcId, vpcName);
         VPCListing associatedVpc = getNetrisVpcResource(netrisVpcName);
@@ -733,7 +734,7 @@ public class NetrisApiClientImpl implements NetrisApiClient 
{
         String netrisVnetName = 
NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, 
NetrisResourceObjectUtils.NetrisObjectType.VNET, vNetName) ;
         String netrisSubnetName = 
NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, 
NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, vnetCidr) ;
 
-        createIpamSubnetInternal(netrisSubnetName, vnetCidr, 
SubnetBody.PurposeEnum.COMMON, associatedVpc);
+        createIpamSubnetInternal(netrisSubnetName, vnetCidr, 
SubnetBody.PurposeEnum.COMMON, associatedVpc, isGlobalRouting);
         if (Objects.nonNull(netrisV6Cidr)) {
             String netrisV6IpamAllocationName = 
NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, 
NetrisResourceObjectUtils.NetrisObjectType.IPAM_ALLOCATION, netrisV6Cidr);
             String netrisV6SubnetName = 
NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, 
NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, netrisV6Cidr) ;
@@ -741,7 +742,7 @@ public class NetrisApiClientImpl implements NetrisApiClient 
{
             if (Objects.isNull(createdIpamAllocation)) {
                 throw new CloudRuntimeException(String.format("Failed to 
create Netris IPAM Allocation %s for VPC %s", netrisV6IpamAllocationName, 
netrisVpcName));
             }
-            createIpamSubnetInternal(netrisV6SubnetName, netrisV6Cidr, 
SubnetBody.PurposeEnum.COMMON, associatedVpc);
+            createIpamSubnetInternal(netrisV6SubnetName, netrisV6Cidr, 
SubnetBody.PurposeEnum.COMMON, associatedVpc, isGlobalRouting);
         }
         logger.debug("Successfully created IPAM Subnet {} for network {} on 
Netris", netrisSubnetName, networkName);
 
@@ -851,7 +852,7 @@ public class NetrisApiClientImpl implements NetrisApiClient 
{
             IpTreeSubnet exactSubnet = 
getIpamSubnetByAllocationAndPrefixAndPurposeAndVpc(ipamAllocationId, exactCidr, 
IpTreeSubnet.PurposeEnum.COMMON, systemVpc);
             if (exactSubnet == null) {
                 String ipamSubnetName = 
NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, 
NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, exactCidr);
-                createIpamSubnetInternal(ipamSubnetName, exactCidr, 
SubnetBody.PurposeEnum.COMMON, systemVpc);
+                createIpamSubnetInternal(ipamSubnetName, exactCidr, 
SubnetBody.PurposeEnum.COMMON, systemVpc, null);
             }
         } catch (ApiException e) {
             String msg = String.format("Error setting up the Netris Public 
Range %s on super CIDR %s", exactCidr, superCidr);
@@ -1000,7 +1001,7 @@ public class NetrisApiClientImpl implements 
NetrisApiClient {
             List<IpTreeSubnet> matchedSubnets = getSubnet(vpcFilter, 
netrisSubnetName);
             if (matchedSubnets.isEmpty()) {
                 VPCListing systemVpc = getSystemVpc();
-                createIpamSubnetInternal(natIp, natIp, 
SubnetBody.PurposeEnum.NAT, systemVpc);
+                createIpamSubnetInternal(natIp, natIp, 
SubnetBody.PurposeEnum.NAT, systemVpc, null);
                 return;
             }
             logger.debug("NAT subnet: {} already exists", natIp);
@@ -1191,7 +1192,7 @@ public class NetrisApiClientImpl implements 
NetrisApiClient {
         }
     }
 
-    private InlineResponse2004Data createIpamSubnetInternal(String subnetName, 
String subnetPrefix, SubnetBody.PurposeEnum purpose, VPCListing vpc) {
+    private InlineResponse2004Data createIpamSubnetInternal(String subnetName, 
String subnetPrefix, SubnetBody.PurposeEnum purpose, VPCListing vpc, Boolean 
isGlobalRouting) {
         logger.debug("Creating Netris IPAM Subnet {} for VPC {}", 
subnetPrefix, vpc.getName());
         try {
 
@@ -1215,6 +1216,9 @@ public class NetrisApiClientImpl implements 
NetrisApiClient {
 
             subnetBody.setPurpose(purpose);
             subnetBody.setPrefix(subnetPrefix);
+            if (isGlobalRouting != null) {
+                subnetBody.setGlobalRouting(isGlobalRouting);
+            }
             IpamApi ipamApi = apiClient.getApiStubForMethod(IpamApi.class);
             InlineResponse2004 subnetResponse = 
ipamApi.apiV2IpamSubnetPost(subnetBody);
             if (subnetResponse == null || !subnetResponse.isIsSuccess()) {
diff --git 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java
 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java
index 3bd508b52e3..e1f05c2a905 100644
--- 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java
+++ 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java
@@ -286,6 +286,12 @@ public class NetrisGuestNetworkGuru  extends 
GuestNetworkGuru implements Network
         }
         String vpcName = null;
         Long vpcId = null;
+        Boolean globalRouting = null;
+        long networkOfferingId = networkVO.getNetworkOfferingId();
+        NetworkOfferingVO networkOfferingVO = 
networkOfferingDao.findById(networkOfferingId);
+        if 
(NetworkOffering.NetworkMode.ROUTED.equals(networkOfferingVO.getNetworkMode())) 
{
+            globalRouting = true;
+        }
         if (nonNull(networkVO.getVpcId())) {
             VpcVO vpc = _vpcDao.findById(networkVO.getVpcId());
             if (isNull(vpc)) {
@@ -295,8 +301,6 @@ public class NetrisGuestNetworkGuru  extends 
GuestNetworkGuru implements Network
             vpcId = vpc.getId();
         } else {
             logger.debug(String.format("Creating IPAM Allocation before 
creating IPAM Subnet", networkVO.getName()));
-            long networkOfferingId = networkVO.getNetworkOfferingId();
-            NetworkOfferingVO networkOfferingVO = 
networkOfferingDao.findById(networkOfferingId);
             boolean isSourceNatSupported = 
!NetworkOffering.NetworkMode.ROUTED.equals(networkOfferingVO.getNetworkMode()) 
&&
                     
networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(networkVO.getNetworkOfferingId(),
 Network.Service.SourceNat);
             boolean result = netrisService.createVpcResource(zone.getId(), 
networkVO.getAccountId(), networkVO.getDomainId(),
@@ -307,7 +311,8 @@ public class NetrisGuestNetworkGuru  extends 
GuestNetworkGuru implements Network
                 throw new CloudRuntimeException(msg);
             }
         }
-        boolean result = netrisService.createVnetResource(zone.getId(), 
account.getId(), domain.getId(), vpcName, vpcId, networkVO.getName(), 
networkVO.getId(), networkVO.getCidr());
+        boolean result = netrisService.createVnetResource(zone.getId(), 
account.getId(), domain.getId(), vpcName, vpcId,
+                networkVO.getName(), networkVO.getId(), networkVO.getCidr(), 
globalRouting);
         if (!result) {
             throw new CloudRuntimeException("Failed to create Netris vNet 
resource for network: " + networkVO.getName());
         }
diff --git 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java
 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java
index a615090c429..9a4f5d972ab 100644
--- 
a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java
+++ 
b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java
@@ -204,13 +204,14 @@ public class NetrisServiceImpl implements NetrisService, 
Configurable {
     }
 
     @Override
-    public boolean createVnetResource(Long zoneId, long accountId, long 
domainId, String vpcName, Long vpcId, String networkName, Long networkId, 
String cidr) {
+    public boolean createVnetResource(Long zoneId, long accountId, long 
domainId, String vpcName, Long vpcId, String networkName, Long networkId, 
String cidr, Boolean globalRouting) {
         NetworkVO network = networkDao.findById(networkId);
         String vxlanId = 
Networks.BroadcastDomainType.getValue(network.getBroadcastUri());
         CreateNetrisVnetCommand cmd = new CreateNetrisVnetCommand(zoneId, 
accountId, domainId, vpcName, vpcId, networkName, networkId, cidr, 
network.getGateway(), !Objects.isNull(vpcId));
         cmd.setVxlanId(Integer.parseInt(vxlanId));
         NetrisProviderVO netrisProvider = 
netrisProviderDao.findByZoneId(zoneId);
         cmd.setNetrisTag(netrisProvider.getNetrisTag());
+        cmd.setGlobalRouting(globalRouting);
         if (Objects.nonNull(networkId)) {
             Ipv6GuestPrefixSubnetNetworkMapVO ipv6PrefixNetworkMapVO = 
ipv6PrefixNetworkMapDao.findByNetworkId(networkId);
             if (Objects.nonNull(ipv6PrefixNetworkMapVO)) {
diff --git 
a/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java 
b/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java
index ff715db4027..b8e4835f589 100644
--- 
a/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java
+++ 
b/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java
@@ -42,7 +42,7 @@ public class NetrisServiceMockTest implements NetrisService {
     }
 
     @Override
-    public boolean createVnetResource(Long zoneId, long accountId, long 
domainId, String vpcName, Long vpcId, String networkName, Long networkId, 
String cidr) {
+    public boolean createVnetResource(Long zoneId, long accountId, long 
domainId, String vpcName, Long vpcId, String networkName, Long networkId, 
String cidr, Boolean globalRouting) {
         return true;
     }
 

Reply via email to