fog-aws 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -0
- data/README.md +1 -1
- data/gemfiles/Gemfile-edge +5 -0
- data/lib/fog/aws/models/compute/security_group.rb +4 -4
- data/lib/fog/aws/models/rds/cluster.rb +93 -0
- data/lib/fog/aws/models/rds/cluster_snapshots.rb +48 -0
- data/lib/fog/aws/models/rds/clusters.rb +23 -0
- data/lib/fog/aws/models/rds/parameters.rb +15 -0
- data/lib/fog/aws/models/rds/server.rb +29 -11
- data/lib/fog/aws/models/rds/servers.rb +4 -0
- data/lib/fog/aws/models/rds/snapshot.rb +36 -17
- data/lib/fog/aws/parsers/rds/create_db_cluster.rb +32 -0
- data/lib/fog/aws/parsers/rds/create_db_cluster_snapshot.rb +33 -0
- data/lib/fog/aws/parsers/rds/db_cluster_parser.rb +71 -0
- data/lib/fog/aws/parsers/rds/db_cluster_snapshot_parser.rb +32 -0
- data/lib/fog/aws/parsers/rds/db_parameter_parser.rb +30 -0
- data/lib/fog/aws/parsers/rds/db_parser.rb +2 -1
- data/lib/fog/aws/parsers/rds/delete_db_cluster.rb +32 -0
- data/lib/fog/aws/parsers/rds/delete_db_cluster_snapshot.rb +32 -0
- data/lib/fog/aws/parsers/rds/describe_db_cluster_snapshots.rb +34 -0
- data/lib/fog/aws/parsers/rds/describe_db_clusters.rb +34 -0
- data/lib/fog/aws/parsers/rds/describe_engine_default_parameters.rb +34 -0
- data/lib/fog/aws/parsers/rds/restore_db_instance_from_db_snapshot.rb +2 -2
- data/lib/fog/aws/parsers/rds/snapshot_parser.rb +6 -13
- data/lib/fog/aws/rds.rb +25 -0
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +5 -2
- data/lib/fog/aws/requests/rds/create_db_cluster.rb +98 -0
- data/lib/fog/aws/requests/rds/create_db_cluster_snapshot.rb +68 -0
- data/lib/fog/aws/requests/rds/create_db_instance.rb +42 -4
- data/lib/fog/aws/requests/rds/create_db_snapshot.rb +1 -1
- data/lib/fog/aws/requests/rds/delete_db_cluster.rb +55 -0
- data/lib/fog/aws/requests/rds/delete_db_cluster_snapshot.rb +43 -0
- data/lib/fog/aws/requests/rds/delete_db_instance.rb +9 -0
- data/lib/fog/aws/requests/rds/delete_db_snapshot.rb +2 -1
- data/lib/fog/aws/requests/rds/describe_db_cluster_snapshots.rb +66 -0
- data/lib/fog/aws/requests/rds/describe_db_clusters.rb +54 -0
- data/lib/fog/aws/requests/rds/describe_db_instances.rb +4 -0
- data/lib/fog/aws/requests/rds/describe_db_parameters.rb +15 -1
- data/lib/fog/aws/requests/rds/describe_engine_default_parameters.rb +40 -0
- data/lib/fog/aws/requests/rds/modify_db_instance.rb +52 -49
- data/lib/fog/aws/requests/rds/modify_db_parameter_group.rb +28 -1
- data/lib/fog/aws/requests/rds/restore_db_instance_from_db_snapshot.rb +63 -2
- data/lib/fog/aws/version.rb +1 -1
- data/tests/models/rds/cluster_tests.rb +54 -0
- data/tests/models/rds/clusters_tests.rb +5 -0
- data/tests/models/rds/helper.rb +13 -0
- data/tests/models/rds/server_tests.rb +3 -3
- data/tests/models/rds/servers_tests.rb +18 -0
- data/tests/requests/compute/instance_tests.rb +2 -3
- data/tests/requests/rds/cluster_snapshot_tests.rb +43 -0
- data/tests/requests/rds/cluster_tests.rb +37 -0
- data/tests/requests/rds/helper.rb +84 -0
- data/tests/requests/rds/instance_tests.rb +16 -4
- data/tests/requests/rds/parameter_group_tests.rb +1 -1
- data/tests/requests/rds/parameter_request_tests.rb +0 -2
- metadata +27 -3
@@ -0,0 +1,54 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class RDS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/rds/describe_db_clusters'
|
6
|
+
|
7
|
+
# Describe all or specified db clusters
|
8
|
+
# http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html
|
9
|
+
#
|
10
|
+
# ==== Parameters ====
|
11
|
+
# * DBClusterIdentifier<~String> - The user-supplied DB cluster identifier
|
12
|
+
#
|
13
|
+
# ==== Returns ====
|
14
|
+
# * response<~Excon::Response>:
|
15
|
+
# * body<~Hash>:
|
16
|
+
def describe_db_clusters(identifier=nil, opts={})
|
17
|
+
params = {}
|
18
|
+
params['DBClusterIdentifier'] = identifier if identifier
|
19
|
+
params['Marker'] = opts[:marker] if opts[:marker]
|
20
|
+
params['MaxRecords'] = opts[:max_records] if opts[:max_records]
|
21
|
+
|
22
|
+
request({
|
23
|
+
'Action' => 'DescribeDBClusters',
|
24
|
+
:parser => Fog::Parsers::AWS::RDS::DescribeDBClusters.new
|
25
|
+
}.merge(params))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Mock
|
30
|
+
def describe_db_clusters(identifier=nil, opts={})
|
31
|
+
response = Excon::Response.new
|
32
|
+
cluster_set = []
|
33
|
+
|
34
|
+
if identifier
|
35
|
+
if cluster = self.data[:clusters][identifier]
|
36
|
+
cluster_set << cluster
|
37
|
+
else
|
38
|
+
raise Fog::AWS::RDS::NotFound.new("DBCluster #{identifier} not found")
|
39
|
+
end
|
40
|
+
else
|
41
|
+
cluster_set = self.data[:clusters].values
|
42
|
+
end
|
43
|
+
|
44
|
+
response.status = 200
|
45
|
+
response.body = {
|
46
|
+
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
47
|
+
"DescribeDBClustersResult" => { "DBClusters" => cluster_set }
|
48
|
+
}
|
49
|
+
response
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -64,6 +64,10 @@ module Fog
|
|
64
64
|
when "modifying"
|
65
65
|
# TODO there are some fields that only applied after rebooting
|
66
66
|
if Time.now - self.data[:modify_time] >= Fog::Mock.delay
|
67
|
+
if new_id = server["PendingModifiedValues"] && server["PendingModifiedValues"]["DBInstanceIdentifier"]
|
68
|
+
self.data[:servers][new_id] = self.data[:servers].delete(server["DBInstanceIdentifier"])
|
69
|
+
end
|
70
|
+
|
67
71
|
server.merge!(server["PendingModifiedValues"])
|
68
72
|
server["PendingModifiedValues"] = {}
|
69
73
|
server["DBInstanceStatus"] = 'available'
|
@@ -34,7 +34,21 @@ module Fog
|
|
34
34
|
|
35
35
|
class Mock
|
36
36
|
def describe_db_parameters(name, opts={})
|
37
|
-
|
37
|
+
group = self.data[:parameter_groups][name]
|
38
|
+
|
39
|
+
unless group
|
40
|
+
raise Fog::AWS::RDS::NotFound.new("parameter group does not exist")
|
41
|
+
end
|
42
|
+
|
43
|
+
parameters = group[:parameters]
|
44
|
+
|
45
|
+
response = Excon::Response.new
|
46
|
+
response.body = {
|
47
|
+
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
48
|
+
"DescribeDBParametersResult" => { "Parameters" => parameters }
|
49
|
+
}
|
50
|
+
response.status = 200
|
51
|
+
response
|
38
52
|
end
|
39
53
|
end
|
40
54
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class RDS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/rds/describe_engine_default_parameters'
|
6
|
+
|
7
|
+
# Returns the default engine and system parameter information for the specified database engine
|
8
|
+
# http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEngineDefaultParameters.html
|
9
|
+
#
|
10
|
+
# ==== Parameters ====
|
11
|
+
# * DBParameterGroupFamily<~String> - The name of the DB parameter group family
|
12
|
+
#
|
13
|
+
# ==== Returns ====
|
14
|
+
# * response<~Excon::Response>:
|
15
|
+
# * body<~Hash>:
|
16
|
+
|
17
|
+
def describe_engine_default_parameters(family, opts={})
|
18
|
+
request({
|
19
|
+
'Action' => 'DescribeEngineDefaultParameters',
|
20
|
+
'DBParameterGroupFamily' => family,
|
21
|
+
:parser => Fog::Parsers::AWS::RDS::DescribeEngineDefaultParameters.new,
|
22
|
+
}.merge(opts))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Mock
|
27
|
+
def describe_engine_default_parameters(family, opts={})
|
28
|
+
response = Excon::Response.new
|
29
|
+
|
30
|
+
response.status = 200
|
31
|
+
response.body = {
|
32
|
+
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
33
|
+
"DescribeEngineDefaultParametersResult" => { "Parameters" => self.data[:default_parameters]}
|
34
|
+
}
|
35
|
+
response
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -49,58 +49,61 @@ module Fog
|
|
49
49
|
def modify_db_instance(db_name, apply_immediately, _options={})
|
50
50
|
options = _options.dup
|
51
51
|
response = Excon::Response.new
|
52
|
+
if server = self.data[:servers][db_name]
|
53
|
+
if server["DBInstanceStatus"] != "available"
|
54
|
+
raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not available for modification")
|
55
|
+
else
|
56
|
+
self.data[:modify_time] = Time.now
|
57
|
+
# TODO verify the params options
|
58
|
+
# if apply_immediately is false, all the options go to pending_modified_values and then apply and clear after either
|
59
|
+
# a reboot or the maintainance window
|
60
|
+
#if apply_immediately
|
61
|
+
# modified_server = server.merge(options)
|
62
|
+
#else
|
63
|
+
# modified_server = server["PendingModifiedValues"].merge!(options) # it appends
|
64
|
+
#end
|
65
|
+
if options["NewDBInstanceIdentifier"]
|
66
|
+
options["DBInstanceIdentifier"] = options.delete("NewDBInstanceIdentifier")
|
67
|
+
options["Endpoint"] = {"Port" => server["Endpoint"]["Port"], "Address"=> Fog::AWS::Mock.rds_address(options["DBInstanceIdentifier"],region)}
|
68
|
+
end
|
69
|
+
|
70
|
+
rds_security_groups = self.data[:security_groups].values
|
71
|
+
ec2_security_groups = Fog::Compute::AWS::Mock.data[@region][@aws_access_key_id][:security_groups].values
|
72
|
+
|
73
|
+
db_security_group_names = Array(options.delete("DBSecurityGroups"))
|
74
|
+
db_security_groups = db_security_group_names.inject([]) do |r, group_name|
|
75
|
+
unless rds_security_groups.find { |sg| sg["DBSecurityGroupName"] == group_name }
|
76
|
+
raise Fog::AWS::RDS::Error.new("InvalidParameterValue => Invalid security group , groupId= , groupName=#{group_name}")
|
77
|
+
end
|
78
|
+
r << {"Status" => "active", "DBSecurityGroupName" => group_name }
|
79
|
+
end
|
80
|
+
|
81
|
+
vpc_security_groups = Array(options.delete("VpcSecurityGroups")).inject([]) do |r, group_id|
|
82
|
+
unless ec2_security_groups.find { |sg| sg["groupId"] == group_id }
|
83
|
+
raise Fog::AWS::RDS::Error.new("InvalidParameterValue => Invalid security group , groupId=#{group_id} , groupName=")
|
84
|
+
end
|
85
|
+
|
86
|
+
r << {"Status" => "active", "VpcSecurityGroupId" => group_id }
|
87
|
+
end
|
88
|
+
|
89
|
+
options.merge!(
|
90
|
+
"DBSecurityGroups" => db_security_groups,
|
91
|
+
"VpcSecurityGroups" => vpc_security_groups
|
92
|
+
)
|
93
|
+
|
94
|
+
self.data[:servers][db_name]["PendingModifiedValues"].merge!(options) # it appends
|
95
|
+
self.data[:servers][db_name]["DBInstanceStatus"] = "modifying"
|
96
|
+
response.status = 200
|
97
|
+
response.body = {
|
98
|
+
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
99
|
+
"ModifyDBInstanceResult" => { "DBInstance" => self.data[:servers][db_name] }
|
100
|
+
}
|
101
|
+
response
|
52
102
|
|
53
|
-
server = self.data[:servers][db_name]
|
54
|
-
|
55
|
-
if server.nil?
|
56
|
-
raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not found")
|
57
|
-
end
|
58
|
-
|
59
|
-
if server["DBInstanceStatus"] != "available"
|
60
|
-
raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not available for modification")
|
61
|
-
end
|
62
|
-
|
63
|
-
db_security_group_names = Array(options.delete("DBSecurityGroups"))
|
64
|
-
|
65
|
-
rds_security_groups = self.data[:security_groups].values
|
66
|
-
|
67
|
-
db_security_groups = db_security_group_names.map do |r, group_name|
|
68
|
-
unless rds_security_groups.find { |sg| sg["DBSecurityGroupName"] == group_name }
|
69
|
-
raise Fog::AWS::RDS::Error.new("InvalidParameterValue => Invalid security group , groupId= , groupName=#{group_name}")
|
70
|
-
end
|
71
|
-
r << {"Status" => "active", "DBSecurityGroupName" => group_name }
|
72
|
-
end
|
73
|
-
|
74
|
-
ec2_security_groups = Fog::Compute::AWS::Mock.data[@region][@aws_access_key_id][:security_groups].values
|
75
|
-
|
76
|
-
vpc_security_groups = Array(options.delete("VpcSecurityGroups")).map do |group_id|
|
77
|
-
unless ec2_security_groups.find { |sg| sg["groupId"] == group_id }
|
78
|
-
raise Fog::AWS::RDS::Error.new("InvalidParameterValue => Invalid security group , groupId=#{group_id} , groupName=")
|
79
103
|
end
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
options.merge!(
|
85
|
-
"DBSecurityGroups" => db_security_groups,
|
86
|
-
"VpcSecurityGroups" => vpc_security_groups
|
87
|
-
)
|
88
|
-
|
89
|
-
if options["NewDBInstanceIdentifier"]
|
90
|
-
options["DBInstanceIdentifier"] = options.delete("NewDBInstanceIdentifier")
|
104
|
+
else
|
105
|
+
raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not found")
|
91
106
|
end
|
92
|
-
|
93
|
-
self.data[:modify_time] = Time.now
|
94
|
-
server["PendingModifiedValues"].merge!(options)
|
95
|
-
server["DBInstanceStatus"] = "modifying"
|
96
|
-
|
97
|
-
response.status = 200
|
98
|
-
response.body = {
|
99
|
-
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
100
|
-
"ModifyDBInstanceResult" => { "DBInstance" => server }
|
101
|
-
}
|
102
|
-
|
103
|
-
response
|
104
107
|
end
|
105
108
|
end
|
106
109
|
end
|
@@ -42,7 +42,34 @@ module Fog
|
|
42
42
|
|
43
43
|
class Mock
|
44
44
|
def modify_db_parameter_group(group_name, parameters)
|
45
|
-
|
45
|
+
group = self.data[:parameter_groups][group_name]
|
46
|
+
|
47
|
+
unless group
|
48
|
+
raise Fog::AWS::RDS::NotFound.new("Parameter group not found")
|
49
|
+
end
|
50
|
+
|
51
|
+
parameters.each do |p|
|
52
|
+
p.merge!(
|
53
|
+
"Source" => "user",
|
54
|
+
"IsModifiable" => true,
|
55
|
+
"Description" => "some string",
|
56
|
+
"DataType" => "string",
|
57
|
+
"AllowedValues" => p["ParameterValue"],
|
58
|
+
"ApplyType" => "dynamic"
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
group[:parameters] = parameters
|
63
|
+
|
64
|
+
self.data[:parameter_groups][group_name] = group
|
65
|
+
|
66
|
+
response = Excon::Response.new
|
67
|
+
response.body = {
|
68
|
+
"ResponseMetadata" => {"RequestId" => Fog::AWS::Mock.request_id},
|
69
|
+
"ModifyDBParameterGroupResult" => {"DBParameterGroupName" => group_name}
|
70
|
+
}
|
71
|
+
response.status = 200
|
72
|
+
response
|
46
73
|
end
|
47
74
|
end
|
48
75
|
end
|
@@ -20,8 +20,69 @@ module Fog
|
|
20
20
|
end
|
21
21
|
|
22
22
|
class Mock
|
23
|
-
def restore_db_instance_from_db_snapshot(snapshot_id,
|
24
|
-
|
23
|
+
def restore_db_instance_from_db_snapshot(snapshot_id, db_name, options={})
|
24
|
+
|
25
|
+
if self.data[:servers] and self.data[:servers][db_name]
|
26
|
+
raise Fog::AWS::RDS::IdentifierTaken.new("DBInstanceAlreadyExists #{response.body.to_s}")
|
27
|
+
end
|
28
|
+
|
29
|
+
unless self.data[:snapshots] and snapshot = self.data[:snapshots][snapshot_id]
|
30
|
+
raise Fog::AWS::RDS::NotFound.new("DBSnapshotNotFound #{response.body.to_s}")
|
31
|
+
end
|
32
|
+
|
33
|
+
if !!options["MultiAZ"] && !!options["AvailabilityZone"]
|
34
|
+
raise Fog::AWS::RDS::InvalidParameterCombination.new('Requesting a specific availability zone is not valid for Multi-AZ instances.')
|
35
|
+
end
|
36
|
+
|
37
|
+
option_group_membership =
|
38
|
+
if option_group_name = options['OptionGroupName']
|
39
|
+
[{ 'OptionGroupMembership' =>
|
40
|
+
[{ 'OptionGroupName' => option_group_name, 'Status' => "pending-apply"}] }]
|
41
|
+
else
|
42
|
+
[{ 'OptionGroupMembership' =>
|
43
|
+
[{ 'OptionGroupName' => 'default: mysql-5.6', 'Status' => "pending-apply"}] }]
|
44
|
+
end
|
45
|
+
|
46
|
+
data = {
|
47
|
+
"AllocatedStorage" => snapshot['AllocatedStorage'],
|
48
|
+
"AutoMinorVersionUpgrade" => options['AutoMinorVersionUpgrade'].nil? ? true : options['AutoMinorVersionUpgrade'],
|
49
|
+
"AvailabilityZone" => options['AvailabilityZone'],
|
50
|
+
"BackupRetentionPeriod" => options['BackupRetentionPeriod'] || 1,
|
51
|
+
"CACertificateIdentifier" => 'rds-ca-2015',
|
52
|
+
"DBInstanceClass" => options['DBInstanceClass'] || 'db.m3.medium',
|
53
|
+
"DBInstanceIdentifier" => db_name,
|
54
|
+
"DBInstanceStatus" => 'creating',
|
55
|
+
"DBName" => options['DBName'],
|
56
|
+
"DBParameterGroups" => [{'DBParameterGroupName'=>'default.mysql5.5', 'ParameterApplyStatus'=>'in-sync'}],
|
57
|
+
"DBSecurityGroups" => [{'Status'=>'active', 'DBSecurityGroupName'=>'default'}],
|
58
|
+
"Endpoint" => {},
|
59
|
+
"Engine" => options['Engine'] || snapshot['Engine'],
|
60
|
+
"EngineVersion" => options['EngineVersion'] || snapshot['EngineVersion'],
|
61
|
+
"InstanceCreateTime" => nil,
|
62
|
+
"Iops" => options['Iops'],
|
63
|
+
"LicenseModel" => options['LicenseModel'] || snapshot['LicenseModel'] || 'general-public-license',
|
64
|
+
"MasterUsername" => options['MasterUsername'] || snapshot['MasterUsername'],
|
65
|
+
"MultiAZ" => !!options['MultiAZ'],
|
66
|
+
"OptiongroupMemberships" => option_group_membership,
|
67
|
+
"PendingModifiedValues" => { 'MasterUserPassword' => '****' }, # This clears when is available
|
68
|
+
"PreferredBackupWindow" => '08:00-08:30',
|
69
|
+
"PreferredMaintenanceWindow" => 'mon:04:30-mon:05:00',
|
70
|
+
"PubliclyAccessible" => true,
|
71
|
+
"ReadReplicaDBInstanceIdentifiers" => [],
|
72
|
+
"StorageType" => options['StorageType'] || (options['Iops'] ? 'io1' : 'standard'),
|
73
|
+
"VpcSecurityGroups" => nil,
|
74
|
+
"StorageEncrypted" => false,
|
75
|
+
}
|
76
|
+
|
77
|
+
self.data[:servers][db_name] = data
|
78
|
+
response = Excon::Response.new
|
79
|
+
response.body =
|
80
|
+
{ "ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
|
81
|
+
"RestoreDBInstanceFromDBSnapshotResult" => { "DBInstance" => data }
|
82
|
+
}
|
83
|
+
response.status = 200
|
84
|
+
self.data[:servers][db_name]["InstanceCreateTime"] = Time.now
|
85
|
+
response
|
25
86
|
end
|
26
87
|
end
|
27
88
|
end
|
data/lib/fog/aws/version.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
Shindo.tests("AWS::RDS | cluster", ["aws", "rds"]) do
|
2
|
+
model_tests(Fog::AWS[:rds].clusters, rds_default_cluster_params) do
|
3
|
+
@cluster_id = @instance.id
|
4
|
+
@instance.wait_for(20*60) { ready? }
|
5
|
+
@cluster_with_final_snapshot = Fog::AWS[:rds].clusters.create(rds_default_cluster_params.merge(:id => uniq_id("fog-snapshot-test"), :backup_retention_period => 1))
|
6
|
+
|
7
|
+
tests("#servers") do
|
8
|
+
returns([]) { @instance.servers }
|
9
|
+
end
|
10
|
+
|
11
|
+
@server = Fog::AWS[:rds].servers.create(rds_default_server_params.reject { |k,v| [:allocated_storage, :master_username, :password, :backup_retention_period].include?(k) }.merge(:engine => "aurora", :cluster_id => @instance.id, :flavor_id => "db.r3.large"))
|
12
|
+
@server.wait_for(20*60) { ready? }
|
13
|
+
|
14
|
+
tests("#servers") do
|
15
|
+
@instance.reload
|
16
|
+
returns([{"DBInstanceIdentifier" => @server.id, "master" => true}]) { @instance.db_cluster_members }
|
17
|
+
returns([@server]) { @instance.servers }
|
18
|
+
end
|
19
|
+
|
20
|
+
tests("#snapshots") do
|
21
|
+
returns([]) { @instance.snapshots }
|
22
|
+
|
23
|
+
snapshot_id = uniq_id("manual-snapshot")
|
24
|
+
snapshot = @instance.snapshots.create(:id => snapshot_id)
|
25
|
+
returns(snapshot_id) { snapshot.id }
|
26
|
+
snapshot.wait_for { ready? }
|
27
|
+
returns([snapshot.id]) { @instance.snapshots.map(&:id) }
|
28
|
+
snapshot.destroy
|
29
|
+
end
|
30
|
+
|
31
|
+
tests("#destroy") do
|
32
|
+
snapshot_id = uniq_id("fog-snapshot")
|
33
|
+
|
34
|
+
@instance.servers.map(&:destroy)
|
35
|
+
|
36
|
+
@cluster_with_final_snapshot.wait_for(20*60) { ready? }
|
37
|
+
@cluster_with_final_snapshot.destroy(snapshot_id)
|
38
|
+
|
39
|
+
snapshot = Fog::AWS[:rds].cluster_snapshots.get(snapshot_id)
|
40
|
+
snapshot.wait_for { ready? }
|
41
|
+
returns(snapshot_id) { snapshot.id }
|
42
|
+
snapshot.destroy
|
43
|
+
end
|
44
|
+
|
45
|
+
after do
|
46
|
+
if cluster = Fog::AWS[:rds].clusters.get(@cluster_id)
|
47
|
+
unless cluster.state = 'deleting'
|
48
|
+
cluster.servers.map(&:destroy)
|
49
|
+
cluster.destroy
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/tests/models/rds/helper.rb
CHANGED
@@ -10,3 +10,16 @@ def rds_default_server_params
|
|
10
10
|
:flavor_id => 'db.m3.medium',
|
11
11
|
}
|
12
12
|
end
|
13
|
+
|
14
|
+
def rds_default_cluster_params
|
15
|
+
{
|
16
|
+
:allocated_storage => 50,
|
17
|
+
:backup_retention_period => 10,
|
18
|
+
:engine => "aurora",
|
19
|
+
:version => "5.6.10a",
|
20
|
+
:id => uniq_id,
|
21
|
+
:master_username => "fogclusteruser",
|
22
|
+
:password => "fogpassword",
|
23
|
+
:flavor_id => "db.r3.large"
|
24
|
+
}
|
25
|
+
end
|
@@ -6,6 +6,7 @@ Shindo.tests("AWS::RDS | server", ['aws', 'rds']) do
|
|
6
6
|
|
7
7
|
@instance.wait_for(20*60) { ready? }
|
8
8
|
@instance_with_encrypted_storage.wait_for(20*60) { ready? }
|
9
|
+
@final_snapshot_id = uniq_id('fog-test-snapshot')
|
9
10
|
|
10
11
|
tests("#storage_encrypted") do
|
11
12
|
returns(true) { @instance_with_encrypted_storage.storage_encrypted }
|
@@ -114,12 +115,11 @@ Shindo.tests("AWS::RDS | server", ['aws', 'rds']) do
|
|
114
115
|
replica && replica.destroy
|
115
116
|
|
116
117
|
test("Destroying with a final snapshot") do
|
117
|
-
final_snapshot_id = uniq_id('fog-test-snapshot')
|
118
118
|
|
119
119
|
@instance_with_final_snapshot.wait_for { ready? }
|
120
|
-
@instance_with_final_snapshot.destroy(final_snapshot_id)
|
120
|
+
@instance_with_final_snapshot.destroy(@final_snapshot_id)
|
121
121
|
returns(true, "Final snapshot created") do
|
122
|
-
@final_snapshot = Fog::AWS[:rds].snapshots.get(final_snapshot_id)
|
122
|
+
@final_snapshot = Fog::AWS[:rds].snapshots.get(@final_snapshot_id)
|
123
123
|
!@final_snapshot.nil?
|
124
124
|
end
|
125
125
|
|