kitchen-ec2 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cane +1 -1
- data/CHANGELOG.md +13 -2
- data/lib/kitchen/driver/ec2.rb +5 -0
- data/lib/kitchen/driver/ec2_version.rb +1 -1
- data/spec/kitchen/driver/ec2_spec.rb +94 -0
- 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: 21b2743d4aad92b8fb4f5d02d3619c0b1b83c6eb
|
4
|
+
data.tar.gz: 6dc57776d894c34fad0da0701e4c6d4a59076698
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3358dc9d1df3053b5f6efaf4f4ec2673f46eb3b81a1b81d080a22f92203bf851abe1133429a16dd5d78adf0ca1cf5d62298c632b011b58d1ce3d9651e4dcc950
|
7
|
+
data.tar.gz: 430c0e2766480db4d1053afa73f2b609d9379e283d139fe2e6a36cfbf9f21e386ab0853ec26b417ec5fcfda6e640775b0b31a5af5c80c6f58961d4457498bd62
|
data/.cane
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
--abc-max
|
1
|
+
--abc-max 40
|
2
2
|
--style-measure 100
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
-
## 0.9.
|
1
|
+
## 0.9.3 / 2015-05-29
|
2
2
|
|
3
3
|
### Bug Fixes
|
4
4
|
|
5
|
-
* Pull Request [#
|
5
|
+
* Pull Request [#140][]: Wait for an instance to pass existence check before tagging it
|
6
|
+
|
7
|
+
### New Features
|
8
|
+
|
9
|
+
### Improvements
|
10
|
+
|
11
|
+
## 0.9.2 / 2015-05-27
|
12
|
+
|
13
|
+
### Bug Fixes
|
14
|
+
|
15
|
+
* Pull Request [#131][]: Adding back support for a proxy via config `http_proxy` which defaults to `ENV[‘HTTPS_PROXY’] || ENV['HTTP_PROXY']`
|
6
16
|
* Pull Request [#128][]:
|
7
17
|
* Fixes [#121][]: Fixing error `Network interfaces and an instance-level security groups may not be specified on the same request`
|
8
18
|
* Fixes [#127][]: User Data content should be base64 encoded when passed to aws sdk
|
@@ -143,6 +153,7 @@
|
|
143
153
|
[#127]: https://github.com/test-kitchen/kitchen-ec2/issues/127
|
144
154
|
[#128]: https://github.com/test-kitchen/kitchen-ec2/issues/128
|
145
155
|
[#131]: https://github.com/test-kitchen/kitchen-ec2/issues/131
|
156
|
+
[#140]: https://github.com/test-kitchen/kitchen-ec2/issues/140
|
146
157
|
[@Atalanta]: https://github.com/Atalanta
|
147
158
|
[@Igorshp]: https://github.com/Igorshp
|
148
159
|
[@JamesAwesome]: https://github.com/JamesAwesome
|
data/lib/kitchen/driver/ec2.rb
CHANGED
@@ -188,6 +188,10 @@ module Kitchen
|
|
188
188
|
server = submit_server
|
189
189
|
end
|
190
190
|
info("Instance <#{server.id}> requested.")
|
191
|
+
ec2.client.wait_until(
|
192
|
+
:instance_exists,
|
193
|
+
:instance_ids => [server.id]
|
194
|
+
)
|
191
195
|
tag_server(server)
|
192
196
|
|
193
197
|
state[:server_id] = server.id
|
@@ -234,6 +238,7 @@ module Kitchen
|
|
234
238
|
ec2.client.cancel_spot_instance_requests(
|
235
239
|
:spot_instance_request_ids => [state[:spot_request_id]]
|
236
240
|
)
|
241
|
+
state.delete(:spot_request_id)
|
237
242
|
end
|
238
243
|
info("EC2 instance <#{state[:server_id]}> destroyed.")
|
239
244
|
state.delete(:server_id)
|
@@ -32,6 +32,12 @@ describe Kitchen::Driver::Ec2 do
|
|
32
32
|
let(:provisioner) { Kitchen::Provisioner::Dummy.new }
|
33
33
|
let(:transport) { Kitchen::Transport::Dummy.new }
|
34
34
|
let(:state_file) { double("state_file") }
|
35
|
+
let(:generator) { instance_double(Kitchen::Driver::Aws::InstanceGenerator) }
|
36
|
+
# There is too much name overlap I let creep in - my `client` is actually
|
37
|
+
# a wrapper around the actual ec2 client
|
38
|
+
let(:actual_client) { double("actual ec2 client") }
|
39
|
+
let(:client) { double(Kitchen::Driver::Aws::Client, :client => actual_client) }
|
40
|
+
let(:server) { double("aws server object") }
|
35
41
|
|
36
42
|
let(:driver) { Kitchen::Driver::Ec2.new(config) }
|
37
43
|
|
@@ -48,6 +54,11 @@ describe Kitchen::Driver::Ec2 do
|
|
48
54
|
)
|
49
55
|
end
|
50
56
|
|
57
|
+
before do
|
58
|
+
allow(Kitchen::Driver::Aws::InstanceGenerator).to receive(:new).and_return(generator)
|
59
|
+
allow(Kitchen::Driver::Aws::Client).to receive(:new).and_return(client)
|
60
|
+
end
|
61
|
+
|
51
62
|
it "driver api_version is 2" do
|
52
63
|
expect(driver.diagnose_plugin[:api_version]).to eq(2)
|
53
64
|
end
|
@@ -159,4 +170,87 @@ describe Kitchen::Driver::Ec2 do
|
|
159
170
|
end
|
160
171
|
end
|
161
172
|
|
173
|
+
describe "#submit_server" do
|
174
|
+
it "submits the server request" do
|
175
|
+
expect(generator).to receive(:ec2_instance_data).and_return({})
|
176
|
+
expect(client).to receive(:create_instance).with(:min_count => 1, :max_count => 1)
|
177
|
+
driver.submit_server
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe "#submit_spot" do
|
182
|
+
let(:state) { {} }
|
183
|
+
let(:response) {
|
184
|
+
{ :spot_instance_requests => [{ :spot_instance_request_id => "id" }] }
|
185
|
+
}
|
186
|
+
|
187
|
+
it "submits the server request" do
|
188
|
+
expect(generator).to receive(:ec2_instance_data).and_return({})
|
189
|
+
expect(actual_client).to receive(:request_spot_instances).with(
|
190
|
+
:spot_price => "", :launch_specification => {}
|
191
|
+
).and_return(response)
|
192
|
+
expect(actual_client).to receive(:wait_until)
|
193
|
+
expect(client).to receive(:get_instance_from_spot_request).with("id")
|
194
|
+
driver.submit_spot(state)
|
195
|
+
expect(state).to eq(:spot_request_id => "id")
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "#tag_server" do
|
200
|
+
it "tags the server" do
|
201
|
+
config[:tags] = { :key1 => :value1, :key2 => :value2 }
|
202
|
+
expect(server).to receive(:create_tags).with(
|
203
|
+
:tags => [
|
204
|
+
{ :key => :key1, :value => :value1 },
|
205
|
+
{ :key => :key2, :value => :value2 }
|
206
|
+
]
|
207
|
+
)
|
208
|
+
driver.tag_server(server)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe "#destroy" do
|
213
|
+
context "when state[:server_id] is nil" do
|
214
|
+
let(:state) { {} }
|
215
|
+
it "returns nil" do
|
216
|
+
expect(driver.destroy(state)).to eq(nil)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
context "when state has a normal server_id" do
|
221
|
+
let(:state) { { :server_id => "id", :hostname => "name" } }
|
222
|
+
|
223
|
+
context "the server is already destroyed" do
|
224
|
+
it "does nothing" do
|
225
|
+
expect(client).to receive(:get_instance).with("id").and_return nil
|
226
|
+
driver.destroy(state)
|
227
|
+
expect(state).to eq({})
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
it "destroys the server" do
|
232
|
+
expect(client).to receive(:get_instance).with("id").and_return(server)
|
233
|
+
expect(instance).to receive_message_chain("transport.connection.close")
|
234
|
+
expect(server).to receive(:terminate)
|
235
|
+
driver.destroy(state)
|
236
|
+
expect(state).to eq({})
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context "when state has a spot request" do
|
241
|
+
let(:state) { { :server_id => "id", :hostname => "name", :spot_request_id => "spot" } }
|
242
|
+
|
243
|
+
it "destroys the server" do
|
244
|
+
expect(client).to receive(:get_instance).with("id").and_return(server)
|
245
|
+
expect(instance).to receive_message_chain("transport.connection.close")
|
246
|
+
expect(server).to receive(:terminate)
|
247
|
+
expect(actual_client).to receive(:cancel_spot_instance_requests).with(
|
248
|
+
:spot_instance_request_ids => ["spot"]
|
249
|
+
)
|
250
|
+
driver.destroy(state)
|
251
|
+
expect(state).to eq({})
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
162
256
|
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.3
|
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-05-
|
11
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|