fog-aws 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/lib/fog/aws/compute.rb +6 -0
- data/lib/fog/aws/models/compute/flavors.rb +60 -0
- data/lib/fog/aws/models/compute/volume.rb +41 -22
- data/lib/fog/aws/models/compute/vpc.rb +34 -0
- data/lib/fog/aws/models/rds/security_group.rb +4 -2
- data/lib/fog/aws/models/storage/file.rb +1 -1
- data/lib/fog/aws/parsers/compute/describe_volumes_modifications.rb +30 -0
- data/lib/fog/aws/parsers/compute/describe_vpc_classic_link.rb +3 -1
- data/lib/fog/aws/parsers/compute/describe_vpc_classic_link_dns_support.rb +26 -0
- data/lib/fog/aws/parsers/compute/modify_volume.rb +26 -0
- data/lib/fog/aws/rds.rb +1 -1
- data/lib/fog/aws/requests/compute/attach_classic_link_vpc.rb +3 -3
- data/lib/fog/aws/requests/compute/create_vpc.rb +10 -9
- data/lib/fog/aws/requests/compute/describe_volumes_modifications.rb +93 -0
- data/lib/fog/aws/requests/compute/describe_vpc_classic_link.rb +2 -1
- data/lib/fog/aws/requests/compute/describe_vpc_classic_link_dns_support.rb +53 -0
- data/lib/fog/aws/requests/compute/detach_classic_link_vpc.rb +1 -3
- data/lib/fog/aws/requests/compute/disable_vpc_classic_link_dns_support.rb +45 -0
- data/lib/fog/aws/requests/compute/enable_vpc_classic_link_dns_support.rb +45 -0
- data/lib/fog/aws/requests/compute/modify_volume.rb +88 -0
- data/lib/fog/aws/requests/rds/authorize_db_security_group_ingress.rb +10 -5
- data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +3 -4
- data/lib/fog/aws/requests/rds/delete_db_subnet_group.rb +2 -0
- data/lib/fog/aws/requests/rds/revoke_db_security_group_ingress.rb +9 -4
- data/lib/fog/aws/version.rb +1 -1
- data/tests/models/compute/volume_tests.rb +16 -1
- data/tests/models/compute/vpc_tests.rb +23 -1
- data/tests/models/rds/security_group_tests.rb +30 -6
- data/tests/requests/compute/volume_tests.rb +42 -2
- data/tests/requests/compute/vpc_tests.rb +41 -5
- metadata +10 -2
@@ -0,0 +1,93 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/compute/describe_volumes_modifications'
|
6
|
+
|
7
|
+
# Reports the current modification status of EBS volumes.
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * filters<~Hash> - List of filters to limit results with
|
11
|
+
#
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>
|
15
|
+
# * 'volumeModificationSet'<~Array>:
|
16
|
+
# * 'targetIops'<~Integer> - Target IOPS rate of the volume being modified.
|
17
|
+
# * 'originalIops'<~Integer> - Original IOPS rate of the volume being modified.
|
18
|
+
# * 'modificationState'<~String> - Current state of modification. Modification state is null for unmodified volumes.
|
19
|
+
# * 'targetSize'<~Integer> - Target size of the volume being modified.
|
20
|
+
# * 'targetVolumeType'<~String> - Target EBS volume type of the volume being modified.
|
21
|
+
# * 'volumeId'<~String> - ID of the volume being modified.
|
22
|
+
# * 'progress'<~Integer> - Modification progress from 0 to 100%.
|
23
|
+
# * 'startTime'<~Time> - Modification start time
|
24
|
+
# * 'endTime'<~Time> - Modification end time
|
25
|
+
# * 'originalSize'<~Integer> - Original size of the volume being modified.
|
26
|
+
# * 'originalVolumeType'<~String> - Original EBS volume type of the volume being modified.
|
27
|
+
|
28
|
+
def describe_volumes_modifications(filters = {})
|
29
|
+
params = {}
|
30
|
+
if volume_id = filters.delete('volume-id')
|
31
|
+
params.merge!(Fog::AWS.indexed_param('VolumeId.%d', [*volume_id]))
|
32
|
+
end
|
33
|
+
params.merge!(Fog::AWS.indexed_filters(filters))
|
34
|
+
request({
|
35
|
+
'Action' => 'DescribeVolumesModifications',
|
36
|
+
:idempotent => true,
|
37
|
+
:parser => Fog::Parsers::Compute::AWS::DescribeVolumesModifications.new
|
38
|
+
}.merge(params))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Mock
|
43
|
+
def describe_volumes_modifications(filters = {})
|
44
|
+
response = Excon::Response.new
|
45
|
+
|
46
|
+
modification_set = self.data[:volume_modifications].values
|
47
|
+
|
48
|
+
aliases = {
|
49
|
+
'volume-id' => 'volumeId',
|
50
|
+
'modification-state' => 'modificationState',
|
51
|
+
'target-size' => 'targetSize',
|
52
|
+
'target-iops' => 'targetIops',
|
53
|
+
'target-volume-type' => 'targetVolumeType',
|
54
|
+
'original-size' => 'originalSize',
|
55
|
+
'original-iops' => 'originalIops',
|
56
|
+
'original-volume-type' => 'originalVolumeType',
|
57
|
+
'start-time' => 'startTime'
|
58
|
+
}
|
59
|
+
|
60
|
+
attribute_aliases = {
|
61
|
+
'targetSize' => 'size',
|
62
|
+
'targetVolumeType' => 'volumeType',
|
63
|
+
'targetIops' => 'iops'
|
64
|
+
}
|
65
|
+
|
66
|
+
for filter_key, filter_value in filters
|
67
|
+
aliased_key = aliases[filter_key]
|
68
|
+
modification_set = modification_set.reject { |m| ![*filter_value].include?(m[aliased_key]) }
|
69
|
+
end
|
70
|
+
|
71
|
+
modification_set.each do |modification|
|
72
|
+
case modification['modificationState']
|
73
|
+
when 'modifying'
|
74
|
+
volume = self.data[:volumes][modification['volumeId']]
|
75
|
+
modification['modificationState'] = 'optimizing'
|
76
|
+
%w(targetSize targetIops targetVolumeType).each do |attribute|
|
77
|
+
aliased_attribute = attribute_aliases[attribute]
|
78
|
+
volume[aliased_attribute] = modification[attribute] if modification[attribute]
|
79
|
+
end
|
80
|
+
self.data[:volumes][modification['volumeId']] = volume
|
81
|
+
when 'optimizing'
|
82
|
+
modification['modificationState'] = 'completed'
|
83
|
+
modification['endTime'] = Time.now
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
response.body = {'requestId' => Fog::AWS::Mock.request_id, 'volumeModificationSet' => modification_set}
|
88
|
+
response
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -45,7 +45,7 @@ module Fog
|
|
45
45
|
vpcs = apply_tag_filters(vpcs, options[:filters], 'vpcId') if options[:filters]
|
46
46
|
|
47
47
|
response.status = 200
|
48
|
-
vpc_data = vpcs.collect do |vpc|
|
48
|
+
vpc_data = vpcs.collect do |vpc|
|
49
49
|
{
|
50
50
|
'vpcId' => vpc['vpcId'],
|
51
51
|
'classicLinkEnabled' => vpc['classicLinkEnabled'],
|
@@ -56,6 +56,7 @@ module Fog
|
|
56
56
|
'requestId' => Fog::AWS::Mock.request_id,
|
57
57
|
'vpcSet' => vpc_data
|
58
58
|
}
|
59
|
+
response
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/compute/describe_vpc_classic_link_dns_support'
|
6
|
+
|
7
|
+
# escribes the ClassicLink DNS support status of one or more VPCs
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * options<~Hash>
|
11
|
+
# * vpc_ids<~Array> - An array of vpc ids to restrict results to
|
12
|
+
# * 'MaxResults' - Maximum number of items to return
|
13
|
+
# * 'NextToken' - The token for the next set of items to return
|
14
|
+
#
|
15
|
+
# ==== Returns
|
16
|
+
# * response<~Excon::Response>:
|
17
|
+
# * body<~Hash>:
|
18
|
+
# * 'requestId'<~String> - Id of the request
|
19
|
+
# * 'vpcs'<~Array> - Information about the ClassicLink DNS support status of the VPCs
|
20
|
+
# * 'vpcId'<~String>
|
21
|
+
# * 'classicLinkDnsSupported'<~Boolean>
|
22
|
+
#
|
23
|
+
# http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcClassicLinkDnsSupport.html
|
24
|
+
|
25
|
+
def describe_vpc_classic_link_dns_support(options={})
|
26
|
+
params = {}
|
27
|
+
params.merge!(Fog::AWS.indexed_param('VpcIds', options[:vpc_ids])) if options[:vpc_ids]
|
28
|
+
request({
|
29
|
+
'Action' => 'DescribeVpcClassicLinkDnsSupport',
|
30
|
+
'MaxResults' => options['MaxResults'],
|
31
|
+
'NextToken' => options['NextToken'],
|
32
|
+
:parser => Fog::Parsers::Compute::AWS::DescribeVpcClassicLinkDnsSupport.new
|
33
|
+
}.merge(params))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Mock
|
38
|
+
def describe_vpc_classic_link_dns_support(options={})
|
39
|
+
response = Excon::Response.new
|
40
|
+
|
41
|
+
vpcs = self.data[:vpcs]
|
42
|
+
|
43
|
+
if options[:vpc_ids]
|
44
|
+
vpcs = vpcs.select { |v| options[:vpc_ids].include?(v['vpcId']) }
|
45
|
+
end
|
46
|
+
|
47
|
+
response.body = {'vpcs' => vpcs.map { |v| {"vpcId" => v['vpcId'], "classicLinkDnsSupported" => v['classicLinkDnsSupport']} } }
|
48
|
+
response
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -26,7 +26,6 @@ module Fog
|
|
26
26
|
'DryRun' => dry_run,
|
27
27
|
:parser => Fog::Parsers::Compute::AWS::Basic.new
|
28
28
|
)
|
29
|
-
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
@@ -47,12 +46,11 @@ module Fog
|
|
47
46
|
instance['classicLinkVpcId'] = nil
|
48
47
|
end
|
49
48
|
response
|
50
|
-
elsif !instance
|
49
|
+
elsif !instance
|
51
50
|
raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_id}' does not exist.")
|
52
51
|
elsif !vpc
|
53
52
|
raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist.")
|
54
53
|
end
|
55
|
-
|
56
54
|
end
|
57
55
|
end
|
58
56
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/compute/basic'
|
6
|
+
|
7
|
+
# Disables DNS hostname resolution for ClassicLink
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * vpc_id<~String> - The ID of the ClassicLink-enabled VPC.
|
11
|
+
#
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'requestId'<~String> - Id of the request
|
16
|
+
# * 'return'<~Boolean> - Whether the request succeeded
|
17
|
+
#
|
18
|
+
# http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisableVpcClassicLinkDnsSupport.html
|
19
|
+
|
20
|
+
def disable_vpc_classic_link_dns_support(vpc_id)
|
21
|
+
request(
|
22
|
+
'Action' => 'DisableVpcClassicLinkDnsSupport',
|
23
|
+
'VpcId' => vpc_id,
|
24
|
+
:parser => Fog::Parsers::Compute::AWS::Basic.new
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Mock
|
30
|
+
def disable_vpc_classic_link_dns_support(vpc_id)
|
31
|
+
response = Excon::Response.new
|
32
|
+
unless vpc = self.data[:vpcs].find { |v| v['vpcId'] == vpc_id }
|
33
|
+
raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
|
34
|
+
end
|
35
|
+
vpc['classicLinkDnsSupport'] = false
|
36
|
+
response.body = {
|
37
|
+
'requestId' => Fog::AWS::Mock.request_id,
|
38
|
+
'return' => true
|
39
|
+
}
|
40
|
+
response
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/compute/basic'
|
6
|
+
|
7
|
+
# Enables a VPC to support DNS hostname resolution for ClassicLink
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * vpc_id<~String> - The ID of the ClassicLink-enabled VPC.
|
11
|
+
#
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'requestId'<~String> - Id of the request
|
16
|
+
# * 'return'<~Boolean> - Whether the request succeeded
|
17
|
+
#
|
18
|
+
# http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EnableVpcClassicLinkDnsSupport.html
|
19
|
+
|
20
|
+
def enable_vpc_classic_link_dns_support(vpc_id)
|
21
|
+
request(
|
22
|
+
'Action' => 'EnableVpcClassicLinkDnsSupport',
|
23
|
+
'VpcId' => vpc_id,
|
24
|
+
:parser => Fog::Parsers::Compute::AWS::Basic.new
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Mock
|
30
|
+
def enable_vpc_classic_link_dns_support(vpc_id)
|
31
|
+
response = Excon::Response.new
|
32
|
+
unless vpc = self.data[:vpcs].find { |v| v['vpcId'] == vpc_id }
|
33
|
+
raise Fog::Compute::AWS::NotFound.new("The VPC '#{vpc_id}' does not exist")
|
34
|
+
end
|
35
|
+
vpc['classicLinkDnsSupport'] = true
|
36
|
+
response.body = {
|
37
|
+
'requestId' => Fog::AWS::Mock.request_id,
|
38
|
+
'return' => true
|
39
|
+
}
|
40
|
+
response
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
require 'fog/aws/parsers/compute/modify_volume'
|
6
|
+
|
7
|
+
# Modifies a volume
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * volume_id<~String> - The ID of the volume
|
11
|
+
# * options<~Hash>:
|
12
|
+
# * 'VolumeType'<~String> - Type of volume
|
13
|
+
# * 'Size'<~Integer> - Size in GiBs fo the volume
|
14
|
+
# * 'Iops'<~Integer> - Number of IOPS the volume supports
|
15
|
+
#
|
16
|
+
# ==== Response
|
17
|
+
# * response<~Excon::Response>:
|
18
|
+
# * body<~Hash>:
|
19
|
+
# * 'targetIops'<~Integer> - Target IOPS rate of the volume being modified.
|
20
|
+
# * 'originalIops'<~Integer> - Original IOPS rate of the volume being modified.
|
21
|
+
# * 'modificationState'<~String> - Current state of modification. Modification state is null for unmodified volumes.
|
22
|
+
# * 'targetSize'<~Integer> - Target size of the volume being modified.
|
23
|
+
# * 'targetVolumeType'<~String> - Target EBS volume type of the volume being modified.
|
24
|
+
# * 'volumeId'<~String> - ID of the volume being modified.
|
25
|
+
# * 'progress'<~Integer> - Modification progress from 0 to 100%.
|
26
|
+
# * 'startTime'<~Time> - Modification start time
|
27
|
+
# * 'endTime'<~Time> - Modification end time
|
28
|
+
# * 'originalSize'<~Integer> - Original size of the volume being modified.
|
29
|
+
# * 'originalVolumeType'<~String> - Original EBS volume type of the volume being modified.
|
30
|
+
|
31
|
+
def modify_volume(volume_id, options={})
|
32
|
+
request({
|
33
|
+
'Action' => "ModifyVolume",
|
34
|
+
'VolumeId' => volume_id,
|
35
|
+
:parser => Fog::Parsers::Compute::AWS::ModifyVolume.new
|
36
|
+
}.merge(options))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Mock
|
41
|
+
def modify_volume(volume_id, options={})
|
42
|
+
response = Excon::Response.new
|
43
|
+
volume = self.data[:volumes][volume_id]
|
44
|
+
|
45
|
+
if volume["volumeType"] == 'standard' && options['VolumeType']
|
46
|
+
raise Fog::Compute::AWS::Error.new("InvalidParameterValue => Volume type EBS Magnetic is not supported.")
|
47
|
+
end
|
48
|
+
|
49
|
+
volume_modification = {
|
50
|
+
'modificationState' => 'modifying',
|
51
|
+
'progress' => 0,
|
52
|
+
'startTime' => Time.now,
|
53
|
+
'volumeId' => volume_id
|
54
|
+
}
|
55
|
+
|
56
|
+
if options['Size']
|
57
|
+
volume_modification.merge!(
|
58
|
+
'originalSize' => volume['size'],
|
59
|
+
'targetSize' => options['Size']
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
if options['Iops']
|
64
|
+
volume_modification.merge!(
|
65
|
+
'originalIops' => volume['iops'],
|
66
|
+
'targetIops' => options['Iops']
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
if options['VolumeType']
|
71
|
+
if options["VolumeType"] == 'standard'
|
72
|
+
raise Fog::Compute::AWS::Error.new("InvalidParameterValue => Volume type EBS Magnetic is not supported.")
|
73
|
+
end
|
74
|
+
volume_modification.merge!(
|
75
|
+
'originalVolumeType' => volume['volumeType'],
|
76
|
+
'targetVolumeType' => options['VolumeType']
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
self.data[:volume_modifications][volume_id] = volume_modification
|
81
|
+
|
82
|
+
response.body = {'volumeModification' => volume_modification, 'requestId' => Fog::AWS::Mock.request_id}
|
83
|
+
response
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -15,8 +15,8 @@ module Fog
|
|
15
15
|
# * response<~Excon::Response>:
|
16
16
|
# * body<~Hash>:
|
17
17
|
def authorize_db_security_group_ingress(name, opts={})
|
18
|
-
unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
|
19
|
-
raise ArgumentError, 'Must specify CIDRIP, or
|
18
|
+
unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
|
19
|
+
raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
|
20
20
|
end
|
21
21
|
|
22
22
|
request({
|
@@ -29,8 +29,13 @@ module Fog
|
|
29
29
|
|
30
30
|
class Mock
|
31
31
|
def authorize_db_security_group_ingress(name, opts = {})
|
32
|
-
unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
|
33
|
-
raise ArgumentError, 'Must specify CIDRIP, or
|
32
|
+
unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
|
33
|
+
raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
|
34
|
+
end
|
35
|
+
|
36
|
+
if ec2_security_group_id = opts.delete("EC2SecurityGroupId")
|
37
|
+
ec2_security_group = (Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id][:security_groups] || {}).values.detect { |sg| sg['groupId'] == ec2_security_group_id }
|
38
|
+
opts['EC2SecurityGroupName'] = ec2_security_group['groupName']
|
34
39
|
end
|
35
40
|
|
36
41
|
response = Excon::Response.new
|
@@ -42,7 +47,7 @@ module Fog
|
|
42
47
|
end
|
43
48
|
sec_group['IPRanges'] << opts.merge({"Status" => 'authorizing'})
|
44
49
|
else
|
45
|
-
if sec_group['EC2SecurityGroups'].find{|h| h['EC2SecurityGroupName'] == opts['EC2SecurityGroupName']}
|
50
|
+
if sec_group['EC2SecurityGroups'].find{|h| h['EC2SecurityGroupName'] == opts['EC2SecurityGroupName'] || h['EC2SecurityGroupId'] == opts['EC2SecurityGroupId']}
|
46
51
|
raise Fog::AWS::RDS::AuthorizationAlreadyExists.new("AuthorizationAlreadyExists => #{opts['EC2SecurityGroupName']} is alreay defined")
|
47
52
|
end
|
48
53
|
sec_group['EC2SecurityGroups'] << opts.merge({"Status" => 'authorizing'})
|
@@ -31,15 +31,14 @@ module Fog
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# collection = Fog::Compute::AWS.new(:aws_access_key_id => 'mock key', :aws_secret_access_key => 'mock secret')
|
34
|
-
|
35
|
-
collection.region = @region
|
34
|
+
compute_data = Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id]
|
36
35
|
|
37
36
|
subnets = subnet_ids.map do |snid|
|
38
|
-
subnet =
|
37
|
+
subnet = compute_data[:subnets].detect { |s| s['subnetId'] == snid }
|
39
38
|
raise Fog::AWS::RDS::NotFound.new("InvalidSubnet => The subnet '#{snid}' was not found") if subnet.nil?
|
40
39
|
subnet
|
41
40
|
end
|
42
|
-
vpc_id = subnets.first
|
41
|
+
vpc_id = subnets.first['vpcId']
|
43
42
|
|
44
43
|
data = {
|
45
44
|
'DBSubnetGroupName' => name,
|
@@ -26,6 +26,8 @@ module Fog
|
|
26
26
|
raise Fog::AWS::RDS::NotFound.new("DBSubnetGroupNotFound => The subnet group '#{name}' doesn't exists")
|
27
27
|
end
|
28
28
|
|
29
|
+
self.data[:subnet_groups].delete(name)
|
30
|
+
|
29
31
|
response.body = {
|
30
32
|
'ResponseMetadata'=>{ 'RequestId'=> Fog::AWS::Mock.request_id },
|
31
33
|
'return' => true,
|
@@ -15,8 +15,8 @@ module Fog
|
|
15
15
|
# * response<~Excon::Response>:
|
16
16
|
# * body<~Hash>:
|
17
17
|
def revoke_db_security_group_ingress(name, opts={})
|
18
|
-
unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
|
19
|
-
raise ArgumentError, 'Must specify CIDRIP, or
|
18
|
+
unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
|
19
|
+
raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
|
20
20
|
end
|
21
21
|
|
22
22
|
request({
|
@@ -29,8 +29,13 @@ module Fog
|
|
29
29
|
|
30
30
|
class Mock
|
31
31
|
def revoke_db_security_group_ingress(name, opts = {})
|
32
|
-
unless opts.key?('CIDRIP') || (opts.key?('EC2SecurityGroupName') && opts.key?('EC2SecurityGroupOwnerId'))
|
33
|
-
raise ArgumentError, 'Must specify CIDRIP, or
|
32
|
+
unless opts.key?('CIDRIP') || ((opts.key?('EC2SecurityGroupName') || opts.key?('EC2SecurityGroupId')) && opts.key?('EC2SecurityGroupOwnerId'))
|
33
|
+
raise ArgumentError, 'Must specify CIDRIP, or one of EC2SecurityGroupName or EC2SecurityGroupId, and EC2SecurityGroupOwnerId'
|
34
|
+
end
|
35
|
+
|
36
|
+
if ec2_security_group_id = opts.delete("EC2SecurityGroupId")
|
37
|
+
ec2_security_group = (Fog::Compute::AWS::Mock.data[self.region][self.aws_access_key_id][:security_groups] || {}).values.detect { |sg| sg['groupId'] == ec2_security_group_id }
|
38
|
+
opts['EC2SecurityGroupName'] = ec2_security_group['groupName']
|
34
39
|
end
|
35
40
|
|
36
41
|
response = Excon::Response.new
|