2010-03-16 18:46:21 -04:00
|
|
|
module Fog
|
2011-06-16 19:28:54 -04:00
|
|
|
module Compute
|
|
|
|
class AWS
|
2010-03-16 18:46:21 -04:00
|
|
|
class Real
|
2009-08-15 18:19:07 -04:00
|
|
|
|
2011-01-07 19:52:09 -05:00
|
|
|
require 'fog/compute/parsers/aws/create_volume'
|
2010-06-12 18:31:17 -04:00
|
|
|
|
2009-08-15 18:19:07 -04:00
|
|
|
# Create an EBS volume
|
|
|
|
#
|
|
|
|
# ==== Parameters
|
|
|
|
# * availability_zone<~String> - availability zone to create volume in
|
|
|
|
# * size<~Integer> - Size in GiBs for volume. Must be between 1 and 1024.
|
|
|
|
# * snapshot_id<~String> - Optional, snapshot to create volume from
|
|
|
|
#
|
|
|
|
# ==== Returns
|
2009-11-02 21:48:49 -05:00
|
|
|
# * response<~Excon::Response>:
|
2009-08-15 18:19:07 -04:00
|
|
|
# * body<~Hash>:
|
|
|
|
# * 'availabilityZone'<~String> - Availability zone for volume
|
|
|
|
# * 'createTime'<~Time> - Timestamp for creation
|
|
|
|
# * 'size'<~Integer> - Size in GiBs for volume
|
|
|
|
# * 'snapshotId'<~String> - Snapshot volume was created from, if any
|
|
|
|
# * 'status's<~String> - State of volume
|
|
|
|
# * 'volumeId'<~String> - Reference to volume
|
2011-05-19 12:31:56 -04:00
|
|
|
#
|
|
|
|
# {Amazon API Reference}[http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html]
|
2009-08-15 18:19:07 -04:00
|
|
|
def create_volume(availability_zone, size, snapshot_id = nil)
|
2010-03-16 01:15:33 -04:00
|
|
|
request(
|
|
|
|
'Action' => 'CreateVolume',
|
|
|
|
'AvailabilityZone' => availability_zone,
|
|
|
|
'Size' => size,
|
|
|
|
'SnapshotId' => snapshot_id,
|
2011-06-16 19:28:54 -04:00
|
|
|
:parser => Fog::Parsers::Compute::AWS::CreateVolume.new
|
2010-03-16 01:15:33 -04:00
|
|
|
)
|
2009-08-15 18:19:07 -04:00
|
|
|
end
|
|
|
|
|
2009-07-13 22:14:59 -04:00
|
|
|
end
|
|
|
|
|
2010-03-16 18:46:21 -04:00
|
|
|
class Mock
|
2009-08-15 18:19:07 -04:00
|
|
|
|
|
|
|
def create_volume(availability_zone, size, snapshot_id = nil)
|
2009-11-20 14:08:08 -05:00
|
|
|
response = Excon::Response.new
|
2011-06-20 18:22:57 -04:00
|
|
|
if availability_zone && (size || snapshot_id)
|
|
|
|
snapshot = self.data[:snapshots][snapshot_id]
|
|
|
|
if snapshot_id && !snapshot
|
2011-06-16 19:28:54 -04:00
|
|
|
raise Fog::Compute::AWS::NotFound.new("The snapshot '#{snapshot_id}' does not exist.")
|
2011-03-22 14:17:02 -04:00
|
|
|
end
|
2011-03-21 23:43:16 -04:00
|
|
|
|
2011-08-15 01:22:37 -04:00
|
|
|
if snapshot && size && size < snapshot['volumeSize']
|
|
|
|
raise Fog::Compute::AWS::NotFound.new("The snapshot '#{snapshot_id}' has size #{snapshot['volumeSize']} which is greater than #{size}.")
|
2011-06-20 18:22:57 -04:00
|
|
|
elsif snapshot && !size
|
|
|
|
size = snapshot['volumeSize']
|
|
|
|
end
|
|
|
|
|
2009-10-22 23:46:46 -04:00
|
|
|
response.status = 200
|
|
|
|
volume_id = Fog::AWS::Mock.volume_id
|
|
|
|
data = {
|
|
|
|
'availabilityZone' => availability_zone,
|
|
|
|
'attachmentSet' => [],
|
|
|
|
'createTime' => Time.now,
|
|
|
|
'size' => size,
|
2010-05-05 17:22:22 -04:00
|
|
|
'snapshotId' => snapshot_id,
|
2009-10-22 23:46:46 -04:00
|
|
|
'status' => 'creating',
|
2010-11-02 15:21:17 -04:00
|
|
|
'tagSet' => {},
|
2009-10-22 23:46:46 -04:00
|
|
|
'volumeId' => volume_id
|
|
|
|
}
|
2011-05-19 18:35:33 -04:00
|
|
|
self.data[:volumes][volume_id] = data
|
2009-10-22 23:46:46 -04:00
|
|
|
response.body = {
|
|
|
|
'requestId' => Fog::AWS::Mock.request_id
|
|
|
|
}.merge!(data.reject {|key,value| !['availabilityZone','createTime','size','snapshotId','status','volumeId'].include?(key) })
|
|
|
|
else
|
|
|
|
response.status = 400
|
|
|
|
response.body = {
|
|
|
|
'Code' => 'MissingParameter'
|
|
|
|
}
|
|
|
|
unless availability_zone
|
2009-10-24 01:23:55 -04:00
|
|
|
response.body['Message'] = 'The request must contain the parameter availability_zone'
|
2009-10-22 23:46:46 -04:00
|
|
|
else
|
2009-10-24 01:23:55 -04:00
|
|
|
response.body['Message'] = 'The request must contain the parameter size'
|
2009-10-22 23:46:46 -04:00
|
|
|
end
|
|
|
|
end
|
2009-08-15 18:19:07 -04:00
|
|
|
response
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
2009-07-13 22:14:59 -04:00
|
|
|
end
|
|
|
|
end
|
2009-08-15 18:19:07 -04:00
|
|
|
end
|