fog-aws 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fog/aws/dns.rb +14 -1
  3. data/lib/fog/aws/iam.rb +9 -0
  4. data/lib/fog/aws/models/compute/flavors.rb +50 -0
  5. data/lib/fog/aws/models/dns/records.rb +14 -20
  6. data/lib/fog/aws/models/dns/zones.rb +1 -1
  7. data/lib/fog/aws/models/storage/file.rb +28 -3
  8. data/lib/fog/aws/models/storage/files.rb +5 -0
  9. data/lib/fog/aws/parsers/.DS_Store +0 -0
  10. data/lib/fog/aws/parsers/iam/list_managed_policies.rb +29 -0
  11. data/lib/fog/aws/parsers/iam/policy_parser.rb +57 -0
  12. data/lib/fog/aws/parsers/iam/single_policy.rb +27 -0
  13. data/lib/fog/aws/rds.rb +3 -1
  14. data/lib/fog/aws/requests/.DS_Store +0 -0
  15. data/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb +67 -62
  16. data/lib/fog/aws/requests/compute/delete_security_group.rb +42 -28
  17. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +20 -20
  18. data/lib/fog/aws/requests/dns/create_hosted_zone.rb +1 -3
  19. data/lib/fog/aws/requests/dns/delete_hosted_zone.rb +5 -7
  20. data/lib/fog/aws/requests/dns/get_change.rb +11 -16
  21. data/lib/fog/aws/requests/dns/get_hosted_zone.rb +1 -3
  22. data/lib/fog/aws/requests/dns/list_resource_record_sets.rb +7 -12
  23. data/lib/fog/aws/requests/dynamodb/scan.rb +2 -1
  24. data/lib/fog/aws/requests/iam/attach_group_policy.rb +32 -0
  25. data/lib/fog/aws/requests/iam/attach_role_policy.rb +32 -0
  26. data/lib/fog/aws/requests/iam/attach_user_policy.rb +32 -0
  27. data/lib/fog/aws/requests/iam/create_policy.rb +47 -0
  28. data/lib/fog/aws/requests/iam/delete_policy.rb +30 -0
  29. data/lib/fog/aws/requests/iam/detach_group_policy.rb +32 -0
  30. data/lib/fog/aws/requests/iam/detach_role_policy.rb +32 -0
  31. data/lib/fog/aws/requests/iam/detach_user_policy.rb +32 -0
  32. data/lib/fog/aws/requests/iam/list_policies.rb +47 -0
  33. data/lib/fog/aws/requests/storage/head_object_url.rb +40 -0
  34. data/lib/fog/aws/storage.rb +1 -0
  35. data/lib/fog/aws/version.rb +1 -1
  36. data/tests/models/compute/security_group_tests.rb +11 -1
  37. data/tests/models/storage/file_tests.rb +29 -0
  38. data/tests/requests/compute/security_group_tests.rb +9 -0
  39. data/tests/requests/dns/dns_tests.rb +29 -42
  40. data/tests/requests/iam/managed_policy_tests.rb +91 -0
  41. data/tests/requests/storage/object_tests.rb +6 -0
  42. metadata +18 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22f2c524c85c86ab1668a6852c9c6c4f22545f45
4
- data.tar.gz: 790fb6ee76f14d24586006db89bcd96a6f890e2e
3
+ metadata.gz: cdc745bb5b1444b37a5fd7c9ab29afe8aca65eec
4
+ data.tar.gz: 412dec3ceb7f2afc1232ba1115b8b09bdafd5b59
5
5
  SHA512:
6
- metadata.gz: 09ac54ca56bc9da50d39ee43c762a4837daa9fb5a2c6617c75d11adb191a18ed863d339e141f257edec655e03475772065d0237e210776223723700257fa8df7
7
- data.tar.gz: 2606b75208e8cf01a729b8ae2ab930619c2b1b021925ffa67d087657ced1a8ec714bb4a917095ea7ca3787eb8499c68e2480358fc0615c8e31a5fa945874762b
6
+ metadata.gz: b711a8189322c47c11ab9ff818302657fff403f14062169663f4914f7efc58a6aa706e826fdc21a3b2bac0cccc6974c7cb7f985323e0ceda3cfccb97efcd552c
7
+ data.tar.gz: 0254a3121c9fed3f257634c80f06939e6b6008adcddc8ac873d3a3c57ae70a8e0942a2f42a670cd9a88dfc2a1c56b77ade2ffa3a70d8f96ae8a6d4a61aa4fa38
@@ -79,7 +79,7 @@ module Fog
79
79
  # :aws_secret_access_key in order to create a connection
80
80
  #
81
81
  # ==== Examples
82
- # dns = Fog::AWS::DNS.new(
82
+ # dns = Fog::DNS::AWS.new(
83
83
  # :aws_access_key_id => your_aws_access_key_id,
84
84
  # :aws_secret_access_key => your_aws_secret_access_key
85
85
  # )
@@ -141,6 +141,19 @@ module Fog
141
141
 
142
142
  def _request(params, &block)
143
143
  @connection.request(params, &block)
144
+ rescue Excon::Errors::HTTPStatusError => error
145
+ match = Fog::AWS::Errors.match_error(error)
146
+
147
+ if match.empty?
148
+ raise
149
+ else
150
+ case match[:code]
151
+ when 'NoSuchHostedZone', 'NoSuchChange' then
152
+ Fog::DNS::AWS::NotFound.slurp(error, match[:message])
153
+ else
154
+ Fog::DNS::AWS::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
155
+ end
156
+ end
144
157
  end
145
158
 
146
159
  def signature(params)
@@ -17,11 +17,15 @@ module Fog
17
17
  request_path 'fog/aws/requests/iam'
18
18
  request :add_user_to_group
19
19
  request :add_role_to_instance_profile
20
+ request :attach_group_policy
21
+ request :attach_role_policy
22
+ request :attach_user_policy
20
23
  request :create_access_key
21
24
  request :create_account_alias
22
25
  request :create_group
23
26
  request :create_instance_profile
24
27
  request :create_login_profile
28
+ request :create_policy
25
29
  request :create_role
26
30
  request :create_user
27
31
  request :delete_access_key
@@ -31,12 +35,16 @@ module Fog
31
35
  request :delete_group_policy
32
36
  request :delete_instance_profile
33
37
  request :delete_login_profile
38
+ request :delete_policy
34
39
  request :delete_role
35
40
  request :delete_role_policy
36
41
  request :delete_server_certificate
37
42
  request :delete_signing_certificate
38
43
  request :delete_user
39
44
  request :delete_user_policy
45
+ request :detach_group_policy
46
+ request :detach_role_policy
47
+ request :detach_user_policy
40
48
  request :get_account_summary
41
49
  request :get_account_password_policy
42
50
  request :get_group
@@ -56,6 +64,7 @@ module Fog
56
64
  request :list_instance_profiles
57
65
  request :list_instance_profiles_for_role
58
66
  request :list_mfa_devices
67
+ request :list_policies
59
68
  request :list_roles
60
69
  request :list_role_policies
61
70
  request :list_server_certificates
@@ -155,6 +155,56 @@ module Fog
155
155
  :ebs_optimized_available => false,
156
156
  :instance_store_volumes => 2
157
157
  },
158
+ {
159
+ :id => 'c4.large',
160
+ :name => 'C4 Large',
161
+ :bits => 64,
162
+ :cores => 7,
163
+ :disk => 32,
164
+ :ram => 3750,
165
+ :ebs_optimized_available => true,
166
+ :instance_store_volumes => 2
167
+ },
168
+ {
169
+ :id => 'c4.xlarge',
170
+ :name => 'C4 Extra Large',
171
+ :bits => 64,
172
+ :cores => 14,
173
+ :disk => 80,
174
+ :ram => 7168,
175
+ :ebs_optimized_available => true,
176
+ :instance_store_volumes => 2
177
+ },
178
+ {
179
+ :id => 'c4.2xlarge',
180
+ :name => 'C4 Double Extra Large',
181
+ :bits => 64,
182
+ :cores => 28,
183
+ :disk => 160,
184
+ :ram => 15360,
185
+ :ebs_optimized_available => true,
186
+ :instance_store_volumes => 2
187
+ },
188
+ {
189
+ :id => 'c4.4xlarge',
190
+ :name => 'C4 Quadruple Extra Large',
191
+ :bits => 64,
192
+ :cores => 55,
193
+ :disk => 320,
194
+ :ram => 30720,
195
+ :ebs_optimized_available => true,
196
+ :instance_store_volumes => 2
197
+ },
198
+ {
199
+ :id => 'c4.8xlarge',
200
+ :name => 'C4 Eight Extra Large',
201
+ :bits => 64,
202
+ :cores => 122,
203
+ :disk => 640,
204
+ :ram => 61440,
205
+ :ebs_optimized_available => false,
206
+ :instance_store_volumes => 2
207
+ },
158
208
  {
159
209
  :id => 'g2.2xlarge',
160
210
  :name => 'GPU Double Extra Large',
@@ -81,32 +81,26 @@ module Fog
81
81
  record_type = record_type.upcase unless record_type.nil?
82
82
 
83
83
  options = {
84
- :max_items => 1,
85
- :name => record_name,
86
- :type => record_type,
84
+ :max_items => 1,
85
+ :name => record_name,
86
+ :type => record_type,
87
87
  :identifier => record_identifier
88
88
  }
89
89
  options.delete_if {|key, value| value.nil?}
90
90
 
91
91
  data = service.list_resource_record_sets(zone.id, options).body
92
- # Get first record
93
- data = data['ResourceRecordSets'].shift
94
-
95
- if data
96
- record = new(data)
97
- # make sure everything matches
98
- if record.name == record_name
99
- if (!record_type.nil? && record.type != record_type) ||
100
- (!record_identifier.nil? && record.set_identifier != record_identifier)
101
- nil
102
- else
103
- record
104
- end
92
+
93
+ # look for an exact match in the records
94
+ (data['ResourceRecordSets'] || []).map do |record_data|
95
+ record = new(record_data)
96
+
97
+ if (record.name == record_name) &&
98
+ (record_type.nil? || (record.type == record_type)) &&
99
+ (record_identifier.nil? || (record.set_identifier == record_identifier))
100
+ record
105
101
  end
106
- else
107
- nil
108
- end
109
- rescue Excon::Errors::NotFound
102
+ end.compact.first
103
+ rescue Fog::DNS::AWS::NotFound
110
104
  nil
111
105
  end
112
106
 
@@ -20,7 +20,7 @@ module Fog
20
20
  def get(zone_id)
21
21
  data = service.get_hosted_zone(zone_id).body
22
22
  new(data)
23
- rescue Excon::Errors::NotFound
23
+ rescue Fog::DNS::AWS::NotFound
24
24
  nil
25
25
  end
26
26
  end
@@ -23,6 +23,7 @@ module Fog
23
23
  attribute :owner, :aliases => 'Owner'
24
24
  attribute :storage_class, :aliases => ['x-amz-storage-class', 'StorageClass']
25
25
  attribute :encryption, :aliases => 'x-amz-server-side-encryption'
26
+ attribute :encryption_key, :aliases => 'x-amz-server-side-encryption-customer-key'
26
27
  attribute :version, :aliases => 'x-amz-version-id'
27
28
 
28
29
  # @note Chunk size to use for multipart uploads.
@@ -199,7 +200,7 @@ module Fog
199
200
  options['Expires'] = expires if expires
200
201
  options.merge!(metadata)
201
202
  options['x-amz-storage-class'] = storage_class if storage_class
202
- options['x-amz-server-side-encryption'] = encryption if encryption
203
+ options.merge!(encryption_headers)
203
204
 
204
205
  if multipart_chunk_size && body.respond_to?(:read)
205
206
  data = multipart_save(options)
@@ -261,8 +262,7 @@ module Fog
261
262
  body.rewind rescue nil
262
263
  end
263
264
  while (chunk = body.read(multipart_chunk_size)) do
264
- md5 = Base64.encode64(Digest::MD5.digest(chunk)).strip
265
- part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, 'Content-MD5' => md5 )
265
+ part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, part_headers(chunk, options))
266
266
  part_tags << part_upload.headers["ETag"]
267
267
  end
268
268
 
@@ -274,6 +274,31 @@ module Fog
274
274
  # Complete the upload
275
275
  service.complete_multipart_upload(directory.key, key, upload_id, part_tags)
276
276
  end
277
+
278
+ def encryption_headers
279
+ if encryption && encryption_key
280
+ encryption_customer_key_headers
281
+ elsif encryption
282
+ { 'x-amz-server-side-encryption' => encryption }
283
+ else
284
+ {}
285
+ end
286
+ end
287
+
288
+ def part_headers(chunk, options)
289
+ md5 = Base64.encode64(Digest::MD5.digest(chunk)).strip
290
+ encryption_keys = encryption_customer_key_headers.keys
291
+ encryption_headers = options.select { |key| encryption_keys.include?(key) }
292
+ { 'Content-MD5' => md5 }.merge(encryption_headers)
293
+ end
294
+
295
+ def encryption_customer_key_headers
296
+ {
297
+ 'x-amz-server-side-encryption-customer-algorithm' => encryption,
298
+ 'x-amz-server-side-encryption-customer-key' => Base64.encode64(encryption_key.to_s).chomp!,
299
+ 'x-amz-server-side-encryption-customer-key-md5' => Base64.encode64(Digest::MD5.digest(encryption_key.to_s)).chomp!
300
+ }
301
+ end
277
302
  end
278
303
  end
279
304
  end
@@ -92,6 +92,11 @@ module Fog
92
92
  service.get_object_https_url(directory.key, key, expires, options)
93
93
  end
94
94
 
95
+ def head_url(key, expires, options = {})
96
+ requires :directory
97
+ service.head_object_url(directory.key, key, expires, options)
98
+ end
99
+
95
100
  def head(key, options = {})
96
101
  requires :directory
97
102
  data = service.head_object(directory.key, key, options)
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module IAM
5
+ require 'fog/aws/parsers/iam/policy_parser'
6
+ class ListManagedPolicies < Fog::Parsers::AWS::IAM::PolicyParser
7
+ def reset
8
+ super
9
+ @response = { 'Policies' => [] , 'Marker' => '', 'IsTruncated' => false}
10
+ end
11
+
12
+ def finished_policy(policy)
13
+ @response['Policies'] << policy
14
+ end
15
+
16
+ def end_element(name)
17
+ case name
18
+ when 'RequestId', 'Marker'
19
+ @response[name] = value
20
+ when 'IsTruncated'
21
+ @response[name] = (value == 'true')
22
+ end
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,57 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module IAM
5
+ class PolicyParser < Fog::Parsers::Base
6
+ def reset
7
+ @policy = fresh_policy
8
+ @stack = []
9
+ end
10
+
11
+ def start_element(name,attrs = [])
12
+ case name
13
+ when 'Policies'
14
+ @stack << name
15
+ when 'Policy'
16
+ @role =fresh_policy
17
+ when 'member'
18
+ if @stack.last == 'Policies'
19
+ @role = fresh_policy
20
+ end
21
+ end
22
+ super
23
+ end
24
+
25
+ def fresh_policy
26
+ {'AttachmentCount' => 0, 'Description' => ''}
27
+ end
28
+
29
+ def end_element(name)
30
+ case name
31
+ when 'Arn', 'DefaultVersionId', 'Description', 'Path', 'PolicyName', 'PolicyId'
32
+ @policy[name] = value
33
+ when 'CreateDate', 'UpdateDate'
34
+ @policy[name] = Time.parse(value)
35
+ when 'IsAttachable'
36
+ @policy[name] = (value == 'true')
37
+ when 'AttachmentCount'
38
+ @policy[name] = value.to_i
39
+ when 'Policy'
40
+ finished_policy(@policy)
41
+ @policy = nil
42
+ when 'Policies'
43
+ if @stack.last == 'Policies'
44
+ @stack.pop
45
+ end
46
+ when 'member'
47
+ if @stack.last == 'Policies'
48
+ finished_policy(@policy)
49
+ @policy = nil
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module IAM
5
+ require 'fog/aws/parsers/iam/policy_parser'
6
+ class SinglePolicy < Fog::Parsers::AWS::IAM::PolicyParser
7
+ def reset
8
+ super
9
+ @response = { 'Policy' => {} }
10
+ end
11
+
12
+ def finished_policy(policy)
13
+ @response['Policy'] = policy
14
+ end
15
+
16
+ def end_element(name)
17
+ case name
18
+ when 'RequestId'
19
+ @response[name] = value
20
+ end
21
+ super
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -126,11 +126,13 @@ module Fog
126
126
 
127
127
  def initialize(options={})
128
128
  @use_iam_profile = options[:use_iam_profile]
129
- @region = options[:region] || 'us-east-1'
129
+ @region = options[:region] || 'us-east-1'
130
130
 
131
131
  unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
132
132
  raise ArgumentError, "Unknown region: #{@region.inspect}"
133
133
  end
134
+
135
+ setup_credentials(options)
134
136
  end
135
137
 
136
138
  def data
@@ -87,43 +87,39 @@ module Fog
87
87
  end
88
88
 
89
89
  response = Excon::Response.new
90
- group = self.data[:security_groups][group_name]
90
+ group = self.data[:security_groups][group_name] || raise(Fog::Compute::AWS::NotFound.new("The security group '#{group_name}' does not exist"))
91
91
 
92
- if group
93
- verify_permission_options(options, group['vpcId'] != nil)
92
+ verify_permission_options(options, group['vpcId'] != nil)
94
93
 
95
- normalized_permissions = normalize_permissions(options)
94
+ normalized_permissions = normalize_permissions(options)
96
95
 
97
- normalized_permissions.each do |permission|
98
- if matching_group_permission = find_matching_permission(group, permission)
99
- if permission['groups'].any? {|pg| matching_group_permission['groups'].include?(pg) }
100
- raise Fog::Compute::AWS::Error, "InvalidPermission.Duplicate => The permission '123' has already been authorized in the specified group"
101
- end
102
-
103
- if permission['ipRanges'].any? {|pr| matching_group_permission['ipRanges'].include?(pr) }
104
- raise Fog::Compute::AWS::Error, "InvalidPermission.Duplicate => The permission '123' has already been authorized in the specified group"
105
- end
96
+ normalized_permissions.each do |permission|
97
+ if matching_group_permission = find_matching_permission(group, permission)
98
+ if permission['groups'].any? {|pg| matching_group_permission['groups'].include?(pg) }
99
+ raise Fog::Compute::AWS::Error, "InvalidPermission.Duplicate => The permission '123' has already been authorized in the specified group"
106
100
  end
107
- end
108
101
 
109
- normalized_permissions.each do |permission|
110
- if matching_group_permission = find_matching_permission(group, permission)
111
- matching_group_permission['groups'] += permission['groups']
112
- matching_group_permission['ipRanges'] += permission['ipRanges']
113
- else
114
- group['ipPermissions'] << permission
102
+ if permission['ipRanges'].any? {|pr| matching_group_permission['ipRanges'].include?(pr) }
103
+ raise Fog::Compute::AWS::Error, "InvalidPermission.Duplicate => The permission '123' has already been authorized in the specified group"
115
104
  end
116
105
  end
106
+ end
117
107
 
118
- response.status = 200
119
- response.body = {
120
- 'requestId' => Fog::AWS::Mock.request_id,
121
- 'return' => true
122
- }
123
- response
124
- else
125
- raise Fog::Compute::AWS::NotFound.new("The security group '#{group_name}' does not exist")
108
+ normalized_permissions.each do |permission|
109
+ if matching_group_permission = find_matching_permission(group, permission)
110
+ matching_group_permission['groups'] += permission['groups']
111
+ matching_group_permission['ipRanges'] += permission['ipRanges']
112
+ else
113
+ group['ipPermissions'] << permission
114
+ end
126
115
  end
116
+
117
+ response.status = 200
118
+ response.body = {
119
+ 'requestId' => Fog::AWS::Mock.request_id,
120
+ 'return' => true
121
+ }
122
+ response
127
123
  end
128
124
 
129
125
  private
@@ -158,58 +154,67 @@ module Fog
158
154
  ['tcp', 'udp'].each do |protocol|
159
155
  normalized_permissions << {
160
156
  'ipProtocol' => protocol,
161
- 'fromPort' => 1,
162
- 'toPort' => 65535,
163
- 'groups' => [{'groupName' => options['SourceSecurityGroupName'], 'userId' => options['SourceSecurityGroupOwnerId'] || self.data[:owner_id], 'groupId' => source_group_id }],
164
- 'ipRanges' => []
157
+ 'fromPort' => 1,
158
+ 'toPort' => 65535,
159
+ 'groups' => [{
160
+ 'groupName' => options['SourceSecurityGroupName'],
161
+ 'userId' => options['SourceSecurityGroupOwnerId'] || self.data[:owner_id],
162
+ 'groupId' => source_group_id
163
+ }],
164
+ 'ipRanges' => []
165
165
  }
166
166
  end
167
167
  normalized_permissions << {
168
168
  'ipProtocol' => 'icmp',
169
- 'fromPort' => -1,
170
- 'toPort' => -1,
171
- 'groups' => [{'groupName' => options['SourceSecurityGroupName'], 'userId' => options['SourceSecurityGroupOwnerId'] || self.data[:owner_id], 'groupId' => source_group_id }],
169
+ 'fromPort' => -1,
170
+ 'toPort' => -1,
171
+ 'groups' => [{
172
+ 'groupName' => options['SourceSecurityGroupName'],
173
+ 'userId' => options['SourceSecurityGroupOwnerId'] || self.data[:owner_id],
174
+ 'groupId' => source_group_id
175
+ }],
172
176
  'ipRanges' => []
173
177
  }
174
178
  elsif options['CidrIp']
175
179
  normalized_permissions << {
176
180
  'ipProtocol' => options['IpProtocol'],
177
- 'fromPort' => Integer(options['FromPort']),
178
- 'toPort' => Integer(options['ToPort']),
179
- 'groups' => [],
180
- 'ipRanges' => [{'cidrIp' => options['CidrIp']}]
181
+ 'fromPort' => Integer(options['FromPort']),
182
+ 'toPort' => Integer(options['ToPort']),
183
+ 'groups' => [],
184
+ 'ipRanges' => [{'cidrIp' => options['CidrIp']}]
181
185
  }
182
186
  elsif options['IpPermissions']
183
187
  options['IpPermissions'].each do |permission|
188
+
189
+ groups = (permission['Groups'] || []).map do |authorized_group|
190
+ security_group = if group_name = authorized_group['GroupName']
191
+ self.data[:security_groups][group_name]
192
+ elsif group_id = authorized_group['GroupId']
193
+ self.data[:security_groups].values.find { |sg| sg['groupId'] == group_id }
194
+ end ||
195
+ raise(Fog::Compute::AWS::NotFound.new("The security group '#{group_name || group_id}' does not exist"))
196
+
197
+ {
198
+ 'groupName' => authorized_group['GroupName'] || security_group["groupName"],
199
+ 'userId' => authorized_group['UserId'] || self.data[:owner_id],
200
+ 'groupId' => authorized_group["GroupId"] || security_group['groupId']
201
+ }
202
+ end
203
+
204
+
184
205
  if ['tcp', 'udp', 'icmp'].include?(permission['IpProtocol'])
185
206
  normalized_permissions << {
186
207
  'ipProtocol' => permission['IpProtocol'],
187
- 'fromPort' => Integer(permission['FromPort']),
188
- 'toPort' => Integer(permission['ToPort']),
189
- 'groups' => (permission['Groups'] || []).map do |authorized_group|
190
- security_group = if group_name = authorized_group['GroupName']
191
- self.data[:security_groups][group_name] || {}
192
- elsif group_id = authorized_group['GroupId']
193
- self.data[:security_groups].values.find { |sg| sg['groupId'] == group_id } || {}
194
- end
195
-
196
- {'groupName' => authorized_group['GroupName'] || security_group["groupName"], 'userId' => authorized_group['UserId'] || self.data[:owner_id], 'groupId' => authorized_group["GroupId"] || security_group['groupId']}
197
- end,
208
+ 'fromPort' => Integer(permission['FromPort']),
209
+ 'toPort' => Integer(permission['ToPort']),
210
+ 'groups' => groups,
198
211
  'ipRanges' => (permission['IpRanges'] || []).map {|r| { 'cidrIp' => r['CidrIp'] } }
199
212
  }
200
213
  else
201
214
  normalized_permissions << {
202
215
  'ipProtocol' => permission['IpProtocol'],
203
- 'groups' => (permission['Groups'] || []).map do |authorized_group|
204
- security_group = if group_name = authorized_group['GroupName']
205
- self.data[:security_groups][group_name] || {}
206
- elsif group_id = authorized_group['GroupId']
207
- self.data[:security_groups].values.find { |sg| sg['groupId'] == group_id } || {}
208
- end
209
-
210
- {'groupName' => authorized_group['GroupName'] || security_group["groupName"], 'userId' => authorized_group['UserId'] || self.data[:owner_id], 'groupId' => authorized_group["GroupId"] || security_group['groupId']}
211
- end,
212
- 'ipRanges' => (permission['IpRanges'] || []).map {|r| { 'cidrIp' => r['CidrIp'] } }
216
+ 'groups' => groups,
217
+ 'ipRanges' => (permission['IpRanges'] || []).map {|r| { 'cidrIp' => r['CidrIp'] } }
213
218
  }
214
219
  end
215
220
  end
@@ -221,8 +226,8 @@ module Fog
221
226
  def find_matching_permission(group, permission)
222
227
  group['ipPermissions'].find {|group_permission|
223
228
  permission['ipProtocol'] == group_permission['ipProtocol'] &&
224
- permission['fromPort'] == group_permission['fromPort'] &&
225
- permission['toPort'] == group_permission['toPort'] }
229
+ permission['fromPort'] == group_permission['fromPort'] &&
230
+ permission['toPort'] == group_permission['toPort'] }
226
231
  end
227
232
  end
228
233
  end