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

pearl11594 pushed a commit to branch nsx-integration
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/nsx-integration by this push:
     new 3179a3e574b add default VPC offering and update upgrade path
3179a3e574b is described below

commit 3179a3e574bde7654935b0a73efde24e9a2a3e2e
Author: Pearl Dsilva <[email protected]>
AuthorDate: Fri Aug 18 14:12:46 2023 -0400

    add default VPC offering and update upgrade path
---
 .../java/com/cloud/network/vpc/VpcOffering.java    |  1 +
 .../cloud/configuration/ConfigurationManager.java  | 30 +++-----
 .../engine/orchestration/NetworkOrchestrator.java  | 24 +++---
 .../resources/META-INF/db/schema-41810to41900.sql  | 88 +++++++++++++++++++++-
 .../contrail/management/ContrailManagerImpl.java   |  4 +-
 .../configuration/ConfigurationManagerImpl.java    | 15 ++--
 .../java/com/cloud/network/vpc/VpcManagerImpl.java | 19 ++++-
 .../com/cloud/server/ConfigurationServerImpl.java  |  2 +-
 .../cloud/vpc/MockConfigurationManagerImpl.java    |  2 +-
 .../networkoffering/CreateNetworkOfferingTest.java | 20 ++---
 10 files changed, 152 insertions(+), 53 deletions(-)

diff --git a/api/src/main/java/com/cloud/network/vpc/VpcOffering.java 
b/api/src/main/java/com/cloud/network/vpc/VpcOffering.java
index b4df8e38dba..0d6f958776b 100644
--- a/api/src/main/java/com/cloud/network/vpc/VpcOffering.java
+++ b/api/src/main/java/com/cloud/network/vpc/VpcOffering.java
@@ -29,6 +29,7 @@ public interface VpcOffering extends InternalIdentity, 
Identity {
     public static final String defaultVPCOfferingName = "Default VPC offering";
     public static final String defaultVPCNSOfferingName = "Default VPC  
offering with Netscaler";
     public static final String redundantVPCOfferingName = "Redundant VPC 
offering";
+    public static final String defaultVPCNSXSOfferingName = "VPC offering with 
NSX";
 
     /**
      *
diff --git 
a/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
 
b/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
index 5343fb632b5..40b0c1f61fb 100644
--- 
a/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
+++ 
b/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java
@@ -197,30 +197,24 @@ public interface ConfigurationManager {
 
     /**
      * Creates a new network offering
+     *
      * @param name
      * @param displayText
      * @param trafficType
      * @param tags
      * @param specifyVlan
-     * @param networkRate
-     *            TODO
-     * @param serviceProviderMap
-     *            TODO
-     * @param isDefault
-     *            TODO
-     * @param type
-     *            TODO
-     * @param systemOnly
-     *            TODO
+     * @param networkRate        TODO
+     * @param serviceProviderMap TODO
+     * @param isDefault          TODO
+     * @param type               TODO
+     * @param systemOnly         TODO
      * @param serviceOfferingId
-     * @param conserveMode
-     *            ;
-     * @param specifyIpRanges
-     *            TODO
-     * @param isPersistent
-     *            ;
-     * @param details TODO
+     * @param conserveMode       ;
+     * @param specifyIpRanges    TODO
+     * @param isPersistent       ;
+     * @param details            TODO
      * @param forVpc
+     * @param forNsx
      * @param domainIds
      * @param zoneIds
      * @return network offering object
@@ -230,7 +224,7 @@ public interface ConfigurationManager {
                                             Integer networkRate, Map<Service, 
Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, 
boolean systemOnly, Long serviceOfferingId,
                                             boolean conserveMode, Map<Service, 
Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean 
isPersistent,
                                             Map<NetworkOffering.Detail, 
String> details, boolean egressDefaultPolicy, Integer maxconn, boolean 
enableKeepAlive, Boolean forVpc,
-                                            Boolean forTungsten, List<Long> 
domainIds, List<Long> zoneIds, boolean enableOffering, final 
NetUtils.InternetProtocol internetProtocol);
+                                            Boolean forTungsten, boolean 
forNsx, List<Long> domainIds, List<Long> zoneIds, boolean enableOffering, final 
NetUtils.InternetProtocol internetProtocol);
 
     Vlan createVlanAndPublicIpRange(long zoneId, long networkId, long 
physicalNetworkId, boolean forVirtualNetwork, boolean forSystemVms, Long podId, 
String startIP, String endIP,
         String vlanGateway, String vlanNetmask, String vlanId, boolean 
bypassVlanOverlapCheck, Domain domain, Account vlanOwner, String startIPv6, 
String endIPv6, String vlanIp6Gateway, String vlanIp6Cidr)
diff --git 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 77b14d31387..211125227e7 100644
--- 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -508,6 +508,8 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
         defaultNSXEnabledNetworkOfferingProviders.put(Service.Connectivity, 
nsxProvider);
         defaultNSXEnabledNetworkOfferingProviders.put(Service.Dhcp, 
nsxProvider);
         defaultNSXEnabledNetworkOfferingProviders.put(Service.Dns, 
nsxProvider);
+        defaultNSXEnabledNetworkOfferingProviders.put(Service.SourceNat, 
nsxProvider);
+        defaultNSXEnabledNetworkOfferingProviders.put(Service.UserData, 
defaultProviders);
 
         final Map<Network.Service, Set<Network.Provider>> 
defaultIsolatedSourceNatEnabledNetworkOfferingProviders = new 
HashMap<Network.Service, Set<Network.Provider>>();
         defaultProviders.clear();
@@ -545,27 +547,27 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.QuickCloudNoServices) == 
null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.QuickCloudNoServices, 
"Offering for QuickCloud with no services", TrafficType.Guest, null, true,
                             Availability.Optional, null, new 
HashMap<Network.Service, Set<Network.Provider>>(), true, 
Network.GuestType.Shared, false, null, true, null, true,
-                            false, null, false, null, true, false, false, 
null, null, true, null);
+                            false, null, false, null, true, false, false, 
false, null, null, true, null);
                 }
 
                 //#2 - SG enabled network offering
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOfferingWithSGService)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOfferingWithSGService,
 "Offering for Shared Security group enabled networks",
                             TrafficType.Guest, null, true, 
Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, 
Network.GuestType.Shared, false, null, true,
-                            null, true, false, null, false, null, true, false, 
false, null, null, true, null);
+                            null, true, false, null, false, null, true, false, 
false, false, null, null, true, null);
                 }
 
                 //#3 - shared network offering with no SG service
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOffering)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOffering, 
"Offering for Shared networks", TrafficType.Guest, null, true,
                             Availability.Optional, null, 
defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, 
null, true, null, true, false, null, false,
-                            null, true, false, false, null, null, true, null);
+                            null, true, false, false, false, null, null, true, 
null);
                 }
 
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE,
 "Offering for Tungsten Shared Security group enabled networks",
                             TrafficType.Guest, null, true, 
Availability.Optional, null, 
defaultTungstenSharedSGEnabledNetworkOfferingProviders, true, 
Network.GuestType.Shared, false, null, true,
-                            null, true, false, null, false, null, true, false, 
true,null, null, true, null);
+                            null, true, false, null, false, null, true, false, 
true, false, null, null, true, null);
                     offering.setState(NetworkOffering.State.Enabled);
                     _networkOfferingDao.update(offering.getId(), offering);
                 }
@@ -575,20 +577,20 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService,
                             "Offering for Isolated networks with Source Nat 
service enabled", TrafficType.Guest, null, false, Availability.Required, null,
                             
defaultIsolatedSourceNatEnabledNetworkOfferingProviders, true, 
Network.GuestType.Isolated, false, null, true, null, false, false, null, false, 
null,
-                            true, false, false, null, null, true, null);
+                            true, false, false, false, null, null, true, null);
                 }
 
                 //#5 - default vpc offering with LB service
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks,
                             "Offering for Isolated VPC networks with Source 
Nat service enabled", TrafficType.Guest, null, false, Availability.Optional, 
null,
-                            defaultVPCOffProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, null, null, true, null);
+                            defaultVPCOffProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, false, null, null, true, null);
                 }
 
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DEFAULT_NSX_OFFERING) == 
null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DEFAULT_NSX_OFFERING, 
"Offering for Nsx networks",
                             TrafficType.Guest, null, false, 
Availability.Optional, null,
-                            defaultNSXEnabledNetworkOfferingProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, null, null, true, null);
+                            defaultNSXEnabledNetworkOfferingProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, true, null, null, true, null);
                     offering.setState(NetworkOffering.State.Enabled);
                     _networkOfferingDao.update(offering.getId(), offering);
                 }
@@ -599,14 +601,14 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                     defaultVPCOffProviders.remove(Service.Lb);
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB,
                             "Offering for Isolated VPC networks with Source 
Nat service enabled and LB service disabled", TrafficType.Guest, null, false, 
Availability.Optional,
-                            null, defaultVPCOffProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, null, null, true, null);
+                            null, defaultVPCOffProviders, true, 
Network.GuestType.Isolated, false, null, false, null, false, false, null, 
false, null, true, true, false, false, null, null, true, null);
                 }
 
                 //#7 - isolated offering with source nat disabled
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering,
 "Offering for Isolated networks with no Source Nat service",
                             TrafficType.Guest, null, true, 
Availability.Optional, null, defaultIsolatedNetworkOfferingProviders, true, 
Network.GuestType.Isolated, false, null,
-                            true, null, true, false, null, false, null, true, 
false, false, null, null, true, null);
+                            true, null, true, false, null, false, null, true, 
false, false, false, null, null, true, null);
                 }
 
                 //#8 - network offering with internal lb service
@@ -628,7 +630,7 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB,
                             "Offering for Isolated VPC networks with Internal 
Lb support", TrafficType.Guest, null, false, Availability.Optional, null, 
internalLbOffProviders,
-                            true, Network.GuestType.Isolated, false, null, 
false, null, false, false, null, false, null, true, true, false, null, null, 
true, null);
+                            true, Network.GuestType.Isolated, false, null, 
false, null, false, false, null, false, null, true, true, false, false, null, 
null, true, null);
                     offering.setInternalLb(true);
                     offering.setPublicLb(false);
                     _networkOfferingDao.update(offering.getId(), offering);
@@ -659,7 +661,7 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                 if 
(_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering)
 == null) {
                     offering = 
_configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering,
                             "Offering for Shared networks with Elastic IP and 
Elastic LB capabilities", TrafficType.Guest, null, true, Availability.Optional, 
null,
-                            netscalerServiceProviders, true, 
Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, 
null, false, null, true, false, false, null, null, true, null);
+                            netscalerServiceProviders, true, 
Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, 
null, false, null, true, false, false, false, null, null, true, null);
                     offering.setDedicatedLB(false);
                     _networkOfferingDao.update(offering.getId(), offering);
                 }
diff --git 
a/engine/schema/src/main/resources/META-INF/db/schema-41810to41900.sql 
b/engine/schema/src/main/resources/META-INF/db/schema-41810to41900.sql
index fdef959b47b..1ed82472402 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41810to41900.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41810to41900.sql
@@ -190,5 +190,89 @@ CREATE TABLE `cloud`.`nsx_providers` (
     `username` varchar(255) NOT NULL ,
     `password` varchar(255) NOT NULL,
     `tier0_gateway` varchar(255),
-    `edge_cluster` varchar(255)
-)
\ No newline at end of file
+    `edge_cluster` varchar(255),
+    PRIMARY KEY (`id`),
+    CONSTRAINT `fk_nsx_providers_zone_id` FOREIGN KEY (`zone_id`) REFERENCES 
`data_center`(`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+-- Idempotent ADD COLUMN
+DROP PROCEDURE IF EXISTS `cloud`.`IDEMPOTENT_ADD_COLUMN`;
+CREATE PROCEDURE `cloud`.`IDEMPOTENT_ADD_COLUMN` (
+    IN in_table_name VARCHAR(200)
+, IN in_column_name VARCHAR(200)
+, IN in_column_definition VARCHAR(1000)
+)
+BEGIN
+    DECLARE CONTINUE HANDLER FOR 1060 BEGIN END; SET @ddl = CONCAT('ALTER 
TABLE ', in_table_name); SET @ddl = CONCAT(@ddl, ' ', 'ADD COLUMN') ; SET @ddl 
= CONCAT(@ddl, ' ', in_column_name); SET @ddl = CONCAT(@ddl, ' ', 
in_column_definition); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE 
stmt; END;
+
+-- NSX Plugin --
+CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.network_offerings','for_nsx', 
'int(1) unsigned DEFAULT "0" COMMENT "is nsx enabled for the resource"');
+
+-- Network offering with multi-domains and multi-zones
+DROP VIEW IF EXISTS `cloud`.`network_offering_view`;
+CREATE VIEW `cloud`.`network_offering_view` AS
+SELECT
+    `network_offerings`.`id` AS `id`,
+    `network_offerings`.`uuid` AS `uuid`,
+    `network_offerings`.`name` AS `name`,
+    `network_offerings`.`unique_name` AS `unique_name`,
+    `network_offerings`.`display_text` AS `display_text`,
+    `network_offerings`.`nw_rate` AS `nw_rate`,
+    `network_offerings`.`mc_rate` AS `mc_rate`,
+    `network_offerings`.`traffic_type` AS `traffic_type`,
+    `network_offerings`.`tags` AS `tags`,
+    `network_offerings`.`system_only` AS `system_only`,
+    `network_offerings`.`specify_vlan` AS `specify_vlan`,
+    `network_offerings`.`service_offering_id` AS `service_offering_id`,
+    `network_offerings`.`conserve_mode` AS `conserve_mode`,
+    `network_offerings`.`created` AS `created`,
+    `network_offerings`.`removed` AS `removed`,
+    `network_offerings`.`default` AS `default`,
+    `network_offerings`.`availability` AS `availability`,
+    `network_offerings`.`dedicated_lb_service` AS `dedicated_lb_service`,
+    `network_offerings`.`shared_source_nat_service` AS 
`shared_source_nat_service`,
+    `network_offerings`.`sort_key` AS `sort_key`,
+    `network_offerings`.`redundant_router_service` AS 
`redundant_router_service`,
+    `network_offerings`.`state` AS `state`,
+    `network_offerings`.`guest_type` AS `guest_type`,
+    `network_offerings`.`elastic_ip_service` AS `elastic_ip_service`,
+    `network_offerings`.`eip_associate_public_ip` AS `eip_associate_public_ip`,
+    `network_offerings`.`elastic_lb_service` AS `elastic_lb_service`,
+    `network_offerings`.`specify_ip_ranges` AS `specify_ip_ranges`,
+    `network_offerings`.`inline` AS `inline`,
+    `network_offerings`.`is_persistent` AS `is_persistent`,
+    `network_offerings`.`internal_lb` AS `internal_lb`,
+    `network_offerings`.`public_lb` AS `public_lb`,
+    `network_offerings`.`egress_default_policy` AS `egress_default_policy`,
+    `network_offerings`.`concurrent_connections` AS `concurrent_connections`,
+    `network_offerings`.`keep_alive_enabled` AS `keep_alive_enabled`,
+    `network_offerings`.`supports_streched_l2` AS `supports_streched_l2`,
+    `network_offerings`.`supports_public_access` AS `supports_public_access`,
+    `network_offerings`.`supports_vm_autoscaling` AS `supports_vm_autoscaling`,
+    `network_offerings`.`for_vpc` AS `for_vpc`,
+    `network_offerings`.`for_tungsten` AS `for_tungsten`,
+    `network_offerings`.`for_nsx` AS `for_nsx`,
+    `network_offerings`.`service_package_id` AS `service_package_id`,
+    GROUP_CONCAT(DISTINCT(domain.id)) AS domain_id,
+    GROUP_CONCAT(DISTINCT(domain.uuid)) AS domain_uuid,
+    GROUP_CONCAT(DISTINCT(domain.name)) AS domain_name,
+    GROUP_CONCAT(DISTINCT(domain.path)) AS domain_path,
+    GROUP_CONCAT(DISTINCT(zone.id)) AS zone_id,
+    GROUP_CONCAT(DISTINCT(zone.uuid)) AS zone_uuid,
+    GROUP_CONCAT(DISTINCT(zone.name)) AS zone_name,
+    `offering_details`.value AS internet_protocol
+FROM
+    `cloud`.`network_offerings`
+        LEFT JOIN
+    `cloud`.`network_offering_details` AS `domain_details` ON 
`domain_details`.`network_offering_id` = `network_offerings`.`id` AND 
`domain_details`.`name`='domainid'
+        LEFT JOIN
+    `cloud`.`domain` AS `domain` ON FIND_IN_SET(`domain`.`id`, 
`domain_details`.`value`)
+        LEFT JOIN
+    `cloud`.`network_offering_details` AS `zone_details` ON 
`zone_details`.`network_offering_id` = `network_offerings`.`id` AND 
`zone_details`.`name`='zoneid'
+        LEFT JOIN
+    `cloud`.`data_center` AS `zone` ON FIND_IN_SET(`zone`.`id`, 
`zone_details`.`value`)
+        LEFT JOIN
+    `cloud`.`network_offering_details` AS `offering_details` ON 
`offering_details`.`network_offering_id` = `network_offerings`.`id` AND 
`offering_details`.`name`='internetProtocol'
+GROUP BY
+    `network_offerings`.`id`;
\ No newline at end of file
diff --git 
a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
 
b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
index 7021b9ac235..372e268a2ff 100644
--- 
a/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
+++ 
b/plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
@@ -219,7 +219,7 @@ public class ContrailManagerImpl extends ManagerBase 
implements ContrailManager
         ConfigurationManager configMgr = (ConfigurationManager) _configService;
         NetworkOfferingVO voffer = 
configMgr.createNetworkOffering(offeringName, offeringDisplayText,
                 TrafficType.Public, null, true, Availability.Optional, null, 
serviceProviderMap, true,
-                Network.GuestType.Shared, false, null, false, null, true, 
false, null, true, null, false, false, false, null, null, true, null);
+                Network.GuestType.Shared, false, null, false, null, true, 
false, null, true, null, false, false, false, false, null, null, true, null);
         long id = voffer.getId();
         _networkOfferingDao.update(id, voffer);
         return _networkOfferingDao.findById(id);
@@ -254,7 +254,7 @@ public class ContrailManagerImpl extends ManagerBase 
implements ContrailManager
         ConfigurationManager configMgr = (ConfigurationManager)_configService;
         NetworkOfferingVO voffer =
                 configMgr.createNetworkOffering(offeringName, 
offeringDisplayText, TrafficType.Guest, null, false, Availability.Optional, 
null, serviceProviderMap, true,
-                        Network.GuestType.Isolated, false, null, false, null, 
false, true, null, true, null, false, 
offeringName.equals(vpcRouterOfferingName), false, null, null, true, null);
+                        Network.GuestType.Isolated, false, null, false, null, 
false, true, null, true, null, false, 
offeringName.equals(vpcRouterOfferingName), false, false, null, null, true, 
null);
         if (offeringName.equals(vpcRouterOfferingName)) {
             voffer.setInternalLb(true);
         }
diff --git 
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java 
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 890fb1195e2..705b8627899 100644
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -6178,7 +6178,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
         }
 
         final NetworkOfferingVO offering = createNetworkOffering(name, 
displayText, trafficType, tags, specifyVlan, availability, networkRate, 
serviceProviderMap, false, guestType, false,
-                serviceOfferingId, conserveMode, serviceCapabilityMap, 
specifyIpRanges, isPersistent, details, egressDefaultPolicy, maxconn, 
enableKeepAlive, forVpc, forTungsten, domainIds, zoneIds, enable, 
internetProtocol);
+                serviceOfferingId, conserveMode, serviceCapabilityMap, 
specifyIpRanges, isPersistent, details, egressDefaultPolicy, maxconn, 
enableKeepAlive, forVpc, forTungsten, false, domainIds, zoneIds, enable, 
internetProtocol);
         CallContext.current().setEventDetails(" Id: " + offering.getId() + " 
Name: " + name);
         CallContext.current().putContextParameter(NetworkOffering.class, 
offering.getId());
         return offering;
@@ -6318,12 +6318,12 @@ public class ConfigurationManagerImpl extends 
ManagerBase implements Configurati
     @Override
     @DB
     public NetworkOfferingVO createNetworkOffering(final String name, final 
String displayText, final TrafficType trafficType, String tags, final boolean 
specifyVlan,
-            final Availability availability,
-            final Integer networkRate, final Map<Service, Set<Provider>> 
serviceProviderMap, final boolean isDefault, final GuestType type, final 
boolean systemOnly,
-            final Long serviceOfferingId,
-            final boolean conserveMode, final Map<Service, Map<Capability, 
String>> serviceCapabilityMap, final boolean specifyIpRanges, final boolean 
isPersistent,
-            final Map<Detail, String> details, final boolean 
egressDefaultPolicy, final Integer maxconn, final boolean enableKeepAlive, 
Boolean forVpc,
-            Boolean forTungsten, final List<Long> domainIds, final List<Long> 
zoneIds, final boolean enableOffering, final NetUtils.InternetProtocol 
internetProtocol) {
+                                                   final Availability 
availability,
+                                                   final Integer networkRate, 
final Map<Service, Set<Provider>> serviceProviderMap, final boolean isDefault, 
final GuestType type, final boolean systemOnly,
+                                                   final Long 
serviceOfferingId,
+                                                   final boolean conserveMode, 
final Map<Service, Map<Capability, String>> serviceCapabilityMap, final boolean 
specifyIpRanges, final boolean isPersistent,
+                                                   final Map<Detail, String> 
details, final boolean egressDefaultPolicy, final Integer maxconn, final 
boolean enableKeepAlive, Boolean forVpc,
+                                                   Boolean forTungsten, 
boolean forNsx, final List<Long> domainIds, final List<Long> zoneIds, final 
boolean enableOffering, final NetUtils.InternetProtocol internetProtocol) {
 
         String servicePackageUuid;
         String spDescription = null;
@@ -6484,6 +6484,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
         }
 
         offeringFinal.setForTungsten(Objects.requireNonNullElse(forTungsten, 
false));
+        offeringFinal.setForNsx(Objects.requireNonNullElse(forTungsten, 
false));
 
         if (enableOffering) {
             offeringFinal.setState(NetworkOffering.State.Enabled);
diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java 
b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
index 4456f10b546..1bc23ce7730 100644
--- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
@@ -271,7 +271,7 @@ public class VpcManagerImpl extends ManagerBase implements 
VpcManager, VpcProvis
     private List<VpcProvider> vpcElements = null;
     private final List<Service> nonSupportedServices = 
Arrays.asList(Service.SecurityGroup, Service.Firewall);
     private final List<Provider> supportedProviders = 
Arrays.asList(Provider.VPCVirtualRouter, Provider.NiciraNvp, 
Provider.InternalLbVm, Provider.Netscaler,
-            Provider.JuniperContrailVpcRouter, Provider.Ovs, 
Provider.BigSwitchBcf, Provider.ConfigDrive);
+            Provider.JuniperContrailVpcRouter, Provider.Ovs, 
Provider.BigSwitchBcf, Provider.ConfigDrive, Provider.Nsx);
 
     int _cleanupInterval;
     int _maxNetworks;
@@ -366,6 +366,23 @@ public class VpcManagerImpl extends ManagerBase implements 
VpcManager, VpcProvis
                     }
                     createVpcOffering(VpcOffering.redundantVPCOfferingName, 
VpcOffering.redundantVPCOfferingName, svcProviderMap, true, State.Enabled, 
null, false, false, true);
                 }
+
+                // configure default vpc offering with NSX as network service 
provider
+                if 
(_vpcOffDao.findByUniqueName(VpcOffering.defaultVPCNSXSOfferingName) == null) {
+                    s_logger.debug("Creating default VPC offering with NSX as 
network service provider" + VpcOffering.defaultVPCNSXSOfferingName);
+                    final Map<Service, Set<Provider>> svcProviderMap = new 
HashMap<Service, Set<Provider>>();
+                    final Set<Provider> defaultProviders = 
Set.of(Provider.Nsx);
+                    for (final Service svc : getSupportedServices()) {
+                        if (svc == Service.UserData) {
+                            final Set<Provider> userDataProvider = 
Set.of(Provider.VPCVirtualRouter);
+                            svcProviderMap.put(svc, userDataProvider);
+                        } else {
+                            svcProviderMap.put(svc, defaultProviders);
+                        }
+                    }
+                    createVpcOffering(VpcOffering.defaultVPCNSXSOfferingName, 
VpcOffering.defaultVPCNSXSOfferingName, svcProviderMap, false, State.Enabled, 
null, false, false, false);
+
+                }
             }
         });
 
diff --git a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java 
b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
index 1b318f6b5f0..01bfdfccc46 100644
--- a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java
@@ -1211,7 +1211,7 @@ public class ConfigurationServerImpl extends ManagerBase 
implements Configuratio
                                 TrafficType.Guest, false, true, null, null, 
true, Availability.Optional, null, GuestType.Isolated, true, true, false, 
false, false, false);
 
                 
defaultNSXNetworkOffering.setState(NetworkOffering.State.Enabled);
-                defaultNSXNetworkOffering = 
_networkOfferingDao.persistDefaultNetworkOffering(defaultTungstenSharedSGNetworkOffering);
+                defaultNSXNetworkOffering = 
_networkOfferingDao.persistDefaultNetworkOffering(defaultNSXNetworkOffering);
 
                 for (Map.Entry<Network.Service, Network.Provider> service : 
defaultNSXNetworkOfferingProviders.entrySet()) {
                     NetworkOfferingServiceMapVO offService =
diff --git 
a/server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java 
b/server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java
index 96dc8277a91..041d8c03dbe 100644
--- a/server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java
+++ b/server/src/test/java/com/cloud/vpc/MockConfigurationManagerImpl.java
@@ -548,7 +548,7 @@ public class MockConfigurationManagerImpl extends 
ManagerBase implements Configu
                                                    Integer networkRate, 
Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, GuestType 
type, boolean systemOnly, Long serviceOfferingId,
                                                    boolean conserveMode, 
Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean 
specifyIpRanges, boolean isPersistent,
                                                    Map<NetworkOffering.Detail, 
String> details, boolean egressDefaultPolicy, Integer maxconn, boolean 
enableKeepAlive, Boolean forVpc,
-                                                   Boolean forTungsten, 
List<Long> domainIds, List<Long> zoneIds, boolean enableOffering, 
NetUtils.InternetProtocol internetProtocol) {
+                                                   Boolean forTungsten, 
boolean forNsx, List<Long> domainIds, List<Long> zoneIds, boolean 
enableOffering, NetUtils.InternetProtocol internetProtocol) {
         // TODO Auto-generated method stub
         return null;
     }
diff --git 
a/server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
 
b/server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
index a37b3afea31..8f59c5a58a2 100644
--- 
a/server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
+++ 
b/server/src/test/java/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
@@ -132,7 +132,7 @@ public class CreateNetworkOfferingTest extends TestCase {
     public void createSharedNtwkOffWithVlan() {
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("shared", "shared", 
TrafficType.Guest, null, true, Availability.Optional, 200, null, false, 
Network.GuestType.Shared, false,
-                null, false, null, true, false, null, false, null, true, 
false, false, null, null, false, null);
+                null, false, null, true, false, null, false, null, true, 
false, false, false, null, null, false, null);
         assertNotNull("Shared network offering with specifyVlan=true failed to 
create ", off);
     }
 
@@ -140,7 +140,7 @@ public class CreateNetworkOfferingTest extends TestCase {
     public void createSharedNtwkOffWithNoVlan() {
         NetworkOfferingVO off =
                 configMgr.createNetworkOffering("shared", "shared", 
TrafficType.Guest, null, false, Availability.Optional, 200, null, false, 
Network.GuestType.Shared,
-                    false, null, false, null, true, false, null, false, null, 
true, false, false, null, null, false, null);
+                    false, null, false, null, true, false, null, false, null, 
true, false, false, false, null, null, false, null);
         assertNotNull("Shared network offering with specifyVlan=false was 
created", off);
     }
 
@@ -148,7 +148,7 @@ public class CreateNetworkOfferingTest extends TestCase {
     public void createSharedNtwkOffWithSpecifyIpRanges() {
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("shared", "shared", 
TrafficType.Guest, null, true, Availability.Optional, 200, null, false, 
Network.GuestType.Shared, false,
-                null, false, null, true, false, null, false, null, true, 
false, false, null, null, false, null);
+                null, false, null, true, false, null, false, null, true, 
false, false, false, null, null, false, null);
 
         assertNotNull("Shared network offering with specifyIpRanges=true 
failed to create ", off);
     }
@@ -157,7 +157,7 @@ public class CreateNetworkOfferingTest extends TestCase {
     public void createSharedNtwkOffWithoutSpecifyIpRanges() {
         NetworkOfferingVO off =
                 configMgr.createNetworkOffering("shared", "shared", 
TrafficType.Guest, null, true, Availability.Optional, 200, null, false, 
Network.GuestType.Shared,
-                        false, null, false, null, false, false, null, false, 
null, true, false, false, null, null, false, null);
+                        false, null, false, null, false, false, null, false, 
null, true, false, false, false, null, null, false, null);
         assertNull("Shared network offering with specifyIpRanges=false was 
created", off);
     }
 
@@ -170,7 +170,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, false, Availability.Optional, 200, serviceProviderMap, 
false,
-                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, false, false, null, null, false, null);
+                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, false, false, false, null, null, false, null);
 
         assertNotNull("Isolated network offering with specifyIpRanges=false 
failed to create ", off);
     }
@@ -183,7 +183,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, true, Availability.Optional, 200, serviceProviderMap, 
false,
-                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, false, false, null, null, false, null);
+                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, false, false, false, null, null, false, null);
         assertNotNull("Isolated network offering with specifyVlan=true wasn't 
created", off);
 
     }
@@ -196,7 +196,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
         NetworkOfferingVO off =
                 configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, false, Availability.Optional, 200, serviceProviderMap, 
false,
-                        Network.GuestType.Isolated, false, null, false, null, 
true, false, null, false, null, true, false, false, null, null, false, null);
+                        Network.GuestType.Isolated, false, null, false, null, 
true, false, null, false, null, true, false, false, false, null, null, false, 
null);
         assertNull("Isolated network offering with specifyIpRanges=true and 
source nat service enabled, was created", off);
     }
 
@@ -207,7 +207,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         Set<Network.Provider> vrProvider = new HashSet<Network.Provider>();
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, false, Availability.Optional, 200, serviceProviderMap, 
false,
-                Network.GuestType.Isolated, false, null, false, null, true, 
false, null, false, null, true, false, false, null, null, false, null);
+                Network.GuestType.Isolated, false, null, false, null, true, 
false, null, false, null, true, false, false, false, null, null, false, null);
         assertNotNull("Isolated network offering with specifyIpRanges=true and 
with no sourceNatService, failed to create", off);
 
     }
@@ -225,7 +225,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         serviceProviderMap.put(Network.Service.Lb, vrProvider);
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, true, Availability.Optional, 200, serviceProviderMap, 
false,
-                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, true, false, null, null, false, null);
+                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, true, false, false, null, null, false, null);
         // System.out.println("Creating Vpc Network Offering");
         assertNotNull("Vpc Isolated network offering with Vpc provider ", off);
     }
@@ -245,7 +245,7 @@ public class CreateNetworkOfferingTest extends TestCase {
         serviceProviderMap.put(Network.Service.Lb, lbProvider);
         NetworkOfferingVO off =
             configMgr.createNetworkOffering("isolated", "isolated", 
TrafficType.Guest, null, true, Availability.Optional, 200, serviceProviderMap, 
false,
-                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, true, false, null, null, false, null);
+                Network.GuestType.Isolated, false, null, false, null, false, 
false, null, false, null, true, true, false, false, null, null, false, null);
         // System.out.println("Creating Vpc Network Offering");
         assertNotNull("Vpc Isolated network offering with Vpc and Netscaler 
provider ", off);
     }


Reply via email to