Skip to content

Commit f80d770

Browse files
author
Seth Thomas
authored
Merge pull request #235 from jcastillocano/master
Adding support for tenancy parameter in placement config.
2 parents 01d7c87 + 20e6160 commit f80d770

File tree

4 files changed

+147
-0
lines changed

4 files changed

+147
-0
lines changed

Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ gem "test-kitchen"
66
gem "winrm-transport"
77
gem "winrm-fs"
88
gem "activesupport", "~> 4.0"
9+
gem "faraday-http-cache", "~> 1.3"
910

1011
group :test do
1112
gem "rake"

lib/kitchen/driver/aws/instance_generator.rb

+23
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ def ec2_instance_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5656
end
5757
i[:placement] = { :availability_zone => availability_zone.downcase }
5858
end
59+
tenancy = config[:tenancy]
60+
if tenancy && %w[default dedicated].include?(tenancy)
61+
if i.key?(:placement)
62+
i[:placement][:tenancy] = tenancy
63+
else
64+
i[:placement] = { :tenancy => tenancy }
65+
end
66+
end
5967
unless config[:block_device_mappings].nil? || config[:block_device_mappings].empty?
6068
i[:block_device_mappings] = config[:block_device_mappings]
6169
end
@@ -84,6 +92,21 @@ def ec2_instance_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
8492
i[:network_interfaces][0][:groups] = i.delete(:security_group_ids)
8593
end
8694
end
95+
availability_zone = config[:availability_zone]
96+
if availability_zone
97+
if availability_zone =~ /^[a-z]$/i
98+
availability_zone = "#{config[:region]}#{availability_zone}"
99+
end
100+
i[:placement] = { :availability_zone => availability_zone.downcase }
101+
end
102+
tenancy = config[:tenancy]
103+
if tenancy && %w[default dedicated].include?(tenancy)
104+
if i.key?(:placement)
105+
i[:placement][:tenancy] = tenancy
106+
else
107+
i[:placement] = { :tenancy => tenancy }
108+
end
109+
end
87110
unless config[:instance_initiated_shutdown_behavior].nil? ||
88111
config[:instance_initiated_shutdown_behavior].empty?
89112
i[:instance_initiated_shutdown_behavior] = config[:instance_initiated_shutdown_behavior]

lib/kitchen/driver/ec2.rb

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class Ec2 < Kitchen::Driver::Base # rubocop:disable Metrics/ClassLength
8181
default_config :interface, nil
8282
default_config :http_proxy, ENV["HTTPS_PROXY"] || ENV["HTTP_PROXY"]
8383
default_config :retry_limit, 3
84+
default_config :tenancy, "default"
8485
default_config :instance_initiated_shutdown_behavior, nil
8586

8687
default_config :assume_role_arn, nil

spec/kitchen/driver/ec2/instance_generator_spec.rb

+122
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,128 @@
200200
end
201201
end
202202

203+
context "when availability_zone and tenancy are provided" do
204+
let(:config) do
205+
{
206+
:region => "eu-east-1",
207+
:availability_zone => "c",
208+
:tenancy => "dedicated"
209+
}
210+
end
211+
it "adds the region to it in the instance data" do
212+
expect(generator.ec2_instance_data).to eq(
213+
:instance_type => nil,
214+
:ebs_optimized => nil,
215+
:image_id => nil,
216+
:key_name => nil,
217+
:subnet_id => nil,
218+
:private_ip_address => nil,
219+
:placement => { :availability_zone => "eu-east-1c",
220+
:tenancy => "dedicated" }
221+
)
222+
end
223+
end
224+
225+
context "when tenancy is provided but availability_zone isn't" do
226+
let(:config) do
227+
{
228+
:region => "eu-east-1",
229+
:tenancy => "default"
230+
}
231+
end
232+
it "is not added to the instance data" do
233+
expect(generator.ec2_instance_data).to eq(
234+
:instance_type => nil,
235+
:ebs_optimized => nil,
236+
:image_id => nil,
237+
:key_name => nil,
238+
:subnet_id => nil,
239+
:private_ip_address => nil,
240+
:placement => { :tenancy => "default" }
241+
)
242+
end
243+
end
244+
245+
context "when tenancy is not supported" do
246+
let(:config) do
247+
{
248+
:region => "eu-east-1",
249+
:tenancy => "ephemeral"
250+
}
251+
end
252+
it "is not added to the instance data" do
253+
expect(generator.ec2_instance_data).to eq(
254+
:instance_type => nil,
255+
:ebs_optimized => nil,
256+
:image_id => nil,
257+
:key_name => nil,
258+
:subnet_id => nil,
259+
:private_ip_address => nil
260+
)
261+
end
262+
end
263+
264+
context "when availability_zone and tenancy are provided" do
265+
let(:config) do
266+
{
267+
:region => "eu-east-1",
268+
:availability_zone => "c",
269+
:tenancy => "dedicated"
270+
}
271+
end
272+
it "adds the region to it in the instance data" do
273+
expect(generator.ec2_instance_data).to eq(
274+
:instance_type => nil,
275+
:ebs_optimized => nil,
276+
:image_id => nil,
277+
:key_name => nil,
278+
:subnet_id => nil,
279+
:private_ip_address => nil,
280+
:placement => { :availability_zone => "eu-east-1c",
281+
:tenancy => "dedicated" }
282+
)
283+
end
284+
end
285+
286+
context "when tenancy is provided but availability_zone isn't" do
287+
let(:config) do
288+
{
289+
:region => "eu-east-1",
290+
:tenancy => "default"
291+
}
292+
end
293+
it "is not added to the instance data" do
294+
expect(generator.ec2_instance_data).to eq(
295+
:instance_type => nil,
296+
:ebs_optimized => nil,
297+
:image_id => nil,
298+
:key_name => nil,
299+
:subnet_id => nil,
300+
:private_ip_address => nil,
301+
:placement => { :tenancy => "default" }
302+
)
303+
end
304+
end
305+
306+
context "when tenancy is not supported" do
307+
let(:config) do
308+
{
309+
:region => "eu-east-1",
310+
:tenancy => "ephemeral"
311+
}
312+
end
313+
it "is not added to the instance data" do
314+
expect(generator.ec2_instance_data).to eq(
315+
:instance_type => nil,
316+
:ebs_optimized => nil,
317+
:image_id => nil,
318+
:key_name => nil,
319+
:subnet_id => nil,
320+
:private_ip_address => nil
321+
)
322+
end
323+
end
324+
203325
context "when subnet_id is provided" do
204326
let(:config) do
205327
{

0 commit comments

Comments
 (0)