kitchen-ec2 3.8.0 → 3.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kitchen/driver/aws/client.rb +7 -0
- data/lib/kitchen/driver/aws/standard_platform/debian.rb +20 -7
- data/lib/kitchen/driver/aws/standard_platform/windows.rb +1 -1
- data/lib/kitchen/driver/aws/standard_platform.rb +2 -2
- data/lib/kitchen/driver/ec2.rb +43 -21
- data/lib/kitchen/driver/ec2_version.rb +1 -1
- metadata +6 -90
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 862c1fd03a10f0ad6125f5ea8f5126bf5660e1b7050f9b550001bc7ab9302d91
|
4
|
+
data.tar.gz: f093d5cf16248830e3ab5aa1567354567bf6568e2a9b8d40d5fe5be4711c915f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dbea4d3b992f1aebb989f8e894e040ed281d877694474a62afe67ceb4335e18e49463b3039b0c7996ad868f6fda843ff30a625fa92fb479912a4f552b591d23
|
7
|
+
data.tar.gz: 2367f3182eae5baee7e1b86785961b8f54c0820f9a7bfe35e7e1f8ef3f3731514eb5384166a1229f064df02246208d46950173611537d4868b1ff2883d5577e8
|
@@ -75,6 +75,13 @@ module Kitchen
|
|
75
75
|
).to_a[0]
|
76
76
|
end
|
77
77
|
|
78
|
+
# check if instance exists, given an id
|
79
|
+
# @param id [String] aws instance id
|
80
|
+
# @return boolean
|
81
|
+
def instance_exists?(id)
|
82
|
+
resource.instance(id).exists?
|
83
|
+
end
|
84
|
+
|
78
85
|
def client
|
79
86
|
@client ||= ::Aws::EC2::Client.new
|
80
87
|
end
|
@@ -23,16 +23,17 @@ module Kitchen
|
|
23
23
|
class Debian < StandardPlatform
|
24
24
|
StandardPlatform.platforms["debian"] = self
|
25
25
|
|
26
|
-
#
|
27
|
-
# and
|
26
|
+
# 12/13 are listed last since we default to the first item in the hash
|
27
|
+
# and 12/13 are not released yet. When they're released move them up
|
28
28
|
DEBIAN_CODENAMES = {
|
29
|
+
11 => "bullseye",
|
29
30
|
10 => "buster",
|
30
31
|
9 => "stretch",
|
31
32
|
8 => "jessie",
|
32
33
|
7 => "wheezy",
|
33
34
|
6 => "squeeze",
|
34
|
-
11 => "bullseye",
|
35
35
|
12 => "bookworm",
|
36
|
+
13 => "trixie",
|
36
37
|
}.freeze
|
37
38
|
|
38
39
|
# default username for this platform's ami
|
@@ -51,11 +52,23 @@ module Kitchen
|
|
51
52
|
end
|
52
53
|
|
53
54
|
def image_search
|
54
|
-
search = {
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
search = {}
|
56
|
+
|
57
|
+
# The Debian AWS owner ID changed for releases 10 and onwards
|
58
|
+
# See https://wiki.debian.org/Amazon/EC2/HowTo/awscli
|
59
|
+
if version.nil?
|
60
|
+
search["owner-id"] = "136693071363"
|
61
|
+
search["name"] = "debian-#{DEBIAN_CODENAMES.keys.first}-*"
|
62
|
+
elsif version.to_i >= 10
|
63
|
+
search["owner-id"] = "136693071363"
|
64
|
+
search["name"] = "debian-#{version.to_i}-*"
|
65
|
+
else
|
66
|
+
search["owner-id"] = "379101102735"
|
67
|
+
search["name"] = "debian-#{codename}-*"
|
68
|
+
end
|
69
|
+
|
58
70
|
search["architecture"] = architecture if architecture
|
71
|
+
|
59
72
|
search
|
60
73
|
end
|
61
74
|
|
@@ -134,7 +134,7 @@ module Kitchen
|
|
134
134
|
|
135
135
|
def windows_name_filter # rubocop:disable Metrics/MethodLength
|
136
136
|
major, revision, service_pack = windows_version_parts
|
137
|
-
if major == 2019 || major == 2016
|
137
|
+
if major == 2022 || major == 2019 || major == 2016
|
138
138
|
"Windows_Server-#{major}-English-Full-Base-*"
|
139
139
|
elsif major == 1709 || major == 1803
|
140
140
|
"Windows_Server-#{major}-English-Core-ContainersLatest-*"
|
@@ -210,10 +210,10 @@ module Kitchen
|
|
210
210
|
images = images.sort_by(&:creation_date).reverse
|
211
211
|
# P5: We prefer x86_64 over i386 (if available)
|
212
212
|
images = prefer(images) { |image| image.architecture == "x86_64" }
|
213
|
-
# P4: We prefer
|
213
|
+
# P4: We prefer (SSD) (if available)
|
214
214
|
images = prefer(images) do |image|
|
215
215
|
image.block_device_mappings.any? do |b|
|
216
|
-
b.device_name == image.root_device_name && b.ebs && b.ebs.volume_type ==
|
216
|
+
b.device_name == image.root_device_name && b.ebs && %w{gp3 gp2}.any? { |t| b.ebs.volume_type == t }
|
217
217
|
end
|
218
218
|
end
|
219
219
|
# P3: We prefer ebs over instance_store (if available)
|
data/lib/kitchen/driver/ec2.rb
CHANGED
@@ -56,7 +56,8 @@ module Kitchen
|
|
56
56
|
default_config :shared_credentials_profile, ENV["AWS_PROFILE"]
|
57
57
|
default_config :availability_zone, nil
|
58
58
|
default_config :instance_type, &:default_instance_type
|
59
|
-
default_config :ebs_optimized,
|
59
|
+
default_config :ebs_optimized, false
|
60
|
+
default_config :delete_on_termination, true
|
60
61
|
default_config :security_group_ids, nil
|
61
62
|
default_config :security_group_filter, nil
|
62
63
|
default_config :security_group_cidr_ip, "0.0.0.0/0"
|
@@ -260,13 +261,14 @@ module Kitchen
|
|
260
261
|
|
261
262
|
info("EC2 instance <#{state[:server_id]}> ready (hostname: #{state[:hostname]}).")
|
262
263
|
instance.transport.connection(state).wait_until_ready
|
264
|
+
attach_network_interface(state) unless config[:elastic_network_interface_id].nil?
|
263
265
|
create_ec2_json(state) if /chef/i.match?(instance.provisioner.name)
|
264
266
|
debug("ec2:create '#{state[:hostname]}'")
|
265
|
-
rescue Exception
|
267
|
+
rescue Exception => e
|
266
268
|
# Clean up any auto-created security groups or keys on the way out.
|
267
269
|
delete_security_group(state)
|
268
270
|
delete_key(state)
|
269
|
-
raise
|
271
|
+
raise "#{e.message} in the specified region #{config[:region]}. Please check this AMI is available in this region."
|
270
272
|
end
|
271
273
|
|
272
274
|
def destroy(state)
|
@@ -283,7 +285,7 @@ module Kitchen
|
|
283
285
|
# If we are going to clean up an automatic security group, we need
|
284
286
|
# to wait for the instance to shut down. This slightly breaks the
|
285
287
|
# subsystem encapsulation, sorry not sorry.
|
286
|
-
if state[:auto_security_group_id] && server
|
288
|
+
if state[:auto_security_group_id] && server && ec2.instance_exists?(state[:server_id])
|
287
289
|
server.wait_until_terminated do |waiter|
|
288
290
|
waiter.max_attempts = config[:retryable_tries]
|
289
291
|
waiter.delay = config[:retryable_sleep]
|
@@ -318,17 +320,14 @@ module Kitchen
|
|
318
320
|
end
|
319
321
|
|
320
322
|
def default_instance_type
|
321
|
-
@instance_type ||=
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
"t1.micro"
|
330
|
-
end
|
331
|
-
end
|
323
|
+
@instance_type ||= if image && image.virtualization_type == "hvm"
|
324
|
+
info("instance_type not specified. Using free tier t2.micro instance ...")
|
325
|
+
"t2.micro"
|
326
|
+
else
|
327
|
+
info("instance_type not specified. Using free tier t1.micro instance since" \
|
328
|
+
" image is paravirtual (pick an hvm image to use the superior t2.micro!) ...")
|
329
|
+
"t1.micro"
|
330
|
+
end
|
332
331
|
end
|
333
332
|
|
334
333
|
# The actual platform is the platform detected from the image
|
@@ -459,12 +458,10 @@ module Kitchen
|
|
459
458
|
|
460
459
|
errs = []
|
461
460
|
configs.each do |conf|
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
errs.append(e)
|
467
|
-
end
|
461
|
+
@config = conf
|
462
|
+
return submit_spot
|
463
|
+
rescue => e
|
464
|
+
errs.append(e)
|
468
465
|
end
|
469
466
|
raise ["Could not create a spot instance:", errs].flatten.join("\n")
|
470
467
|
end
|
@@ -828,6 +825,31 @@ module Kitchen
|
|
828
825
|
state[:ssh_key] = key_path
|
829
826
|
end
|
830
827
|
|
828
|
+
def attach_network_interface(state)
|
829
|
+
info("Attaching Network interface <#{config[:elastic_network_interface_id]}> with the instance <#{state[:server_id]}> .")
|
830
|
+
client = ::Aws::EC2::Client.new(region: config[:region])
|
831
|
+
begin
|
832
|
+
check_eni = client.describe_network_interface_attribute({
|
833
|
+
attribute: "attachment",
|
834
|
+
network_interface_id: config[:elastic_network_interface_id],
|
835
|
+
})
|
836
|
+
if check_eni.attachment.nil?
|
837
|
+
unless state[:server_id].nil?
|
838
|
+
client.attach_network_interface({
|
839
|
+
device_index: 1,
|
840
|
+
instance_id: state[:server_id],
|
841
|
+
network_interface_id: config[:elastic_network_interface_id],
|
842
|
+
})
|
843
|
+
info("Attached Network interface <#{config[:elastic_network_interface_id]}> with the instance <#{state[:server_id]}> .")
|
844
|
+
end
|
845
|
+
else
|
846
|
+
puts "ENI #{config[:elastic_network_interface_id]} already attached."
|
847
|
+
end
|
848
|
+
rescue ::Aws::EC2::Errors::InvalidNetworkInterfaceIDNotFound => e
|
849
|
+
warn("#{e}")
|
850
|
+
end
|
851
|
+
end
|
852
|
+
|
831
853
|
# Clean up a temporary security group for this instance.
|
832
854
|
#
|
833
855
|
# @api private
|
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: 3.
|
4
|
+
version: 3.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 1.4.1
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '4'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 1.4.1
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '4'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: aws-sdk-ec2
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,90 +64,6 @@ dependencies:
|
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '4.0'
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: rspec
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '3.2'
|
74
|
-
type: :development
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '3.2'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: countloc
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - "~>"
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0.4'
|
88
|
-
type: :development
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- - "~>"
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '0.4'
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: maruku
|
97
|
-
requirement: !ruby/object:Gem::Requirement
|
98
|
-
requirements:
|
99
|
-
- - "~>"
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0.6'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
requirements:
|
106
|
-
- - "~>"
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
version: '0.6'
|
109
|
-
- !ruby/object:Gem::Dependency
|
110
|
-
name: yard
|
111
|
-
requirement: !ruby/object:Gem::Requirement
|
112
|
-
requirements:
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 0.9.11
|
116
|
-
type: :development
|
117
|
-
prerelease: false
|
118
|
-
version_requirements: !ruby/object:Gem::Requirement
|
119
|
-
requirements:
|
120
|
-
- - ">="
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 0.9.11
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: chefstyle
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - '='
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: 1.4.4
|
130
|
-
type: :development
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - '='
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: 1.4.4
|
137
|
-
- !ruby/object:Gem::Dependency
|
138
|
-
name: climate_control
|
139
|
-
requirement: !ruby/object:Gem::Requirement
|
140
|
-
requirements:
|
141
|
-
- - ">="
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: '0'
|
144
|
-
type: :development
|
145
|
-
prerelease: false
|
146
|
-
version_requirements: !ruby/object:Gem::Requirement
|
147
|
-
requirements:
|
148
|
-
- - ">="
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '0'
|
151
67
|
description: A Test Kitchen Driver for Amazon EC2
|
152
68
|
email:
|
153
69
|
- fnichol@nichol.ca
|
@@ -182,14 +98,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
98
|
requirements:
|
183
99
|
- - ">="
|
184
100
|
- !ruby/object:Gem::Version
|
185
|
-
version: '2.
|
101
|
+
version: '2.6'
|
186
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
103
|
requirements:
|
188
104
|
- - ">="
|
189
105
|
- !ruby/object:Gem::Version
|
190
106
|
version: '0'
|
191
107
|
requirements: []
|
192
|
-
rubygems_version: 3.
|
108
|
+
rubygems_version: 3.2.22
|
193
109
|
signing_key:
|
194
110
|
specification_version: 4
|
195
111
|
summary: A Test Kitchen Driver for Amazon EC2
|