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