kitchen-ec2 0.10.0 → 1.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +5 -1
- data/CHANGELOG.md +1 -1
- data/Gemfile +4 -1
- data/README.md +218 -234
- data/kitchen-ec2.gemspec +1 -0
- data/lib/kitchen/driver/aws/client.rb +3 -8
- data/lib/kitchen/driver/aws/instance_generator.rb +11 -65
- data/lib/kitchen/driver/aws/standard_platform.rb +229 -0
- data/lib/kitchen/driver/aws/standard_platform/centos.rb +46 -0
- data/lib/kitchen/driver/aws/standard_platform/debian.rb +50 -0
- data/lib/kitchen/driver/aws/standard_platform/fedora.rb +34 -0
- data/lib/kitchen/driver/aws/standard_platform/freebsd.rb +37 -0
- data/lib/kitchen/driver/aws/standard_platform/rhel.rb +40 -0
- data/lib/kitchen/driver/aws/standard_platform/ubuntu.rb +34 -0
- data/lib/kitchen/driver/aws/standard_platform/windows.rb +138 -0
- data/lib/kitchen/driver/ec2.rb +171 -117
- data/lib/kitchen/driver/ec2_version.rb +1 -1
- data/spec/kitchen/driver/ec2/client_spec.rb +3 -17
- data/spec/kitchen/driver/ec2/image_selection_spec.rb +350 -0
- data/spec/kitchen/driver/ec2/instance_generator_spec.rb +94 -188
- data/spec/kitchen/driver/ec2_spec.rb +5 -29
- metadata +29 -6
- data/data/amis.json +0 -118
@@ -57,22 +57,6 @@ describe Kitchen::Driver::Aws::Client do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
it "loads deprecated credentials fourth to last" do
|
61
|
-
expect(shared).to_not receive(:loadable?)
|
62
|
-
ClimateControl.modify(
|
63
|
-
"AWS_ACCESS_KEY" => "key2",
|
64
|
-
"AWS_SECRET_KEY" => "value2",
|
65
|
-
"AWS_TOKEN" => "token2"
|
66
|
-
) do
|
67
|
-
expect(Kitchen::Driver::Aws::Client.get_credentials("profile", nil, nil, nil)).to \
|
68
|
-
be_a(Aws::Credentials).and have_attributes(
|
69
|
-
:access_key_id => "key2",
|
70
|
-
:secret_access_key => "value2",
|
71
|
-
:session_token => "token2"
|
72
|
-
)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
60
|
it "loads provided credentials first" do
|
77
61
|
expect(shared).to_not receive(:loadable?)
|
78
62
|
expect(Kitchen::Driver::Aws::Client.get_credentials("profile", "key3", "value3", nil)).to \
|
@@ -115,7 +99,8 @@ describe Kitchen::Driver::Aws::Client do
|
|
115
99
|
"access_key_id",
|
116
100
|
"secret_access_key",
|
117
101
|
"session_token",
|
118
|
-
"http_proxy"
|
102
|
+
"http_proxy",
|
103
|
+
999
|
119
104
|
)
|
120
105
|
}
|
121
106
|
let(:creds) { double("creds") }
|
@@ -125,6 +110,7 @@ describe Kitchen::Driver::Aws::Client do
|
|
125
110
|
expect(Aws.config[:region]).to eq("us-west-1")
|
126
111
|
expect(Aws.config[:credentials]).to eq(creds)
|
127
112
|
expect(Aws.config[:http_proxy]).to eq("http_proxy")
|
113
|
+
expect(Aws.config[:retry_limit]).to eq(999)
|
128
114
|
end
|
129
115
|
end
|
130
116
|
end
|
@@ -0,0 +1,350 @@
|
|
1
|
+
require "kitchen/driver/ec2"
|
2
|
+
require "kitchen/provisioner/dummy"
|
3
|
+
require "kitchen/transport/dummy"
|
4
|
+
require "kitchen/verifier/dummy"
|
5
|
+
|
6
|
+
describe "Default images for various platforms" do
|
7
|
+
|
8
|
+
class FakeImage
|
9
|
+
def self.next_ami
|
10
|
+
@n ||= 0
|
11
|
+
@n += 1
|
12
|
+
[sprintf("ami-%08x", @n), Time.now + @n]
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(name: "foo")
|
16
|
+
@id, @creation_date = FakeImage.next_ami
|
17
|
+
@name = name
|
18
|
+
@creation_date = @creation_date.strftime("%F %T")
|
19
|
+
@architecture = :x86_64
|
20
|
+
@volume_type = "gp2"
|
21
|
+
@root_device_type = "ebs"
|
22
|
+
@virtualization_type = "hvm"
|
23
|
+
@root_device_name = "root"
|
24
|
+
@device_name = "root"
|
25
|
+
end
|
26
|
+
attr_reader :id
|
27
|
+
attr_reader :name
|
28
|
+
attr_reader :creation_date
|
29
|
+
attr_reader :architecture
|
30
|
+
attr_reader :volume_type
|
31
|
+
attr_reader :root_device_type
|
32
|
+
attr_reader :virtualization_type
|
33
|
+
attr_reader :root_device_name
|
34
|
+
attr_reader :device_name
|
35
|
+
|
36
|
+
def block_device_mappings
|
37
|
+
[self]
|
38
|
+
end
|
39
|
+
|
40
|
+
def ebs
|
41
|
+
self
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:driver) do
|
46
|
+
Kitchen::Driver::Ec2.new(:region => "us-west-2", :aws_ssh_key_id => "foo", **config)
|
47
|
+
end
|
48
|
+
let(:config) { {} }
|
49
|
+
def new_instance(platform_name: "blarghle")
|
50
|
+
Kitchen::Instance.new(
|
51
|
+
:driver => driver,
|
52
|
+
:suite => Kitchen::Suite.new(:name => "suite-name"),
|
53
|
+
:platform => Kitchen::Platform.new(:name => platform_name),
|
54
|
+
:provisioner => Kitchen::Provisioner::Dummy.new,
|
55
|
+
:transport => Kitchen::Transport::Dummy.new,
|
56
|
+
:verifier => Kitchen::Verifier::Dummy.new,
|
57
|
+
:state_file => Kitchen::StateFile.new("/nonexistent", "suite-name-#{platform_name}")
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
PLATFORM_SEARCHES = {
|
62
|
+
"centos" => [
|
63
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
64
|
+
{ :name => "name", :values => ["CentOS Linux *", "CentOS-*-GA-*"] }
|
65
|
+
],
|
66
|
+
"centos-7" => [
|
67
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
68
|
+
{ :name => "name", :values => ["CentOS Linux 7*", "CentOS-7*-GA-*"] }
|
69
|
+
],
|
70
|
+
"centos-6" => [
|
71
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
72
|
+
{ :name => "name", :values => ["CentOS Linux 6*", "CentOS-6*-GA-*"] }
|
73
|
+
],
|
74
|
+
"centos-6.3" => [
|
75
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
76
|
+
{ :name => "name", :values => ["CentOS Linux 6.3*", "CentOS-6.3*-GA-*"] }
|
77
|
+
],
|
78
|
+
"centos-x86_64" => [
|
79
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
80
|
+
{ :name => "name", :values => ["CentOS Linux *", "CentOS-*-GA-*"] },
|
81
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
82
|
+
],
|
83
|
+
"centos-6.3-x86_64" => [
|
84
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
85
|
+
{ :name => "name", :values => ["CentOS Linux 6.3*", "CentOS-6.3*-GA-*"] },
|
86
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
87
|
+
],
|
88
|
+
"centos-7-x86_64" => [
|
89
|
+
{ :name => "owner-alias", :values => %w[aws-marketplace] },
|
90
|
+
{ :name => "name", :values => ["CentOS Linux 7*", "CentOS-7*-GA-*"] },
|
91
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
92
|
+
],
|
93
|
+
|
94
|
+
"debian" => [
|
95
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
96
|
+
{ :name => "name", :values => %w[debian-jessie-*] }
|
97
|
+
],
|
98
|
+
"debian-8" => [
|
99
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
100
|
+
{ :name => "name", :values => %w[debian-jessie-*] }
|
101
|
+
],
|
102
|
+
"debian-7" => [
|
103
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
104
|
+
{ :name => "name", :values => %w[debian-wheezy-*] }
|
105
|
+
],
|
106
|
+
"debian-6" => [
|
107
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
108
|
+
{ :name => "name", :values => %w[debian-squeeze-*] }
|
109
|
+
],
|
110
|
+
"debian-x86_64" => [
|
111
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
112
|
+
{ :name => "name", :values => %w[debian-jessie-*] },
|
113
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
114
|
+
],
|
115
|
+
"debian-6-x86_64" => [
|
116
|
+
{ :name => "owner-id", :values => %w[379101102735] },
|
117
|
+
{ :name => "name", :values => %w[debian-squeeze-*] },
|
118
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
119
|
+
],
|
120
|
+
|
121
|
+
"rhel" => [
|
122
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
123
|
+
{ :name => "name", :values => %w[RHEL-*] }
|
124
|
+
],
|
125
|
+
"rhel-6" => [
|
126
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
127
|
+
{ :name => "name", :values => %w[RHEL-6*] }
|
128
|
+
],
|
129
|
+
"rhel-7.1" => [
|
130
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
131
|
+
{ :name => "name", :values => %w[RHEL-7.1*] }
|
132
|
+
],
|
133
|
+
"rhel-x86_64" => [
|
134
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
135
|
+
{ :name => "name", :values => %w[RHEL-*] },
|
136
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
137
|
+
],
|
138
|
+
"rhel-6-x86_64" => [
|
139
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
140
|
+
{ :name => "name", :values => %w[RHEL-6*] },
|
141
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
142
|
+
],
|
143
|
+
"el" => [
|
144
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
145
|
+
{ :name => "name", :values => %w[RHEL-*] }
|
146
|
+
],
|
147
|
+
"el-6-x86_64" => [
|
148
|
+
{ :name => "owner-id", :values => %w[309956199498] },
|
149
|
+
{ :name => "name", :values => %w[RHEL-6*] },
|
150
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
151
|
+
],
|
152
|
+
|
153
|
+
"fedora" => [
|
154
|
+
{ :name => "owner-id", :values => %w[125523088429] },
|
155
|
+
{ :name => "name", :values => %w[Fedora-Cloud-Base-*] }
|
156
|
+
],
|
157
|
+
"fedora-22" => [
|
158
|
+
{ :name => "owner-id", :values => %w[125523088429] },
|
159
|
+
{ :name => "name", :values => %w[Fedora-Cloud-Base-22-*] }
|
160
|
+
],
|
161
|
+
"fedora-x86_64" => [
|
162
|
+
{ :name => "owner-id", :values => %w[125523088429] },
|
163
|
+
{ :name => "name", :values => %w[Fedora-Cloud-Base-*] },
|
164
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
165
|
+
],
|
166
|
+
"fedora-22-x86_64" => [
|
167
|
+
{ :name => "owner-id", :values => %w[125523088429] },
|
168
|
+
{ :name => "name", :values => %w[Fedora-Cloud-Base-22-*] },
|
169
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
170
|
+
],
|
171
|
+
|
172
|
+
"freebsd" => [
|
173
|
+
{ :name => "owner-id", :values => %w[118940168514] },
|
174
|
+
{ :name => "name", :values => ["FreeBSD *-RELEASE*", "FreeBSD/EC2 *-RELEASE*"] }
|
175
|
+
],
|
176
|
+
"freebsd-10" => [
|
177
|
+
{ :name => "owner-id", :values => %w[118940168514] },
|
178
|
+
{ :name => "name", :values => ["FreeBSD 10*-RELEASE*", "FreeBSD/EC2 10*-RELEASE*"] }
|
179
|
+
],
|
180
|
+
"freebsd-10.1" => [
|
181
|
+
{ :name => "owner-id", :values => %w[118940168514] },
|
182
|
+
{ :name => "name", :values => ["FreeBSD 10.1*-RELEASE*", "FreeBSD/EC2 10.1*-RELEASE*"] }
|
183
|
+
],
|
184
|
+
"freebsd-x86_64" => [
|
185
|
+
{ :name => "owner-id", :values => %w[118940168514] },
|
186
|
+
{ :name => "name", :values => ["FreeBSD *-RELEASE*", "FreeBSD/EC2 *-RELEASE*"] },
|
187
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
188
|
+
],
|
189
|
+
"freebsd-10-x86_64" => [
|
190
|
+
{ :name => "owner-id", :values => %w[118940168514] },
|
191
|
+
{ :name => "name", :values => ["FreeBSD 10*-RELEASE*", "FreeBSD/EC2 10*-RELEASE*"] },
|
192
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
193
|
+
],
|
194
|
+
|
195
|
+
"ubuntu" => [
|
196
|
+
{ :name => "owner-id", :values => %w[099720109477] },
|
197
|
+
{ :name => "name", :values => %w[ubuntu/images/*/ubuntu-*-*] }
|
198
|
+
],
|
199
|
+
"ubuntu-14" => [
|
200
|
+
{ :name => "owner-id", :values => %w[099720109477] },
|
201
|
+
{ :name => "name", :values => %w[ubuntu/images/*/ubuntu-*-14*] }
|
202
|
+
],
|
203
|
+
"ubuntu-12.04" => [
|
204
|
+
{ :name => "owner-id", :values => %w[099720109477] },
|
205
|
+
{ :name => "name", :values => %w[ubuntu/images/*/ubuntu-*-12.04*] }
|
206
|
+
],
|
207
|
+
"ubuntu-x86_64" => [
|
208
|
+
{ :name => "owner-id", :values => %w[099720109477] },
|
209
|
+
{ :name => "name", :values => %w[ubuntu/images/*/ubuntu-*-*] },
|
210
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
211
|
+
],
|
212
|
+
"ubuntu-14-x86_64" => [
|
213
|
+
{ :name => "owner-id", :values => %w[099720109477] },
|
214
|
+
{ :name => "name", :values => %w[ubuntu/images/*/ubuntu-*-14*] },
|
215
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
216
|
+
],
|
217
|
+
|
218
|
+
"windows" => [
|
219
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
220
|
+
{ :name => "name", :values => %w[
|
221
|
+
Windows_Server-*-RTM-English-*-Base-*
|
222
|
+
Windows_Server-*-SP*-English-*-Base-*
|
223
|
+
Windows_Server-*-R*_RTM-English-*-Base-*
|
224
|
+
Windows_Server-*-R*_SP*-English-*-Base-*] }
|
225
|
+
],
|
226
|
+
"windows-2008" => [
|
227
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
228
|
+
{ :name => "name", :values => %w[
|
229
|
+
Windows_Server-2008-RTM-English-*-Base-*
|
230
|
+
Windows_Server-2008-SP*-English-*-Base-*] }
|
231
|
+
],
|
232
|
+
"windows-2012" => [
|
233
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
234
|
+
{ :name => "name", :values => %w[
|
235
|
+
Windows_Server-2012-RTM-English-*-Base-*
|
236
|
+
Windows_Server-2012-SP*-English-*-Base-*] }
|
237
|
+
],
|
238
|
+
"windows-2012r2" => [
|
239
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
240
|
+
{ :name => "name", :values => %w[
|
241
|
+
Windows_Server-2012-R2_RTM-English-*-Base-*
|
242
|
+
Windows_Server-2012-R2_SP*-English-*-Base-*] }
|
243
|
+
],
|
244
|
+
"windows-2012sp1" => [
|
245
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
246
|
+
{ :name => "name", :values => %w[
|
247
|
+
Windows_Server-2012-SP1-English-*-Base-*] }
|
248
|
+
],
|
249
|
+
"windows-2012rtm" => [
|
250
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
251
|
+
{ :name => "name", :values => %w[
|
252
|
+
Windows_Server-2012-RTM-English-*-Base-*] }
|
253
|
+
],
|
254
|
+
"windows-2012r2sp1" => [
|
255
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
256
|
+
{ :name => "name", :values => %w[
|
257
|
+
Windows_Server-2012-R2_SP1-English-*-Base-*] }
|
258
|
+
],
|
259
|
+
"windows-2012r2rtm" => [
|
260
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
261
|
+
{ :name => "name", :values => %w[
|
262
|
+
Windows_Server-2012-R2_RTM-English-*-Base-*] }
|
263
|
+
],
|
264
|
+
"windows-x86_64" => [
|
265
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
266
|
+
{ :name => "name", :values => %w[
|
267
|
+
Windows_Server-*-RTM-English-*-Base-*
|
268
|
+
Windows_Server-*-SP*-English-*-Base-*
|
269
|
+
Windows_Server-*-R*_RTM-English-*-Base-*
|
270
|
+
Windows_Server-*-R*_SP*-English-*-Base-*] },
|
271
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
272
|
+
],
|
273
|
+
"windows-2012r2-x86_64" => [
|
274
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
275
|
+
{ :name => "name", :values => %w[
|
276
|
+
Windows_Server-2012-R2_RTM-English-*-Base-*
|
277
|
+
Windows_Server-2012-R2_SP*-English-*-Base-*] },
|
278
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
279
|
+
],
|
280
|
+
"windows-server" => [
|
281
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
282
|
+
{ :name => "name", :values => %w[
|
283
|
+
Windows_Server-*-RTM-English-*-Base-*
|
284
|
+
Windows_Server-*-SP*-English-*-Base-*
|
285
|
+
Windows_Server-*-R*_RTM-English-*-Base-*
|
286
|
+
Windows_Server-*-R*_SP*-English-*-Base-*] }
|
287
|
+
],
|
288
|
+
"windows-server-2012r2-x86_64" => [
|
289
|
+
{ :name => "owner-alias", :values => %w[amazon] },
|
290
|
+
{ :name => "name", :values => %w[
|
291
|
+
Windows_Server-2012-R2_RTM-English-*-Base-*
|
292
|
+
Windows_Server-2012-R2_SP*-English-*-Base-*] },
|
293
|
+
{ :name => "architecture", :values => %w[x86_64] }
|
294
|
+
]
|
295
|
+
}
|
296
|
+
|
297
|
+
describe "Platform defaults" do
|
298
|
+
PLATFORM_SEARCHES.each do |platform_name, filters|
|
299
|
+
context "when platform is #{platform_name}" do
|
300
|
+
let(:image) { FakeImage.new(:name => platform_name.split("-", 2)[0]) }
|
301
|
+
|
302
|
+
it "searches for #{filters} and uses the resulting image" do
|
303
|
+
expect(driver.ec2.resource).
|
304
|
+
to receive(:images).with(:filters => filters).and_return([image])
|
305
|
+
expect(driver.ec2.resource).
|
306
|
+
to receive(:image).with(image.id).and_return(image)
|
307
|
+
|
308
|
+
instance = new_instance(:platform_name => platform_name)
|
309
|
+
expect(instance.driver.instance_generator.ec2_instance_data[:image_id]).
|
310
|
+
to eq image.id
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
context "when image_search is provided" do
|
317
|
+
let(:image) { FakeImage.new(:name => "ubuntu") }
|
318
|
+
let(:config) { { :image_search => { :name => "SuperImage" } } }
|
319
|
+
|
320
|
+
context "and platform.name is a well known platform name" do
|
321
|
+
it "searches for an image id without using the standard filters" do
|
322
|
+
expect(driver.ec2.resource).
|
323
|
+
to receive(:images).
|
324
|
+
with(:filters => [{ :name => "name", :values => %w[SuperImage] }]).
|
325
|
+
and_return([image])
|
326
|
+
expect(driver.ec2.resource).
|
327
|
+
to receive(:image).with(image.id).and_return(image)
|
328
|
+
|
329
|
+
instance = new_instance(:platform_name => "ubuntu")
|
330
|
+
expect(instance.driver.instance_generator.ec2_instance_data[:image_id]).
|
331
|
+
to eq image.id
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
context "and platform.name is not a well known platform name" do
|
336
|
+
let(:image) { FakeImage.new(:name => "ubuntu") }
|
337
|
+
it "does not search for (or find) an image, and informs the user they need to set image_id" do
|
338
|
+
expect(driver.ec2.resource).
|
339
|
+
to receive(:images).
|
340
|
+
with(:filters => [{ :name => "name", :values => %w[SuperImage] }]).
|
341
|
+
and_return([image])
|
342
|
+
expect(driver.ec2.resource).
|
343
|
+
to receive(:image).with(image.id).and_return(image)
|
344
|
+
|
345
|
+
instance = new_instance(:platform_name => "blarghle")
|
346
|
+
expect(instance.driver.instance_generator.ec2_instance_data[:image_id]).to eq image.id
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
@@ -29,38 +29,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
29
29
|
let(:logger) { instance_double(Logger) }
|
30
30
|
let(:generator) { Kitchen::Driver::Aws::InstanceGenerator.new(config, ec2, logger) }
|
31
31
|
|
32
|
-
describe "#debug_if_root_device" do
|
33
|
-
let(:image_id) { "ami-123456" }
|
34
|
-
let(:config) { { :image_id => image_id } }
|
35
|
-
let(:image) { double("image") }
|
36
|
-
|
37
|
-
before do
|
38
|
-
allow(resource).to receive(:image).with(image_id).and_return(image)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "returns nil when provided nil" do
|
42
|
-
expect(generator.debug_if_root_device(nil)).to eq(nil)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "returns nil when provided empty" do
|
46
|
-
expect(generator.debug_if_root_device([])).to eq(nil)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "returns nil when the image cannot be found" do
|
50
|
-
expect(image).to receive(:root_device_name).and_raise(
|
51
|
-
::Aws::EC2::Errors::InvalidAMIIDNotFound.new({}, "")
|
52
|
-
)
|
53
|
-
expect(logger).to_not receive(:info)
|
54
|
-
expect(generator.debug_if_root_device([{ :device_name => "name" }])).to eq(nil)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "logs an info message when the device mappings are overriding the root device" do
|
58
|
-
expect(image).to receive(:root_device_name).and_return("name")
|
59
|
-
expect(logger).to receive(:info)
|
60
|
-
expect(generator.debug_if_root_device([{ :device_name => "name" }])).to eq(nil)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
32
|
describe "#prepared_user_data" do
|
65
33
|
context "when config[:user_data] is a file" do
|
66
34
|
let(:tmp_file) { Tempfile.new("prepared_user_data_test") }
|
@@ -90,180 +58,121 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
90
58
|
end
|
91
59
|
end
|
92
60
|
|
93
|
-
describe "
|
94
|
-
|
95
|
-
expect(generator).to
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
61
|
+
describe "#ec2_instance_data" do
|
62
|
+
it "returns empty on nil" do
|
63
|
+
expect(generator.ec2_instance_data).to eq(
|
64
|
+
:instance_type => nil,
|
65
|
+
:ebs_optimized => nil,
|
66
|
+
:image_id => nil,
|
67
|
+
:key_name => nil,
|
68
|
+
:subnet_id => nil,
|
69
|
+
:private_ip_address => nil
|
70
|
+
)
|
100
71
|
end
|
101
72
|
|
102
|
-
context "when populated with
|
73
|
+
context "when populated with minimum requirements" do
|
103
74
|
let(:config) do
|
104
|
-
{
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
:ebs_delete_on_termination => false,
|
113
|
-
:ebs_device_name => "/dev/sda2",
|
114
|
-
:ebs_volume_type => "gp2",
|
115
|
-
:ebs_snapshot_id => "id",
|
116
|
-
:ebs_virtual_name => "test"
|
117
|
-
},
|
118
|
-
{
|
119
|
-
:ebs_volume_size => 100,
|
120
|
-
:ebs_delete_on_termination => true,
|
121
|
-
:ebs_device_name => "/dev/sda3",
|
122
|
-
:ebs_volume_type => "io1",
|
123
|
-
:ebs_iops => 100
|
124
|
-
}
|
125
|
-
] }
|
75
|
+
{
|
76
|
+
:instance_type => "micro",
|
77
|
+
:ebs_optimized => true,
|
78
|
+
:image_id => "ami-123",
|
79
|
+
:aws_ssh_key_id => "key",
|
80
|
+
:subnet_id => "s-456",
|
81
|
+
:private_ip_address => "0.0.0.0"
|
82
|
+
}
|
126
83
|
end
|
127
84
|
|
128
|
-
it "returns the
|
129
|
-
expect(generator.
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
:device_name => "/dev/sda1"
|
137
|
-
},
|
138
|
-
{
|
139
|
-
:ebs => {
|
140
|
-
:volume_size => 15,
|
141
|
-
:volume_type => "gp2",
|
142
|
-
:snapshot_id => "id",
|
143
|
-
:delete_on_termination => false
|
144
|
-
},
|
145
|
-
:device_name => "/dev/sda2",
|
146
|
-
:virtual_name => "test"
|
147
|
-
},
|
148
|
-
{
|
149
|
-
:ebs => {
|
150
|
-
:volume_size => 100,
|
151
|
-
:volume_type => "io1",
|
152
|
-
:iops => 100,
|
153
|
-
:delete_on_termination => true
|
154
|
-
},
|
155
|
-
:device_name => "/dev/sda3"
|
156
|
-
}
|
157
|
-
]
|
85
|
+
it "returns the minimum data" do
|
86
|
+
expect(generator.ec2_instance_data).to eq(
|
87
|
+
:instance_type => "micro",
|
88
|
+
:ebs_optimized => true,
|
89
|
+
:image_id => "ami-123",
|
90
|
+
:key_name => "key",
|
91
|
+
:subnet_id => "s-456",
|
92
|
+
:private_ip_address => "0.0.0.0"
|
158
93
|
)
|
159
94
|
end
|
160
|
-
|
161
95
|
end
|
162
96
|
|
163
|
-
context "when
|
97
|
+
context "when passed an empty block_device_mappings" do
|
164
98
|
let(:config) do
|
165
99
|
{
|
166
|
-
:
|
167
|
-
:
|
168
|
-
:
|
169
|
-
:
|
100
|
+
:instance_type => "micro",
|
101
|
+
:ebs_optimized => true,
|
102
|
+
:image_id => "ami-123",
|
103
|
+
:aws_ssh_key_id => "key",
|
104
|
+
:subnet_id => "s-456",
|
105
|
+
:private_ip_address => "0.0.0.0",
|
106
|
+
:block_device_mappings => []
|
170
107
|
}
|
171
108
|
end
|
172
109
|
|
173
|
-
it "
|
174
|
-
expect(generator.
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
},
|
182
|
-
:device_name => "/dev/sda1"
|
183
|
-
}
|
184
|
-
]
|
110
|
+
it "does not return block_device_mappings" do
|
111
|
+
expect(generator.ec2_instance_data).to eq(
|
112
|
+
:instance_type => "micro",
|
113
|
+
:ebs_optimized => true,
|
114
|
+
:image_id => "ami-123",
|
115
|
+
:key_name => "key",
|
116
|
+
:subnet_id => "s-456",
|
117
|
+
:private_ip_address => "0.0.0.0"
|
185
118
|
)
|
186
119
|
end
|
187
120
|
end
|
188
121
|
|
189
|
-
context "when
|
122
|
+
context "when availability_zone is provided as 'eu-west-1c'" do
|
190
123
|
let(:config) do
|
191
124
|
{
|
192
|
-
:
|
193
|
-
:
|
194
|
-
:ebs_device_name => "/dev/sda1",
|
195
|
-
:ebs_volume_type => "gp2",
|
196
|
-
:block_device_mappings => [
|
197
|
-
{
|
198
|
-
:ebs_volume_size => 15,
|
199
|
-
:ebs_delete_on_termination => false,
|
200
|
-
:ebs_device_name => "/dev/sda2",
|
201
|
-
:ebs_volume_type => "gp2",
|
202
|
-
:ebs_snapshot_id => "id",
|
203
|
-
:ebs_virtual_name => "test"
|
204
|
-
}
|
205
|
-
]
|
125
|
+
:region => "eu-east-1",
|
126
|
+
:availability_zone => "eu-west-1c"
|
206
127
|
}
|
207
128
|
end
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
:delete_on_termination => false
|
218
|
-
},
|
219
|
-
:device_name => "/dev/sda2",
|
220
|
-
:virtual_name => "test"
|
221
|
-
}
|
222
|
-
]
|
129
|
+
it "returns that in the instance data" do
|
130
|
+
expect(generator.ec2_instance_data).to eq(
|
131
|
+
:instance_type => nil,
|
132
|
+
:ebs_optimized => nil,
|
133
|
+
:image_id => nil,
|
134
|
+
:key_name => nil,
|
135
|
+
:subnet_id => nil,
|
136
|
+
:private_ip_address => nil,
|
137
|
+
:placement => { :availability_zone => "eu-west-1c" }
|
223
138
|
)
|
224
139
|
end
|
225
140
|
end
|
226
|
-
end
|
227
|
-
|
228
|
-
describe "#ec2_instance_data" do
|
229
|
-
before do
|
230
|
-
expect(generator).to receive(:debug_if_root_device)
|
231
|
-
end
|
232
141
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
142
|
+
context "when availability_zone is provided as 'c'" do
|
143
|
+
let(:config) do
|
144
|
+
{
|
145
|
+
:region => "eu-east-1",
|
146
|
+
:availability_zone => "c"
|
147
|
+
}
|
148
|
+
end
|
149
|
+
it "adds the region to it in the instance data" do
|
150
|
+
expect(generator.ec2_instance_data).to eq(
|
151
|
+
:instance_type => nil,
|
152
|
+
:ebs_optimized => nil,
|
153
|
+
:image_id => nil,
|
154
|
+
:key_name => nil,
|
155
|
+
:subnet_id => nil,
|
156
|
+
:private_ip_address => nil,
|
157
|
+
:placement => { :availability_zone => "eu-east-1c" }
|
158
|
+
)
|
159
|
+
end
|
243
160
|
end
|
244
161
|
|
245
|
-
context "when
|
162
|
+
context "when availability_zone is not provided" do
|
246
163
|
let(:config) do
|
247
164
|
{
|
248
|
-
:
|
249
|
-
:instance_type => "micro",
|
250
|
-
:ebs_optimized => true,
|
251
|
-
:image_id => "ami-123",
|
252
|
-
:aws_ssh_key_id => "key",
|
253
|
-
:subnet_id => "s-456",
|
254
|
-
:private_ip_address => "0.0.0.0"
|
165
|
+
:region => "eu-east-1"
|
255
166
|
}
|
256
167
|
end
|
257
|
-
|
258
|
-
it "returns the minimum data" do
|
168
|
+
it "is not added to the instance data" do
|
259
169
|
expect(generator.ec2_instance_data).to eq(
|
260
|
-
:
|
261
|
-
:
|
262
|
-
:
|
263
|
-
:
|
264
|
-
:
|
265
|
-
:
|
266
|
-
:private_ip_address => "0.0.0.0"
|
170
|
+
:instance_type => nil,
|
171
|
+
:ebs_optimized => nil,
|
172
|
+
:image_id => nil,
|
173
|
+
:key_name => nil,
|
174
|
+
:subnet_id => nil,
|
175
|
+
:private_ip_address => nil
|
267
176
|
)
|
268
177
|
end
|
269
178
|
end
|
@@ -277,7 +186,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
277
186
|
|
278
187
|
it "adds a network_interfaces block" do
|
279
188
|
expect(generator.ec2_instance_data).to eq(
|
280
|
-
:placement => { :availability_zone => nil },
|
281
189
|
:instance_type => nil,
|
282
190
|
:ebs_optimized => nil,
|
283
191
|
:image_id => nil,
|
@@ -297,7 +205,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
297
205
|
|
298
206
|
it "adds a network_interfaces block" do
|
299
207
|
expect(generator.ec2_instance_data).to eq(
|
300
|
-
:placement => { :availability_zone => nil },
|
301
208
|
:instance_type => nil,
|
302
209
|
:ebs_optimized => nil,
|
303
210
|
:image_id => nil,
|
@@ -322,7 +229,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
322
229
|
|
323
230
|
it "adds a network_interfaces block" do
|
324
231
|
expect(generator.ec2_instance_data).to eq(
|
325
|
-
:placement => { :availability_zone => nil },
|
326
232
|
:instance_type => nil,
|
327
233
|
:ebs_optimized => nil,
|
328
234
|
:image_id => nil,
|
@@ -348,7 +254,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
348
254
|
|
349
255
|
it "adds a network_interfaces block" do
|
350
256
|
expect(generator.ec2_instance_data).to eq(
|
351
|
-
:placement => { :availability_zone => nil },
|
352
257
|
:instance_type => nil,
|
353
258
|
:ebs_optimized => nil,
|
354
259
|
:image_id => nil,
|
@@ -388,7 +293,6 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
388
293
|
|
389
294
|
it "adds a network_interfaces block" do
|
390
295
|
expect(generator.ec2_instance_data).to eq(
|
391
|
-
:placement => { :availability_zone => nil },
|
392
296
|
:instance_type => nil,
|
393
297
|
:ebs_optimized => nil,
|
394
298
|
:image_id => nil,
|
@@ -417,12 +321,14 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
417
321
|
:private_ip_address => "0.0.0.0",
|
418
322
|
:block_device_mappings => [
|
419
323
|
{
|
420
|
-
:
|
421
|
-
:
|
422
|
-
:
|
423
|
-
|
424
|
-
|
425
|
-
|
324
|
+
:device_name => "/dev/sda2",
|
325
|
+
:virtual_name => "test",
|
326
|
+
:ebs => {
|
327
|
+
:volume_size => 15,
|
328
|
+
:delete_on_termination => false,
|
329
|
+
:volume_type => "gp2",
|
330
|
+
:snapshot_id => "id"
|
331
|
+
}
|
426
332
|
}
|
427
333
|
],
|
428
334
|
:security_group_ids => ["sg-789"],
|
@@ -434,21 +340,20 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
434
340
|
|
435
341
|
it "returns the maximum data" do
|
436
342
|
expect(generator.ec2_instance_data).to eq(
|
437
|
-
:placement => { :availability_zone => "eu-west-1a" },
|
438
343
|
:instance_type => "micro",
|
439
344
|
:ebs_optimized => true,
|
440
345
|
:image_id => "ami-123",
|
441
346
|
:key_name => "key",
|
442
347
|
:block_device_mappings => [
|
443
348
|
{
|
349
|
+
:device_name => "/dev/sda2",
|
350
|
+
:virtual_name => "test",
|
444
351
|
:ebs => {
|
445
352
|
:volume_size => 15,
|
446
353
|
:delete_on_termination => false,
|
447
354
|
:volume_type => "gp2",
|
448
355
|
:snapshot_id => "id"
|
449
|
-
}
|
450
|
-
:device_name => "/dev/sda2",
|
451
|
-
:virtual_name => "test"
|
356
|
+
}
|
452
357
|
}
|
453
358
|
],
|
454
359
|
:iam_instance_profile => { :name => "iam-123" },
|
@@ -460,6 +365,7 @@ describe Kitchen::Driver::Aws::InstanceGenerator do
|
|
460
365
|
:groups => ["sg-789"],
|
461
366
|
:private_ip_address => "0.0.0.0"
|
462
367
|
}],
|
368
|
+
:placement => { :availability_zone => "eu-west-1a" },
|
463
369
|
:user_data => Base64.encode64("foo")
|
464
370
|
)
|
465
371
|
end
|