From f774ef7415f751a99fd45ff6265ef50ae53dca80 Mon Sep 17 00:00:00 2001 From: Vijayendra Bhamidipati Date: Mon, 14 May 2012 15:18:45 -0700 Subject: [PATCH] CS-9919 Support for Nexus Swiches (Cisco Vswitches) Description: Missed out a file in previous commit when adding the new API getCiscoVSMByClusterId. Stub file was added by Sateesh to prevent breakage. Putting the file in in this commit plus better exception handling. --- .../commands/GetCiscoVSMByClusterIdCmd.java | 135 +++++++++++++----- .../network/element/CiscoNexusVSMElement.java | 3 + 2 files changed, 102 insertions(+), 36 deletions(-) diff --git a/server/src/com/cloud/api/commands/GetCiscoVSMByClusterIdCmd.java b/server/src/com/cloud/api/commands/GetCiscoVSMByClusterIdCmd.java index 41a903f110d..0212a8dd59f 100755 --- a/server/src/com/cloud/api/commands/GetCiscoVSMByClusterIdCmd.java +++ b/server/src/com/cloud/api/commands/GetCiscoVSMByClusterIdCmd.java @@ -1,36 +1,99 @@ -package com.cloud.api.commands; - -import com.cloud.api.BaseCmd; -import com.cloud.api.ServerApiException; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; - -public class GetCiscoVSMByClusterIdCmd extends BaseCmd { - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { - // TODO Auto-generated method stub - - } - - @Override - public String getCommandName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } - - public long getClusterId() { - // TODO Auto-generated method stub - return 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.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 a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") +public class GetCiscoVSMByClusterIdCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(GetCiscoVSMByClusterIdCmd.class.getName()); + private static final String s_name = "getciscovsmbyclusteridcmdresponse"; + @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 id; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public long getClusterId() { + return id; + } + + ///////////////////////////////////////////////////// + /////////////// 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 { + try { + CiscoNexusVSMDeviceVO vsmDeviceVO = _ciscoNexusVSMService.getCiscoNexusVSMByClusId(this); + if (vsmDeviceVO != null) { + CiscoNexusVSMResponse response = _ciscoNexusVSMService.createCiscoNexusVSMResponse(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(); + } +} diff --git a/server/src/com/cloud/network/element/CiscoNexusVSMElement.java b/server/src/com/cloud/network/element/CiscoNexusVSMElement.java index d9e7df2a3a5..675636bcab0 100644 --- a/server/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/server/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -218,6 +218,9 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme @Override public CiscoNexusVSMDeviceVO getCiscoNexusVSMByClusId(GetCiscoVSMByClusterIdCmd cmd) { CiscoNexusVSMDeviceVO result = getCiscoVSMbyClusId(cmd.getClusterId()); + if (result == null) { + throw new CloudRuntimeException("No Cisco VSM associated with specified Cluster Id"); + } return result; }