fog-aws 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -1
  3. data/lib/fog/aws/dns.rb +1 -1
  4. data/lib/fog/aws/iam.rb +57 -20
  5. data/lib/fog/aws/iam/default_policies.json +1574 -0
  6. data/lib/fog/aws/iam/default_policies.rb +15 -0
  7. data/lib/fog/aws/iam/default_policy_versions.json +3372 -0
  8. data/lib/fog/aws/iam/paged_collection.rb +54 -0
  9. data/lib/fog/aws/models/compute/flavors.rb +95 -35
  10. data/lib/fog/aws/models/elb/load_balancer.rb +9 -10
  11. data/lib/fog/aws/models/elb/policies.rb +24 -9
  12. data/lib/fog/aws/models/elb/policy.rb +9 -10
  13. data/lib/fog/aws/models/iam/group.rb +33 -2
  14. data/lib/fog/aws/models/iam/groups.rb +2 -22
  15. data/lib/fog/aws/models/iam/managed_policies.rb +63 -0
  16. data/lib/fog/aws/models/iam/managed_policy.rb +38 -0
  17. data/lib/fog/aws/models/iam/policies.rb +19 -15
  18. data/lib/fog/aws/models/iam/user.rb +34 -2
  19. data/lib/fog/aws/parsers/iam/list_managed_policies.rb +25 -0
  20. data/lib/fog/aws/parsers/iam/policy_version.rb +33 -0
  21. data/lib/fog/aws/region_methods.rb +1 -1
  22. data/lib/fog/aws/requests/compute/allocate_address.rb +21 -19
  23. data/lib/fog/aws/requests/iam/attach_group_policy.rb +26 -0
  24. data/lib/fog/aws/requests/iam/attach_user_policy.rb +30 -4
  25. data/lib/fog/aws/requests/iam/create_access_key.rb +6 -5
  26. data/lib/fog/aws/requests/iam/detach_group_policy.rb +26 -0
  27. data/lib/fog/aws/requests/iam/detach_user_policy.rb +26 -0
  28. data/lib/fog/aws/requests/iam/get_policy.rb +57 -0
  29. data/lib/fog/aws/requests/iam/get_policy_version.rb +59 -0
  30. data/lib/fog/aws/requests/iam/get_user.rb +7 -0
  31. data/lib/fog/aws/requests/iam/list_attached_group_policies.rb +89 -0
  32. data/lib/fog/aws/requests/iam/list_attached_user_policies.rb +89 -0
  33. data/lib/fog/aws/requests/iam/list_policies.rb +47 -2
  34. data/lib/fog/aws/signaturev4.rb +14 -12
  35. data/lib/fog/aws/version.rb +1 -1
  36. data/tests/models/iam/managed_policies_tests.rb +67 -0
  37. data/tests/models/iam/users_tests.rb +20 -0
  38. data/tests/requests/compute/address_tests.rb +33 -20
  39. data/tests/signaturev4_tests.rb +7 -0
  40. metadata +14 -2
@@ -0,0 +1,54 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class PagedCollection < Fog::Collection
5
+ def self.inherited(klass)
6
+ klass.send(:attribute, :truncated, :aliases => 'IsTruncated', :type => :boolean)
7
+ klass.send(:attribute, :marker, :aliases => 'Marker')
8
+
9
+ super
10
+ end
11
+
12
+ def each_entry(*args, &block)
13
+ to_a.each(*args, &block)
14
+ end
15
+
16
+ def each
17
+ if !block_given?
18
+ self
19
+ else
20
+ subset = dup.all
21
+
22
+ subset.each_entry { |f| yield f }
23
+
24
+ while subset.truncated
25
+ subset.
26
+ all(:marker => subset.marker, :limit => 1000).
27
+ each_entry { |f| yield f }
28
+ end
29
+
30
+ self
31
+ end
32
+ end
33
+
34
+ protected
35
+
36
+ def page_params(options={})
37
+ marker = options.fetch(:marker) { options.fetch('Marker') { self.marker } }
38
+ limit = options.fetch(:limit) { options['MaxItems'] }
39
+ params = {}
40
+
41
+ if marker && !marker.empty?
42
+ params.merge!('Marker' => marker)
43
+ end
44
+
45
+ if limit
46
+ params.merge!('MaxItems' => limit)
47
+ end
48
+
49
+ params
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -108,7 +108,7 @@ module Fog
108
108
  :id => 'c3.large',
109
109
  :name => 'C3 Large',
110
110
  :bits => 64,
111
- :cores => 7,
111
+ :cores => 2,
112
112
  :disk => 32,
113
113
  :ram => 3750,
114
114
  :ebs_optimized_available => false,
@@ -118,7 +118,7 @@ module Fog
118
118
  :id => 'c3.xlarge',
119
119
  :name => 'C3 Extra Large',
120
120
  :bits => 64,
121
- :cores => 14,
121
+ :cores => 4,
122
122
  :disk => 80,
123
123
  :ram => 7168,
124
124
  :ebs_optimized_available => true,
@@ -128,7 +128,7 @@ module Fog
128
128
  :id => 'c3.2xlarge',
129
129
  :name => 'C3 Double Extra Large',
130
130
  :bits => 64,
131
- :cores => 28,
131
+ :cores => 8,
132
132
  :disk => 160,
133
133
  :ram => 15360,
134
134
  :ebs_optimized_available => true,
@@ -138,7 +138,7 @@ module Fog
138
138
  :id => 'c3.4xlarge',
139
139
  :name => 'C3 Quadruple Extra Large',
140
140
  :bits => 64,
141
- :cores => 55,
141
+ :cores => 16,
142
142
  :disk => 320,
143
143
  :ram => 30720,
144
144
  :ebs_optimized_available => true,
@@ -148,7 +148,7 @@ module Fog
148
148
  :id => 'c3.8xlarge',
149
149
  :name => 'C3 Eight Extra Large',
150
150
  :bits => 64,
151
- :cores => 108,
151
+ :cores => 16,
152
152
  :disk => 640,
153
153
  :ram => 61440,
154
154
  :ebs_optimized_available => false,
@@ -158,61 +158,71 @@ module Fog
158
158
  :id => 'c4.large',
159
159
  :name => 'C4 Large',
160
160
  :bits => 64,
161
- :cores => 7,
162
- :disk => 32,
161
+ :cores => 2,
162
+ :disk => 0,
163
163
  :ram => 3750,
164
164
  :ebs_optimized_available => true,
165
- :instance_store_volumes => 2
165
+ :instance_store_volumes => 0
166
166
  },
167
167
  {
168
168
  :id => 'c4.xlarge',
169
169
  :name => 'C4 Extra Large',
170
170
  :bits => 64,
171
- :cores => 14,
172
- :disk => 80,
171
+ :cores => 4,
172
+ :disk => 0,
173
173
  :ram => 7168,
174
174
  :ebs_optimized_available => true,
175
- :instance_store_volumes => 2
175
+ :instance_store_volumes => 0
176
176
  },
177
177
  {
178
178
  :id => 'c4.2xlarge',
179
179
  :name => 'C4 Double Extra Large',
180
180
  :bits => 64,
181
- :cores => 28,
182
- :disk => 160,
181
+ :cores => 8,
182
+ :disk => 0,
183
183
  :ram => 15360,
184
184
  :ebs_optimized_available => true,
185
- :instance_store_volumes => 2
185
+ :instance_store_volumes => 0
186
186
  },
187
187
  {
188
188
  :id => 'c4.4xlarge',
189
189
  :name => 'C4 Quadruple Extra Large',
190
190
  :bits => 64,
191
- :cores => 55,
192
- :disk => 320,
191
+ :cores => 16,
192
+ :disk => 0,
193
193
  :ram => 30720,
194
194
  :ebs_optimized_available => true,
195
- :instance_store_volumes => 2
195
+ :instance_store_volumes => 0
196
196
  },
197
197
  {
198
198
  :id => 'c4.8xlarge',
199
199
  :name => 'C4 Eight Extra Large',
200
200
  :bits => 64,
201
- :cores => 122,
202
- :disk => 640,
201
+ :cores => 36,
202
+ :disk => 0,
203
203
  :ram => 61440,
204
- :ebs_optimized_available => false,
205
- :instance_store_volumes => 2
204
+ :ebs_optimized_available => true,
205
+ :instance_store_volumes => 0
206
206
  },
207
207
  {
208
208
  :id => 'g2.2xlarge',
209
209
  :name => 'GPU Double Extra Large',
210
210
  :bits => 64,
211
- :cores => 26,
211
+ :cores => 8,
212
212
  :disk => 60,
213
213
  :ram => 15360,
214
214
  :ebs_optimized_available => true,
215
- :instance_store_volumes => 0
215
+ :instance_store_volumes => 1
216
+ },
217
+ {
218
+ :id => 'g2.8xlarge',
219
+ :name => 'GPU Eight Extra Large',
220
+ :bits => 64,
221
+ :cores => 32,
222
+ :disk => 240,
223
+ :ram => 61440,
224
+ :ebs_optimized_available => true,
225
+ :instance_store_volumes => 2
216
226
  },
217
227
  {
218
228
  :id => 'hs1.8xlarge',
@@ -268,19 +278,19 @@ module Fog
268
278
  :id => 'm3.medium',
269
279
  :name => 'M3 Medium',
270
280
  :bits => 64,
271
- :cores => 3,
281
+ :cores => 1,
272
282
  :disk => 4,
273
283
  :ram => 3840,
274
284
  :ebs_optimized_available => false,
275
- :instance_store_volumes => 0
285
+ :instance_store_volumes => 1
276
286
  },
277
287
  {
278
288
  :id => 'm3.large',
279
289
  :name => 'M3 Large',
280
290
  :bits => 64,
281
- :cores => 6.5,
291
+ :cores => 2,
282
292
  :disk => 32,
283
- :ram => 7168,
293
+ :ram => 7680,
284
294
  :ebs_optimized_available => false,
285
295
  :instance_store_volumes => 1
286
296
  },
@@ -288,7 +298,7 @@ module Fog
288
298
  :id => 'm3.xlarge',
289
299
  :name => 'M3 Extra Large',
290
300
  :bits => 64,
291
- :cores => 13,
301
+ :cores => 4,
292
302
  :disk => 80,
293
303
  :ram => 15360,
294
304
  :ebs_optimized_available => true,
@@ -298,7 +308,7 @@ module Fog
298
308
  :id => 'm3.2xlarge',
299
309
  :name => 'M3 Double Extra Large',
300
310
  :bits => 64,
301
- :cores => 26,
311
+ :cores => 8,
302
312
  :disk => 160,
303
313
  :ram => 30720,
304
314
  :ebs_optimized_available => true,
@@ -348,7 +358,7 @@ module Fog
348
358
  :id => 'i2.xlarge',
349
359
  :name => 'I2 Extra Large',
350
360
  :bits => 64,
351
- :cores => 14,
361
+ :cores => 4,
352
362
  :disk => 800,
353
363
  :ram => 31232,
354
364
  :ebs_optimized_available => true,
@@ -358,7 +368,7 @@ module Fog
358
368
  :id => 'i2.2xlarge',
359
369
  :name => 'I2 Double Extra Large',
360
370
  :bits => 64,
361
- :cores => 27,
371
+ :cores => 8,
362
372
  :disk => 1600,
363
373
  :ram => 62464,
364
374
  :ebs_optimized_available => true,
@@ -368,7 +378,7 @@ module Fog
368
378
  :id => 'i2.4xlarge',
369
379
  :name => 'I2 Quadruple Extra Large',
370
380
  :bits => 64,
371
- :cores => 53,
381
+ :cores => 16,
372
382
  :disk => 3200,
373
383
  :ram => 124928,
374
384
  :ebs_optimized_available => true,
@@ -378,7 +388,7 @@ module Fog
378
388
  :id => 'i2.8xlarge',
379
389
  :name => 'I2 Eight Extra Large',
380
390
  :bits => 64,
381
- :cores => 104,
391
+ :cores => 32,
382
392
  :disk => 6400,
383
393
  :ram => 249856,
384
394
  :ebs_optimized_available => false,
@@ -389,7 +399,7 @@ module Fog
389
399
  :name => "R3 Large",
390
400
  :bits => 64,
391
401
  :cores => 2,
392
- :ram => 15360,
402
+ :ram => 15616,
393
403
  :disk => 32,
394
404
  :ebs_optimized_available => true,
395
405
  :instance_store_volumes => 1
@@ -431,7 +441,7 @@ module Fog
431
441
  :cores => 32,
432
442
  :ram => 249856,
433
443
  :disk => 640,
434
- :ebs_optimized_available => true,
444
+ :ebs_optimized_available => false,
435
445
  :instance_store_volumes => 2
436
446
  },
437
447
  {
@@ -473,6 +483,56 @@ module Fog
473
483
  :disk => 48000,
474
484
  :ebs_optimized_available => true,
475
485
  :instance_store_volumes => 24
486
+ },
487
+ {
488
+ :id => "m4.large",
489
+ :name => "M4 Large",
490
+ :bits => 64,
491
+ :cores => 2,
492
+ :ram => 8192,
493
+ :disk => 0,
494
+ :ebs_optimized_available => true,
495
+ :instance_store_volumes => 0
496
+ },
497
+ {
498
+ :id => "m4.xlarge",
499
+ :name => "M4 Extra Large",
500
+ :bits => 64,
501
+ :cores => 4,
502
+ :ram => 16384,
503
+ :disk => 0,
504
+ :ebs_optimized_available => true,
505
+ :instance_store_volumes => 0
506
+ },
507
+ {
508
+ :id => "m4.2xlarge",
509
+ :name => "M4 Double Extra Large",
510
+ :bits => 64,
511
+ :cores => 8,
512
+ :ram => 31232,
513
+ :disk => 0,
514
+ :ebs_optimized_available => true,
515
+ :instance_store_volumes => 0
516
+ },
517
+ {
518
+ :id => "m4.4xlarge",
519
+ :name => "M4 Quadruple Extra Large",
520
+ :bits => 64,
521
+ :cores => 16,
522
+ :ram => 62464,
523
+ :disk => 0,
524
+ :ebs_optimized_available => true,
525
+ :instance_store_volumes => 0
526
+ },
527
+ {
528
+ :id => "m4.10xlarge",
529
+ :name => "M4 Ten Extra Large",
530
+ :bits => 64,
531
+ :cores => 40,
532
+ :ram => 163840,
533
+ :disk => 0,
534
+ :ebs_optimized_available => true,
535
+ :instance_store_volumes => 0
476
536
  }
477
537
  ]
478
538
 
@@ -143,23 +143,22 @@ module Fog
143
143
  end
144
144
 
145
145
  def listeners
146
- Fog::AWS::ELB::Listeners.new({
147
- :data => attributes['ListenerDescriptions'],
148
- :service => service,
146
+ Fog::AWS::ELB::Listeners.new(
147
+ :data => attributes['ListenerDescriptions'],
148
+ :service => service,
149
149
  :load_balancer => self
150
- })
150
+ )
151
151
  end
152
152
 
153
153
  def policies
154
- Fog::AWS::ELB::Policies.new({
155
- :data => policy_descriptions,
156
- :service => service,
157
- :load_balancer => self
158
- })
154
+ requires :id
155
+
156
+ service.policies(:load_balancer_id => self.identity)
159
157
  end
160
158
 
161
159
  def policy_descriptions
162
160
  requires :id
161
+
163
162
  @policy_descriptions ||= service.describe_load_balancer_policies(id).body["DescribeLoadBalancerPoliciesResult"]["PolicyDescriptions"]
164
163
  end
165
164
 
@@ -202,7 +201,7 @@ module Fog
202
201
  service.remove_tags(id, tag_keys)
203
202
  tags
204
203
  end
205
-
204
+
206
205
 
207
206
  def save
208
207
  requires :id
@@ -1,29 +1,44 @@
1
1
  require 'fog/aws/models/elb/policy'
2
+
2
3
  module Fog
3
4
  module AWS
4
5
  class ELB
5
6
  class Policies < Fog::Collection
7
+
8
+ attribute :load_balancer_id
9
+
6
10
  model Fog::AWS::ELB::Policy
7
11
 
8
- attr_accessor :data, :load_balancer
12
+ def all(options={})
13
+ merge_attributes(options)
14
+
15
+ requires :load_balancer_id
9
16
 
10
- def all
11
- load(munged_data)
17
+ data = service.describe_load_balancer_policies(self.load_balancer_id).
18
+ body["DescribeLoadBalancerPoliciesResult"]["PolicyDescriptions"]
19
+
20
+ load(munge(data))
12
21
  end
13
22
 
14
23
  def get(id)
15
- all.find{|policy| id == policy.id}
24
+ all.find { |policy| id == policy.id }
25
+ end
26
+
27
+ def new(attributes={})
28
+ super(self.attributes.merge(attributes))
16
29
  end
17
30
 
18
31
  private
19
- def munged_data
20
- data.reduce([]){|m,e|
32
+
33
+ def munge(data)
34
+ data.reduce([]) { |m,e|
21
35
  policy_attribute_descriptions = e["PolicyAttributeDescriptions"]
22
36
 
23
37
  policy = {
24
- :id => e["PolicyName"],
25
- :type_name => e["PolicyTypeName"],
26
- :policy_attributes => policy_attributes(policy_attribute_descriptions)
38
+ :id => e["PolicyName"],
39
+ :type_name => e["PolicyTypeName"],
40
+ :policy_attributes => policy_attributes(policy_attribute_descriptions),
41
+ :load_balancer_id => self.load_balancer_id,
27
42
  }
28
43
 
29
44
  case e["PolicyTypeName"]
@@ -8,13 +8,13 @@ module Fog
8
8
  attribute :expiration, :aliases => 'CookieExpirationPeriod'
9
9
  attribute :type_name
10
10
  attribute :policy_attributes
11
+ attribute :load_balancer_id
11
12
 
12
13
  attr_accessor :cookie_stickiness # Either :app or :lb
13
14
 
14
15
  def save
15
- requires :id, :load_balancer
16
- service_method = nil
17
- args = [load_balancer.id, id]
16
+ requires :id, :load_balancer_id
17
+ args = [load_balancer_id, id]
18
18
 
19
19
  if cookie_stickiness
20
20
  case cookie_stickiness
@@ -40,17 +40,16 @@ module Fog
40
40
  end
41
41
 
42
42
  def destroy
43
- requires :id, :load_balancer
44
- service.delete_load_balancer_policy(load_balancer.id, id)
45
- reload
46
- end
43
+ requires :identity, :load_balancer_id
47
44
 
48
- def reload
49
- load_balancer.reload
45
+ service.delete_load_balancer_policy(self.load_balancer_id, self.identity)
46
+ reload
50
47
  end
51
48
 
52
49
  def load_balancer
53
- collection.load_balancer
50
+ requires :load_balancer_id
51
+
52
+ service.load_balancers.new(:identity => self.load_balancer_id)
54
53
  end
55
54
  end
56
55
  end