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 2b0ddc6f76a add support for adding and listing nsx provider to a zone
2b0ddc6f76a is described below

commit 2b0ddc6f76a77cc9d10324599ca79f7ddfc5b721
Author: Pearl Dsilva <[email protected]>
AuthorDate: Thu Aug 17 12:06:38 2023 -0400

    add support for adding and listing nsx provider to a zone
---
 .../main/java/com/cloud/network/NsxProvider.java   |  3 +
 .../api/command/AddNsxControllerCmd.java           |  6 +-
 .../api/command/ListNsxControllersCmd.java         | 47 +++++++++++++
 .../api/response/NsxControllerResponse.java        | 76 ++++++++++++++++++++++
 .../cloudstack/service/NsxProviderService.java     |  2 +-
 .../cloudstack/service/NsxProviderServiceImpl.java | 48 +++++++++++---
 6 files changed, 169 insertions(+), 13 deletions(-)

diff --git a/api/src/main/java/com/cloud/network/NsxProvider.java 
b/api/src/main/java/com/cloud/network/NsxProvider.java
index fb91cbd3a10..5bb8ed8e873 100644
--- a/api/src/main/java/com/cloud/network/NsxProvider.java
+++ b/api/src/main/java/com/cloud/network/NsxProvider.java
@@ -8,4 +8,7 @@ public interface NsxProvider extends InternalIdentity, Identity 
{
     String getProviderName();
     String getUsername();
     long getZoneId();
+
+    String getTier0Gateway();
+    String getEdgeCluster();
 }
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
index e91a8b3f03a..a567803c218 100644
--- 
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
@@ -9,6 +9,7 @@ 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.context.CallContext;
 import org.apache.cloudstack.service.NsxProviderService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,7 +18,8 @@ import javax.inject.Inject;
 
 
 @APICommand(name = AddNsxControllerCmd.APINAME, description = "Add NSX 
Controller to CloudStack",
-        responseObject = NsxControllerResponse.class, requestHasSensitiveInfo 
= false, responseHasSensitiveInfo = false)
+        responseObject = NsxControllerResponse.class, requestHasSensitiveInfo 
= false,
+        responseHasSensitiveInfo = false, since = "4.19.0.0")
 public class AddNsxControllerCmd extends BaseCmd {
     public static final String APINAME = "addNsxController";
     public static final Logger LOGGER = 
LoggerFactory.getLogger(AddNsxControllerCmd.class.getName());
@@ -94,6 +96,6 @@ public class AddNsxControllerCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return 0;
+        return CallContext.current().getCallingAccount().getId();
     }
 }
diff --git 
a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/ListNsxControllersCmd.java
 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/ListNsxControllersCmd.java
new file mode 100644
index 00000000000..6483f5cdca0
--- /dev/null
+++ 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/api/command/ListNsxControllersCmd.java
@@ -0,0 +1,47 @@
+package org.apache.cloudstack.api.command;
+
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.utils.StringUtils;
+import org.apache.cloudstack.api.*;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.NsxControllerResponse;
+import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.service.NsxProviderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Inject;
+import java.util.List;
+
+import static org.apache.cloudstack.api.command.ListNsxControllersCmd.APINAME;
+
+@APICommand(name = APINAME, description = "list all NSX controllers added to 
CloudStack",
+        responseObject = NsxControllerResponse.class, requestHasSensitiveInfo 
= false,
+        responseHasSensitiveInfo = false, since = "4.19.0.0")
+public class ListNsxControllersCmd extends BaseListCmd {
+    public static final String APINAME = "listNsxControllers";
+    public static final Logger LOGGER = 
LoggerFactory.getLogger(ListNsxControllersCmd.class.getName());
+
+    @Inject
+    private NsxProviderService nsxProviderService;
+
+    @Parameter(name = ApiConstants.ZONE_ID, description = "NSX controller 
added to the specific zone",
+            type = CommandType.UUID, entityType = ZoneResponse.class)
+    Long zoneId;
+
+    @Override
+    public void execute() throws ServerApiException, 
ConcurrentOperationException {
+        List<BaseResponse> baseResponseList = 
nsxProviderService.listNsxProviders(zoneId);
+        List<BaseResponse> pagingList = 
StringUtils.applyPagination(baseResponseList, this.getStartIndex(), 
this.getPageSizeVal());
+        ListResponse<BaseResponse> listResponse = new ListResponse<>();
+        listResponse.setResponses(pagingList);
+        listResponse.setResponseName(getCommandName());
+        setResponseObject(listResponse);
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return CallContext.current().getCallingAccount().getId();
+    }
+}
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
index f164dbee487..f54790d7640 100644
--- 
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
@@ -1,11 +1,87 @@
 package org.apache.cloudstack.api.response;
 
 import com.cloud.network.NsxProvider;
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
 import org.apache.cloudstack.api.EntityReference;
 
 @EntityReference(value = {NsxProvider.class})
 public class NsxControllerResponse extends BaseResponse {
+    @SerializedName(ApiConstants.NAME)
+    @Param(description = "NSX controller name")
+    private String name;
 
+    @SerializedName(ApiConstants.ZONE_ID)
+    @Param(description = "Zone ID to which the NSX controller is associated 
with")
+    private long zoneId;
 
+    @SerializedName(ApiConstants.ZONE_NAME)
+    @Param(description = "Zone name to which the NSX controller is associated 
with")
+    private String zoneName;
+
+    @SerializedName(ApiConstants.HOST_NAME)
+    @Param(description = "NSX controller hostname or IP address")
+    private String hostname;
+
+    // TODO: Should Password be returned?
+
+    @SerializedName(ApiConstants.TIER0_GATEWAY)
+    @Param(description = "The tier-0 gateway network. Tier-0 gateway is 
responsible for handling" +
+            " traffic between logical and physical networks"
+    )
+    private String tier0Gateway;
+
+    @SerializedName(ApiConstants.EDGE_CLUSTER)
+    @Param(description = "The name of the edge cluster. An edge cluster is a 
logical grouping of edge nodes in NSX")
+    private String edgeCluster;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getZoneId() {
+        return zoneId;
+    }
+
+    public void setZoneId(long zoneId) {
+        this.zoneId = zoneId;
+    }
+
+    public String getZoneName() {
+        return zoneName;
+    }
+
+    public void setZoneName(String zoneName) {
+        this.zoneName = zoneName;
+    }
+
+    public String getHostname() {
+        return hostname;
+    }
+
+    public void setHostname(String hostname) {
+        this.hostname = hostname;
+    }
+
+    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/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
index 2aefbf6488a..43312b351d3 100644
--- 
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
@@ -13,5 +13,5 @@ public interface NsxProviderService extends PluggableService {
 
     NsxControllerResponse createNsxControllerResponse(NsxProvider 
tungstenProvider);
 
-    List<BaseResponse> listTungstenProvider(Long zoneId);
+    List<BaseResponse> listNsxProviders(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
index d98b1d94245..718cd6f3804 100644
--- 
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
@@ -1,25 +1,29 @@
 package org.apache.cloudstack.service;
 
-import com.cloud.host.DetailVO;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.dao.DataCenterDao;
 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.command.ListNsxControllersCmd;
 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.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class NsxProviderServiceImpl implements NsxProviderService {
 
     @Inject
     NsxProviderDao nsxProviderDao;
+    @Inject
+    DataCenterDao dataCenterDao;
 
     @Override
     public NsxProvider addProvider(AddNsxControllerCmd cmd) {
@@ -28,24 +32,48 @@ public class NsxProviderServiceImpl implements 
NsxProviderService {
                     cmd.getUsername(),  cmd.getPassword(),
                     cmd.getTier0Gateway(), cmd.getEdgeCluster());
             nsxProviderDao.persist(nsxProviderVO);
-
             return nsxProviderVO;
         });
-        return null;
+        return  null;
     }
 
     @Override
-    public NsxControllerResponse createNsxControllerResponse(NsxProvider 
tungstenProvider) {
-        return null;
+    public NsxControllerResponse createNsxControllerResponse(NsxProvider 
nsxProvider) {
+        DataCenterVO zone  = dataCenterDao.findById(nsxProvider.getZoneId());
+        if (Objects.isNull(zone)) {
+            throw new CloudRuntimeException(String.format("Failed to find zone 
with id %s", nsxProvider.getZoneId()));
+        }
+        NsxControllerResponse response = new NsxControllerResponse();
+        response.setName(nsxProvider.getProviderName());
+        response.setHostname(nsxProvider.getHostname());
+        response.setZoneId(nsxProvider.getZoneId());
+        response.setZoneName(zone.getName());
+        response.setTier0Gateway(nsxProvider.getTier0Gateway());
+        response.setTier0Gateway(nsxProvider.getEdgeCluster());
+        return response;
     }
 
     @Override
-    public List<BaseResponse> listTungstenProvider(Long zoneId) {
-        return null;
+    public List<BaseResponse> listNsxProviders(Long zoneId) {
+        List<BaseResponse> nsxControllersResponseList = new ArrayList<>();
+        if (zoneId != null) {
+            NsxProviderVO nsxProviderVO = nsxProviderDao.findByZoneId(zoneId);
+            
nsxControllersResponseList.add(createNsxControllerResponse(nsxProviderVO));
+        } else {
+            List<NsxProviderVO> nsxProviderVOList = nsxProviderDao.listAll();
+            for (NsxProviderVO nsxProviderVO : nsxProviderVOList) {
+                
nsxControllersResponseList.add(createNsxControllerResponse(nsxProviderVO));
+            }
+        }
+
+        return nsxControllersResponseList;
     }
 
     @Override
     public List<Class<?>> getCommands() {
-        return null;
+        List<Class<?>> cmdList = new ArrayList<Class<?>>();
+        cmdList.add(AddNsxControllerCmd.class);
+        cmdList.add(ListNsxControllersCmd.class);
+        return cmdList;
     }
 }

Reply via email to