diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 000000000..1ebc1c989
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,50 @@
+# 3.2.9 / 2020-04-07
+* glance: Add Support for Image Service API v2
+
+# 3.2.8 / 2020-01-29
+* jackson upgraded to com.fasterxml version 2.9.x
+* commons-httpclient upgraded to org.apache.httpcomponents 4.5
+
+# 3.2.7 / 2019-05-03
+* Remove maven-gpg-plugin
+
+# 3.2.6 / 2019-05-03
+* RESTEasyConnector: Support RESTEasy 3.6.3.Final
+
+# 3.2.5 / 2018-11-14
+* neutron: Add support for `port_security_enabled` on Networks
+
+# 3.2.4 / 2018
+* Improved backward compatibility to 3.1.3
+
+# 3.2.3 / 2018-06-24
+* No user visible changes
+
+# 3.2.2 / 2018-06-23
+* Add keystone v3 support
+* Add missing nova utility methods for server actions
+* Add heat support
+* Add router support
+* All fixes and improvements up to 3.1.3
+
+# 3.1.3 / 2018-05-18
+* Cinder: Add support for `os-terminate_connection`
+* neutron: Support parameter mtu
+
+# 3.1.2 / 2017-01-28
+* RESTEasyConnector: Isolate the creation of ClientExecutor
+
+# 3.1.1 / 2015-05-06
+* cinder: introduce client and model
+* java 7
+* Fixes and improvements up to 3.0.6
+
+# 3.2.1 / 2013-07-26
+* No user visible changes
+
+# 3.2.0 / 2013-07-26
+* support quota/limits/usage operations
+* logging enhancements
+
+# 3.1.0 / 2013-07-21
+
diff --git a/ceilometer-client/pom.xml b/ceilometer-client/pom.xml
index b6889ddae..0c0ea41c1 100644
--- a/ceilometer-client/pom.xml
+++ b/ceilometer-client/pom.xml
@@ -3,7 +3,7 @@
com.woorea
openstack-java-sdk
- 3.1.0-SNAPSHOT
+ 3.2.10-SNAPSHOT
ceilometer-client
OpenStack Ceilometer Client
@@ -12,12 +12,12 @@
com.woorea
openstack-client
- 3.1.0-SNAPSHOT
+ 3.2.10-SNAPSHOT
com.woorea
ceilometer-model
- 3.1.0-SNAPSHOT
+ 3.2.10-SNAPSHOT
diff --git a/ceilometer-client/src/main/java/com/woorea/openstack/ceilometer/v2/api/ResourcesResource.java b/ceilometer-client/src/main/java/com/woorea/openstack/ceilometer/v2/api/ResourcesResource.java
index 405f04fb9..900168719 100644
--- a/ceilometer-client/src/main/java/com/woorea/openstack/ceilometer/v2/api/ResourcesResource.java
+++ b/ceilometer-client/src/main/java/com/woorea/openstack/ceilometer/v2/api/ResourcesResource.java
@@ -2,7 +2,6 @@
import java.util.List;
-
import com.woorea.openstack.base.client.OpenStackClient;
import com.woorea.openstack.base.client.OpenStackRequest;
import com.woorea.openstack.ceilometer.QueriableCeilometerCommand;
@@ -25,7 +24,7 @@ public ResourceList() {
}
- public class ResourceShow extends OpenStackRequest {
+ public class ResourceShow extends OpenStackRequest {
private String id;
diff --git a/ceilometer-model/pom.xml b/ceilometer-model/pom.xml
index 0ebd3d973..d2fd429ac 100644
--- a/ceilometer-model/pom.xml
+++ b/ceilometer-model/pom.xml
@@ -3,7 +3,7 @@
com.woorea
openstack-java-sdk
- 3.1.0-SNAPSHOT
+ 3.2.10-SNAPSHOT
ceilometer-model
OpenStack Ceilometer Model
diff --git a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Meter.java b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Meter.java
index df9182f9c..53f192b54 100644
--- a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Meter.java
+++ b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Meter.java
@@ -1,6 +1,6 @@
package com.woorea.openstack.ceilometer.v2.model;
-import org.codehaus.jackson.annotate.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class Meter {
diff --git a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Resource.java b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Resource.java
index 24e14aa3d..7ca1fb089 100644
--- a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Resource.java
+++ b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Resource.java
@@ -2,7 +2,7 @@
import java.util.Map;
-import org.codehaus.jackson.annotate.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class Resource {
//{"resource_id": "23b55841eedd41e99d5f3f32149ca086", "timestamp": "2013-03-03T15:19:00", "project_id": "23b55841eedd41e99d5f3f32149ca086", "user_id": null, "metadata": {}}
diff --git a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Sample.java b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Sample.java
index 8827de466..c17d34159 100644
--- a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Sample.java
+++ b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Sample.java
@@ -2,7 +2,7 @@
import java.util.Map;
-import org.codehaus.jackson.annotate.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class Sample {
diff --git a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Statistics.java b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Statistics.java
index 5a34fe54b..f8236aa21 100644
--- a/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Statistics.java
+++ b/ceilometer-model/src/main/java/com/woorea/openstack/ceilometer/v2/model/Statistics.java
@@ -2,7 +2,7 @@
import java.math.BigDecimal;
-import org.codehaus.jackson.annotate.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class Statistics {
diff --git a/cinder-client/pom.xml b/cinder-client/pom.xml
new file mode 100644
index 000000000..e953379d9
--- /dev/null
+++ b/cinder-client/pom.xml
@@ -0,0 +1,24 @@
+
+ 4.0.0
+
+ com.woorea
+ openstack-java-sdk
+ 3.2.10-SNAPSHOT
+
+ cinder-client
+ OpenStack Cinder Client
+ OpenStack Cinder Client
+
+
+ com.woorea
+ openstack-client
+ 3.2.10-SNAPSHOT
+
+
+
+ com.woorea
+ cinder-model
+ 3.2.10-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/Cinder.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/Cinder.java
new file mode 100644
index 000000000..4230e8b12
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/Cinder.java
@@ -0,0 +1,50 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackClientConnector;
+
+public class Cinder extends OpenStackClient {
+
+ private final VolumesExtension VOLUMES;
+
+ private final SnapshotsExtension SNAPSHOTS;
+
+ private final VolumeTypesExtension VOLUME_TYPES;
+
+ private final LimitsExtension LIMITS;
+
+ private final SchedulerStatsExtension SCHEDULER_STATS;
+
+ public Cinder(String endpoint, OpenStackClientConnector connector) {
+ super(endpoint, connector);
+ VOLUMES = new VolumesExtension(this);
+ SNAPSHOTS = new SnapshotsExtension(this);
+ VOLUME_TYPES = new VolumeTypesExtension(this);
+ LIMITS = new LimitsExtension(this);
+ SCHEDULER_STATS = new SchedulerStatsExtension(this);
+ }
+
+ public Cinder(String endpoint) {
+ this(endpoint, null);
+ }
+
+ public final VolumesExtension volumes() {
+ return VOLUMES;
+ }
+
+ public final SnapshotsExtension snapshots() {
+ return SNAPSHOTS;
+ }
+
+ public final VolumeTypesExtension volumeTypes() {
+ return VOLUME_TYPES;
+ }
+
+ public final LimitsExtension limits() {
+ return LIMITS;
+ }
+
+ public final SchedulerStatsExtension schedulerStats() {
+ return SCHEDULER_STATS;
+ }
+}
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/LimitsExtension.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/LimitsExtension.java
new file mode 100644
index 000000000..0d4a78597
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/LimitsExtension.java
@@ -0,0 +1,28 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.cinder.model.Limits;
+
+public class LimitsExtension {
+
+ private final OpenStackClient CLIENT;
+
+ public LimitsExtension(OpenStackClient client) {
+ CLIENT = client;
+ }
+
+ public List list() {
+ return new List();
+ }
+
+ public class List extends OpenStackRequest {
+
+ public List() {
+ super(CLIENT, HttpMethod.GET, "/limits", null, Limits.class);
+ }
+
+ }
+
+}
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/SchedulerStatsExtension.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/SchedulerStatsExtension.java
new file mode 100644
index 000000000..7af0f273a
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/SchedulerStatsExtension.java
@@ -0,0 +1,30 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.cinder.model.Pools;
+
+/**
+ * Cinder Scheduler Stats Management
+ */
+public class SchedulerStatsExtension {
+
+ private final OpenStackClient CLIENT;
+
+ public SchedulerStatsExtension(OpenStackClient client) {
+ this.CLIENT = client;
+ }
+
+ public List list(boolean detail) {
+ return new List(detail);
+ }
+
+ public class List extends OpenStackRequest {
+
+ public List(boolean detail) {
+ super(CLIENT, HttpMethod.GET, (new StringBuilder("/scheduler-stats/get_pools")).append(detail ? "?detail=True":""), null, Pools.class);
+ }
+ }
+
+}
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/SnapshotsExtension.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/SnapshotsExtension.java
new file mode 100644
index 000000000..c5bab0743
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/SnapshotsExtension.java
@@ -0,0 +1,111 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.Entity;
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.cinder.model.Metadata;
+import com.woorea.openstack.cinder.model.Snapshot;
+import com.woorea.openstack.cinder.model.SnapshotForCreate;
+import com.woorea.openstack.cinder.model.SnapshotForUpdate;
+import com.woorea.openstack.cinder.model.Snapshots;
+
+public class SnapshotsExtension {
+
+ private final OpenStackClient CLIENT;
+
+ public SnapshotsExtension(OpenStackClient client) {
+ CLIENT = client;
+ }
+
+ public List list(boolean detail) {
+ return new List(detail);
+ }
+
+ public Create create(SnapshotForCreate snapshotForCreate) {
+ return new Create(snapshotForCreate);
+ }
+
+ public Show show(String id) {
+ return new Show(id);
+ }
+
+ public ShowMetadata showMetadata(String snapshotId) {
+ return new ShowMetadata(snapshotId);
+ }
+
+ public UpdateMetadata updateMetadata(String snapshotId, Metadata metadata) {
+ return new UpdateMetadata(snapshotId, metadata);
+ }
+
+ public Delete delete(String id) {
+ return new Delete(id);
+ }
+
+ public Update update(String id, SnapshotForUpdate snapshot) {
+ return new Update(id, snapshot);
+ }
+
+ public class List extends OpenStackRequest {
+
+ public List(boolean detail) {
+ super(CLIENT, HttpMethod.GET, detail ? "/snapshots/detail" : "/snapshots", null, Snapshots.class);
+ }
+
+ }
+
+ public class Create extends OpenStackRequest {
+
+ public Create(SnapshotForCreate snapshotForCreate) {
+ super(CLIENT, HttpMethod.POST, "/snapshots", Entity.json(snapshotForCreate), Snapshot.class);
+ }
+
+ }
+
+ public class Show extends OpenStackRequest {
+
+ public Show(String id) {
+ super(CLIENT, HttpMethod.GET, new StringBuilder("/snapshots/").append(id).toString(), null, Snapshot.class);
+ }
+
+ }
+
+ public class Delete extends OpenStackRequest {
+
+ public Delete(String id) {
+ super(CLIENT, HttpMethod.DELETE, new StringBuilder("/snapshots/").append(id).toString(), null, Void.class);
+ }
+
+ }
+
+ public class Update extends OpenStackRequest {
+
+ public Update(String id, SnapshotForUpdate snapshot) {
+ super(CLIENT, HttpMethod.PUT, new StringBuilder("/snapshots/").append(id).toString(),
+ Entity.json(snapshot), Void.class);
+ }
+
+ }
+
+ public class ShowMetadata extends OpenStackRequest {
+
+ public ShowMetadata(String id) {
+ super(CLIENT,
+ HttpMethod.GET,
+ new StringBuilder("/snapshots/").append(id).append("/metadata").toString(),
+ null,
+ Metadata.class);
+ }
+
+ }
+
+ public class UpdateMetadata extends OpenStackRequest {
+
+ public UpdateMetadata(String snapshotId, Metadata metadata) {
+ super(CLIENT, HttpMethod.PUT, new StringBuilder("/snapshots/").append(snapshotId)
+ .append("/metadata")
+ .toString(), Entity.json(metadata), Void.class);
+ }
+
+ }
+}
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumeTypesExtension.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumeTypesExtension.java
new file mode 100644
index 000000000..5951e1cfd
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumeTypesExtension.java
@@ -0,0 +1,70 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.Entity;
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.cinder.model.VolumeType;
+import com.woorea.openstack.cinder.model.VolumeTypeForCreate;
+import com.woorea.openstack.cinder.model.VolumeTypes;
+
+public class VolumeTypesExtension {
+
+ private final OpenStackClient CLIENT;
+
+ public VolumeTypesExtension(OpenStackClient client) {
+ CLIENT = client;
+ }
+
+ public List list() {
+ return new List();
+ }
+
+ public Create create(VolumeTypeForCreate volumeTypeForCreate) {
+ return new Create(volumeTypeForCreate);
+ }
+
+ public Show show(String id) {
+ return new Show(id);
+ }
+
+ public Delete delete(String id) {
+ return new Delete(id);
+ }
+
+ public class List extends OpenStackRequest {
+
+ public List() {
+ super(CLIENT, HttpMethod.GET, "/types", null, VolumeTypes.class);
+ }
+
+ }
+
+ public class Create extends OpenStackRequest {
+
+ private VolumeTypeForCreate volumeTypeForCreate;
+
+ public Create(VolumeTypeForCreate volumeTypeForCreate) {
+ super(CLIENT, HttpMethod.POST, "/types", Entity.json(volumeTypeForCreate), VolumeType.class);
+ this.volumeTypeForCreate = volumeTypeForCreate;
+ }
+
+ }
+
+ public class Show extends OpenStackRequest {
+
+ public Show(String id) {
+ super(CLIENT, HttpMethod.GET, new StringBuilder("/types/").append(id).toString(), null, VolumeType.class);
+ }
+
+ }
+
+ public class Delete extends OpenStackRequest {
+
+ public Delete(String id) {
+ super(CLIENT, HttpMethod.DELETE, new StringBuilder("/types/").append(id).toString(), null, Void.class);
+ }
+
+ }
+
+}
diff --git a/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumesExtension.java b/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumesExtension.java
new file mode 100644
index 000000000..39bcc0e4d
--- /dev/null
+++ b/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumesExtension.java
@@ -0,0 +1,164 @@
+package com.woorea.openstack.cinder;
+
+import com.woorea.openstack.base.client.Entity;
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackClient;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.cinder.model.ConnectionForInitialize;
+import com.woorea.openstack.cinder.model.ConnectionForTerminate;
+import com.woorea.openstack.cinder.model.ConnectionInfo;
+import com.woorea.openstack.cinder.model.Metadata;
+import com.woorea.openstack.cinder.model.Volume;
+import com.woorea.openstack.cinder.model.VolumeForCreate;
+import com.woorea.openstack.cinder.model.VolumeForExtend;
+import com.woorea.openstack.cinder.model.VolumeForImageCreate;
+import com.woorea.openstack.cinder.model.VolumeForUpdate;
+import com.woorea.openstack.cinder.model.Volumes;
+
+public class VolumesExtension {
+
+ private final OpenStackClient CLIENT;
+
+ public VolumesExtension(OpenStackClient client) {
+ CLIENT = client;
+ }
+
+ public List list(boolean detail) {
+ return new List(detail);
+ }
+
+ public Create create(VolumeForCreate volume) {
+ return new Create(volume);
+ }
+
+ public UploadToImage uploadToImage(VolumeForImageCreate volumeForImage) {
+ return new UploadToImage(volumeForImage);
+ }
+
+ public Show show(String id) {
+ return new Show(id);
+ }
+
+ public ShowMetadata showMetadata(String id) {
+ return new ShowMetadata(id);
+ }
+
+ public Delete delete(String id) {
+ return new Delete(id);
+ }
+
+ public Update update(String id, VolumeForUpdate volume) {
+ return new Update(id, volume);
+ }
+
+ public Extend extend(String id, int newSize) {
+ VolumeForExtend volume = new VolumeForExtend();
+ volume.setSize(newSize);
+ return new Extend(id, volume);
+ }
+
+ public InitializeConnection initializeConnection(String id, ConnectionForInitialize connectionForInitialize) {
+ return new InitializeConnection(id, connectionForInitialize);
+ }
+
+ public TerminateConnection terminateConnection(String id, ConnectionForTerminate connectionForTerminate) {
+ return new TerminateConnection(id, connectionForTerminate);
+ }
+
+ public class List extends OpenStackRequest {
+
+ public List(boolean detail) {
+ super(CLIENT, HttpMethod.GET, detail ? "/volumes/detail"
+ : "/volumes", null, Volumes.class);
+ }
+
+ }
+
+ public class Create extends OpenStackRequest {
+
+ public Create(VolumeForCreate volume) {
+ super(CLIENT, HttpMethod.POST, "/volumes", Entity.json(volume),
+ Volume.class);
+ }
+
+ }
+
+ // Upload volume to image service as image
+
+ public class UploadToImage extends OpenStackRequest {
+
+ public UploadToImage(VolumeForImageCreate volumeForImageCreate) {
+ super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
+ .append(volumeForImageCreate.getVolumeId() + "/action").toString(),
+ Entity.json(volumeForImageCreate), Void.class);
+ }
+
+ }
+
+ public class Show extends OpenStackRequest {
+
+ public Show(String id) {
+ super(CLIENT, HttpMethod.GET, new StringBuilder("/volumes/")
+ .append(id).toString(), null, Volume.class);
+ }
+
+ }
+
+ public class ShowMetadata extends OpenStackRequest {
+
+ public ShowMetadata(String id) {
+ super(CLIENT, HttpMethod.GET, new StringBuilder("/volumes/")
+ .append(id).append("/metadata").toString(), null,
+ Metadata.class);
+ }
+
+ }
+
+ public class Delete extends OpenStackRequest {
+
+ public Delete(String id) {
+ super(CLIENT, HttpMethod.DELETE, new StringBuilder("/volumes/")
+ .append(id).toString(), null, Void.class);
+ }
+
+ }
+
+ public class Update extends OpenStackRequest {
+
+ public Update(String id, VolumeForUpdate volume) {
+ super(CLIENT, HttpMethod.PUT, new StringBuilder("/volumes/").append(id).toString(),
+ Entity.json(volume), Void.class);
+ }
+
+ }
+
+ public class Extend extends OpenStackRequest {
+
+ public Extend(String id, VolumeForExtend volume) {
+ super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/").append(id).append("/action").toString(),
+ Entity.json(volume), Void.class);
+ }
+
+ }
+
+ public class InitializeConnection extends OpenStackRequest {
+
+ public InitializeConnection(String id, ConnectionForInitialize connectionForInitialize) {
+ super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
+ .append(id).append("/action").toString(),
+ Entity.json(connectionForInitialize), ConnectionInfo.class);
+ }
+
+ }
+
+ public class TerminateConnection extends OpenStackRequest {
+
+ public TerminateConnection(String id, ConnectionForTerminate connectionForTerminate) {
+ super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
+ .append(id).append("/action").toString(),
+ Entity.json(connectionForTerminate), Void.class);
+ }
+
+ }
+
+}
diff --git a/cinder-model/pom.xml b/cinder-model/pom.xml
new file mode 100644
index 000000000..b5fcc3577
--- /dev/null
+++ b/cinder-model/pom.xml
@@ -0,0 +1,11 @@
+
+ 4.0.0
+
+ com.woorea
+ openstack-java-sdk
+ 3.2.10-SNAPSHOT
+
+ cinder-model
+ OpenStack Cinder Model
+ OpenStack Cinder Model
+
\ No newline at end of file
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/BaseConnection.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/BaseConnection.java
new file mode 100644
index 000000000..e2fc8c2ed
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/BaseConnection.java
@@ -0,0 +1,28 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public abstract class BaseConnection implements Serializable {
+ @JsonProperty("connector")
+ private Map connector = new HashMap();
+
+ /**
+ * @return the connector
+ */
+ public Map getConnector() {
+ return connector;
+ }
+
+ /**
+ * @param connector
+ * the connector to set
+ */
+ public void setConnector(Map connector) {
+ this.connector = connector;
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Capabilities.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Capabilities.java
new file mode 100644
index 000000000..c8cd98b6b
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Capabilities.java
@@ -0,0 +1,139 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+/**
+ * Model for Volume
+ */
+@JsonRootName("capabilities")
+public class Capabilities implements Serializable {
+
+ @JsonProperty("pool_name")
+ private String poolName;
+ @JsonProperty("QoS_support")
+ private boolean qosSupport;
+ @JsonProperty("allocated_capacity_gb")
+ private Long allocatedCapacityGb;
+ @JsonProperty("driver_version")
+ private String driverVersion;
+ @JsonProperty("free_capacity_gb")
+ private Long freeCapacityGb;
+ @JsonProperty("location_info")
+ private String locationInfo;
+
+ private String timestamp;
+ @JsonProperty("volume_backend_name")
+ private String volumeBackendName;
+ @JsonProperty("total_capacity_gb")
+ private Long totalCapacityGb;
+ @JsonProperty("reserved_percentage")
+ private Integer reservedPercentage;
+ @JsonProperty("vendor_name")
+ private String vendorName;
+ @JsonProperty("storage_protocol")
+ private String storageProtocol;
+ @JsonProperty("extra_specs")
+ private Map extraSpecs;
+
+ public String getPoolName() {
+ return poolName;
+ }
+ public void setPoolName(String poolName) {
+ this.poolName = poolName;
+ }
+ public boolean isQosSupport() {
+ return qosSupport;
+ }
+ public void setQosSupport(boolean qosSupport) {
+ this.qosSupport = qosSupport;
+ }
+ public Long getAllocatedCapacityGb() {
+ return allocatedCapacityGb;
+ }
+ public void setAllocatedCapacityGb(Long allocatedCapacityGb) {
+ this.allocatedCapacityGb = allocatedCapacityGb;
+ }
+ public String getDriverVersion() {
+ return driverVersion;
+ }
+ public void setDriverVersion(String driverVersion) {
+ this.driverVersion = driverVersion;
+ }
+ public Long getFreeCapacityGb() {
+ return freeCapacityGb;
+ }
+ public void setFreeCapacityGb(Long freeCapacityGb) {
+ this.freeCapacityGb = freeCapacityGb;
+ }
+ public String getLocationInfo() {
+ return locationInfo;
+ }
+ public void setLocationInfo(String locationInfo) {
+ this.locationInfo = locationInfo;
+ }
+ public String getTimestamp() {
+ return timestamp;
+ }
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+ public String getVolumeBackendName() {
+ return volumeBackendName;
+ }
+ public void setVolumeBackendName(String volumeBackendName) {
+ this.volumeBackendName = volumeBackendName;
+ }
+ public Long getTotalCapacityGb() {
+ return totalCapacityGb;
+ }
+ public void setTotalCapacityGb(Long totalCapacityGb) {
+ this.totalCapacityGb = totalCapacityGb;
+ }
+ public Integer getReservedPercentage() {
+ return reservedPercentage;
+ }
+ public void setReservedPercentage(Integer reservedPercentage) {
+ this.reservedPercentage = reservedPercentage;
+ }
+ public String getVendorName() {
+ return vendorName;
+ }
+ public void setVendorName(String vendorName) {
+ this.vendorName = vendorName;
+ }
+ public String getStorageProtocol() {
+ return storageProtocol;
+ }
+ public void setStorageProtocol(String storageProtocol) {
+ this.storageProtocol = storageProtocol;
+ }
+ public Map getExtraSpecs() {
+ return extraSpecs;
+ }
+ public void setExtraSpecs(Map extraSpecs) {
+ this.extraSpecs = extraSpecs;
+ }
+
+ @Override
+ public String toString() {
+ return "Capabilities{"
+ + "poolName='" + poolName
+ + ", qosSupport='" + qosSupport
+ + ", allocatedCapacityGb='" + allocatedCapacityGb
+ + ", driverVersion='" + driverVersion
+ + ", freeCapacityGb='" + freeCapacityGb
+ + ", locationInfo='" + locationInfo
+ + ", timestamp='" + timestamp
+ + ", volumeBackendName='" + volumeBackendName
+ + ", totalCapacityGb='" + totalCapacityGb
+ + ", reservedPercentage='" + reservedPercentage
+ + ", vendorName='" + vendorName
+ + ", storageProtocol='" + storageProtocol
+ + ", extraSpecs='" + extraSpecs
+ + '}';
+ }
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForInitialize.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForInitialize.java
new file mode 100644
index 000000000..47218054c
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForInitialize.java
@@ -0,0 +1,20 @@
+package com.woorea.openstack.cinder.model;
+
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+import java.io.Serializable;
+
+@JsonRootName("os-initialize_connection")
+public class ConnectionForInitialize extends BaseConnection implements Serializable {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConnectionForInitialize [connector=" + getConnector() + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForTerminate.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForTerminate.java
new file mode 100644
index 000000000..7fee326b4
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionForTerminate.java
@@ -0,0 +1,20 @@
+package com.woorea.openstack.cinder.model;
+
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+import java.io.Serializable;
+
+@JsonRootName("os-terminate_connection")
+public class ConnectionForTerminate extends BaseConnection implements Serializable {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConnectionForInitialize [connector=" + getConnector() + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionInfo.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionInfo.java
new file mode 100644
index 000000000..362aaca02
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/ConnectionInfo.java
@@ -0,0 +1,58 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("connection_info")
+public class ConnectionInfo implements Serializable {
+
+ @JsonProperty("driver_volume_type")
+ private String driverVolumeType;
+
+ private Map data;
+
+ /**
+ * @return the driverVolumeType
+ */
+ public String getDriverVolumeType() {
+ return driverVolumeType;
+ }
+
+ /**
+ * @param driverVolumeType
+ * the driverVolumeType to set
+ */
+ public void setDriverVolumeType(String driverVolumeType) {
+ this.driverVolumeType = driverVolumeType;
+ }
+
+ /**
+ * @return the data
+ */
+ public Map getData() {
+ return data;
+ }
+
+ /**
+ * @param data
+ * the data to set
+ */
+ public void setData(Map data) {
+ this.data = data;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConnectionInfo [driverVolumeType=" + driverVolumeType + "," +
+ " data=" + data + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Limits.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Limits.java
new file mode 100644
index 000000000..d6ef7762d
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Limits.java
@@ -0,0 +1,246 @@
+package com.woorea.openstack.cinder.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.List;
+
+@JsonRootName("limits")
+public class Limits implements Serializable {
+
+ public static final class RateLimit implements Serializable {
+
+ public static final class LimitEntry implements Serializable {
+
+ @JsonProperty("next-available")
+ private Calendar nextAvailable;
+
+ private String unit;
+
+ private String verb;
+
+ private Integer remaining;
+
+ private Integer available;
+
+ private Integer value;
+
+ /**
+ * @return the nextAvailable
+ */
+ public Calendar getNextAvailable() {
+ return nextAvailable;
+ }
+
+ /**
+ * @return the unit
+ */
+ public String getUnit() {
+ return unit;
+ }
+
+ /**
+ * @return the verb
+ */
+ public String getVerb() {
+ return verb;
+ }
+
+ /**
+ * @return the remaining
+ */
+ public Integer getRemaining() {
+ return remaining;
+ }
+
+ /**
+ * @return the available
+ */
+ public Integer getAvailable() {
+ return available;
+ }
+
+ /**
+ * @return the value
+ */
+ public Integer getValue() {
+ return value;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "LimitEntry [nextAvailable=" + nextAvailable + ", unit="
+ + unit + ", verb=" + verb + ", remaining=" + remaining
+ + ", available=" + available + ", value=" + value + "]";
+ }
+
+ }
+
+ private String regex;
+
+ private String uri;
+
+ private List limit;
+
+ /**
+ * @return the regex
+ */
+ public String getRegex() {
+ return regex;
+ }
+
+ /**
+ * @return the uri
+ */
+ public String getUri() {
+ return uri;
+ }
+
+ /**
+ * @return the limit
+ */
+ public List getLimit() {
+ return limit;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "RateLimit [regex=" + regex + ", uri=" + uri + ", limit="
+ + limit + "]";
+ }
+
+ }
+
+ public static final class AbsoluteLimit {
+
+ private Integer maxTotalVolumes;
+ private Integer totalVolumesUsed;
+
+ private Integer maxTotalSnapshots;
+ private Integer totalSnapshotsUsed;
+
+ private Integer maxTotalVolumeGigabytes;
+ private Integer totalGigabytesUsed;
+
+ private Integer maxTotalBackups;
+ private Integer totalBackupsUsed;
+
+ private Integer maxTotalBackupGigabytes;
+ private Integer totalBackupGigabytesUsed;
+
+ /**
+ * @return the maxTotalVolumes
+ */
+ public Integer getMaxTotalVolumes() {
+ return maxTotalVolumes;
+ }
+
+ /**
+ * @return the totalVolumesUsed
+ */
+ public Integer getTotalVolumesUsed() {
+ return totalVolumesUsed;
+ }
+
+ /**
+ * @return the maxTotalSnapshots
+ */
+ public Integer getMaxTotalSnapshots() {
+ return maxTotalSnapshots;
+ }
+
+ /**
+ * @return the totalSnapshotsUsed
+ */
+ public Integer getTotalSnapshotsUsed() {
+ return totalSnapshotsUsed;
+ }
+
+ /**
+ * @return the maxTotalVolumeGigabytes
+ */
+ public Integer getMaxTotalVolumeGigabytes() {
+ return maxTotalVolumeGigabytes;
+ }
+
+ /**
+ * @return the totalGigabytesUsed
+ */
+ public Integer getTotalGigabytesUsed() {
+ return totalGigabytesUsed;
+ }
+
+ /**
+ * @return the maxTotalBackupGigabytes
+ */
+ public Integer getMaxTotalBackupGigabytes() {
+ return maxTotalBackupGigabytes;
+ }
+
+ /**
+ * @return the totalBackupGigabytesUsed
+ */
+ public Integer getTotalBackupGigabytesUsed() {
+ return totalBackupGigabytesUsed;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "AbsoluteLimit [maxTotalVolumes=" + maxTotalVolumes +
+ ", totalVolumesUsed=" + totalVolumesUsed +
+ ", maxTotalSnapshots=" + maxTotalSnapshots +
+ ", totalSnapshotsUsed=" + totalSnapshotsUsed +
+ ", maxTotalVolumeGigabytes=" + maxTotalVolumeGigabytes +
+ ", totalGigabytesUsed=" + totalGigabytesUsed +
+ ", maxTotalBackupGigabytes=" + maxTotalBackupGigabytes +
+ ", totalBackupGigabytesUsed=" + totalBackupGigabytesUsed +"]";
+ }
+
+ }
+
+ private List rate;
+
+ private AbsoluteLimit absolute;
+
+ /**
+ * @return the rate
+ */
+ public List getRate() {
+ return rate;
+ }
+
+ /**
+ * @return the absolute
+ */
+ public AbsoluteLimit getAbsolute() {
+ return absolute;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "Limits [rate=" + rate + ", absolute=" + absolute + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Metadata.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Metadata.java
new file mode 100644
index 000000000..3949a853e
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Metadata.java
@@ -0,0 +1,35 @@
+package com.woorea.openstack.cinder.model;
+
+import java.util.Map;
+
+public class Metadata {
+
+ private Map metadata;
+
+ /**
+ * @return the metadata
+ */
+ public Map getMetadata() {
+ return metadata;
+ }
+
+ /**
+ * Set the metadata
+ *
+ * @param metadata
+ */
+ public void setMetadata(Map metadata) {
+ this.metadata = metadata;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "Metadata [metadata=" + metadata + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pool.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pool.java
new file mode 100644
index 000000000..1e8da7166
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pool.java
@@ -0,0 +1,42 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+/**
+ * Model for Pool
+ */
+@JsonRootName("pool")
+public class Pool implements Serializable {
+
+ private String name;
+
+ private Capabilities capabilities;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Capabilities getCapabilities() {
+ return capabilities;
+ }
+
+ public void setCapabilities(Capabilities capabilities) {
+ this.capabilities = capabilities;
+ }
+
+ @Override
+ public String toString() {
+ return "Pool{"
+ + "name='" + name
+ + ", capabilities='" + capabilities
+ + '}';
+ }
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pools.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pools.java
new file mode 100644
index 000000000..3816362f7
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Pools.java
@@ -0,0 +1,33 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Model for List of pools
+ */
+public class Pools implements Iterable, Serializable {
+
+ @JsonProperty("pools")
+ private List list;
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return list.iterator();
+ }
+
+ @Override
+ public String toString() {
+ return "Pools [list=" + list + "]";
+ }
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshot.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshot.java
new file mode 100644
index 000000000..60b7ef13f
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshot.java
@@ -0,0 +1,99 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("snapshot")
+public class Snapshot implements Serializable {
+
+ private String id;
+
+ private String status;
+
+ private String name;
+
+ private String description;
+
+ @JsonProperty("volume_id")
+ private String volumeId;
+
+ private Integer size;
+
+ @JsonProperty("created_at")
+ private String createdAt;
+
+ private Map metadata;
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @return the status
+ */
+ public String getStatus() {
+ return status;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @return the volumeId
+ */
+ public String getVolumeId() {
+ return volumeId;
+ }
+
+ /**
+ * @return the size
+ */
+ public Integer getSize() {
+ return size;
+ }
+
+ /**
+ * @return the createdAt
+ */
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ /**
+ * @return the metadata
+ */
+ public Map getMetadata() {
+ return metadata;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "Snapshot [id=" + id + ", status=" + status +
+ ", name=" + name + ", description=" + description +
+ ", volumeId=" + volumeId + ", size=" + size +
+ ", createdAt=" + createdAt + ", metadata=" + metadata + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForCreate.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForCreate.java
new file mode 100644
index 000000000..3634fcb0a
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForCreate.java
@@ -0,0 +1,91 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("snapshot")
+public class SnapshotForCreate implements Serializable {
+
+ @JsonProperty("volume_id")
+ private String volumeId;
+
+ private Boolean force;
+
+ private String name;
+
+ private String description;
+
+ /**
+ * @return the volumeId
+ */
+ public String getVolumeId() {
+ return volumeId;
+ }
+
+ /**
+ * @param volumeId
+ * the volumeId to set
+ */
+ public void setVolumeId(String volumeId) {
+ this.volumeId = volumeId;
+ }
+
+ /**
+ * @return the force
+ */
+ public Boolean getForce() {
+ return force;
+ }
+
+ /**
+ * @param force
+ * the force to set
+ */
+ public void setForce(Boolean force) {
+ this.force = force;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "SnapshotForCreate [volumeId=" + volumeId + ", force=" + force
+ + ", name=" + name + ", description=" + description + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForUpdate.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForUpdate.java
new file mode 100644
index 000000000..525ef3c31
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/SnapshotForUpdate.java
@@ -0,0 +1,54 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("snapshot")
+public class SnapshotForUpdate implements Serializable {
+
+ private String name;
+
+ private String description;
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "SnapshotForUpdate [name=" + name + ", description=" + description + "]";
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshots.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshots.java
new file mode 100644
index 000000000..176b1c459
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Snapshots.java
@@ -0,0 +1,36 @@
+package com.woorea.openstack.cinder.model;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class Snapshots implements Iterable, Serializable {
+
+ @JsonProperty("snapshots")
+ private List list;
+
+ /**
+ * @return the list
+ */
+ public List getList() {
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "Snapshots [list=" + list + "]";
+ }
+
+ @Override
+ public Iterator iterator() {
+ return list.iterator();
+ }
+
+}
diff --git a/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Volume.java b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Volume.java
new file mode 100644
index 000000000..a5fda3f20
--- /dev/null
+++ b/cinder-model/src/main/java/com/woorea/openstack/cinder/model/Volume.java
@@ -0,0 +1,166 @@
+package com.woorea.openstack.cinder.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@JsonRootName("volume")
+public class Volume implements Serializable {
+
+ private String id;
+
+ private String status;
+
+ private String name;
+
+ private String description;
+
+ @JsonProperty("availability_zone")
+ private String availabilityZone;
+
+ @JsonProperty("volume_type")
+ private String volumeType;
+
+ @JsonProperty("snapshot_id")
+ private String snapshotId;
+
+ @JsonProperty("source_volid")
+ private String sourceVolid;
+
+ @JsonProperty("bootable")
+ private Boolean bootable;
+
+ private List