You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2014/05/10 08:42:29 UTC
[2/4] git commit: Adding feature to create an volume from an snapshot.
Adding feature to create an volume from an snapshot.
Signed-off-by: Udara Liyanage <ud...@wso2.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ffa5f1ec
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ffa5f1ec
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ffa5f1ec
Branch: refs/heads/master
Commit: ffa5f1ec81fa2e9137a08577820094ad9de8dde0
Parents: 5ebdf86
Author: Udara Liyanage <ud...@wso2.com>
Authored: Sat May 10 00:12:56 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Sat May 10 00:29:58 2014 +0530
----------------------------------------------------------------------
.../cloud/controller/iaases/AWSEC2Iaas.java | 17 +-
.../controller/iaases/OpenstackNovaIaas.java | 28 +-
.../cloud/controller/iaases/VCloudIaas.java | 2 +-
.../impl/CloudControllerServiceImpl.java | 4 +-
.../cloud/controller/interfaces/Iaas.java | 2 +-
.../stratos/cloud/controller/pojo/Volume.java | 11 +-
.../bean/cartridge/definition/VolumeBean.java | 2 +
.../bean/util/converter/PojoConverter.java | 1 +
.../main/resources/CloudControllerService.wsdl | 814 +++++++++----------
9 files changed, 452 insertions(+), 429 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
index eafbade..e4d5477 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
@@ -22,6 +22,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.cloud.controller.exception.CloudControllerException;
@@ -457,7 +458,7 @@ public class AWSEC2Iaas extends Iaas {
}
@Override
- public String createVolume(int sizeGB) {
+ public String createVolume(int sizeGB, String snapshotId) {
IaasProvider iaasInfo = getIaasProvider();
ComputeServiceContext context = iaasInfo.getComputeService()
@@ -474,7 +475,19 @@ public class AWSEC2Iaas extends Iaas {
ElasticBlockStoreApi blockStoreApi = context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region).get();
- Volume volume = blockStoreApi.createVolumeInAvailabilityZone(zone, sizeGB);
+ Volume volume;
+ if(StringUtils.isEmpty(snapshotId)){
+ if(log.isDebugEnabled()){
+ log.info("Creating a volume in the zone " + zone);
+ }
+ volume = blockStoreApi.createVolumeInAvailabilityZone(zone, sizeGB);
+ }else{
+ if(log.isDebugEnabled()){
+ log.info("Creating a volume in the zone " + zone + " from the shanpshot " + snapshotId);
+ }
+ volume = blockStoreApi.createVolumeFromSnapshotInAvailabilityZone(zone, snapshotId);
+ }
+
if (volume == null) {
log.fatal("Volume creation was unsuccessful. [region] : " + region
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
index dccbb2e..cc6f376 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.cloud.controller.exception.CloudControllerException;
@@ -43,6 +44,7 @@ import org.jclouds.compute.domain.NodeMetadataBuilder;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.ec2.options.CreateSnapshotOptions;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.NovaApiMetadata;
import org.jclouds.openstack.nova.v2_0.NovaAsyncApi;
@@ -53,6 +55,7 @@ import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
import org.jclouds.openstack.nova.v2_0.domain.Network;
import org.jclouds.openstack.nova.v2_0.domain.Volume;
import org.jclouds.openstack.nova.v2_0.domain.VolumeAttachment;
+import org.jclouds.openstack.nova.v2_0.domain.VolumeSnapshot;
import org.jclouds.openstack.nova.v2_0.domain.zonescoped.AvailabilityZone;
import org.jclouds.openstack.nova.v2_0.extensions.AvailabilityZoneAPI;
import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi;
@@ -61,6 +64,7 @@ import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi;
import org.jclouds.openstack.nova.v2_0.extensions.VolumeApi;
import org.jclouds.openstack.nova.v2_0.extensions.VolumeAttachmentApi;
import org.jclouds.openstack.nova.v2_0.options.CreateVolumeOptions;
+import org.jclouds.openstack.nova.v2_0.options.CreateVolumeSnapshotOptions;
import org.jclouds.rest.RestContext;
import java.util.ArrayList;
@@ -515,7 +519,7 @@ public class OpenstackNovaIaas extends Iaas {
}
@Override
- public String createVolume(int sizeGB) {
+ public String createVolume(int sizeGB, String snapshotId) {
IaasProvider iaasInfo = getIaasProvider();
String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
String zone = ComputeServiceBuilderUtil.extractZone(iaasInfo);
@@ -529,15 +533,28 @@ public class OpenstackNovaIaas extends Iaas {
RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap();
VolumeApi api = nova.getApi().getVolumeExtensionForZone(region).get();
- Volume volume = api.create(sizeGB, CreateVolumeOptions.Builder.availabilityZone(zone));
+
+ Volume volume;
+ if(StringUtils.isEmpty(snapshotId)){
+ if(log.isDebugEnabled()){
+ log.info("Creating a volume in the zone " + zone);
+ }
+ volume = api.create(sizeGB, CreateVolumeOptions.Builder.availabilityZone(zone));
+ }else{
+ if(log.isDebugEnabled()){
+ log.info("Creating a volume in the zone " + zone + " from the shanpshot " + snapshotId);
+ }
+ System.out.println(("Creating a volume in the zone " + zone + " from the shanpshot " + snapshotId));
+ volume = api.create(sizeGB, CreateVolumeOptions.Builder.availabilityZone(zone).snapshotId(snapshotId));
+ }
if (volume == null) {
log.fatal("Volume creation was unsuccessful. [region] : " + region+" [zone] : " + zone
+ " of Iaas : " + iaasInfo);
return null;
- }
+ }
log.info("Successfully created a new volume [id]: "+volume.getId()
- +" in [region] : "+region+" [zone] : "+zone+" of Iaas : "+iaasInfo);
+ +" in [region] : "+region+" [zone] : "+zone+" of Iaas : "+iaasInfo + " [Volume ID]" + volume.getId());
return volume.getId();
}
@@ -559,8 +576,7 @@ public class OpenstackNovaIaas extends Iaas {
RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap();
VolumeAttachmentApi api = nova.getApi().getVolumeAttachmentExtensionForZone(region).get();
- VolumeAttachment attachment = api.attachVolumeToServerAsDevice(volumeId, instanceId, device);
-
+ VolumeAttachment attachment = api.attachVolumeToServerAsDevice(volumeId, instanceId, device);
if (attachment == null) {
log.fatal("Volume [id]: "+volumeId+" attachment for instance [id]: "+instanceId
+" was unsuccessful. [region] : " + region
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
index 9332d7f..b3d1384 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
@@ -231,7 +231,7 @@ public class VCloudIaas extends Iaas {
}
@Override
- public String createVolume(int sizeGB) {
+ public String createVolume(int sizeGB, String snapshotId) {
// TODO Auto-generated method stub
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 4eb0ab3..8f9f52e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -111,7 +111,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException,
InvalidIaasProviderException {
-
if (cartridgeConfig == null) {
String msg = "Invalid Cartridge Definition: Definition is null.";
log.error(msg);
@@ -423,7 +422,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
Iaas iaas = iaasProvider.getIaas();
int sizeGB = volume.getSize();
- String volumeId = iaas.createVolume(sizeGB);
+ String snapshotId = volume.getSnapshotId();
+ String volumeId = iaas.createVolume(sizeGB, snapshotId);
volume.setId(volumeId);
volume.setIaasType(iaasProvider.getType());
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
index 492171d..1ae7dc5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
@@ -141,7 +141,7 @@ public abstract class Iaas {
* @param sizeGB size of the volume in Giga Bytes.
* @return Id of the created volume.
*/
- public abstract String createVolume(int sizeGB);
+ public abstract String createVolume(int sizeGB, String snapshotId);
/**
* Attach a given volume to an instance at the specified device path.
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Volume.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Volume.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Volume.java
index b35f965..e687898 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Volume.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Volume.java
@@ -29,10 +29,11 @@ public class Volume implements Serializable {
private boolean removeOntermination;
private String mappingPath;
private String iaasType;
+ private String snapshotId;
public String toString () {
return "Persistence Required: " + ", Size: " + getSize() + ", device: " + getDevice() +
- " mapping path : " + mappingPath + " remove on termination " + isRemoveOntermination();
+ " mapping path : " + mappingPath + " remove on termination " + isRemoveOntermination() + " SnaphotId " + snapshotId;
}
public int getSize() {
@@ -107,4 +108,12 @@ public class Volume implements Serializable {
public void setIaasType(String iaasType) {
this.iaasType = iaasType;
}
+
+ public String getSnapshotId() {
+ return snapshotId;
+ }
+
+ public void setSnapshotId(String snapshotId) {
+ this.snapshotId = snapshotId;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
index 7eabb45..9a1b212 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/VolumeBean.java
@@ -30,6 +30,8 @@ public class VolumeBean {
public boolean removeOnTermination;
public String mappingPath;
+
+ public String snapshotId;
public String toString () {
return " [ Persistence Required : " + ", Size: " + size + ", device: " +
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ffa5f1ec/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
index 50cbbb6..0162203 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
@@ -159,6 +159,7 @@ public class PojoConverter {
volume.setDevice(volumeBean[i].device);
volume.setRemoveOntermination(volumeBean[i].removeOnTermination);
volume.setMappingPath(volumeBean[i].mappingPath);
+ volume.setSnapshotId(volumeBean[i].snapshotId);
volumes[i] = volume;
}
persistence.setVolumes(volumes);