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 988E5E401 for ; Thu, 6 Dec 2012 19:14:33 +0000 (UTC) Received: (qmail 21947 invoked by uid 500); 6 Dec 2012 19:14:33 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 21865 invoked by uid 500); 6 Dec 2012 19:14:33 -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 21808 invoked by uid 99); 6 Dec 2012 19:14:33 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2012 19:14:33 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id D22EC819BFB; Thu, 6 Dec 2012 19:14:32 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bhaisaab@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [10/14] git commit: api_refactor: move storagepool api to admin pkg Message-Id: <20121206191432.D22EC819BFB@tyr.zones.apache.org> Date: Thu, 6 Dec 2012 19:14:32 +0000 (UTC) api_refactor: move storagepool api to admin pkg Signed-off-by: Rohit Yadav Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/cc386b79 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/cc386b79 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/cc386b79 Branch: refs/heads/api_refactoring Commit: cc386b791b725252bd6cbd1ec28a5cb14594f5b6 Parents: 163fe7b Author: Rohit Yadav Authored: Thu Dec 6 10:32:58 2012 -0800 Committer: Rohit Yadav Committed: Thu Dec 6 10:32:58 2012 -0800 ---------------------------------------------------------------------- .../CancelPrimaryStorageMaintenanceCmd.java | 114 ------------ .../cloud/api/commands/CreateStoragePoolCmd.java | 139 --------------- api/src/com/cloud/api/commands/DeletePoolCmd.java | 90 ---------- .../cloud/api/commands/ListStoragePoolsCmd.java | 130 -------------- .../PreparePrimaryStorageForMaintenanceCmd.java | 112 ------------ .../cloud/api/commands/UpdateStoragePoolCmd.java | 88 --------- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 8 +- .../CancelPrimaryStorageMaintenanceCmd.java | 114 ++++++++++++ .../storagepool/command/CreateStoragePoolCmd.java | 139 +++++++++++++++ .../admin/storagepool/command/DeletePoolCmd.java | 90 ++++++++++ .../storagepool/command/ListStoragePoolsCmd.java | 130 ++++++++++++++ .../PreparePrimaryStorageForMaintenanceCmd.java | 112 ++++++++++++ .../storagepool/command/UpdateStoragePoolCmd.java | 88 +++++++++ client/tomcatconf/commands.properties.in | 12 +- .../src/com/cloud/server/ManagementServerImpl.java | 2 +- .../src/com/cloud/storage/StorageManagerImpl.java | 8 +- 17 files changed, 689 insertions(+), 689 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java deleted file mode 100644 index 400aa9c..0000000 --- a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java +++ /dev/null @@ -1,114 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.async.AsyncJob; -import com.cloud.event.EventTypes; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.storage.StoragePool; -import com.cloud.user.Account; -import com.cloud.user.UserContext; - -@Implementation(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) -public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); - - private static final String s_name = "cancelprimarystoragemaintenanceresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the primary storage ID") - private Long id; - - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - public static String getResultObjectName() { - return "primarystorage"; - } - - @Override - public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.StoragePool; - } - - @Override - public Long getInstanceId() { - return getId(); - } - - @Override - public long getEntityOwnerId() { - Account account = UserContext.current().getCaller(); - if (account != null) { - return account.getId(); - } - - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public String getEventType() { - return EventTypes.EVENT_MAINTENANCE_CANCEL_PRIMARY_STORAGE; - } - - @Override - public String getEventDescription() { - return "canceling maintenance for primary storage pool: " + getId(); - } - - @Override - public void execute() throws ResourceUnavailableException{ - StoragePool result = _storageService.cancelPrimaryStorageForMaintenance(this); - if (result != null) { - StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java deleted file mode 100644 index 3609462..0000000 --- a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java +++ /dev/null @@ -1,139 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import java.net.UnknownHostException; -import java.util.Map; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.exception.ResourceInUseException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.storage.StoragePool; -import com.cloud.user.Account; - -@SuppressWarnings("rawtypes") -@Implementation(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) -public class CreateStoragePoolCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(CreateStoragePoolCmd.class.getName()); - - private static final String s_name = "createstoragepoolresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, required=true, description="the cluster ID for the storage pool") - private Long clusterId; - - @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the storage pool") - private Map details; - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name for the storage pool") - private String storagePoolName; - - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the storage pool") - private Long podId; - - @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for the storage pool") - private String tags; - - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of the storage pool") - private String url; - - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the storage pool") - private Long zoneId; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getClusterId() { - return clusterId; - } - - public Map getDetails() { - return details; - } - - public String getStoragePoolName() { - return storagePoolName; - } - - public Long getPodId() { - return podId; - } - - public String getTags() { - return tags; - } - - public String getUrl() { - return url; - } - - public Long getZoneId() { - return zoneId; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public void execute(){ - try { - StoragePool result = _storageService.createPool(this); - if (result != null) { - StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add storage pool"); - } - } catch (ResourceUnavailableException ex1) { - s_logger.warn("Exception: ", ex1); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); - }catch (ResourceInUseException ex2) { - s_logger.warn("Exception: ", ex2); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex2.getMessage()); - } catch (UnknownHostException ex3) { - s_logger.warn("Exception: ", ex3); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex3.getMessage()); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/DeletePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/DeletePoolCmd.java b/api/src/com/cloud/api/commands/DeletePoolCmd.java deleted file mode 100644 index b257bbd..0000000 --- a/api/src/com/cloud/api/commands/DeletePoolCmd.java +++ /dev/null @@ -1,90 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; -import com.cloud.storage.StoragePool; -import com.cloud.storage.StoragePoolStatus; -import com.cloud.user.Account; - -@Implementation(description = "Deletes a storage pool.", responseObject = SuccessResponse.class) -public class DeletePoolCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeletePoolCmd.class.getName()); - private static final String s_name = "deletestoragepoolresponse"; - - // /////////////////////////////////////////////////// - // ////////////// API parameters ///////////////////// - // /////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "Storage pool id") - private Long id; - - @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force destroy storage pool " + - "(force expunge volumes in Destroyed state as a part of pool removal)") - private Boolean forced; - - // /////////////////////////////////////////////////// - // ///////////////// Accessors /////////////////////// - // /////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - public boolean isForced() { - return (forced != null) ? forced : false; - } - - // /////////////////////////////////////////////////// - // ///////////// API Implementation/////////////////// - // /////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public void execute() { - boolean result = _storageService.deletePool(this); - if (result) { - SuccessResponse response = new SuccessResponse(getCommandName()); - this.setResponseObject(response); - } else { - StoragePool pool = _storageService.getStoragePool(id); - if (pool != null && pool.getStatus() == StoragePoolStatus.Removed) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete storage pool"); - } - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java deleted file mode 100644 index 3787f92..0000000 --- a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ /dev/null @@ -1,130 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.async.AsyncJob; -import com.cloud.storage.StoragePool; -import com.cloud.utils.Pair; - -@Implementation(description="Lists storage pools.", responseObject=StoragePoolResponse.class) -public class ListStoragePoolsCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListStoragePoolsCmd.class.getName()); - - private static final String s_name = "liststoragepoolsresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="list storage pools belongig to the specific cluster") - private Long clusterId; - - @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the IP address for the storage pool") - private String ipAddress; - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the storage pool") - private String storagePoolName; - - @Parameter(name=ApiConstants.PATH, type=CommandType.STRING, description="the storage pool path") - private String path; - - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID for the storage pool") - private Long podId; - - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the storage pool") - private Long zoneId; - - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the storage pool") - private Long id; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getClusterId() { - return clusterId; - } - - public String getIpAddress() { - return ipAddress; - } - - public String getStoragePoolName() { - return storagePoolName; - } - - public String getPath() { - return path; - } - - public Long getPodId() { - return podId; - } - - public Long getZoneId() { - return zoneId; - } - - public Long getId() { - return id; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.StoragePool; - } - - @Override - public void execute(){ - Pair, Integer> pools = _mgr.searchForStoragePools(this); - ListResponse response = new ListResponse(); - List poolResponses = new ArrayList(); - for (StoragePool pool : pools.first()) { - StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolResponse(pool); - poolResponse.setObjectName("storagepool"); - poolResponses.add(poolResponse); - } - - response.setResponses(poolResponses, pools.second()); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java deleted file mode 100644 index 4d7342c..0000000 --- a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java +++ /dev/null @@ -1,112 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.async.AsyncJob; -import com.cloud.event.EventTypes; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.storage.StoragePool; -import com.cloud.user.Account; -import com.cloud.user.UserContext; - -@Implementation(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) -public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); - private static final String s_name = "prepareprimarystorageformaintenanceresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Primary storage ID") - private Long id; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - public static String getResultObjectName() { - return "primarystorage"; - } - - @Override - public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.StoragePool; - } - - @Override - public Long getInstanceId() { - return getId(); - } - - @Override - public long getEntityOwnerId() { - Account account = UserContext.current().getCaller(); - if (account != null) { - return account.getId(); - } - - return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked - } - - @Override - public String getEventType() { - return EventTypes.EVENT_MAINTENANCE_PREPARE_PRIMARY_STORAGE; - } - - @Override - public String getEventDescription() { - return "preparing storage pool: " + getId() + " for maintenance"; - } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException{ - StoragePool result = _storageService.preparePrimaryStorageForMaintenance(getId()); - if (result != null){ - StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); - response.setResponseName("storagepool"); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java deleted file mode 100644 index 605c668..0000000 --- a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java +++ /dev/null @@ -1,88 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.api.commands; - -import java.util.List; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.storage.StoragePool; -import com.cloud.user.Account; - -@Implementation(description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") -public class UpdateStoragePoolCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(UpdateStoragePoolCmd.class.getName()); - - private static final String s_name = "updatestoragepoolresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the Id of the storage pool") - private Long id; - - @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma-separated list of tags for the storage pool") - private List tags; - - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getId() { - return id; - } - - public List getTags() { - return tags; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public void execute(){ - StoragePool result = _storageService.updateStoragePool(this); - if (result != null){ - StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update storage pool"); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/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 3bf39f5..00f5abd 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -49,7 +49,7 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListStoragePoolsCmd; +import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/com/cloud/storage/StorageService.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index 9197bf2..bca617d 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -19,12 +19,12 @@ package com.cloud.storage; import java.net.UnknownHostException; import java.util.List; -import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; -import com.cloud.api.commands.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; -import com.cloud.api.commands.DeletePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import com.cloud.api.commands.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java new file mode 100644 index 0000000..d87259b --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java @@ -0,0 +1,114 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.storage.StoragePool; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +@Implementation(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) +public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); + + private static final String s_name = "cancelprimarystoragemaintenanceresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the primary storage ID") + private Long id; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + public static String getResultObjectName() { + return "primarystorage"; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.StoragePool; + } + + @Override + public Long getInstanceId() { + return getId(); + } + + @Override + public long getEntityOwnerId() { + Account account = UserContext.current().getCaller(); + if (account != null) { + return account.getId(); + } + + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public String getEventType() { + return EventTypes.EVENT_MAINTENANCE_CANCEL_PRIMARY_STORAGE; + } + + @Override + public String getEventDescription() { + return "canceling maintenance for primary storage pool: " + getId(); + } + + @Override + public void execute() throws ResourceUnavailableException{ + StoragePool result = _storageService.cancelPrimaryStorageForMaintenance(this); + if (result != null) { + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java new file mode 100644 index 0000000..fd3ca39 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java @@ -0,0 +1,139 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import java.net.UnknownHostException; +import java.util.Map; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.exception.ResourceInUseException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.storage.StoragePool; +import com.cloud.user.Account; + +@SuppressWarnings("rawtypes") +@Implementation(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) +public class CreateStoragePoolCmd extends BaseCmd { + public static final Logger s_logger = Logger.getLogger(CreateStoragePoolCmd.class.getName()); + + private static final String s_name = "createstoragepoolresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="cluster") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, required=true, description="the cluster ID for the storage pool") + private Long clusterId; + + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the storage pool") + private Map details; + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name for the storage pool") + private String storagePoolName; + + @IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the storage pool") + private Long podId; + + @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for the storage pool") + private String tags; + + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of the storage pool") + private String url; + + @IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the storage pool") + private Long zoneId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getClusterId() { + return clusterId; + } + + public Map getDetails() { + return details; + } + + public String getStoragePoolName() { + return storagePoolName; + } + + public Long getPodId() { + return podId; + } + + public String getTags() { + return tags; + } + + public String getUrl() { + return url; + } + + public Long getZoneId() { + return zoneId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute(){ + try { + StoragePool result = _storageService.createPool(this); + if (result != null) { + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add storage pool"); + } + } catch (ResourceUnavailableException ex1) { + s_logger.warn("Exception: ", ex1); + throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); + }catch (ResourceInUseException ex2) { + s_logger.warn("Exception: ", ex2); + throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex2.getMessage()); + } catch (UnknownHostException ex3) { + s_logger.warn("Exception: ", ex3); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex3.getMessage()); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java new file mode 100644 index 0000000..473d35e --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java @@ -0,0 +1,90 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.SuccessResponse; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolStatus; +import com.cloud.user.Account; + +@Implementation(description = "Deletes a storage pool.", responseObject = SuccessResponse.class) +public class DeletePoolCmd extends BaseCmd { + public static final Logger s_logger = Logger.getLogger(DeletePoolCmd.class.getName()); + private static final String s_name = "deletestoragepoolresponse"; + + // /////////////////////////////////////////////////// + // ////////////// API parameters ///////////////////// + // /////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "Storage pool id") + private Long id; + + @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force destroy storage pool " + + "(force expunge volumes in Destroyed state as a part of pool removal)") + private Boolean forced; + + // /////////////////////////////////////////////////// + // ///////////////// Accessors /////////////////////// + // /////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + public boolean isForced() { + return (forced != null) ? forced : false; + } + + // /////////////////////////////////////////////////// + // ///////////// API Implementation/////////////////// + // /////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + boolean result = _storageService.deletePool(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + StoragePool pool = _storageService.getStoragePool(id); + if (pool != null && pool.getStatus() == StoragePoolStatus.Removed) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete storage pool"); + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java new file mode 100644 index 0000000..b987962 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java @@ -0,0 +1,130 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import com.cloud.api.response.ListResponse; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.async.AsyncJob; +import com.cloud.storage.StoragePool; +import com.cloud.utils.Pair; + +@Implementation(description="Lists storage pools.", responseObject=StoragePoolResponse.class) +public class ListStoragePoolsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListStoragePoolsCmd.class.getName()); + + private static final String s_name = "liststoragepoolsresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="cluster") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="list storage pools belongig to the specific cluster") + private Long clusterId; + + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the IP address for the storage pool") + private String ipAddress; + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the storage pool") + private String storagePoolName; + + @Parameter(name=ApiConstants.PATH, type=CommandType.STRING, description="the storage pool path") + private String path; + + @IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID for the storage pool") + private Long podId; + + @IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the storage pool") + private Long zoneId; + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the storage pool") + private Long id; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getClusterId() { + return clusterId; + } + + public String getIpAddress() { + return ipAddress; + } + + public String getStoragePoolName() { + return storagePoolName; + } + + public String getPath() { + return path; + } + + public Long getPodId() { + return podId; + } + + public Long getZoneId() { + return zoneId; + } + + public Long getId() { + return id; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.StoragePool; + } + + @Override + public void execute(){ + Pair, Integer> pools = _mgr.searchForStoragePools(this); + ListResponse response = new ListResponse(); + List poolResponses = new ArrayList(); + for (StoragePool pool : pools.first()) { + StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolResponse(pool); + poolResponse.setObjectName("storagepool"); + poolResponses.add(poolResponse); + } + + response.setResponses(poolResponses, pools.second()); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java new file mode 100644 index 0000000..3f7f80d --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java @@ -0,0 +1,112 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.storage.StoragePool; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +@Implementation(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) +public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); + private static final String s_name = "prepareprimarystorageformaintenanceresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Primary storage ID") + private Long id; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + public static String getResultObjectName() { + return "primarystorage"; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.StoragePool; + } + + @Override + public Long getInstanceId() { + return getId(); + } + + @Override + public long getEntityOwnerId() { + Account account = UserContext.current().getCaller(); + if (account != null) { + return account.getId(); + } + + return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked + } + + @Override + public String getEventType() { + return EventTypes.EVENT_MAINTENANCE_PREPARE_PRIMARY_STORAGE; + } + + @Override + public String getEventDescription() { + return "preparing storage pool: " + getId() + " for maintenance"; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException{ + StoragePool result = _storageService.preparePrimaryStorageForMaintenance(getId()); + if (result != null){ + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); + response.setResponseName("storagepool"); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java new file mode 100644 index 0000000..c027224 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java @@ -0,0 +1,88 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.admin.storagepool.command; + +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.storage.StoragePool; +import com.cloud.user.Account; + +@Implementation(description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") +public class UpdateStoragePoolCmd extends BaseCmd { + public static final Logger s_logger = Logger.getLogger(UpdateStoragePoolCmd.class.getName()); + + private static final String s_name = "updatestoragepoolresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the Id of the storage pool") + private Long id; + + @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma-separated list of tags for the storage pool") + private List tags; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + public List getTags() { + return tags; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute(){ + StoragePool result = _storageService.updateStoragePool(this); + if (result != null){ + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update storage pool"); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/client/tomcatconf/commands.properties.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index e00c68d..2964ae1 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -264,13 +264,13 @@ queryAsyncJobResult=org.apache.cloudstack.api.user.job.command.QueryAsyncJobResu listAsyncJobs=org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd;15 #### storage pools commands -listStoragePools=com.cloud.api.commands.ListStoragePoolsCmd;3 -createStoragePool=com.cloud.api.commands.CreateStoragePoolCmd;1 -updateStoragePool=com.cloud.api.commands.UpdateStoragePoolCmd;1 -deleteStoragePool=com.cloud.api.commands.DeletePoolCmd;1 +listStoragePools=org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd;3 +createStoragePool=org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd;1 +updateStoragePool=org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd;1 +deleteStoragePool=org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd;1 listClusters=com.cloud.api.commands.ListClustersCmd;3 -enableStorageMaintenance=com.cloud.api.commands.PreparePrimaryStorageForMaintenanceCmd;1 -cancelStorageMaintenance=com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd;1 +enableStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.PreparePrimaryStorageForMaintenanceCmd;1 +cancelStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands createSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd;15 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/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 fd94733..dd91d60 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -84,7 +84,7 @@ import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListStoragePoolsCmd; +import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cc386b79/server/src/com/cloud/storage/StorageManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 882e798..330d41e 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -72,11 +72,11 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; -import com.cloud.api.commands.CreateStoragePoolCmd; -import com.cloud.api.commands.DeletePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import com.cloud.api.commands.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity;