Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E06DCCE90 for ; Sun, 27 May 2012 22:30:48 +0000 (UTC) Received: (qmail 88476 invoked by uid 500); 27 May 2012 22:30:45 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 88287 invoked by uid 500); 27 May 2012 22:30:45 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 87606 invoked by uid 99); 27 May 2012 22:30:44 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 27 May 2012 22:30:44 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id C5E8218414; Sun, 27 May 2012 22:30:43 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ke4qqq@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [16/50] git commit: CS-9919: Support for Nexus Swiches (Cisco Vswitches) Message-Id: <20120527223043.C5E8218414@tyr.zones.apache.org> Date: Sun, 27 May 2012 22:30:43 +0000 (UTC) CS-9919: Support for Nexus Swiches (Cisco Vswitches) Description: Incorporating more changes post review by Alena. 1. Renamed the ListCiscoVSMDetailsCmd command to ListCiscoNexusVSMsCmd. The command will return a list of VSMs always, depending on what parameter is passed to it. If a clusterId is passed to it, it will return the VSM associated to that cluster, if present. If a zoneId is passed in, it will return a list of all VSMs configured for any clusters of type VMware within that zone. If neither is passed, it will return a list of all VSMs configured in the management server. If no VSMs are found, it will return an exception response. 2. Cleaned up miscellaneous code. Conflicts: client/tomcatconf/cisconexusvsm_commands.properties.in server/src/com/cloud/server/ManagementServerImpl.java Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ed0ba1a0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ed0ba1a0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ed0ba1a0 Branch: refs/heads/master Commit: ed0ba1a0e66eb2a386177f37fe82ce38139a074a Parents: 5fc5b7a Author: Vijayendra Bhamidipati Authored: Tue May 22 17:22:29 2012 -0700 Committer: Vijayendra Bhamidipati Committed: Fri May 25 18:27:29 2012 -0700 ---------------------------------------------------------------------- api/src/com/cloud/api/BaseCmd.java | 4 + .../com/cloud/api/commands/ListClustersCmd.java | 1 - api/src/com/cloud/server/ManagementService.java | 7 + .../cisconexusvsm_commands.properties.in | 4 +- .../cloud/api/commands/ListCiscoNexusVSMsCmd.java | 117 +++++++++++++++ .../cloud/api/commands/ListCiscoVSMDetailsCmd.java | 91 ----------- .../cloud/network/dao/CiscoNexusVSMDeviceDao.java | 7 + .../network/dao/CiscoNexusVSMDeviceDaoImpl.java | 9 + .../network/element/CiscoNexusVSMElement.java | 87 ++++++----- .../element/CiscoNexusVSMElementService.java | 12 +- .../src/com/cloud/server/ManagementServerImpl.java | 14 ++ 11 files changed, 212 insertions(+), 141 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/api/src/com/cloud/api/BaseCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/BaseCmd.java b/api/src/com/cloud/api/BaseCmd.java index a0d5d77..3a83abd 100755 --- a/api/src/com/cloud/api/BaseCmd.java +++ b/api/src/com/cloud/api/BaseCmd.java @@ -184,6 +184,10 @@ public abstract class BaseCmd { _responseObject = responseObject; } + public ManagementService getMgmtServiceRef() { + return _mgr; + } + public static String getDateString(Date date) { if (date == null) { return ""; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/api/src/com/cloud/api/commands/ListClustersCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java index 9dc6da0..c8af568 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -22,7 +22,6 @@ import com.cloud.api.BaseListCmd; import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.ClusterResponse; import com.cloud.api.response.ListResponse; import com.cloud.org.Cluster; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/api/src/com/cloud/server/ManagementService.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e36cc81..84c4d0d 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -127,6 +127,13 @@ public interface ManagementService { * @return */ List searchForClusters(ListClustersCmd c); + + /** + * Searches for Clusters by the specified zone Id. + * @param zoneId + * @return + */ + List searchForClusters(long zoneId, Long startIndex, Long pageSizeVal, String hypervisorType); /** * Searches for Pods by the specified search criteria Can search by: pod name and/or zone name http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/client/tomcatconf/cisconexusvsm_commands.properties.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in index 8732357..17b9c79 100644 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ b/client/tomcatconf/cisconexusvsm_commands.properties.in @@ -4,5 +4,5 @@ #### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands deleteCiscoNexusVSM = com.cloud.api.commands.DeleteCiscoNexusVSMCmd;1 enableCiscoNexusVSM = com.cloud.api.commands.EnableCiscoNexusVSMCmd;1 -disableCiscoNexusVSM = com.cloud.api.commands.DisableCiscoNexusVSMCmd;1 -listCiscoVSMDetails = com.cloud.api.commands.ListCiscoVSMDetailsCmd;1 +disableCiscoNexusVSM = com.cloud.api.commands.DisableCiscoNexusVSMCmd;1 +listCiscoNexusVSMs = com.cloud.api.commands.ListCiscoNexusVSMsCmd;1 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/server/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java new file mode 100755 index 0000000..40bd36e --- /dev/null +++ b/server/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.cloud.api.commands; + +import org.apache.log4j.Logger; +import com.cloud.api.ApiConstants; +import com.cloud.api.BaseListCmd; +import com.cloud.api.IdentityMapper; +import com.cloud.api.Implementation; +import com.cloud.api.Parameter; +import com.cloud.api.PlugService; +import com.cloud.api.ServerApiException; +import com.cloud.api.response.CiscoNexusVSMResponse; +import com.cloud.api.response.ListResponse; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.CiscoNexusVSMDevice; +import com.cloud.network.element.CiscoNexusVSMElementService; +import com.cloud.user.Account; + +import java.util.ArrayList; +import java.util.List; + +@Implementation(responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") +public class ListCiscoNexusVSMsCmd extends BaseListCmd { + + /** + * This command returns a list of all the VSMs configured in the management server. + * If a clusterId is specified, it will return a list containing only that VSM + * that is associated with that cluster. If a zone is specified, it will pull + * up all the clusters of type vmware in that zone, and prepare a list of VSMs + * associated with those clusters. + */ + public static final Logger s_logger = Logger.getLogger(ListCiscoNexusVSMsCmd.class.getName()); + private static final String s_name = "listcisconexusvsmscmdresponse"; + @PlugService CiscoNexusVSMElementService _ciscoNexusVSMService; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="cluster") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") + private long clusterId; + + @IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") + private long zoneId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public long getClusterId() { + return clusterId; + } + + public long getZoneId() { + return zoneId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + // NOTE- The uuid that is sent in during the invocation of the API AddCiscoNexusVSM() + // automagically gets translated to the corresponding db id before this execute() method + // is invoked. That's the reason why we don't have any uuid-dbid translation code here. + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { + List vsmDeviceList = _ciscoNexusVSMService.getCiscoNexusVSMs(this); + + if (vsmDeviceList.size() > 0) { + ListResponse response = new ListResponse(); + List vsmResponses = new ArrayList(); + for (CiscoNexusVSMDevice vsmDevice : vsmDeviceList) { + CiscoNexusVSMResponse vsmresponse = _ciscoNexusVSMService.createCiscoNexusVSMDetailedResponse(vsmDevice); + vsmresponse.setObjectName("cisconexusvsm"); + response.setResponseName(getCommandName()); + vsmResponses.add(vsmresponse); + } + response.setResponses(vsmResponses); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseListCmd.INTERNAL_ERROR, "No VSM found."); + } + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/api/commands/ListCiscoVSMDetailsCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/ListCiscoVSMDetailsCmd.java b/server/src/com/cloud/api/commands/ListCiscoVSMDetailsCmd.java deleted file mode 100755 index 5a9c049..0000000 --- a/server/src/com/cloud/api/commands/ListCiscoVSMDetailsCmd.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.api.commands; - -import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.CiscoNexusVSMResponse; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.CiscoNexusVSMDevice; -import com.cloud.network.element.CiscoNexusVSMElementService; -import com.cloud.user.Account; -import com.cloud.user.UserContext; - -@Implementation(responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") -public class ListCiscoVSMDetailsCmd extends BaseCmd { - - public static final Logger s_logger = Logger.getLogger(ListCiscoVSMDetailsCmd.class.getName()); - private static final String s_name = "listciscovsmdetailscmdresponse"; - @PlugService CiscoNexusVSMElementService _ciscoNexusVSMService; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required = true, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") - private long clusterId; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public long getClusterId() { - return clusterId; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - // NOTE- The uuid that is sent in during the invocation of the API AddCiscoNexusVSM() - // automagically gets translated to the corresponding db id before this execute() method - // is invoked. That's the reason why we don't have any uuid-dbid translation code here. - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { - CiscoNexusVSMDevice vsmDevice = _ciscoNexusVSMService.getCiscoNexusVSMByClusId(this); - if (vsmDevice != null) { - CiscoNexusVSMResponse response = _ciscoNexusVSMService.createCiscoNexusVSMDetailedResponse(vsmDevice); - response.setObjectName("cisconexusvsm"); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to retrieve Cisco Nexus Virtual Switch Manager for the specified cluster due to an internal error."); - } - } - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java b/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java index 5c659b3..95771a5 100644 --- a/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java +++ b/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDao.java @@ -54,6 +54,13 @@ public interface CiscoNexusVSMDeviceDao extends GenericDao listByMgmtVlan(int vlanId); /** + * Lists all configured VSMs on the management server. + * @return + */ + List listAllVSMs(); + + + /** * Below is a big list of other functions that we may need, but will declare/define/implement once we implement * the functions above. Pasting those below to not lose track of them. * http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java b/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java index c4c7e5c..02d9e44 100644 --- a/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java +++ b/server/src/com/cloud/network/dao/CiscoNexusVSMDeviceDaoImpl.java @@ -32,6 +32,7 @@ public class CiscoNexusVSMDeviceDaoImpl extends GenericDaoBase nameSearch; final SearchBuilder ipaddrSearch; final SearchBuilder genericVlanIdSearch; + final SearchBuilder fullTableSearch; // We will add more searchbuilder objects. @@ -61,6 +62,9 @@ public class CiscoNexusVSMDeviceDaoImpl extends GenericDaoBase listAllVSMs() { + SearchCriteria sc = fullTableSearch.create(); + return search(sc, null); + } public List listByVlanId(int vlanId) { SearchCriteria sc = genericVlanIdSearch.create(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/network/element/CiscoNexusVSMElement.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/element/CiscoNexusVSMElement.java b/server/src/com/cloud/network/element/CiscoNexusVSMElement.java index 0e60fdd..844d125 100644 --- a/server/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/server/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -14,40 +14,32 @@ package com.cloud.network.element; import java.util.List; import java.util.Map; +import java.util.ArrayList; import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.agent.AgentManager; import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; import com.cloud.api.commands.EnableCiscoNexusVSMCmd; import com.cloud.api.commands.DisableCiscoNexusVSMCmd; -import com.cloud.api.commands.ListCiscoVSMDetailsCmd; +import com.cloud.api.commands.ListCiscoNexusVSMsCmd; import com.cloud.api.response.CiscoNexusVSMResponse; -import com.cloud.configuration.ConfigurationManager; -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.dao.DataCenterDao; import com.cloud.deploy.DeployDestination; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.dao.HostDao; -import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.CiscoNexusVSMDeviceVO; import com.cloud.network.CiscoNexusVSMDevice; import com.cloud.network.CiscoNexusVSMDeviceManagerImpl; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.utils.component.Inject; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; @@ -55,10 +47,11 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.cloud.network.element.NetworkElement; import com.cloud.offering.NetworkOffering; +import com.cloud.org.Cluster; import com.cloud.utils.component.Manager; -import com.cloud.utils.db.DB; import com.cloud.exception.ResourceInUseException; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.server.ManagementService; @Local(value = NetworkElement.class) public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl implements CiscoNexusVSMElementService, NetworkElement, Manager { @@ -66,30 +59,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme private static final Logger s_logger = Logger.getLogger(CiscoNexusVSMElement.class); @Inject - NetworkManager _networkManager; - @Inject - ConfigurationManager _configMgr; - @Inject - NetworkServiceMapDao _ntwkSrvcDao; - @Inject - AgentManager _agentMgr; - @Inject - NetworkManager _networkMgr; - @Inject - HostDao _hostDao; - @Inject - DataCenterDao _dcDao; - @Inject - HostDetailsDao _hostDetailDao; - @Inject - PhysicalNetworkDao _physicalNetworkDao; - @Inject - NetworkDao _networkDao; - @Inject - HostDetailsDao _detailsDao; - @Inject - ConfigurationDao _configDao; - + CiscoNexusVSMDeviceDao _vsmDao; @Override public Map> getCapabilities() { @@ -161,7 +131,6 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme return true; } - @Override @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DELETE, eventDescription = "deleting VSM", async = true) public boolean deleteCiscoNexusVSM(DeleteCiscoNexusVSMCmd cmd) { @@ -178,7 +147,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme @Override public boolean enableCiscoNexusVSM(EnableCiscoNexusVSMCmd cmd) { - boolean result; + boolean result; result = enableCiscoNexusVSM(cmd.getCiscoNexusVSMDeviceId()); return result; } @@ -191,11 +160,45 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(ListCiscoVSMDetailsCmd cmd) { - CiscoNexusVSMDeviceVO result = getCiscoVSMbyClusId(cmd.getClusterId()); - if (result == null) { - throw new CloudRuntimeException("No Cisco VSM associated with specified Cluster Id"); + public List getCiscoNexusVSMs(ListCiscoNexusVSMsCmd cmd) { + // If clusterId is defined, then it takes precedence, and we will return + // the VSM associated with this cluster. + + Long clusterId = cmd.getClusterId(); + Long zoneId = cmd.getZoneId(); + List result = new ArrayList(); + if (clusterId != null && clusterId.longValue() != 0) { + // Find the VSM associated with this clusterId and return a list. + CiscoNexusVSMDeviceVO vsm = getCiscoVSMbyClusId(cmd.getClusterId()); + if (vsm == null) { + throw new CloudRuntimeException("No Cisco VSM associated with specified Cluster Id"); + } + // Else, add it to a list and return the list. + result.add(vsm); + return result; + } + // Else if there is only a zoneId defined, get a list of all vmware clusters + // in the zone, and then for each cluster, pull the VSM and prepare a list. + if (zoneId != null && zoneId.longValue() != 0) { + ManagementService ref = cmd.getMgmtServiceRef(); + List clusterList = ref.searchForClusters(zoneId, cmd.getStartIndex(), cmd.getPageSizeVal(), "VMware"); + + if (clusterList.size() == 0) { + throw new CloudRuntimeException("No VMWare clusters found in the specified zone!"); + } + // Else, iterate through each vmware cluster, pull its VSM if it has one, and add to the list. + for (Cluster clus : clusterList) { + CiscoNexusVSMDeviceVO vsm = getCiscoVSMbyClusId(clus.getId()); + if (vsm != null) + result.add(vsm); + } + return result; } + + // If neither is defined, we will simply return the entire list of VSMs + // configured in the management server. + // TODO: Is this a safe thing to do? Only ROOT admin can invoke this call. + result = _vsmDao.listAllVSMs(); return result; } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java b/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java index b806e7b..2912e6f 100644 --- a/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java +++ b/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java @@ -18,10 +18,12 @@ package com.cloud.network.element; +import java.util.List; + import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; import com.cloud.api.commands.EnableCiscoNexusVSMCmd; import com.cloud.api.commands.DisableCiscoNexusVSMCmd; -import com.cloud.api.commands.ListCiscoVSMDetailsCmd; +import com.cloud.api.commands.ListCiscoNexusVSMsCmd; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDeviceVO; import com.cloud.network.CiscoNexusVSMDevice; @@ -47,11 +49,11 @@ public interface CiscoNexusVSMElementService extends PluggableService { public boolean disableCiscoNexusVSM(DisableCiscoNexusVSMCmd cmd); /** - * Returns a VSM associated with a cluster. - * @param GetCiscoVSMByClusterIdCmd - * @return CiscoNexusVSMDeviceVO + * Returns a list of VSMs. + * @param ListCiscoNexusVSMsCmd + * @return List */ - public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(ListCiscoVSMDetailsCmd cmd); + public List getCiscoNexusVSMs(ListCiscoNexusVSMsCmd cmd); /** * creates API response object for Cisco Nexus VSMs http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ed0ba1a0/server/src/com/cloud/server/ManagementServerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 46974bb..b8fb1db 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -160,6 +160,7 @@ import com.cloud.network.NetworkVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; +import com.cloud.org.Cluster; import com.cloud.org.Grouping.AllocationState; import com.cloud.projects.Project; import com.cloud.projects.Project.ListProjectResourcesCriteria; @@ -793,7 +794,20 @@ public class ManagementServerImpl implements ManagementServer { return sol; } + + @Override + public List searchForClusters(long zoneId, Long startIndex, Long pageSizeVal, String hypervisorType) { + Filter searchFilter = new Filter(ClusterVO.class, "id", true, startIndex, pageSizeVal); + SearchCriteria sc = _clusterDao.createSearchCriteria(); + + zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId); + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType); + + return _clusterDao.search(sc, searchFilter); + } + @Override public List searchForClusters(ListClustersCmd cmd) { Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());