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 0CCF9CE92 for ; Sun, 27 May 2012 22:30:49 +0000 (UTC) Received: (qmail 88492 invoked by uid 500); 27 May 2012 22:30:45 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 88369 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 87655 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 20B2618432; Sun, 27 May 2012 22:30:44 +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: [31/50] git commit: CS-9919 Support for Nexus Swiches (Cisco Vswitches) Message-Id: <20120527223044.20B2618432@tyr.zones.apache.org> Date: Sun, 27 May 2012 22:30:44 +0000 (UTC) CS-9919 Support for Nexus Swiches (Cisco Vswitches) Description: Added a new API GetCiscoVSMDetailsCmd. This API gets all details of a VSM when provided with the VSM ID. Resolved Conflicts: client/tomcatconf/cisconexusvsm_commands.properties.in Conflicts: client/tomcatconf/cisconexusvsm_commands.properties.in Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c08716db Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c08716db Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c08716db Branch: refs/heads/master Commit: c08716db0031c6391b5f25e9c30199319f909435 Parents: b793c4c Author: Vijayendra Bhamidipati Authored: Wed May 16 18:00:43 2012 -0700 Committer: Vijayendra Bhamidipati Committed: Fri May 25 18:06:27 2012 -0700 ---------------------------------------------------------------------- api/src/com/cloud/api/ApiConstants.java | 8 ++ .../cloud/api/response/CiscoNexusVSMResponse.java | 95 ++++++++++++--- .../cisconexusvsm_commands.properties.in | 13 +- .../cloud/api/commands/GetCiscoVSMDetailsCmd.java | 96 +++++++++++++++ .../network/CiscoNexusVSMDeviceManagerImpl.java | 5 + .../network/element/CiscoNexusVSMElement.java | 31 +++++ .../element/CiscoNexusVSMElementService.java | 21 +++- 7 files changed, 242 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/api/src/com/cloud/api/ApiConstants.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index 300c5c1..f678e07 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -346,6 +346,14 @@ public class ApiConstants { public static final String VSM_USERNAME = "vsmusername"; public static final String VSM_PASSWORD = "vsmpassword"; public static final String VSM_IPADDRESS = "vsmipaddress"; + public static final String VSM_MGMT_VLAN_ID = "vsmmgmtvlanid"; + public static final String VSM_PKT_VLAN_ID = "vsmpktvlanid"; + public static final String VSM_CTRL_VLAN_ID = "vsmctrlvlanid"; + public static final String VSM_STORAGE_VLAN_ID = "vsmstoragevlanid"; + public static final String VSM_DOMAIN_ID = "vsmdomainid"; + public static final String VSM_CONFIG_MODE = "vsmconfigmode"; + public static final String VSM_CONFIG_STATE = "vsmconfigstate"; + public static final String VSM_DEVICE_STATE = "vsmdevicestate"; public enum HostDetails { all, capacity, events, stats, min; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/api/src/com/cloud/api/response/CiscoNexusVSMResponse.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/api/src/com/cloud/api/response/CiscoNexusVSMResponse.java index 1b80d31..3bef2ed 100644 --- a/api/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/api/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -12,6 +12,8 @@ // Automatically generated by addcopyright.py at 04/02/2012 package com.cloud.api.response; +import javax.persistence.Column; + import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; @@ -20,35 +22,48 @@ import com.google.gson.annotations.SerializedName; public class CiscoNexusVSMResponse extends BaseResponse { @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_ID) @Param(description="device id of the Cisco N1KV VSM device") - // Do we need a new table name for this? During discussion with Frank, we thought we could just use the host table. private IdentityProxy id = new IdentityProxy("virtual_supervisor_module"); - - // A Cisco n1kv vsm could be plumbed in multiple VLANs.. not sure what a physical network id is, so commenting it - // out for now. - //@SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this netscaler device belongs to") - //private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - - // What's a provider for netscaler? Not sure if we need this for n1kv vsm, so commenting it out. - //@SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider") - //private String providerName; @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_NAME) @Param(description="device name") private String deviceName; - // Not sure if we need this but we'll keep it for now.. obviously we would want to know when an N1KV VSM is disabled or something. + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external Cisco Nexus 1000v Virtual Supervisor Module") + private String vsmmgmtIpAddress; + @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_STATE) @Param(description="device state") private String deviceState; - // Don't think we need to track the public interface/private interface of a VSM. We'd just need the ip addr. - //@SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the load balancer") - //private String publicInterface; + @SerializedName(ApiConstants.VCENTER_IP_ADDRESS) @Param(description="ipaddress of vCenter the VSM connects to") + private String vcenteripaddress; + + @SerializedName(ApiConstants.VCENTER_DC_NAME) @Param(description="name of the vCenter Data Center the VSM is associated with") + private String vcenterdcname; - //@SerializedName(ApiConstants.PRIVATE_INTERFACE) @Param(description="the private interface of the load balancer") - //private String privateInterface; + @SerializedName(ApiConstants.VSM_MGMT_VLAN_ID) @Param(description="management vlan id of the VSM") + private String vsmmgmtvlanid; - @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external Cisco Nexus 1000v Virtual Supervisor Module") - private String vsmmgmtIpAddress; + @SerializedName(ApiConstants.VSM_CTRL_VLAN_ID) @Param(description="control vlan id of the VSM") + private int vsmctrlvlanid; + + @SerializedName(ApiConstants.VSM_PKT_VLAN_ID) @Param(description="packet vlan id of the VSM") + private int vsmpktvlanid; + @SerializedName(ApiConstants.VSM_STORAGE_VLAN_ID) @Param(description="storage vlan id of the VSM") + private int vsmstoragevlanid; + + @SerializedName(ApiConstants.VSM_DOMAIN_ID) @Param(description="The VSM is a switch supervisor. This is the VSM's switch domain id") + private String vsmdomainid; + + @SerializedName(ApiConstants.VSM_CONFIG_MODE) @Param(description="The mode of the VSM (standalone/HA)") + private String vsmconfigmode; + + @SerializedName(ApiConstants.VSM_CONFIG_STATE) @Param(description="The Config State (Primary/Standby) of the VSM") + private String vsmconfigstate; + + @SerializedName(ApiConstants.VSM_DEVICE_STATE) @Param(description="The Device State (Enabled/Disabled) of the VSM") + private String vsmdevicestate; + + // Setter methods. public void setId(long vsmDeviceId) { this.id.setValue(vsmDeviceId); } @@ -60,4 +75,48 @@ public class CiscoNexusVSMResponse extends BaseResponse { public void setMgmtIpAddress(String ipAddress) { this.vsmmgmtIpAddress = ipAddress; } + + public void setDeviceState(String deviceState) { + this.deviceState = deviceState; + } + + public void setvCenterIpAddress(String ipaddress) { + this.vcenteripaddress = ipaddress; + } + + public void setvCenterDcName(String dcName) { + this.vcenterdcname = dcName; + } + + public void setVSMMgmtVlanId(String vlanId) { + this.vsmmgmtvlanid = vlanId; + } + + public void setVSMCtrlVlanId(int vlanId) { + this.vsmctrlvlanid = vlanId; + } + + public void setVSMPktVlanId(int vlanId) { + this.vsmpktvlanid = vlanId; + } + + public void setVSMStorageVlanId(int vlanId) { + this.vsmstoragevlanid = vlanId; + } + + public void setVSMDomainId(String domId) { + this.vsmdomainid = domId; + } + + public void setVSMConfigMode(String configMode) { + this.vsmconfigmode = configMode; + } + + public void setVSMConfigState(String configState) { + this.vsmconfigstate = configState; + } + + public void setVSMDeviceState(String devState) { + this.vsmdevicestate = devState; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/client/tomcatconf/cisconexusvsm_commands.properties.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in index 258f358..aba8e00 100644 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ b/client/tomcatconf/cisconexusvsm_commands.properties.in @@ -1,9 +1,10 @@ ### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER ### Please standardize naming conventions to camel-case (even for acronyms). -#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands -addCiscoNexusVSM = com.cloud.api.commands.AddCiscoNexusVSMCmd;7 -deleteCiscoNexusVSM = com.cloud.api.commands.DeleteCiscoNexusVSMCmd;7 -enableCiscoNexusVSM = com.cloud.api.commands.EnableCiscoNexusVSMCmd;7 -disableCiscoNexusVSM = com.cloud.api.commands.DisableCiscoNexusVSMCmd;7 -getCiscoVSMByClusterId = com.cloud.api.commands.GetCiscoVSMByClusterIdCmd;7 \ No newline at end of file +#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands +addCiscoNexusVSM = com.cloud.api.commands.AddCiscoNexusVSMCmd;1 +deleteCiscoNexusVSM = com.cloud.api.commands.DeleteCiscoNexusVSMCmd;1 +enableCiscoNexusVSM = com.cloud.api.commands.EnableCiscoNexusVSMCmd;1 +disableCiscoNexusVSM = com.cloud.api.commands.DisableCiscoNexusVSMCmd;1 +getCiscoVSMByClusterId = com.cloud.api.commands.GetCiscoVSMByClusterIdCmd;1 +getCiscoVSMDetails = com.cloud.api.commands.GetCiscoVSMDetailsCmd;1 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/server/src/com/cloud/api/commands/GetCiscoVSMDetailsCmd.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/commands/GetCiscoVSMDetailsCmd.java b/server/src/com/cloud/api/commands/GetCiscoVSMDetailsCmd.java new file mode 100755 index 0000000..d36b9ff --- /dev/null +++ b/server/src/com/cloud/api/commands/GetCiscoVSMDetailsCmd.java @@ -0,0 +1,96 @@ +/** + * 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.BaseAsyncCmd; +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.InvalidParameterValueException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.CiscoNexusVSMDeviceVO; +import com.cloud.network.element.CiscoNexusVSMElementService; +import com.cloud.user.UserContext; +import com.cloud.utils.exception.CloudRuntimeException; + +@Implementation(responseObject=CiscoNexusVSMResponse.class, description="Retrieves details of a Cisco Nexus 1000v Virtual Switch Manager ") +public class GetCiscoVSMDetailsCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(GetCiscoVSMDetailsCmd.class.getName()); + private static final String s_name = "getciscovsmdetailscmdresponse"; + @PlugService CiscoNexusVSMElementService _ciscoNexusVSMService; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="virtual_supervisor_module") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required = true, description="Id of the Cisco Nexus VSM appliance.") + private long id; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public long getVSMId() { + return id; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { + try { + CiscoNexusVSMDeviceVO vsmDeviceVO = _ciscoNexusVSMService.getCiscoNexusVSMDetails(this); + if (vsmDeviceVO != null) { + CiscoNexusVSMResponse response = _ciscoNexusVSMService.createCiscoNexusVSMDetailedResponse(vsmDeviceVO); + response.setObjectName("cisconexusvsm"); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to retrieve Cisco Nexus Virtual Switch Manager for the specified cluster due to an internal error."); + } + } catch (InvalidParameterValueException invalidParamExcp) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + } catch (CloudRuntimeException runtimeExcp) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + } + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return UserContext.current().getCaller().getId(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/server/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java b/server/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java index ff8da40..e09eee6 100644 --- a/server/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java +++ b/server/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java @@ -304,6 +304,11 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { } @DB + public CiscoNexusVSMDeviceVO getCiscoVSMbyVSMId(long vsmId) { + return _ciscoNexusVSMDeviceDao.findById(vsmId); + } + + @DB public CiscoNexusVSMDeviceVO getCiscoVSMbyClusId(long clusterId) { ClusterVSMMapVO mapVO = _clusterVSMDao.findByClusterId(clusterId); if (mapVO == null) { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/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 675636b..f0fc362 100644 --- a/server/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/server/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -26,6 +26,7 @@ import com.cloud.api.commands.ListCiscoNexusVSMCmd; import com.cloud.api.commands.EnableCiscoNexusVSMCmd; import com.cloud.api.commands.DisableCiscoNexusVSMCmd; import com.cloud.api.commands.GetCiscoVSMByClusterIdCmd; +import com.cloud.api.commands.GetCiscoVSMDetailsCmd; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; @@ -216,6 +217,15 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override + public CiscoNexusVSMDeviceVO getCiscoNexusVSMDetails(GetCiscoVSMDetailsCmd cmd) { + CiscoNexusVSMDeviceVO result = getCiscoVSMbyVSMId(cmd.getVSMId()); + if (result == null) { + throw new CloudRuntimeException("Cisco VSM with specified Id found"); + } + return result; + } + + @Override public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(GetCiscoVSMByClusterIdCmd cmd) { CiscoNexusVSMDeviceVO result = getCiscoVSMbyClusId(cmd.getClusterId()); if (result == null) { @@ -237,6 +247,27 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme response.setMgmtIpAddress(vsmDeviceVO.getipaddr()); return response; } + + public CiscoNexusVSMResponse createCiscoNexusVSMDetailedResponse(CiscoNexusVSMDeviceVO vsmDeviceVO) { + CiscoNexusVSMResponse response = new CiscoNexusVSMResponse(); + response.setId(vsmDeviceVO.getId()); + response.setDeviceName(vsmDeviceVO.getvsmName()); + response.setDeviceState(vsmDeviceVO.getvsmDeviceState().toString()); + response.setMgmtIpAddress(vsmDeviceVO.getipaddr()); + response.setvCenterDcName(vsmDeviceVO.getvCenterDCName()); + response.setvCenterIpAddress(vsmDeviceVO.getvCenterIPAddr()); + // The following values can be null, so check for that. + if(vsmDeviceVO.getvsmConfigMode() != null) + response.setVSMConfigMode(vsmDeviceVO.getvsmConfigMode().toString()); + if(vsmDeviceVO.getvsmConfigState() != null) + response.setVSMConfigState(vsmDeviceVO.getvsmConfigState().toString()); + if(vsmDeviceVO.getvsmDeviceState() != null) + response.setVSMDeviceState(vsmDeviceVO.getvsmDeviceState().toString()); + response.setVSMCtrlVlanId(vsmDeviceVO.getManagementVlan()); + response.setVSMPktVlanId(vsmDeviceVO.getPacketVlan()); + response.setVSMStorageVlanId(vsmDeviceVO.getStorageVlan()); + return response; + } @Override public String getPropertiesFile() { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c08716db/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 a0bf1dd..c1c5a07 100644 --- a/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java +++ b/server/src/com/cloud/network/element/CiscoNexusVSMElementService.java @@ -24,6 +24,7 @@ import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; import com.cloud.api.commands.EnableCiscoNexusVSMCmd; import com.cloud.api.commands.DisableCiscoNexusVSMCmd; import com.cloud.api.commands.GetCiscoVSMByClusterIdCmd; +import com.cloud.api.commands.GetCiscoVSMDetailsCmd; import com.cloud.api.commands.ListCiscoNexusVSMCmd; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDeviceVO; @@ -65,10 +66,17 @@ public interface CiscoNexusVSMElementService extends PluggableService { /** * Returns a VSM associated with a cluster. - * @param cmd - * @return + * @param GetCiscoVSMByClusterIdCmd + * @return CiscoNexusVSMDeviceVO */ - public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(GetCiscoVSMByClusterIdCmd cmd); + public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(GetCiscoVSMByClusterIdCmd cmd); + + /** + * + * @param GetCiscoVSMDetailsCmd + * @return CiscoNexusVSMDeviceVO + */ + public CiscoNexusVSMDeviceVO getCiscoNexusVSMDetails(GetCiscoVSMDetailsCmd cmd); /** * creates API response object for Cisco Nexus VSMs @@ -77,4 +85,11 @@ public interface CiscoNexusVSMElementService extends PluggableService { */ public CiscoNexusVSMResponse createCiscoNexusVSMResponse(CiscoNexusVSMDeviceVO vsmDeviceVO); + + /** + * Creates a detailed API response object for Cisco Nexus VSMs + * @param CiscoNexusVSMDeviceVO + * @return CiscoNexusVSMResponse + */ + public CiscoNexusVSMResponse createCiscoNexusVSMDetailedResponse(CiscoNexusVSMDeviceVO vsmDeviceVO); }