All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.openstack4j.openstack.storage.block.internal.BlockVolumeServiceImpl Maven / Gradle / Ivy
package org.openstack4j.openstack.storage.block.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import java.util.Map;
import org.openstack4j.api.Apis;
import org.openstack4j.api.Builders;
import org.openstack4j.api.storage.BlockVolumeService;
import org.openstack4j.api.storage.BlockVolumeTransferService;
import org.openstack4j.model.common.ActionResponse;
import org.openstack4j.model.storage.block.Volume;
import org.openstack4j.model.storage.block.VolumeType;
import org.openstack4j.model.storage.block.VolumeUploadImage;
import org.openstack4j.model.storage.block.options.UploadImageData;
import org.openstack4j.openstack.storage.block.domain.CinderUploadImageData;
import org.openstack4j.openstack.storage.block.domain.CinderVolume;
import org.openstack4j.openstack.storage.block.domain.CinderVolume.Volumes;
import org.openstack4j.openstack.storage.block.domain.CinderVolumeMigration;
import org.openstack4j.openstack.storage.block.domain.CinderVolumeType.VolumeTypes;
import org.openstack4j.openstack.storage.block.domain.ExtendAction;
import org.openstack4j.openstack.storage.block.domain.ForceDeleteAction;
import org.openstack4j.openstack.storage.block.domain.CinderVolumeUploadImage;
import org.openstack4j.openstack.storage.block.domain.ResetStatusAction;
import org.openstack4j.openstack.storage.block.domain.UpdateReadOnlyFlagAction;
/**
* Manages Volumes and Volume Type based operations against Block Storage (Cinder)
*
* @author Jeremy Unruh
*/
public class BlockVolumeServiceImpl extends BaseBlockStorageServices implements BlockVolumeService {
/**
* {@inheritDoc}
*/
@Override
public List listVolumeTypes() {
return get(VolumeTypes.class, uri("/types")).execute().getList();
}
/**
* {@inheritDoc}
*/
@Override
public List list() {
return get(Volumes.class, uri("/volumes/detail")).execute().getList();
}
/**
* {@inheritDoc}
*/
@Override
public List list(Map filteringParams) {
Invocation volumeInvocation = buildInvocation(filteringParams);
return volumeInvocation.execute().getList();
}
/**
* {@inheritDoc}
*/
@Override
public Volume get(String volumeId) {
checkNotNull(volumeId);
return get(CinderVolume.class, uri("/volumes/%s", volumeId)).execute();
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse delete(String volumeId) {
checkNotNull(volumeId);
return deleteWithResponse(uri("/volumes/%s", volumeId)).execute();
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse forceDelete(String volumeId) {
checkNotNull(volumeId);
return post(ActionResponse.class, uri("/volumes/%s/action", volumeId))
.entity(new ForceDeleteAction())
.execute();
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse resetState(String volumeId, Volume.Status status) {
checkNotNull(volumeId);
checkNotNull(status);
return post(ActionResponse.class, uri("/volumes/%s/action", volumeId))
.entity(new ResetStatusAction(status))
.execute();
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse extend(String volumeId, Integer newSize) {
checkNotNull(volumeId);
checkNotNull(newSize);
return post(ActionResponse.class, uri("/volumes/%s/action", volumeId))
.entity(new ExtendAction(newSize))
.execute();
}
/**
* {@inheritDoc}
*/
@Override
public Volume create(Volume volume) {
checkNotNull(volume);
return post(CinderVolume.class, uri("/volumes")).entity(volume).execute();
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse update(String volumeId, String name, String description) {
checkNotNull(volumeId);
if (name == null && description == null)
return ActionResponse.actionFailed("Name and Description are both required", 412);
return put(ActionResponse.class, uri("/volumes/%s", volumeId))
.entity(Builders.volume().name(name).description(description).build())
.execute();
}
@Override
public ActionResponse migrate(String volumeId, String hostService, boolean forceHostCopy) {
CinderVolumeMigration migration = new CinderVolumeMigration(hostService, forceHostCopy);
return post(ActionResponse.class, uri("/volumes/%s/action", volumeId))
.entity(migration)
.execute();
}
@Override
public VolumeUploadImage uploadToImage(String volumeId, UploadImageData data) {
checkNotNull(volumeId, "volumeId");
checkNotNull(data, "UploadImageData");
return post(CinderVolumeUploadImage.class, uri("/volumes/%s/action", volumeId))
.entity(CinderUploadImageData.create(data))
.execute();
}
@Override
public BlockVolumeTransferService transfer() {
return Apis.get(BlockVolumeTransferService.class);
}
private Invocation buildInvocation(Map filteringParams) {
Invocation volumeInvocation = get(Volumes.class, "/volumes/detail");
if (filteringParams == null) {
return volumeInvocation;
} else {
for (Map.Entry entry : filteringParams.entrySet()) {
volumeInvocation = volumeInvocation.param(entry.getKey(), entry.getValue());
}
}
return volumeInvocation;
}
/**
* {@inheritDoc}
*/
@Override
public ActionResponse readOnlyModeUpdate(String volumeId, boolean readonly) {
checkNotNull(volumeId);
return post(ActionResponse.class, uri("/volumes/%s/action", volumeId))
.entity(new UpdateReadOnlyFlagAction(readonly))
.execute();
}
}