lib/fog/rackspace/requests/block_storage/create_snapshot.rb in fog-maestrodev-1.8.0.20130114204828 vs lib/fog/rackspace/requests/block_storage/create_snapshot.rb in fog-maestrodev-1.14.0.20130806165225
- old
+ new
@@ -1,9 +1,33 @@
module Fog
module Rackspace
class BlockStorage
class Real
+
+ # Create a snapshot from a volume
+ #
+ # @param [String] volume_id Id of server to create image from
+ # @param [Hash] options
+ # @option options [String] :display_name display name for snapshot
+ # @option options [String] :display_description display description for snapshot
+ # @option options [Boolean] :force Set to true to force service to create snapshot
+ # @return [Excon::Response] response:
+ # * body [Hash]:
+ # * 'snapshot' [Hash]:
+ # * 'volume_id' [String]: - the volume_id of the snapshot
+ # * 'display_description' [String]: - display description of snapshot
+ # * 'status' [String]: - status of snapshot
+ # * 'id' [String]: - id of snapshot
+ # * 'size' [Fixnum]: - size of the snapshot in GB
+ # * 'display_name' [String]: - display name of snapshot
+ # * 'created_at' [String]: - creation time of snapshot
+ # @raise [Fog::Rackspace::BlockStorage::NotFound] - HTTP 404
+ # @raise [Fog::Rackspace::BlockStorage::BadRequest] - HTTP 400
+ # @raise [Fog::Rackspace::BlockStorage::InternalServerError] - HTTP 500
+ # @raise [Fog::Rackspace::BlockStorage::ServiceError]
+ # @note All writes to the volume should be flushed before creating the snapshot, either by un-mounting any file systems on the volume or by detaching the volume.
+ # @see http://docs.rackspace.com/cbs/api/v1.0/cbs-devguide/content/POST_createSnapshot__v1__tenant_id__snapshots.html
def create_snapshot(volume_id, options = {})
data = {
'snapshot' => {
'volume_id' => volume_id
}
@@ -17,9 +41,37 @@
:body => Fog::JSON.encode(data),
:expects => [200],
:method => 'POST',
:path => "snapshots"
)
+ end
+ end
+
+ class Mock
+ def create_snapshot(volume_id, options = {})
+ volume = self.data[:volumes][volume_id]
+ if volume.nil?
+ raise Fog::Rackspace::BlockStorage::NotFound
+ else
+ snapshot_id = Fog::Rackspace::MockData.uuid
+ display_name = options[:display_name] || "test snapshot"
+ display_description = options[:display_description] || "test snapshot description"
+
+ snapshot = {
+ "id" => snapshot_id,
+ "display_name" => display_name,
+ "display_description" => display_description,
+ "volume_id" => volume_id,
+ "status" => "available",
+ "size" => volume["size"],
+ "created_at" => Fog::Rackspace::MockData.zulu_time,
+ "availability_zone" => "nova",
+ }
+
+ self.data[:snapshots][snapshot_id] = snapshot
+
+ response(:body => {"snapshot" => snapshot})
+ end
end
end
end
end
end