1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/aws/requests/rds/create_db_snapshot.rb
Aaron Suggs b18e5efa03 [aws|rds] Mock DB snapshot requests.
Relevant tests pass; no longer pending
2012-02-26 15:00:35 -05:00

72 lines
2.4 KiB
Ruby

module Fog
module AWS
class RDS
class Real
require 'fog/aws/parsers/rds/create_db_snapshot'
# creates a db snapshot
# http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/API_CreateDBSnapshot.html
# ==== Parameters
# * DBInstanceIdentifier <~String> - ID of instance to create snapshot for
# * DBSnapshotIdentifier <~String> - The identifier for the DB Snapshot. 1-255 alphanumeric or hyphen characters. Must start with a letter
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
def create_db_snapshot(identifier, name)
request({
'Action' => 'CreateDBSnapshot',
'DBInstanceIdentifier' => identifier,
'DBSnapshotIdentifier' => name,
:parser => Fog::Parsers::AWS::RDS::CreateDBSnapshot.new
})
end
end
class Mock
def create_db_snapshot(identifier, name)
response = Excon::Response.new
if data[:snapshots][name]
raise Fog::AWS::RDS::IndentifierTaken.new
end
server_data = data[:servers][identifier]
unless server_data
raise Fog::AWS::RDS::NotFound.new("DBInstance #{identifier} not found")
end
# TODO: raise an error if the server isn't in 'available' state
snapshot_data = {
'Status' => 'creating',
#'SnapshotType' => 'manual', # In a newer RDS version
'DBInstanceIdentifier' => identifier,
'DBSnapshotIdentifier' => name,
'InstanceCreateTime' => Time.now
}
# Copy attributes from server
%w(Engine EngineVersion AvailabilityZone AllocatedStorage MasterUsername InstanceCreateTime).each do |key|
snapshot_data[key] = server_data[key]
end
snapshot_data['Port'] = server_data['Endpoint']['Port']
self.data[:snapshots][name] = snapshot_data
# TODO: put the server in 'modifying' state
response.body = {
"ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id },
"CreateDBSnapshotResult"=> {"DBSnapshot"=> snapshot_data.dup}
}
response.status = 200
# SnapshotCreateTime is not part of the response.
self.data[:snapshots][name]['SnapshotCreateTime'] = Time.now
response
end
end
end
end
end