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
commit 2c0f51e0719b7e071e90762e1fea8c955d600e07 Author: Pearl Dsilva <[email protected]> AuthorDate: Wed Aug 16 14:34:53 2023 -0400 add upgrade path and daos \n add nsx controller command --- api/src/main/java/com/cloud/network/Networks.java | 4 +- .../main/java/com/cloud/network/NsxProvider.java | 11 ++ .../java/com/cloud/offering/NetworkOffering.java | 2 + .../org/apache/cloudstack/api/ApiConstants.java | 5 + .../api/response/NetworkOfferingResponse.java | 8 ++ .../java/com/cloud/network/dao/NsxProviderDao.java | 14 +++ .../com/cloud/network/dao/NsxProviderDaoImpl.java | 19 +++ .../com/cloud/network/element/NsxProviderVO.java | 137 +++++++++++++++++++++ .../com/cloud/offerings/NetworkOfferingVO.java | 12 ++ .../resources/META-INF/db/schema-41810to41900.sql | 12 ++ plugins/network-elements/nsx/pom.xml | 13 ++ .../api/command/AddNsxControllerCmd.java | 99 +++++++++++++++ .../api/response/NsxControllerResponse.java | 11 ++ .../org/apache/cloudstack/service/NsxElement.java | 30 ----- .../cloudstack/service/NsxGuestNetworkGuru.java | 55 +++++++++ .../cloudstack/service/NsxProviderService.java | 17 +++ .../cloudstack/service/NsxProviderServiceImpl.java | 51 ++++++++ .../META-INF/cloudstack/nsx/spring-nsx-context.xml | 5 +- .../main/java/com/cloud/api/ApiResponseHelper.java | 1 + .../cloud/api/query/vo/NetworkOfferingJoinVO.java | 11 ++ .../com/cloud/server/ConfigurationServerImpl.java | 19 +++ .../zone/ZoneWizardPhysicalNetworkSetupStep.vue | 1 + 22 files changed, 505 insertions(+), 32 deletions(-) diff --git a/api/src/main/java/com/cloud/network/Networks.java b/api/src/main/java/com/cloud/network/Networks.java index aeed5d4aec6..75a85ddb5a8 100644 --- a/api/src/main/java/com/cloud/network/Networks.java +++ b/api/src/main/java/com/cloud/network/Networks.java @@ -128,7 +128,8 @@ public class Networks { }, UnDecided(null, null), OpenDaylight("opendaylight", String.class), - TUNGSTEN("tf", String.class); + TUNGSTEN("tf", String.class), + NSX("nsx", String.class); private final String scheme; private final Class<?> type; @@ -342,6 +343,7 @@ public class Networks { } }, Vswitch("vs", String.class), Undecided(null, null), Vnet("vnet", Long.class); +// NSX("nsx", String.class); private final String scheme; private final Class<?> type; diff --git a/api/src/main/java/com/cloud/network/NsxProvider.java b/api/src/main/java/com/cloud/network/NsxProvider.java new file mode 100644 index 00000000000..fb91cbd3a10 --- /dev/null +++ b/api/src/main/java/com/cloud/network/NsxProvider.java @@ -0,0 +1,11 @@ +package com.cloud.network; + +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface NsxProvider extends InternalIdentity, Identity { + String getHostname(); + String getProviderName(); + String getUsername(); + long getZoneId(); +} diff --git a/api/src/main/java/com/cloud/offering/NetworkOffering.java b/api/src/main/java/com/cloud/offering/NetworkOffering.java index 7f0dc85b05f..afe2a255f5b 100644 --- a/api/src/main/java/com/cloud/offering/NetworkOffering.java +++ b/api/src/main/java/com/cloud/offering/NetworkOffering.java @@ -91,6 +91,8 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, boolean isForTungsten(); + boolean isForNsx(); + TrafficType getTrafficType(); boolean isSpecifyVlan(); diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 3e0e65220e1..8b4167131e1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -679,6 +679,10 @@ public class ApiConstants { public static final String VSWITCH_TYPE_PUBLIC_TRAFFIC = "publicvswitchtype"; public static final String VSWITCH_NAME_GUEST_TRAFFIC = "guestvswitchname"; public static final String VSWITCH_NAME_PUBLIC_TRAFFIC = "publicvswitchname"; + + // NSX + public static final String EDGE_CLUSTER = "edgecluster"; + public static final String TIER0_GATEWAY = "tier0gateway"; // Tungsten-Fabric public static final String TUNGSTEN_VIRTUAL_ROUTER_UUID = "tungstenvirtualrouteruuid"; public static final String TUNGSTEN_PROVIDER_HOSTNAME = "tungstenproviderhostname"; @@ -796,6 +800,7 @@ public class ApiConstants { public static final String FORCE_ENCAP = "forceencap"; public static final String SPLIT_CONNECTIONS = "splitconnections"; public static final String FOR_VPC = "forvpc"; + public static final String FOR_NSX = "fornsx"; public static final String FOR_TUNGSTEN = "fortungsten"; public static final String SHRINK_OK = "shrinkok"; public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index b92725d883e..4685580e4b5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -99,6 +99,10 @@ public class NetworkOfferingResponse extends BaseResponseWithAnnotations { @Param(description = "true if network offering can be used by VPC networks only") private Boolean forVpc; + @SerializedName(ApiConstants.FOR_NSX) + @Param(description = "true if network offering can be used by NSX networks only") + private Boolean forNsx; + @SerializedName(ApiConstants.FOR_TUNGSTEN) @Param(description = "true if network offering can be used by Tungsten-Fabric networks only") private Boolean forTungsten; @@ -215,6 +219,10 @@ public class NetworkOfferingResponse extends BaseResponseWithAnnotations { this.forVpc = forVpc; } + public void setForNsx(Boolean forNsx) { + this.forNsx = forNsx; + } + public void setForTungsten(Boolean forTungsten) { this.forTungsten = forTungsten; } diff --git a/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDao.java b/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDao.java new file mode 100644 index 00000000000..a4f6e997f60 --- /dev/null +++ b/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDao.java @@ -0,0 +1,14 @@ +package com.cloud.network.dao; + +import com.cloud.network.element.NsxProviderVO; +import com.cloud.utils.db.GenericDao; + +import java.util.List; + +public interface NsxProviderDao extends GenericDao<NsxProviderVO, Long> { + NsxProviderVO findByZoneId(long zoneId); + + NsxProviderVO findByUuid(String uuid); + + List<NsxProviderVO> findAll(); +} diff --git a/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDaoImpl.java new file mode 100644 index 00000000000..c765b6bfae5 --- /dev/null +++ b/engine/schema/src/main/java/com/cloud/network/dao/NsxProviderDaoImpl.java @@ -0,0 +1,19 @@ +package com.cloud.network.dao; + +import com.cloud.network.element.NsxProviderVO; +import com.cloud.utils.db.GenericDaoBase; + +import java.util.List; + +public class NsxProviderDaoImpl extends GenericDaoBase<NsxProviderVO, Long> + implements NsxProviderDao { + @Override + public NsxProviderVO findByZoneId(long zoneId) { + return null; + } + + @Override + public List<NsxProviderVO> findAll() { + return null; + } +} diff --git a/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java b/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java new file mode 100644 index 00000000000..2f67407cf79 --- /dev/null +++ b/engine/schema/src/main/java/com/cloud/network/element/NsxProviderVO.java @@ -0,0 +1,137 @@ +package com.cloud.network.element; + +import com.cloud.network.NsxProvider; +import com.cloud.utils.db.Encrypt; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.UUID; + +@Entity +@Table(name = "nsx_providers") +public class NsxProviderVO implements NsxProvider { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + long id; + + @Column(name = "zone_id") + private long zoneId; + + @Column(name = "uuid") + private String uuid; + + @Column(name = "provider_name") + private String providerName; + + @Column(name = "hostname") + private String hostname; + + @Column(name = "username") + private String username; + + @Encrypt + @Column(name = "password") + private String password; + + @Column(name = "tier0_gateway") + private String tier0Gateway; + + @Column(name = "edge_cluster") + private String edgeCluster; + + + public NsxProviderVO( long zoneId,String providerName, String hostname, String username, String password, String tier0Gateway, String edgeCluster) { + this.zoneId = zoneId; + this.uuid = UUID.randomUUID().toString(); + this.providerName = providerName; + this.hostname = hostname; + this.username = username; + this.password = password; + this.tier0Gateway = tier0Gateway; + this.edgeCluster = edgeCluster; + } + + @Override + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @Override + public long getZoneId() { + return zoneId; + } + + public void setZoneId(long zoneId) { + this.zoneId = zoneId; + } + + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + @Override + public String getProviderName() { + return providerName; + } + + public void setProviderName(String providerName) { + this.providerName = providerName; + } + + @Override + public String getHostname() { + return hostname; + } + + public void setHostname(String hostname) { + this.hostname = hostname; + } + + @Override + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getTier0Gateway() { + return tier0Gateway; + } + + public void setTier0Gateway(String tier0Gateway) { + this.tier0Gateway = tier0Gateway; + } + + public String getEdgeCluster() { + return edgeCluster; + } + + public void setEdgeCluster(String edgeCluster) { + this.edgeCluster = edgeCluster; + } +} diff --git a/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java b/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java index ae5e6fb95ea..edc89f3cb9a 100644 --- a/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java +++ b/engine/schema/src/main/java/com/cloud/offerings/NetworkOfferingVO.java @@ -136,6 +136,9 @@ public class NetworkOfferingVO implements NetworkOffering { @Column(name = "for_tungsten") boolean forTungsten = false; + @Column(name = "for_nsx") + boolean forNsx = false; + @Column(name = "egress_default_policy") boolean egressdefaultpolicy; @@ -195,6 +198,15 @@ public class NetworkOfferingVO implements NetworkOffering { this.forTungsten = forTungsten; } + @Override + public boolean isForNsx() { + return forNsx; + } + + public void setForNsx(boolean forNsx) { + this.forNsx = forNsx; + } + @Override public long getId() { return id; 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 52c58fef171..fdef959b47b 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 @@ -180,3 +180,15 @@ CREATE TABLE `cloud`.`vm_scheduled_job` ( -- Add support for different cluster types for kubernetes ALTER TABLE `cloud`.`kubernetes_cluster` ADD COLUMN `cluster_type` varchar(64) DEFAULT 'CloudManaged' COMMENT 'type of cluster'; ALTER TABLE `cloud`.`kubernetes_cluster` MODIFY COLUMN `kubernetes_version_id` bigint unsigned NULL COMMENT 'the ID of the Kubernetes version of this Kubernetes cluster'; + +CREATE TABLE `cloud`.`nsx_providers` ( + `id` bigint unsigned NOT NULL auto_increment COMMENT 'id', + `uuid` varchar(40), + `zone_id` bigint unsigned NOT NULL COMMENT 'Zone ID', + `provider_name` varchar(40), + `hostname` varchar(255) NOT NULL , + `username` varchar(255) NOT NULL , + `password` varchar(255) NOT NULL, + `tier0_gateway` varchar(255), + `edge_cluster` varchar(255) +) \ No newline at end of file diff --git a/plugins/network-elements/nsx/pom.xml b/plugins/network-elements/nsx/pom.xml index 9350e2aedaf..5f4b563ce08 100644 --- a/plugins/network-elements/nsx/pom.xml +++ b/plugins/network-elements/nsx/pom.xml @@ -29,4 +29,17 @@ <version>4.19.0.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> + + <dependencies> + <dependency> + <groupId>com.vmware</groupId> + <artifactId>nsx-java-sdk</artifactId> + <version>4.1.0.2.0</version> + </dependency> + <dependency> + <groupId>com.vmware</groupId> + <artifactId>nsx-gpm-java-sdk</artifactId> + <version>4.1.0.2.0</version> + </dependency> + </dependencies> </project> diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java new file mode 100644 index 00000000000..e91a8b3f03a --- /dev/null +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/AddNsxControllerCmd.java @@ -0,0 +1,99 @@ +package org.apache.cloudstack.api.command; + +import com.cloud.network.NsxProvider; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.response.NsxControllerResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.service.NsxProviderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; + + +@APICommand(name = AddNsxControllerCmd.APINAME, description = "Add NSX Controller to CloudStack", + responseObject = NsxControllerResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) +public class AddNsxControllerCmd extends BaseCmd { + public static final String APINAME = "addNsxController"; + public static final Logger LOGGER = LoggerFactory.getLogger(AddNsxControllerCmd.class.getName()); + + @Inject + NsxProviderService nsxProviderService; + + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, required = true, + description = "the ID of zone") + private Long zoneId; + + @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "NSX controller / provider name") + private String name; + + @Parameter(name = ApiConstants.TUNGSTEN_PROVIDER_HOSTNAME, type = CommandType.STRING, required = true, description = "NSX controller hostname / IP address") + private String hostname; + + @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = true, description = "Username to log into NSX controller") + private String username; + @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "Password to login into NSX controller") + private String password; + + @Parameter(name = ApiConstants.TIER0_GATEWAY, type = CommandType.STRING, required = true, description = "Tier-0 Gateway address") + private String tier0Gateway; + + @Parameter(name = ApiConstants.EDGE_CLUSTER, type = CommandType.STRING, required = true, description = "Edge Cluster name") + private String edgeCluster; + + public NsxProviderService getNsxProviderService() { + return nsxProviderService; + } + + public Long getZoneId() { + return zoneId; + } + + public String getName() { + return name; + } + + public String getHostname() { + return hostname; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public String getTier0Gateway() { + return tier0Gateway; + } + + public String getEdgeCluster() { + return edgeCluster; + } + + @Override + public void execute() throws ServerApiException { + NsxProvider nsxProvider = nsxProviderService.addProvider(this); + NsxControllerResponse nsxControllerResponse = + nsxProviderService.createNsxControllerResponse( + nsxProvider); + if (nsxControllerResponse == null) + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add NSX controller"); + else { + nsxControllerResponse.setResponseName(getCommandName()); + setResponseObject(nsxControllerResponse); + } + } + + @Override + public long getEntityOwnerId() { + return 0; + } +} diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java new file mode 100644 index 00000000000..f164dbee487 --- /dev/null +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/response/NsxControllerResponse.java @@ -0,0 +1,11 @@ +package org.apache.cloudstack.api.response; + +import com.cloud.network.NsxProvider; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +@EntityReference(value = {NsxProvider.class}) +public class NsxControllerResponse extends BaseResponse { + + +} diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java index a4c562c931a..4cfc17c1cdf 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java @@ -133,36 +133,6 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, DnsS return false; } - @Override - public String getName() { - return null; - } - - @Override - public void setName(String name) { - - } - - @Override - public void setConfigParams(Map<String, Object> params) { - - } - - @Override - public Map<String, Object> getConfigParams() { - return null; - } - - @Override - public int getRunLevel() { - return 0; - } - - @Override - public void setRunLevel(int level) { - - } - @Override public boolean configure(String name, Map<String, Object> params) throws ConfigurationException { return false; diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxGuestNetworkGuru.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxGuestNetworkGuru.java new file mode 100644 index 00000000000..4241583e642 --- /dev/null +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxGuestNetworkGuru.java @@ -0,0 +1,55 @@ +package org.apache.cloudstack.service; + +import com.cloud.dc.DataCenter; +import com.cloud.deploy.DeployDestination; +import com.cloud.network.Network; +import com.cloud.network.NetworkMigrationResponder; +import com.cloud.network.Networks; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.guru.GuestNetworkGuru; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VirtualMachineProfile; +import org.apache.log4j.Logger; + +import javax.inject.Inject; + +public class NsxGuestNetworkGuru extends GuestNetworkGuru implements NetworkMigrationResponder { + private static final Logger LOGGER = Logger.getLogger(NsxGuestNetworkGuru.class); + + @Inject + NetworkOfferingServiceMapDao networkOfferingServiceMapDao; + + private static final Networks.TrafficType[] TrafficTypes = {Networks.TrafficType.Guest}; + + public NsxGuestNetworkGuru() { + super(); + _isolationMethods = new PhysicalNetwork.IsolationMethod[] {new PhysicalNetwork.IsolationMethod("NSX")}; + } + + + @Override + public boolean prepareMigration(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) { + return false; + } + + @Override + public void rollbackMigration(NicProfile nic, Network network, VirtualMachineProfile vm, ReservationContext src, ReservationContext dst) { + + } + + @Override + public void commitMigration(NicProfile nic, Network network, VirtualMachineProfile vm, ReservationContext src, ReservationContext dst) { + + } + + @Override + public boolean canHandle(NetworkOffering offering, DataCenter.NetworkType networkType, + PhysicalNetwork physicalNetwork) { + return networkType == DataCenter.NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) + && isMyIsolationMethod(physicalNetwork) && networkOfferingServiceMapDao.isProviderForNetworkOffering( + offering.getId(), Network.Provider.Tungsten); + } +} diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java new file mode 100644 index 00000000000..2aefbf6488a --- /dev/null +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderService.java @@ -0,0 +1,17 @@ +package org.apache.cloudstack.service; + +import com.cloud.network.NsxProvider; +import com.cloud.utils.component.PluggableService; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.command.AddNsxControllerCmd; +import org.apache.cloudstack.api.response.NsxControllerResponse; + +import java.util.List; + +public interface NsxProviderService extends PluggableService { + NsxProvider addProvider(AddNsxControllerCmd cmd); + + NsxControllerResponse createNsxControllerResponse(NsxProvider tungstenProvider); + + List<BaseResponse> listTungstenProvider(Long zoneId); +} diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java new file mode 100644 index 00000000000..d98b1d94245 --- /dev/null +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxProviderServiceImpl.java @@ -0,0 +1,51 @@ +package org.apache.cloudstack.service; + +import com.cloud.host.DetailVO; +import com.cloud.network.NsxProvider; +import com.cloud.network.dao.NsxProviderDao; +import com.cloud.network.element.NsxProviderVO; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.TransactionCallback; +import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.command.AddNsxControllerCmd; +import org.apache.cloudstack.api.response.NsxControllerResponse; + +import javax.inject.Inject; +import javax.naming.ConfigurationException; +import java.util.List; + +public class NsxProviderServiceImpl implements NsxProviderService { + + @Inject + NsxProviderDao nsxProviderDao; + + @Override + public NsxProvider addProvider(AddNsxControllerCmd cmd) { + NsxProviderVO nsxProvider = Transaction.execute((TransactionCallback<NsxProviderVO>) status -> { + NsxProviderVO nsxProviderVO = new NsxProviderVO(cmd.getZoneId(), cmd.getName(), cmd.getHostname(), + cmd.getUsername(), cmd.getPassword(), + cmd.getTier0Gateway(), cmd.getEdgeCluster()); + nsxProviderDao.persist(nsxProviderVO); + + return nsxProviderVO; + }); + return null; + } + + @Override + public NsxControllerResponse createNsxControllerResponse(NsxProvider tungstenProvider) { + return null; + } + + @Override + public List<BaseResponse> listTungstenProvider(Long zoneId) { + return null; + } + + @Override + public List<Class<?>> getCommands() { + return null; + } +} diff --git a/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml index c7be491e247..898975067fb 100644 --- a/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml +++ b/plugins/network-elements/nsx/src/main/resources/META-INF/cloudstack/nsx/spring-nsx-context.xml @@ -26,7 +26,10 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="Nsx" class="org.apache.cloudstack.service.NsxElement"> - <property name="name" value="NsxElement"/> + <property name="name" value="Nsx"/> + </bean> + <bean id="NsxGuestNetworkGuru" class="org.apache.cloudstack.service.NsxGuestNetworkGuru"> + <property name="name" value="NsxGuestNetworkGuru" /> </bean> </beans> diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 568625c856b..fd86043ed51 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -2310,6 +2310,7 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setForVpc(_configMgr.isOfferingForVpc(offering)); response.setForTungsten(offering.isForTungsten()); + response.setForNsx(offering.isForNsx()); response.setServices(serviceResponses); //set network offering details Map<Detail, String> details = _ntwkModel.getNtwkOffDetails(offering.getId()); diff --git a/server/src/main/java/com/cloud/api/query/vo/NetworkOfferingJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/NetworkOfferingJoinVO.java index 2f89b195868..f5d4e150cb3 100644 --- a/server/src/main/java/com/cloud/api/query/vo/NetworkOfferingJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/NetworkOfferingJoinVO.java @@ -157,6 +157,8 @@ public class NetworkOfferingJoinVO extends BaseViewVO implements NetworkOffering @Column(name = "for_tungsten") boolean forTungsten; + @Column(name = "for_nsx") + boolean forNsx; @Column(name = "service_package_id") private String servicePackageUuid = null; @@ -349,6 +351,15 @@ public class NetworkOfferingJoinVO extends BaseViewVO implements NetworkOffering public void setForVpc(boolean forVpc) { this.forVpc = forVpc; } + @Override + public boolean isForNsx() { + return forNsx; + } + + public void setForNsx(boolean forNsx) { + this.forNsx = forNsx; + } + public String getServicePackage() { return servicePackageUuid; } diff --git a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java index 3f9447812a7..1b318f6b5f0 100644 --- a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java @@ -999,6 +999,11 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio defaultTungstenSharedSGNetworkOfferingProviders.put(Service.Dns, Provider.Tungsten); defaultTungstenSharedSGNetworkOfferingProviders.put(Service.SecurityGroup, Provider.Tungsten); + final Map<Network.Service, Network.Provider> defaultNSXNetworkOfferingProviders = new HashMap<>(); + defaultNSXNetworkOfferingProviders.put(Service.Connectivity, Provider.Nsx); + defaultNSXNetworkOfferingProviders.put(Service.Dhcp, Provider.Nsx); + defaultNSXNetworkOfferingProviders.put(Service.Dns, Provider.Nsx); + final Map<Network.Service, Network.Provider> defaultIsolatedSourceNatEnabledNetworkOfferingProviders = new HashMap<Network.Service, Network.Provider>(); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Dhcp, Provider.VirtualRouter); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Dns, Provider.VirtualRouter); @@ -1200,6 +1205,20 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio } _networkOfferingDao.persistDefaultL2NetworkOfferings(); + // Offering #9 - network offering for nsx provider + NetworkOfferingVO defaultNSXNetworkOffering = + new NetworkOfferingVO(NetworkOffering.DEFAULT_NSX_OFFERING, "Offering for NSX enabled networks", + 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); + + for (Map.Entry<Network.Service, Network.Provider> service : defaultNSXNetworkOfferingProviders.entrySet()) { + NetworkOfferingServiceMapVO offService = + new NetworkOfferingServiceMapVO(defaultNSXNetworkOffering.getId(), service.getKey(), service.getValue()); + _ntwkOfferingServiceMapDao.persist(offService); + s_logger.trace("Added service for the network offering: " + offService); + } } }); } diff --git a/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue index e424ddccc16..5491612411f 100644 --- a/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue +++ b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue @@ -66,6 +66,7 @@ <a-select-option value="VSP"> VSP </a-select-option> <a-select-option value="VCS"> VCS </a-select-option> <a-select-option value="TF"> TF </a-select-option> + <a-select-option value="NSX"> NSX </a-select-option> <template #suffixIcon> <a-tooltip
