mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
Return embedded Volume object for create/attach/detach Volume commands.
This commit is contained in:
parent
cb6a3d627e
commit
4a645cdeb0
@ -23,6 +23,8 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.response.AccountResponse;
|
||||
import com.cloud.api.response.ConfigurationResponse;
|
||||
import com.cloud.api.response.DiskOfferingResponse;
|
||||
@ -40,6 +42,7 @@ import com.cloud.api.response.SystemVmResponse;
|
||||
import com.cloud.api.response.UserResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.response.VlanIpRangeResponse;
|
||||
import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.api.response.ZoneResponse;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
import com.cloud.configuration.ConfigurationVO;
|
||||
@ -51,6 +54,7 @@ import com.cloud.dc.HostPodVO;
|
||||
import com.cloud.dc.Vlan.VlanType;
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.host.Host;
|
||||
import com.cloud.host.HostStats;
|
||||
import com.cloud.host.HostVO;
|
||||
@ -68,6 +72,7 @@ import com.cloud.storage.Snapshot.SnapshotType;
|
||||
import com.cloud.storage.SnapshotPolicyVO;
|
||||
import com.cloud.storage.StoragePoolVO;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.test.PodZoneConfig;
|
||||
import com.cloud.user.Account;
|
||||
@ -87,6 +92,8 @@ import com.cloud.vm.VmStats;
|
||||
|
||||
public class ApiResponseHelper {
|
||||
|
||||
public static final Logger s_logger = Logger.getLogger(ApiResponseHelper.class.getName());
|
||||
|
||||
public static UserResponse createUserResponse (UserAccount user) {
|
||||
UserResponse userResponse = new UserResponse();
|
||||
userResponse.setAccountName(user.getAccountName());
|
||||
@ -761,6 +768,86 @@ public class ApiResponseHelper {
|
||||
return zoneResponse;
|
||||
}
|
||||
|
||||
public static VolumeResponse createVolumeResponse (VolumeVO volume) {
|
||||
VolumeResponse volResponse = new VolumeResponse();
|
||||
volResponse.setId(volume.getId());
|
||||
|
||||
AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("volume", volume.getId());
|
||||
if (asyncJob != null) {
|
||||
volResponse.setJobId(asyncJob.getId());
|
||||
volResponse.setJobStatus(asyncJob.getStatus());
|
||||
}
|
||||
|
||||
if (volume.getName() != null) {
|
||||
volResponse.setName(volume.getName());
|
||||
} else {
|
||||
volResponse.setName("");
|
||||
}
|
||||
|
||||
volResponse.setZoneId(volume.getDataCenterId());
|
||||
volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName());
|
||||
|
||||
volResponse.setVolumeType(volume.getVolumeType().toString());
|
||||
volResponse.setDeviceId(volume.getDeviceId());
|
||||
|
||||
Long instanceId = volume.getInstanceId();
|
||||
if (instanceId != null) {
|
||||
VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId);
|
||||
volResponse.setVirtualMachineId(vm.getId());
|
||||
volResponse.setVirtualMachineName(vm.getName());
|
||||
volResponse.setVirtualMachineDisplayName(vm.getName());
|
||||
volResponse.setVirtualMachineState(vm.getState().toString());
|
||||
}
|
||||
|
||||
// Show the virtual size of the volume
|
||||
volResponse.setSize(volume.getSize());
|
||||
|
||||
volResponse.setCreated(volume.getCreated());
|
||||
volResponse.setState(volume.getStatus().toString());
|
||||
|
||||
Account accountTemp = ApiDBUtils.findAccountById(volume.getAccountId());
|
||||
if (accountTemp != null) {
|
||||
volResponse.setAccountName(accountTemp.getAccountName());
|
||||
volResponse.setDomainId(accountTemp.getDomainId());
|
||||
volResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName());
|
||||
}
|
||||
|
||||
String storageType;
|
||||
try {
|
||||
if(volume.getPoolId() == null){
|
||||
if (volume.getState() == Volume.State.Allocated) {
|
||||
/*set it as shared, so the UI can attach it to VM*/
|
||||
storageType = "shared";
|
||||
} else {
|
||||
storageType = "unknown";
|
||||
}
|
||||
} else {
|
||||
storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? "shared" : "local";
|
||||
}
|
||||
} catch (InvalidParameterValueException e) {
|
||||
s_logger.error(e.getMessage(), e);
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID");
|
||||
}
|
||||
|
||||
volResponse.setStorageType(storageType);
|
||||
volResponse.setDiskOfferingId(volume.getDiskOfferingId());
|
||||
|
||||
DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
|
||||
volResponse.setDiskOfferingName(diskOffering.getName());
|
||||
volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText());
|
||||
|
||||
Long poolId = volume.getPoolId();
|
||||
String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName();
|
||||
volResponse.setStoragePoolName(poolName);
|
||||
volResponse.setSourceId(volume.getSourceId());
|
||||
if (volume.getSourceType() != null) {
|
||||
volResponse.setSourceType(volume.getSourceType().toString());
|
||||
}
|
||||
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
|
||||
volResponse.setAttached(volume.getAttached());
|
||||
|
||||
return volResponse;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.ApiResponseHelper;
|
||||
import com.cloud.api.BaseAsyncCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
@ -29,7 +30,6 @@ import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.vm.UserVmManager;
|
||||
|
||||
@Implementation(method="attachVolumeToVM", manager=UserVmManager.class, description="Attaches a disk volume to a virtual machine.")
|
||||
@ -106,22 +106,11 @@ public class AttachVolumeCmd extends BaseAsyncCmd {
|
||||
return "attaching volume: " + getId() + " to vm: " + getVirtualMachineId();
|
||||
}
|
||||
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public VolumeResponse getResponse() {
|
||||
VolumeVO volume = ApiDBUtils.findVolumeById(id);
|
||||
VolumeResponse response = new VolumeResponse();
|
||||
UserVm instance = ApiDBUtils.findUserVmById(volume.getInstanceId());
|
||||
response.setVirtualMachineName(instance.getName());
|
||||
response.setVirtualMachineDisplayName(instance.getDisplayName());
|
||||
response.setVirtualMachineId(instance.getId());
|
||||
response.setVirtualMachineState(instance.getState().toString());
|
||||
response.setStorageType("shared"); // NOTE: You can never attach a local disk volume but if that changes, we need to change this
|
||||
response.setId(volume.getId());
|
||||
response.setName(volume.getName());
|
||||
response.setVolumeType(volume.getVolumeType().toString());
|
||||
response.setResponseName(getName());
|
||||
if(volume.getDeviceId() != null)
|
||||
response.setDeviceId(volume.getDeviceId());
|
||||
return response;
|
||||
}
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public VolumeResponse getResponse() {
|
||||
VolumeVO volume = (VolumeVO)getResponseObject();
|
||||
VolumeResponse response = ApiResponseHelper.createVolumeResponse(volume);
|
||||
response.setResponseName(getName());
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,12 +22,12 @@ import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.ApiResponseHelper;
|
||||
import com.cloud.api.BaseAsyncCreateCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.user.Account;
|
||||
@ -143,35 +143,9 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public VolumeResponse getResponse() {
|
||||
VolumeVO volume = (VolumeVO)getResponseObject();
|
||||
|
||||
VolumeResponse response = new VolumeResponse();
|
||||
response.setId(volume.getId());
|
||||
response.setName(volume.getName());
|
||||
response.setVolumeType(volume.getVolumeType().toString());
|
||||
response.setSize(volume.getSize());
|
||||
response.setCreated(volume.getCreated());
|
||||
response.setState(volume.getStatus().toString());
|
||||
response.setAccountName(ApiDBUtils.findAccountById(volume.getAccountId()).getAccountName());
|
||||
response.setDomainId(volume.getDomainId());
|
||||
response.setDiskOfferingId(volume.getDiskOfferingId());
|
||||
|
||||
DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
|
||||
response.setDiskOfferingName(diskOffering.getName());
|
||||
response.setDiskOfferingDisplayText(diskOffering.getDisplayText());
|
||||
|
||||
response.setDomainName(ApiDBUtils.findDomainById(volume.getDomainId()).getName());
|
||||
response.setStorageType("shared"); // NOTE: You can never create a local disk volume but if that changes, we need to change this
|
||||
if (volume.getPoolId() != null) {
|
||||
response.setStoragePoolName(ApiDBUtils.findStoragePoolById(volume.getPoolId()).getName());
|
||||
}
|
||||
|
||||
// if the volume was created from a snapshot, snapshotId will be set so we pass it back in the response
|
||||
response.setSnapshotId(getSnapshotId());
|
||||
response.setZoneId(volume.getDataCenterId());
|
||||
response.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName());
|
||||
if(volume.getDeviceId() != null){
|
||||
response.setDeviceId(volume.getDeviceId());
|
||||
}
|
||||
VolumeResponse response = ApiResponseHelper.createVolumeResponse(volume);
|
||||
//FIXME - have to be moved to ApiResponseHelper
|
||||
response.setSnapshotId(getSnapshotId()); // if the volume was created from a snapshot, snapshotId will be set so we pass it back in the response
|
||||
response.setResponseName(getName());
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.ApiResponseHelper;
|
||||
import com.cloud.api.BaseAsyncCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
@ -115,11 +116,11 @@ public class DetachVolumeCmd extends BaseAsyncCmd {
|
||||
return "detaching volume" + sb.toString();
|
||||
}
|
||||
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public VolumeResponse getResponse() {
|
||||
VolumeResponse response = (VolumeResponse)getResponseObject();
|
||||
if(deviceId!=null)
|
||||
response.setDeviceId(deviceId);
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
public VolumeResponse getResponse() {
|
||||
VolumeVO volume = (VolumeVO)getResponseObject();
|
||||
VolumeResponse response = ApiResponseHelper.createVolumeResponse(volume);
|
||||
response.setResponseName(getName());
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -23,21 +23,13 @@ import java.util.List;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.ApiResponseHelper;
|
||||
import com.cloud.api.BaseListCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
|
||||
@Implementation(method="searchForVolumes", description="Lists all volumes.")
|
||||
public class ListVolumesCmd extends BaseListCmd {
|
||||
@ -132,83 +124,7 @@ public class ListVolumesCmd extends BaseListCmd {
|
||||
ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>();
|
||||
List<VolumeResponse> volResponses = new ArrayList<VolumeResponse>();
|
||||
for (VolumeVO volume : volumes) {
|
||||
VolumeResponse volResponse = new VolumeResponse();
|
||||
volResponse.setId(volume.getId());
|
||||
|
||||
AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("volume", volume.getId());
|
||||
if (asyncJob != null) {
|
||||
volResponse.setJobId(asyncJob.getId());
|
||||
volResponse.setJobStatus(asyncJob.getStatus());
|
||||
}
|
||||
|
||||
if (volume.getName() != null) {
|
||||
volResponse.setName(volume.getName());
|
||||
} else {
|
||||
volResponse.setName("");
|
||||
}
|
||||
|
||||
volResponse.setZoneId(volume.getDataCenterId());
|
||||
volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName());
|
||||
|
||||
volResponse.setVolumeType(volume.getVolumeType().toString());
|
||||
volResponse.setDeviceId(volume.getDeviceId());
|
||||
|
||||
Long instanceId = volume.getInstanceId();
|
||||
if (instanceId != null) {
|
||||
VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId);
|
||||
volResponse.setVirtualMachineId(vm.getId());
|
||||
volResponse.setVirtualMachineName(vm.getName());
|
||||
volResponse.setVirtualMachineDisplayName(vm.getName());
|
||||
volResponse.setVirtualMachineState(vm.getState().toString());
|
||||
}
|
||||
|
||||
// Show the virtual size of the volume
|
||||
volResponse.setSize(volume.getSize());
|
||||
|
||||
volResponse.setCreated(volume.getCreated());
|
||||
volResponse.setState(volume.getStatus().toString());
|
||||
|
||||
Account accountTemp = ApiDBUtils.findAccountById(volume.getAccountId());
|
||||
if (accountTemp != null) {
|
||||
volResponse.setAccountName(accountTemp.getAccountName());
|
||||
volResponse.setDomainId(accountTemp.getDomainId());
|
||||
volResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName());
|
||||
}
|
||||
|
||||
String storageType;
|
||||
try {
|
||||
if(volume.getPoolId() == null){
|
||||
if (volume.getState() == Volume.State.Allocated) {
|
||||
/*set it as shared, so the UI can attach it to VM*/
|
||||
storageType = "shared";
|
||||
} else {
|
||||
storageType = "unknown";
|
||||
}
|
||||
} else {
|
||||
storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? "shared" : "local";
|
||||
}
|
||||
} catch (InvalidParameterValueException e) {
|
||||
s_logger.error(e.getMessage(), e);
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID");
|
||||
}
|
||||
|
||||
volResponse.setStorageType(storageType);
|
||||
volResponse.setDiskOfferingId(volume.getDiskOfferingId());
|
||||
|
||||
DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
|
||||
volResponse.setDiskOfferingName(diskOffering.getName());
|
||||
volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText());
|
||||
|
||||
Long poolId = volume.getPoolId();
|
||||
String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName();
|
||||
volResponse.setStoragePoolName(poolName);
|
||||
volResponse.setSourceId(volume.getSourceId());
|
||||
if (volume.getSourceType() != null) {
|
||||
volResponse.setSourceType(volume.getSourceType().toString());
|
||||
}
|
||||
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
|
||||
volResponse.setAttached(volume.getAttached());
|
||||
|
||||
VolumeResponse volResponse = ApiResponseHelper.createVolumeResponse(volume);
|
||||
volResponse.setResponseName("volume");
|
||||
volResponses.add(volResponse);
|
||||
}
|
||||
|
||||
@ -79,7 +79,6 @@ import com.cloud.api.commands.StartVMCmd;
|
||||
import com.cloud.api.commands.StopVMCmd;
|
||||
import com.cloud.api.commands.UpdateVMCmd;
|
||||
import com.cloud.api.commands.UpgradeVMCmd;
|
||||
import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.async.AsyncJobExecutor;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
import com.cloud.async.AsyncJobResult;
|
||||
@ -357,7 +356,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachVolumeToVM(AttachVolumeCmd command) {
|
||||
public Volume attachVolumeToVM(AttachVolumeCmd command) {
|
||||
Long vmId = command.getVirtualMachineId();
|
||||
Long volumeId = command.getId();
|
||||
Long deviceId = command.getDeviceId();
|
||||
@ -584,6 +583,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
event.setDescription("Volume: " +volume.getName()+ " successfully attached to VM: "+vm.getName());
|
||||
event.setLevel(EventVO.LEVEL_INFO);
|
||||
_eventDao.persist(event);
|
||||
return _volsDao.findById(volumeId);
|
||||
} else {
|
||||
if (answer != null) {
|
||||
String details = answer.getDetails();
|
||||
@ -595,7 +595,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
}
|
||||
|
||||
@Override
|
||||
public VolumeResponse detachVolumeFromVM(DetachVolumeCmd cmmd) {
|
||||
public Volume detachVolumeFromVM(DetachVolumeCmd cmmd) {
|
||||
Account account = UserContext.current().getAccount();
|
||||
if ((cmmd.getId() == null && cmmd.getDeviceId() == null && cmmd.getVirtualMachineId() == null) ||
|
||||
(cmmd.getId() != null && (cmmd.getDeviceId() != null || cmmd.getVirtualMachineId() != null)) ||
|
||||
@ -710,20 +710,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
|
||||
event.setLevel(EventVO.LEVEL_INFO);
|
||||
_eventDao.persist(event);
|
||||
|
||||
// Prepare the response object
|
||||
VolumeResponse response = new VolumeResponse();
|
||||
response.setVirtualMachineName(vm.getName());
|
||||
response.setVirtualMachineDisplayName(vm.getDisplayName());
|
||||
response.setVirtualMachineId(vm.getId());
|
||||
response.setVirtualMachineState(vm.getState().toString());
|
||||
response.setStorageType("shared"); // NOTE: You can never attach a local disk volume but if that changes, we need to change this
|
||||
response.setId(volume.getId());
|
||||
response.setName(volume.getName());
|
||||
response.setVolumeType(volume.getVolumeType().toString());
|
||||
response.setResponseName(cmmd.getName());
|
||||
if(volume.getDeviceId() != null)
|
||||
response.setDeviceId(volume.getDeviceId());
|
||||
return response;
|
||||
return _volsDao.findById(volumeId);
|
||||
} else {
|
||||
|
||||
if (answer != null) {
|
||||
|
||||
@ -31,7 +31,6 @@ import com.cloud.api.commands.StartVMCmd;
|
||||
import com.cloud.api.commands.StopVMCmd;
|
||||
import com.cloud.api.commands.UpdateVMCmd;
|
||||
import com.cloud.api.commands.UpgradeVMCmd;
|
||||
import com.cloud.api.response.VolumeResponse;
|
||||
import com.cloud.async.executor.OperationResponse;
|
||||
import com.cloud.async.executor.RebootVMExecutor;
|
||||
import com.cloud.async.executor.VMOperationParam;
|
||||
@ -43,6 +42,7 @@ import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.exception.StorageUnavailableException;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.component.Manager;
|
||||
import com.cloud.utils.exception.ExecutionException;
|
||||
@ -65,17 +65,18 @@ public interface UserVmService extends Manager {
|
||||
/**
|
||||
* Attaches the specified volume to the specified VM
|
||||
* @param cmd - the command specifying volumeId and vmId
|
||||
* @return the Volume object if attach worked successfully.
|
||||
* @throws InvalidParameterValueException, PermissionDeniedException
|
||||
*/
|
||||
void attachVolumeToVM(AttachVolumeCmd cmd);
|
||||
Volume attachVolumeToVM(AttachVolumeCmd cmd);
|
||||
|
||||
/**
|
||||
* Detaches the specified volume from the VM it is currently attached to.
|
||||
* @param cmd - the command specifying volumeId
|
||||
* @return the VolumeResponse object if detach worked successfully.
|
||||
* @return the Volume object if detach worked successfully.
|
||||
* @throws InvalidParameterValueException
|
||||
*/
|
||||
VolumeResponse detachVolumeFromVM(DetachVolumeCmd cmmd);
|
||||
Volume detachVolumeFromVM(DetachVolumeCmd cmmd);
|
||||
|
||||
UserVm startVirtualMachine(StartVMCmd cmd) throws StorageUnavailableException, ExecutionException, ConcurrentOperationException;
|
||||
UserVm stopVirtualMachine(StopVMCmd cmd);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user