You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2012/12/06 20:14:32 UTC
[10/14] git commit: api_refactor: move storagepool api to admin pkg
api_refactor: move storagepool api to admin pkg
Signed-off-by: Rohit Yadav <bh...@apache.org>
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 <bh...@apache.org>
Authored: Thu Dec 6 10:32:58 2012 -0800
Committer: Rohit Yadav <bh...@apache.org>
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<List<? extends StoragePool>, Integer> pools = _mgr.searchForStoragePools(this);
- ListResponse<StoragePoolResponse> response = new ListResponse<StoragePoolResponse>();
- List<StoragePoolResponse> poolResponses = new ArrayList<StoragePoolResponse>();
- 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<String> tags;
-
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getId() {
- return id;
- }
-
- public List<String> 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<List<? extends StoragePool>, Integer> pools = _mgr.searchForStoragePools(this);
+ ListResponse<StoragePoolResponse> response = new ListResponse<StoragePoolResponse>();
+ List<StoragePoolResponse> poolResponses = new ArrayList<StoragePoolResponse>();
+ 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<String> tags;
+
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public Long getId() {
+ return id;
+ }
+
+ public List<String> 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;