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

harikrishna pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 23a53e213eb Add LB service to Custom Netris VPC/Network offerings 
(#11410)
23a53e213eb is described below

commit 23a53e213ebc5d401a0c7a914ad6680a7984524d
Author: Pearl Dsilva <[email protected]>
AuthorDate: Tue Sep 16 00:10:33 2025 -0400

    Add LB service to Custom Netris VPC/Network offerings (#11410)
    
    * Add LB service to Custom VPC/Network offerings
    
    * fix offering
    
    * externalize common checks to a utility file
    
    * remove trailing spaces
---
 .../admin/network/CreateNetworkOfferingCmd.java    |  8 +++--
 .../command/admin/vpc/CreateVPCOfferingCmd.java    |  8 +++--
 .../api/command/utils/OfferingUtils.java           | 38 ++++++++++++++++++++++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
index 51ba6ec02ea..56333f4081b 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
@@ -61,6 +61,10 @@ import static com.cloud.network.Network.Service.NetworkACL;
 import static com.cloud.network.Network.Service.UserData;
 import static com.cloud.network.Network.Service.Firewall;
 
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNetrisNatted;
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNetrisRouted;
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNsxWithoutLb;
+
 @APICommand(name = "createNetworkOffering", description = "Creates a network 
offering.", responseObject = NetworkOfferingResponse.class, since = "3.0.0",
         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class CreateNetworkOfferingCmd extends BaseCmd {
@@ -297,7 +301,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
                         SourceNat.getName(),
                         PortForwarding.getName()));
             }
-            if (getNsxSupportsLbService()) {
+            if (getNsxSupportsLbService() || (provider != null && 
isNetrisNatted(getProvider(), getNetworkMode()))) {
                 services.add(Lb.getName());
             }
             if (Boolean.TRUE.equals(forVpc)) {
@@ -410,7 +414,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
             else if 
(NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode()) 
|| NetworkACL.getName().equalsIgnoreCase(service)) {
                     serviceProviderMap.put(service, List.of(provider));
                 }
-            if (!getNsxSupportsLbService()) {
+            if (isNsxWithoutLb(getProvider(), getNsxSupportsLbService()) || 
isNetrisRouted(getProvider(), getNetworkMode())) {
                 serviceProviderMap.remove(Lb.getName());
             }
         }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
index 84f4d451460..9ed7ced528e 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java
@@ -62,6 +62,10 @@ import static com.cloud.network.Network.Service.NetworkACL;
 import static com.cloud.network.Network.Service.UserData;
 import static com.cloud.network.Network.Service.Gateway;
 
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNetrisNatted;
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNetrisRouted;
+import static 
org.apache.cloudstack.api.command.utils.OfferingUtils.isNsxWithoutLb;
+
 @APICommand(name = "createVPCOffering", description = "Creates VPC offering", 
responseObject = VpcOfferingResponse.class,
         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
 public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd {
@@ -194,7 +198,7 @@ public class CreateVPCOfferingCmd extends 
BaseAsyncCreateCmd {
             if 
(NetworkOffering.NetworkMode.ROUTED.name().equalsIgnoreCase(getNetworkMode())) {
                 supportedServices.add(Gateway.getName());
             }
-            if (getNsxSupportsLbService()) {
+            if (getNsxSupportsLbService() || isNetrisNatted(getProvider(), 
getNetworkMode())) {
                 supportedServices.add(Lb.getName());
             }
         }
@@ -259,7 +263,7 @@ public class CreateVPCOfferingCmd extends 
BaseAsyncCreateCmd {
                 serviceProviderMap.put(service, List.of(provider));
             }
         }
-        if (!getNsxSupportsLbService()) {
+        if ((isNsxWithoutLb(getProvider(), getNsxSupportsLbService())) || 
isNetrisRouted(getProvider(), getNetworkMode())) {
             serviceProviderMap.remove(Lb.getName());
         }
     }
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/utils/OfferingUtils.java 
b/api/src/main/java/org/apache/cloudstack/api/command/utils/OfferingUtils.java
new file mode 100644
index 00000000000..433a37c07cd
--- /dev/null
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/utils/OfferingUtils.java
@@ -0,0 +1,38 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.utils;
+
+import com.cloud.offering.NetworkOffering;
+
+public class OfferingUtils {
+
+    private OfferingUtils() {
+    }
+
+    public static boolean isNetrisNatted(String provider, String networkMode) {
+        return "Netris".equalsIgnoreCase(provider) &&
+               
NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(networkMode);
+    }
+
+    public static boolean isNsxWithoutLb(String provider, boolean 
nsxSupportsLbService) {
+        return "Nsx".equalsIgnoreCase(provider) && !nsxSupportsLbService;
+    }
+
+    public static boolean isNetrisRouted(String provider, String networkMode) {
+        return "Netris".equalsIgnoreCase(provider) && 
NetworkOffering.NetworkMode.ROUTED.name().equalsIgnoreCase(networkMode);
+    }
+}

Reply via email to