kitchen-ec2 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +11 -0
- data/lib/kitchen/driver/ec2.rb +18 -9
- data/lib/kitchen/driver/ec2_version.rb +1 -1
- data/spec/kitchen/driver/ec2_spec.rb +76 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4c3c1651c87e7efe1021c8c7f42eea85b1bd50
|
4
|
+
data.tar.gz: 4f9beb18601e10e003b579da74f2920061040543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a8da55831097f198d69c3de6c0474cc9a85aedbaf15b96180a198c9ce3455ef5ce8081f75aeecb80a211ca0d2002118f39a1e5b23ae83d3f41aa692d7adcf01
|
7
|
+
data.tar.gz: 5aa911a240efb08e0fce0d17adab20a7851fd8ec4ec1718459739e8ad5a0a264f10e7c4267b1fb0cdbb231d3973aec9b7067570f5364ed3074c7273900b4e8fc
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.9.4 / 2015-06-05
|
2
|
+
|
3
|
+
### Bug Fixes
|
4
|
+
|
5
|
+
* Pull Request [#151][]: Fixing a regression where we are fetching the hostname from an old server object even after waiting for it to update, causing us to get back an invalid hostname
|
6
|
+
|
7
|
+
### New Features
|
8
|
+
|
9
|
+
### Improvements
|
10
|
+
|
1
11
|
## 0.9.4 / 2015-06-03
|
2
12
|
|
3
13
|
### Bug Fixes
|
@@ -165,6 +175,7 @@
|
|
165
175
|
[#131]: https://github.com/test-kitchen/kitchen-ec2/issues/131
|
166
176
|
[#140]: https://github.com/test-kitchen/kitchen-ec2/issues/140
|
167
177
|
[#142]: https://github.com/test-kitchen/kitchen-ec2/issues/142
|
178
|
+
[#151]: https://github.com/test-kitchen/kitchen-ec2/issues/151
|
168
179
|
[@Atalanta]: https://github.com/Atalanta
|
169
180
|
[@Igorshp]: https://github.com/Igorshp
|
170
181
|
[@JamesAwesome]: https://github.com/JamesAwesome
|
data/lib/kitchen/driver/ec2.rb
CHANGED
@@ -201,7 +201,6 @@ module Kitchen
|
|
201
201
|
wait_until_ready(server, state)
|
202
202
|
|
203
203
|
info("EC2 instance <#{state[:server_id]}> ready.")
|
204
|
-
state[:hostname] = hostname(server)
|
205
204
|
instance.transport.connection(state).wait_until_ready
|
206
205
|
create_ec2_json(state)
|
207
206
|
debug("ec2:create '#{state[:hostname]}'")
|
@@ -317,24 +316,34 @@ module Kitchen
|
|
317
316
|
end
|
318
317
|
|
319
318
|
def wait_until_ready(server, state)
|
319
|
+
wait_with_destroy(server, state, "to become ready") do |aws_instance|
|
320
|
+
hostname = hostname(aws_instance, config[:interface])
|
321
|
+
# We aggressively store the hostname so if the process fails here
|
322
|
+
# we still have it, even if it will change later
|
323
|
+
state[:hostname] = hostname
|
324
|
+
# Euca instances often report ready before they have an IP
|
325
|
+
aws_instance.exists? &&
|
326
|
+
aws_instance.state.name == "running" &&
|
327
|
+
hostname != "0.0.0.0"
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
def wait_with_destroy(server, state, status_msg, &block)
|
320
332
|
wait_log = proc do |attempts|
|
321
333
|
c = attempts * config[:retryable_sleep]
|
322
334
|
t = config[:retryable_tries] * config[:retryable_sleep]
|
323
|
-
info "Waited #{c}/#{t}s for instance <#{state[:server_id]}>
|
335
|
+
info "Waited #{c}/#{t}s for instance <#{state[:server_id]}> #{status_msg}."
|
324
336
|
end
|
325
337
|
begin
|
326
338
|
server.wait_until(
|
327
339
|
:max_attempts => config[:retryable_tries],
|
328
340
|
:delay => config[:retryable_sleep],
|
329
|
-
:before_attempt => wait_log
|
330
|
-
|
331
|
-
|
332
|
-
# Euca instances often report ready before they have an IP
|
333
|
-
s.exists? && s.state.name == "running" && !hostname.nil? && hostname != "0.0.0.0"
|
334
|
-
end
|
341
|
+
:before_attempt => wait_log,
|
342
|
+
&block
|
343
|
+
)
|
335
344
|
rescue ::Aws::Waiters::Errors::WaiterFailed
|
336
345
|
error("Ran out of time waiting for the server with id [#{state[:server_id]}]" \
|
337
|
-
"
|
346
|
+
" #{status_msg}, attempting to destroy it")
|
338
347
|
destroy(state)
|
339
348
|
raise
|
340
349
|
end
|
@@ -38,6 +38,7 @@ describe Kitchen::Driver::Ec2 do
|
|
38
38
|
let(:actual_client) { double("actual ec2 client") }
|
39
39
|
let(:client) { double(Kitchen::Driver::Aws::Client, :client => actual_client) }
|
40
40
|
let(:server) { double("aws server object") }
|
41
|
+
let(:state) { {} }
|
41
42
|
|
42
43
|
let(:driver) { Kitchen::Driver::Ec2.new(config) }
|
43
44
|
|
@@ -223,9 +224,83 @@ describe Kitchen::Driver::Ec2 do
|
|
223
224
|
end
|
224
225
|
end
|
225
226
|
|
227
|
+
describe "#wait_until_ready" do
|
228
|
+
let(:hostname) { "0.0.0.0" }
|
229
|
+
let(:msg) { "to become ready" }
|
230
|
+
let(:aws_instance) { double("aws instance") }
|
231
|
+
|
232
|
+
before do
|
233
|
+
config[:interface] = :i
|
234
|
+
expect(driver).to receive(:wait_with_destroy).with(server, state, msg).and_yield(aws_instance)
|
235
|
+
expect(driver).to receive(:hostname).with(aws_instance, :i).and_return(hostname)
|
236
|
+
end
|
237
|
+
|
238
|
+
after do
|
239
|
+
expect(state[:hostname]).to eq(hostname)
|
240
|
+
end
|
241
|
+
|
242
|
+
it "first checks instance existence" do
|
243
|
+
expect(aws_instance).to receive(:exists?).and_return(false)
|
244
|
+
expect(driver.wait_until_ready(server, state)).to eq(false)
|
245
|
+
end
|
246
|
+
|
247
|
+
it "second checks instance state" do
|
248
|
+
expect(aws_instance).to receive(:exists?).and_return(true)
|
249
|
+
expect(aws_instance).to receive_message_chain("state.name").and_return("nope")
|
250
|
+
expect(driver.wait_until_ready(server, state)).to eq(false)
|
251
|
+
end
|
252
|
+
|
253
|
+
it "third checks hostname" do
|
254
|
+
expect(aws_instance).to receive(:exists?).and_return(true)
|
255
|
+
expect(aws_instance).to receive_message_chain("state.name").and_return("running")
|
256
|
+
expect(driver.wait_until_ready(server, state)).to eq(false)
|
257
|
+
end
|
258
|
+
|
259
|
+
context "when it exists, has a valid state and a valid hostname" do
|
260
|
+
let(:hostname) { "host" }
|
261
|
+
|
262
|
+
it "returns true" do
|
263
|
+
expect(aws_instance).to receive(:exists?).and_return(true)
|
264
|
+
expect(aws_instance).to receive_message_chain("state.name").and_return("running")
|
265
|
+
expect(driver.wait_until_ready(server, state)).to eq(true)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
describe "#wait_with_destroy" do
|
271
|
+
let(:tries) { 111 }
|
272
|
+
let(:sleep) { 222 }
|
273
|
+
let(:msg) { "msg" }
|
274
|
+
given_block = lambda do; end
|
275
|
+
|
276
|
+
before do
|
277
|
+
config[:retryable_sleep] = sleep
|
278
|
+
config[:retryable_tries] = tries
|
279
|
+
end
|
280
|
+
|
281
|
+
it "calls wait and exits successfully if there is no error" do
|
282
|
+
expect(server).to receive(:wait_until) do |args, &block|
|
283
|
+
expect(args[:max_attempts]).to eq(tries)
|
284
|
+
expect(args[:delay]).to eq(sleep)
|
285
|
+
expect(block).to eq(given_block)
|
286
|
+
expect(driver).to receive(:info).with(/#{msg}/)
|
287
|
+
args[:before_attempt].call(0)
|
288
|
+
end
|
289
|
+
driver.wait_with_destroy(server, state, msg, &given_block)
|
290
|
+
end
|
291
|
+
|
292
|
+
it "attempts to destroy the instance if the waiter fails" do
|
293
|
+
expect(server).to receive(:wait_until).and_raise(::Aws::Waiters::Errors::WaiterFailed)
|
294
|
+
expect(driver).to receive(:destroy).with(state)
|
295
|
+
expect(driver).to receive(:error).with(/#{msg}/)
|
296
|
+
expect {
|
297
|
+
driver.wait_with_destroy(server, state, msg, &given_block)
|
298
|
+
}.to raise_error(::Aws::Waiters::Errors::WaiterFailed)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
226
302
|
describe "#destroy" do
|
227
303
|
context "when state[:server_id] is nil" do
|
228
|
-
let(:state) { {} }
|
229
304
|
it "returns nil" do
|
230
305
|
expect(driver.destroy(state)).to eq(nil)
|
231
306
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-ec2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|