fog-aws 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|