fog-aws 3.6.2 → 3.6.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 00fc42b895d14ab00b5e1f16425418ca937cfc3baef380f8b62b195eed0f712c
4
- data.tar.gz: 2659d7e60f0744a45d07bfdb7ae0799d019d1db32011e0226a65215c93dcedf3
3
+ metadata.gz: b18145d8a9c814854524a02640ca995f074ae8a63c232ab50a6fc84f7387237c
4
+ data.tar.gz: 36346830f2b660a561b372b9fd8b7c48d58f95bb53971d480199477909d4fe9b
5
5
  SHA512:
6
- metadata.gz: b0b5875cf43c3b3210ccd26330ad115a889e4802854200af17f57a4dc07a226141c3027cfe28f6d9310b451634a8a1d9cb7f817d47142e32b3af42266842a32a
7
- data.tar.gz: 3d2ce1c9051d9806ac452adcf8992b85c8b3fe9e154834ca46136f3ab8defeab07a79ca45b76991f4d2001dc7e9f6bcf6f49d534a2eaf17e53573501565ceed1
6
+ metadata.gz: 29957fd751f2ee82a52cf0bbbff5740a5e80e6e3c6a9cd9aa5da486b4cd1c2fbe1a19486a2ecddfd92731183e4650ca839886ce2ba7d6a5ff991db6d814fbd3e
7
+ data.tar.gz: f869e131ec87666ad2e0741e858d2f107613fc7e1151683e32dc650e844420ec0692beaae74eeb018e3297d346c14cbe59a76af7c1d754c62fc9052426e80bfb
@@ -1,5 +1,92 @@
1
1
  # Change Log
2
2
 
3
+ ## [v3.6.7](https://github.com/fog/fog-aws/tree/HEAD)(2020-08-26)
4
+
5
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.6.6...HEAD)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - S3 dot Region endpoint structure applied [\#574](https://github.com/fog/fog-aws/pull/574) ([gharutyunyan-vineti](https://github.com/gharutyunyan-vineti))
10
+
11
+ ## [v3.6.6](https://github.com/fog/fog-aws/tree/v3.6.6) (2020-06-23)
12
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.6.5...v3.6.6)
13
+
14
+ **Closed issues:**
15
+
16
+ - max\_keys param in storage.directories.get.... what am I missing? [\#568](https://github.com/fog/fog-aws/issues/568)
17
+ - Fog Logs? [\#561](https://github.com/fog/fog-aws/issues/561)
18
+
19
+ **Merged pull requests:**
20
+
21
+ - added missing region EU South \(Milan\) [\#570](https://github.com/fog/fog-aws/pull/570) ([saldan](https://github.com/saldan))
22
+ - hibernation option to compute [\#569](https://github.com/fog/fog-aws/pull/569) ([taniahagan](https://github.com/taniahagan))
23
+ - Fix VPC model is\_default requires [\#567](https://github.com/fog/fog-aws/pull/567) ([biinari](https://github.com/biinari))
24
+
25
+ ## [v3.6.5](https://github.com/fog/fog-aws/tree/v3.6.5) (2020-05-22)
26
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.6.4...v3.6.5)
27
+
28
+ **Closed issues:**
29
+
30
+ - Fog::Compute::AWS is deprecated, please use Fog::AWS::Compute warning [\#565](https://github.com/fog/fog-aws/issues/565)
31
+ - Duplicate compute flavours [\#563](https://github.com/fog/fog-aws/issues/563)
32
+ - 3.6.4 does not fetch iam credentials using IMDSv2 when running from inside containers with IMDSv2 Defaults [\#560](https://github.com/fog/fog-aws/issues/560)
33
+
34
+ **Merged pull requests:**
35
+
36
+ - Fix naming of various AWS compute flavors [\#564](https://github.com/fog/fog-aws/pull/564) ([abrom](https://github.com/abrom))
37
+ - Gracefully handle failure of IMDSv2 and allow fallback to IMDSv1 [\#562](https://github.com/fog/fog-aws/pull/562) ([atyndall](https://github.com/atyndall))
38
+
39
+ ## [v3.6.4](https://github.com/fog/fog-aws/tree/v3.6.4) (2020-05-14)
40
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.6.3...v3.6.4)
41
+
42
+ **Closed issues:**
43
+
44
+ - Is fog-aws compatible with AWS Trust Services? [\#558](https://github.com/fog/fog-aws/issues/558)
45
+
46
+ **Merged pull requests:**
47
+
48
+ - Add support for IMDSv2 in CredentialFetcher [\#559](https://github.com/fog/fog-aws/pull/559) ([atyndall](https://github.com/atyndall))
49
+ - Don’t install development scripts [\#557](https://github.com/fog/fog-aws/pull/557) ([amarshall](https://github.com/amarshall))
50
+
51
+ ## [v3.6.3](https://github.com/fog/fog-aws/tree/v3.6.3) (2020-04-22)
52
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.6.2...v3.6.3)
53
+
54
+ **Merged pull requests:**
55
+
56
+ - Add South Africa \(Cape Town\) Region [\#556](https://github.com/fog/fog-aws/pull/556) ([lvangool](https://github.com/lvangool))
57
+ - Adds Instance Type r5.16xlarge and r5.8xlarge [\#555](https://github.com/fog/fog-aws/pull/555) ([rupikakapoor](https://github.com/rupikakapoor))
58
+ - Update kinesis.rb [\#553](https://github.com/fog/fog-aws/pull/553) ([ioquatix](https://github.com/ioquatix))
59
+
60
+ ## [v3.6.2](https://github.com/fog/fog-aws/tree/v3.6.2) (2020-03-24)
61
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v3.5.2...v3.6.2)
62
+
63
+ **Closed issues:**
64
+
65
+ - config.assets.prefix is being looked at as a bucket name [\#551](https://github.com/fog/fog-aws/issues/551)
66
+ - Class name typo: AssumeRoleWithWithWebIdentity [\#548](https://github.com/fog/fog-aws/issues/548)
67
+ - filename too long [\#544](https://github.com/fog/fog-aws/issues/544)
68
+
69
+ **Merged pull requests:**
70
+
71
+ - Adding two missing regions to Fog::AWS.regions [\#552](https://github.com/fog/fog-aws/pull/552) ([lvangool](https://github.com/lvangool))
72
+ - Adds missing param WebIdentityToken for the request to the AWS api [\#550](https://github.com/fog/fog-aws/pull/550) ([dgoradia](https://github.com/dgoradia))
73
+ - Fixes type in class name for STS assume\_role\_with\_web\_identity parser [\#549](https://github.com/fog/fog-aws/pull/549) ([dgoradia](https://github.com/dgoradia))
74
+ - Add missing AWS flavors [\#547](https://github.com/fog/fog-aws/pull/547) ([ybart](https://github.com/ybart))
75
+ - Update elasticache mocking regions [\#545](https://github.com/fog/fog-aws/pull/545) ([yads](https://github.com/yads))
76
+ - Feature/elbv2 creation endpoint [\#542](https://github.com/fog/fog-aws/pull/542) ([KevinLoiseau](https://github.com/KevinLoiseau))
77
+ - Fix/sd 8581/retrieve provider snapshot status from provider [\#541](https://github.com/fog/fog-aws/pull/541) ([toubs13](https://github.com/toubs13))
78
+ - Fix/missing implementation in listener parser [\#540](https://github.com/fog/fog-aws/pull/540) ([KevinLoiseau](https://github.com/KevinLoiseau))
79
+ - Enhance/elbv2 tag endpoints [\#539](https://github.com/fog/fog-aws/pull/539) ([KevinLoiseau](https://github.com/KevinLoiseau))
80
+ - Improve documentation and development setup [\#538](https://github.com/fog/fog-aws/pull/538) ([gustavosobral](https://github.com/gustavosobral))
81
+ - Add object tagging [\#537](https://github.com/fog/fog-aws/pull/537) ([gustavosobral](https://github.com/gustavosobral))
82
+ - Fix load balancers parser to handle more than one availability zone with addresses [\#536](https://github.com/fog/fog-aws/pull/536) ([KevinLoiseau](https://github.com/KevinLoiseau))
83
+ - Remove useless attribute location from directory model [\#535](https://github.com/fog/fog-aws/pull/535) ([KevinLoiseau](https://github.com/KevinLoiseau))
84
+ - Create service ELBV2 to handle specificities of 2015-12-01 API version [\#534](https://github.com/fog/fog-aws/pull/534) ([KevinLoiseau](https://github.com/KevinLoiseau))
85
+ - Add missing m5a flavors [\#533](https://github.com/fog/fog-aws/pull/533) ([ybart](https://github.com/ybart))
86
+ - Enhance/add some attributes to hosted zone parsers [\#531](https://github.com/fog/fog-aws/pull/531) ([KevinLoiseau](https://github.com/KevinLoiseau))
87
+ - Fix VPC tenancy on creation [\#530](https://github.com/fog/fog-aws/pull/530) ([ramonpm](https://github.com/ramonpm))
88
+ - Fix subnet's parsings [\#529](https://github.com/fog/fog-aws/pull/529) ([KevinLoiseau](https://github.com/KevinLoiseau))
89
+
3
90
  ## [v3.5.2](https://github.com/fog/fog-aws/tree/v3.5.2) (2019-07-16)
4
91
  [Full Changelog](https://github.com/fog/fog-aws/compare/v3.5.1...v3.5.2)
5
92
 
@@ -12,7 +99,7 @@
12
99
 
13
100
  - Add ap-east-1 \(Hong Kong\) to Fog::AWS.regions [\#528](https://github.com/fog/fog-aws/pull/528) ([tisba](https://github.com/tisba))
14
101
  - Update shared\_mock\_methods.rb [\#526](https://github.com/fog/fog-aws/pull/526) ([MiWieczo](https://github.com/MiWieczo))
15
- - WIP: Make S3 Signature v4 streaming optional [\#525](https://github.com/fog/fog-aws/pull/525) ([stanhu](https://github.com/stanhu))
102
+ - Make S3 Signature v4 streaming optional [\#525](https://github.com/fog/fog-aws/pull/525) ([stanhu](https://github.com/stanhu))
16
103
 
17
104
  ## [v3.5.1](https://github.com/fog/fog-aws/tree/v3.5.1) (2019-06-10)
18
105
  [Full Changelog](https://github.com/fog/fog-aws/compare/v3.5.0...v3.5.1)
@@ -206,7 +293,6 @@
206
293
 
207
294
  - Update changelog for 1.4.0 [\#383](https://github.com/fog/fog-aws/pull/383) ([greysteil](https://github.com/greysteil))
208
295
  - Allow specifying kms key id to use [\#382](https://github.com/fog/fog-aws/pull/382) ([fcheung](https://github.com/fcheung))
209
- - added support to retrieve and create vpc with ipv6 cidr block [\#381](https://github.com/fog/fog-aws/pull/381) ([chanakyacool](https://github.com/chanakyacool))
210
296
  - Add MaxResults filter to describe reserved instances offerings [\#376](https://github.com/fog/fog-aws/pull/376) ([KevinLoiseau](https://github.com/KevinLoiseau))
211
297
  - Fix Fog::Compute::AWS::Images\#all [\#375](https://github.com/fog/fog-aws/pull/375) ([eddiej](https://github.com/eddiej))
212
298
  - Fix AWS credential mocking [\#374](https://github.com/fog/fog-aws/pull/374) ([v-yarotsky](https://github.com/v-yarotsky))
@@ -224,6 +310,7 @@
224
310
 
225
311
  **Merged pull requests:**
226
312
 
313
+ - added support to retrieve and create vpc with ipv6 cidr block [\#381](https://github.com/fog/fog-aws/pull/381) ([chanakyacool](https://github.com/chanakyacool))
227
314
  - add NextContinuationToken support to GetBucket operation [\#370](https://github.com/fog/fog-aws/pull/370) ([khoan](https://github.com/khoan))
228
315
  - Add a top-level require that matches the gem name [\#367](https://github.com/fog/fog-aws/pull/367) ([lanej](https://github.com/lanej))
229
316
  - Fixed credential refresh when instance metadata host is inaccessible [\#366](https://github.com/fog/fog-aws/pull/366) ([ankane](https://github.com/ankane))
@@ -494,7 +581,7 @@
494
581
  - make net/ssh require optional [\#197](https://github.com/fog/fog-aws/pull/197) ([geemus](https://github.com/geemus))
495
582
  - Cache cluster security group parser [\#190](https://github.com/fog/fog-aws/pull/190) ([eherot](https://github.com/eherot))
496
583
  - Allow region to be set for STS [\#189](https://github.com/fog/fog-aws/pull/189) ([fcheung](https://github.com/fcheung))
497
- - add cn support for s3 [\#187](https://github.com/fog/fog-aws/pull/187) ([ming-relax](https://github.com/ming-relax))
584
+ - add cn support for s3 [\#187](https://github.com/fog/fog-aws/pull/187) ([ming535](https://github.com/ming535))
498
585
  - mock instance stop and start properly [\#184](https://github.com/fog/fog-aws/pull/184) ([ehowe](https://github.com/ehowe))
499
586
  - Disable idempotent option when block is passed to get\_object [\#183](https://github.com/fog/fog-aws/pull/183) ([ghost](https://github.com/ghost))
500
587
  - Yield arguments to Mock\#get\_object block more similar to Excon [\#182](https://github.com/fog/fog-aws/pull/182) ([tdg5](https://github.com/tdg5))
@@ -818,4 +905,4 @@
818
905
  ## [fog-brightbox_v0.0.1](https://github.com/fog/fog-aws/tree/fog-brightbox_v0.0.1) (2014-02-19)
819
906
 
820
907
 
821
- \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
908
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0")
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
@@ -220,6 +220,7 @@ module Fog
220
220
 
221
221
  def self.regions
222
222
  @regions ||= [
223
+ 'af-south-1',
223
224
  'ap-east-1',
224
225
  'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3',
225
226
  'ap-south-1',
@@ -229,7 +230,7 @@ module Fog
229
230
  'cn-northwest-1',
230
231
  'eu-central-1',
231
232
  'eu-north-1',
232
- 'eu-west-1', 'eu-west-2', 'eu-west-3',
233
+ 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-south-1',
233
234
  'me-south-1',
234
235
  'us-east-1', 'us-east-2',
235
236
  'us-west-1', 'us-west-2',
@@ -3,6 +3,7 @@ module Fog
3
3
  module CredentialFetcher
4
4
 
5
5
  INSTANCE_METADATA_HOST = "http://169.254.169.254"
6
+ INSTANCE_METADATA_TOKEN = "/latest/api/token"
6
7
  INSTANCE_METADATA_PATH = "/latest/meta-data/iam/security-credentials/"
7
8
  INSTANCE_METADATA_AZ = "/latest/meta-data/placement/availability-zone/"
8
9
 
@@ -25,13 +26,15 @@ module Fog
25
26
 
26
27
  if region.nil?
27
28
  connection = options[:metadata_connection] || Excon.new(INSTANCE_METADATA_HOST)
28
- region = connection.get(:path => INSTANCE_METADATA_AZ, :idempotent => true, :expects => 200).body[0..-2]
29
+ token_header = fetch_credentials_token_header(connection, options[:disable_imds_v2])
30
+ region = connection.get(:path => INSTANCE_METADATA_AZ, :idempotent => true, :expects => 200, :headers => token_header).body[0..-2]
29
31
  end
30
32
  else
31
33
  connection = options[:connection] || Excon.new(INSTANCE_METADATA_HOST)
32
- role_name = connection.get(:path => INSTANCE_METADATA_PATH, :idempotent => true, :expects => 200).body
33
- role_data = connection.get(:path => INSTANCE_METADATA_PATH+role_name, :idempotent => true, :expects => 200).body
34
- region ||= connection.get(:path => INSTANCE_METADATA_AZ, :idempotent => true, :expects => 200).body[0..-2]
34
+ token_header = fetch_credentials_token_header(connection, options[:disable_imds_v2])
35
+ role_name = connection.get(:path => INSTANCE_METADATA_PATH, :idempotent => true, :expects => 200, :headers => token_header).body
36
+ role_data = connection.get(:path => INSTANCE_METADATA_PATH+role_name, :idempotent => true, :expects => 200, :headers => token_header).body
37
+ region ||= connection.get(:path => INSTANCE_METADATA_AZ, :idempotent => true, :expects => 200, :headers => token_header).body[0..-2]
35
38
  end
36
39
 
37
40
  session = Fog::JSON.decode(role_data)
@@ -53,6 +56,26 @@ module Fog
53
56
  super
54
57
  end
55
58
  end
59
+
60
+ def fetch_credentials_token_header(connection, disable_imds_v2)
61
+ return nil if disable_imds_v2
62
+
63
+ token = connection.put(
64
+ :path => INSTANCE_METADATA_TOKEN,
65
+ :idempotent => true,
66
+ :expects => 200,
67
+ :retry_interval => 1,
68
+ :retry_limit => 3,
69
+ :read_timeout => 1,
70
+ :write_timeout => 1,
71
+ :connect_timeout => 1,
72
+ :headers => { "X-aws-ec2-metadata-token-ttl-seconds" => "300" }
73
+ ).body
74
+
75
+ { "X-aws-ec2-metadata-token" => token }
76
+ rescue Excon::Error
77
+ nil
78
+ end
56
79
  end
57
80
 
58
81
  module ConnectionMethods
@@ -125,23 +125,26 @@ module Fog
125
125
  end
126
126
 
127
127
  class Mock
128
- def self.mutex
129
- @mutex ||= Mutex.new
130
- end
131
- def mutex; self.class.mutex; end
128
+ @mutex = Mutex.new
132
129
 
133
130
  def self.data
134
- @data ||= Hash.new do |hash, region|
135
- hash[region] = Hash.new do |region_hash, key|
136
- region_hash[key] = {
137
- :kinesis_streams => {}
138
- }
131
+ @mutex.synchronize do
132
+ @data ||= Hash.new do |hash, region|
133
+ hash[region] = Hash.new do |region_hash, key|
134
+ region_hash[key] = {
135
+ :kinesis_streams => {}
136
+ }
137
+ end
139
138
  end
139
+
140
+ yield @data if block_given?
140
141
  end
141
142
  end
142
143
 
143
144
  def self.reset
144
- @data = nil
145
+ @mutex.synchronize do
146
+ @data = nil
147
+ end
145
148
  end
146
149
 
147
150
  def initialize(options={})
@@ -153,31 +156,36 @@ module Fog
153
156
  end
154
157
 
155
158
  def data
156
- self.class.data[@region][@aws_access_key_id]
159
+ self.class.data do |data|
160
+ data[@region][@aws_access_key_id]
161
+ end
157
162
  end
158
163
 
159
164
  def reset_data
160
- self.class.data[@region].delete(@aws_access_key_id)
165
+ self.class.data do |data|
166
+ data[@region].delete(@aws_access_key_id)
167
+ end
161
168
  end
162
169
 
163
170
  def self.next_sequence_number
164
- mutex.synchronize do
171
+ @mutex.synchronize do
165
172
  @sequence_number ||= -1
166
173
  @sequence_number += 1
167
174
  @sequence_number.to_s
168
175
  end
169
176
  end
177
+
170
178
  def next_sequence_number; self.class.next_sequence_number; end
171
179
 
172
180
  def self.next_shard_id
173
- mutex.synchronize do
181
+ @mutex.synchronize do
174
182
  @shard_id ||= -1
175
183
  @shard_id += 1
176
184
  "shardId-#{@shard_id.to_s.rjust(12, "0")}"
177
185
  end
178
186
  end
187
+
179
188
  def next_shard_id; self.class.next_shard_id; end
180
-
181
189
  end
182
190
 
183
191
  end
@@ -68,7 +68,7 @@ module Fog
68
68
  },
69
69
  {
70
70
  :id => 't1.micro',
71
- :name => 'Micro Instance',
71
+ :name => 'T1 Micro Instance',
72
72
  :bits => 32,
73
73
  :cores => 1,
74
74
  :disk => 0,
@@ -88,7 +88,7 @@ module Fog
88
88
  },
89
89
  {
90
90
  :id => 't2.micro',
91
- :name => 'Micro Instance',
91
+ :name => 'T2 Micro Instance',
92
92
  :bits => 64,
93
93
  :cores => 1,
94
94
  :disk => 0,
@@ -98,7 +98,7 @@ module Fog
98
98
  },
99
99
  {
100
100
  :id => 't2.small',
101
- :name => 'Small Instance',
101
+ :name => 'T2 Small Instance',
102
102
  :bits => 64,
103
103
  :cores => 1,
104
104
  :disk => 0,
@@ -108,7 +108,7 @@ module Fog
108
108
  },
109
109
  {
110
110
  :id => 't2.medium',
111
- :name => 'Medium Instance',
111
+ :name => 'T2 Medium Instance',
112
112
  :bits => 64,
113
113
  :cores => 2,
114
114
  :disk => 0,
@@ -118,7 +118,7 @@ module Fog
118
118
  },
119
119
  {
120
120
  :id => 't2.large',
121
- :name => 'Large Instance',
121
+ :name => 'T2 Large Instance',
122
122
  :bits => 64,
123
123
  :cores => 2,
124
124
  :disk => 0,
@@ -128,7 +128,7 @@ module Fog
128
128
  },
129
129
  {
130
130
  :id => 't2.xlarge',
131
- :name => 'Extra Large Instance',
131
+ :name => 'T2 Extra Large Instance',
132
132
  :bits => 64,
133
133
  :cores => 4,
134
134
  :disk => 0,
@@ -138,7 +138,7 @@ module Fog
138
138
  },
139
139
  {
140
140
  :id => 't2.2xlarge',
141
- :name => 'Double Extra Large Instance',
141
+ :name => 'T2 Double Extra Large Instance',
142
142
  :bits => 64,
143
143
  :cores => 8,
144
144
  :disk => 0,
@@ -368,7 +368,7 @@ module Fog
368
368
  },
369
369
  {
370
370
  :id => 'm1.small',
371
- :name => 'Small Instance',
371
+ :name => 'M1 Small Instance',
372
372
  :bits => 32,
373
373
  :cores => 1,
374
374
  :disk => 160,
@@ -378,7 +378,7 @@ module Fog
378
378
  },
379
379
  {
380
380
  :id => 'm1.medium',
381
- :name => 'Medium Instance',
381
+ :name => 'M1 Medium Instance',
382
382
  :bits => 32,
383
383
  :cores => 1,
384
384
  :disk => 400,
@@ -388,7 +388,7 @@ module Fog
388
388
  },
389
389
  {
390
390
  :id => 'm1.large',
391
- :name => 'Large Instance',
391
+ :name => 'M1 Large Instance',
392
392
  :bits => 64,
393
393
  :cores => 2,
394
394
  :disk => 850,
@@ -398,7 +398,7 @@ module Fog
398
398
  },
399
399
  {
400
400
  :id => 'm1.xlarge',
401
- :name => 'Extra Large Instance',
401
+ :name => 'M1 Extra Large Instance',
402
402
  :bits => 64,
403
403
  :cores => 4,
404
404
  :disk => 1690,
@@ -1778,7 +1778,7 @@ module Fog
1778
1778
  },
1779
1779
  {
1780
1780
  :id => "u-6tb1.metal",
1781
- :name => "X1e Sixteen Extra Large",
1781
+ :name => "U 6TB Metal",
1782
1782
  :bits => 64,
1783
1783
  :cores => 448,
1784
1784
  :ram => 6597071,
@@ -14,6 +14,7 @@ module Fog
14
14
  attribute :associate_public_ip, :aliases => 'associatePublicIP'
15
15
  attribute :availability_zone, :aliases => 'availabilityZone'
16
16
  attribute :block_device_mapping, :aliases => 'blockDeviceMapping'
17
+ attribute :hibernation_options, :aliases => 'hibernationOptions'
17
18
  attribute :network_interfaces, :aliases => 'networkInterfaces'
18
19
  attribute :client_token, :aliases => 'clientToken'
19
20
  attribute :disable_api_termination, :aliases => 'disableApiTermination'
@@ -144,6 +145,7 @@ module Fog
144
145
 
145
146
  options = {
146
147
  'BlockDeviceMapping' => block_device_mapping,
148
+ 'HibernationOptions' => hibernation_options,
147
149
  'NetworkInterfaces' => network_interfaces,
148
150
  'ClientToken' => client_token,
149
151
  'DisableApiTermination' => disable_api_termination,
@@ -227,9 +229,9 @@ module Fog
227
229
  true
228
230
  end
229
231
 
230
- def stop(force = false)
232
+ def stop(options = {})
231
233
  requires :id
232
- service.stop_instances(id, force)
234
+ service.stop_instances(id, options)
233
235
  true
234
236
  end
235
237
 
@@ -22,6 +22,7 @@ module Fog
22
22
  # ami_launch_index=nil,
23
23
  # availability_zone=nil,
24
24
  # block_device_mapping=nil,
25
+ # hibernation_options=nil,
25
26
  # network_interfaces=nil,
26
27
  # client_token=nil,
27
28
  # dns_name=nil,
@@ -119,6 +120,7 @@ module Fog
119
120
  # ami_launch_index=0,
120
121
  # availability_zone="us-east-1b",
121
122
  # block_device_mapping=[],
123
+ # hibernation_options=[],
122
124
  # client_token=nil,
123
125
  # dns_name="ec2-25-2-474-44.compute-1.amazonaws.com",
124
126
  # groups=["default"],
@@ -39,7 +39,7 @@ module Fog
39
39
  end
40
40
 
41
41
  def is_default?
42
- require :is_default
42
+ requires :is_default
43
43
  is_default
44
44
  end
45
45
 
@@ -30,6 +30,8 @@ module Fog
30
30
  # * 'Ebs.Encrypted'<~Boolean> - specifies whether or not the volume is to be encrypted unless snapshot is specified
31
31
  # * 'Ebs.VolumeType'<~String> - Type of EBS volue. Valid options in ['standard', 'io1'] default is 'standard'.
32
32
  # * 'Ebs.Iops'<~String> - The number of I/O operations per second (IOPS) that the volume supports. Required when VolumeType is 'io1'
33
+ # * 'HibernationOptions'<~Array>: array of hashes
34
+ # * 'Configured'<~Boolean> - specifies whether or not the instance is configued for hibernation. This parameter is valid only if the instance meets the hibernation prerequisites.
33
35
  # * 'NetworkInterfaces'<~Array>: array of hashes
34
36
  # * 'NetworkInterfaceId'<~String> - An existing interface to attach to a single instance
35
37
  # * 'DeviceIndex'<~String> - The device index. Applies both to attaching an existing network interface and creating a network interface
@@ -75,6 +77,8 @@ module Fog
75
77
  # * 'deviceName'<~String> - specifies how volume is exposed to instance
76
78
  # * 'status'<~String> - status of attached volume
77
79
  # * 'volumeId'<~String> - Id of attached volume
80
+ # * 'hibernationOptions'<~Array>
81
+ # * 'configured'<~Boolean> - whether or not the instance is enabled for hibernation
78
82
  # * 'dnsName'<~String> - public dns name, blank until instance is running
79
83
  # * 'imageId'<~String> - image id of ami used to launch instance
80
84
  # * 'instanceId'<~String> - id of the instance
@@ -111,6 +115,13 @@ module Fog
111
115
  end
112
116
  end
113
117
  end
118
+ if hibernation_options = options.delete('HibernationOptions')
119
+ hibernation_options.each_with_index do |mapping, index|
120
+ for key, value in mapping
121
+ options.merge!({ format("HibernationOptions.%d.#{key}", index) => value })
122
+ end
123
+ end
124
+ end
114
125
  if security_groups = options.delete('SecurityGroup')
115
126
  options.merge!(Fog::AWS.indexed_param('SecurityGroup', [*security_groups]))
116
127
  end
@@ -182,6 +193,14 @@ module Fog
182
193
  }
183
194
  end
184
195
 
196
+ hibernation_options = (options['HibernationOptions'] || []).reduce([]) do |mapping, device|
197
+ configure = device.fetch("Configure", true)
198
+
199
+ mapping << {
200
+ "Configure" => configure,
201
+ }
202
+ end
203
+
185
204
  if options['SubnetId']
186
205
  if options['PrivateIpAddress']
187
206
  ni_options = {'PrivateIpAddress' => options['PrivateIpAddress']}
@@ -221,6 +240,7 @@ module Fog
221
240
  'associatePublicIP' => options['associatePublicIP'] || false,
222
241
  'architecture' => 'i386',
223
242
  'blockDeviceMapping' => block_device_mapping,
243
+ 'hibernationOptions' => hibernation_options,
224
244
  'networkInterfaces' => network_interfaces,
225
245
  'clientToken' => options['clientToken'],
226
246
  'dnsName' => nil,
@@ -16,9 +16,17 @@ module Fog
16
16
  # * TODO: fill in the blanks
17
17
  #
18
18
  # {Amazon API Reference}[http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html]
19
- def stop_instances(instance_id, force = false)
19
+ def stop_instances(instance_id, options = {})
20
20
  params = Fog::AWS.indexed_param('InstanceId', instance_id)
21
- params.merge!('Force' => 'true') if force
21
+ unless options.is_a?(Hash)
22
+ Fog::Logger.warning("stop_instances with #{options.class} param is deprecated, use stop_instances('force' => boolean) instead [light_black](#{caller.first})[/]")
23
+ options = {'force' => options}
24
+ end
25
+ params.merge!('Force' => 'true') if options['force']
26
+ if options['hibernate']
27
+ params.merge!('Hibernate' => 'true')
28
+ params.merge!('Force' => 'false')
29
+ end
22
30
  request({
23
31
  'Action' => 'StopInstances',
24
32
  :idempotent => true,
@@ -28,7 +36,7 @@ module Fog
28
36
  end
29
37
 
30
38
  class Mock
31
- def stop_instances(instance_id, force = false)
39
+ def stop_instances(instance_id, options = {})
32
40
  instance_ids = Array(instance_id)
33
41
 
34
42
  instance_set = self.data[:instances].values
@@ -227,7 +227,7 @@ module Fog
227
227
  when %r{\Acn-.*}
228
228
  "s3.#{region}.amazonaws.com.cn"
229
229
  else
230
- "s3-#{region}.amazonaws.com"
230
+ "s3.#{region}.amazonaws.com"
231
231
  end
232
232
  end
233
233
 
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AWS
3
- VERSION = "3.6.2"
3
+ VERSION = "3.6.7"
4
4
  end
5
5
  end
@@ -7,6 +7,8 @@ Shindo.tests('AWS | credentials', ['aws']) do
7
7
  Fog.unmock!
8
8
  begin
9
9
  Excon.defaults[:mock] = true
10
+ Excon.stub({ method: :put, path: '/latest/api/token' }, { status: 200, body: 'token1234' })
11
+
10
12
  Excon.stub({ method: :get, path: '/latest/meta-data/iam/security-credentials/' }, { status: 200, body: 'arole' })
11
13
  Excon.stub({ method: :get, path: '/latest/meta-data/placement/availability-zone/' }, { status: 200, body: 'us-west-1a' })
12
14
 
@@ -28,6 +30,23 @@ Shindo.tests('AWS | credentials', ['aws']) do
28
30
  aws_credentials_expire_at: expires_at) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true) }
29
31
  end
30
32
 
33
+ tests('#fetch_credentials when the v2 token 404s') do
34
+ Excon.stub({ method: :put, path: '/latest/api/token' }, { status: 404, body: 'not found' })
35
+ returns(aws_access_key_id: 'dummykey',
36
+ aws_secret_access_key: 'dummysecret',
37
+ aws_session_token: 'dummytoken',
38
+ region: 'us-west-1',
39
+ aws_credentials_expire_at: expires_at) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true) }
40
+ end
41
+
42
+ tests('#fetch_credentials when the v2 disabled') do
43
+ returns(aws_access_key_id: 'dummykey',
44
+ aws_secret_access_key: 'dummysecret',
45
+ aws_session_token: 'dummytoken',
46
+ region: 'us-west-1',
47
+ aws_credentials_expire_at: expires_at) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true, disable_imds_v2: true) }
48
+ end
49
+
31
50
  ENV['AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'] = '/v1/credentials?id=task_id'
32
51
  Excon.stub({ method: :get, path: '/v1/credentials?id=task_id' }, { status: 200, body: Fog::JSON.encode(credentials) })
33
52
 
@@ -62,6 +81,7 @@ Shindo.tests('AWS | credentials', ['aws']) do
62
81
 
63
82
  default_credentials = Fog::AWS::Compute.fetch_credentials({})
64
83
  tests('#fetch_credentials when the url 404s') do
84
+ Excon.stub({ method: :put, path: '/latest/api/token' }, { status: 404, body: 'not found' })
65
85
  Excon.stub({ method: :get, path: '/latest/meta-data/iam/security-credentials/' }, { status: 404, body: 'not bound' })
66
86
  Excon.stub({ method: :get, path: '/latest/meta-data/placement/availability-zone/' }, { status: 400, body: 'not found' })
67
87
  returns(default_credentials) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.2
4
+ version: 3.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-24 00:00:00.000000000 Z
12
+ date: 2020-08-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -143,9 +143,7 @@ description: |-
143
143
  email:
144
144
  - me@joshualane.com
145
145
  - geemus@gmail.com
146
- executables:
147
- - console
148
- - setup
146
+ executables: []
149
147
  extensions: []
150
148
  extra_rdoc_files: []
151
149
  files: