kitchen-ec2 0.10.0 → 1.0.0.beta.1
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 +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
|