kitchen-terraform 5.2.0 → 5.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +36 -171
- data/lib/kitchen/terraform/config_schemas/system.rb +24 -4
- data/lib/kitchen/terraform/configurable.rb +1 -1
- data/lib/kitchen/terraform/inspec_options_factory.rb +27 -8
- data/lib/kitchen/terraform/inspec_runner.rb +6 -1
- data/lib/kitchen/terraform/provisioner/converge.rb +15 -5
- data/lib/kitchen/terraform/raise/action_failed.rb +21 -21
- data/lib/kitchen/terraform/system.rb +9 -7
- data/lib/kitchen/terraform/system_bastion_host_resolver.rb +72 -0
- data/lib/kitchen/terraform/system_inspec_map.rb +0 -1
- data/lib/kitchen/terraform/version.rb +1 -1
- data/lib/kitchen/verifier/terraform.rb +3 -3
- metadata +56 -65
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a04795845f5a5170e57deaad7c5741daacfd678429a0089d1b94bd14c1affe6
|
4
|
+
data.tar.gz: 6e448fa5468092c57bb10876b4d326db67ebd845cd863b4ce6866712d8238b8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6808efc6bdeee619f164e8f6f9d06efec200828a21d79138ae481ca2eec756e4904694c55ed9c87fc0b619f724e5e3d641ab1da9e742549ef34c327a0656d7a7
|
7
|
+
data.tar.gz: 89acb6a22c11637b82afdf6c42fedaff6adab1f18dc4501c3a829b00b03750d6af8904062e940c276cd63727a0d33cc5c794375312acb3773f548518e1b6b5e6
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# ![Kitchen-Terraform Logo][kitchen-terraform-logo] Kitchen-Terraform
|
2
2
|
|
3
|
-
> Kitchen-Terraform enables verification of Terraform
|
3
|
+
> Kitchen-Terraform enables verification of infrastructure systems provisioned with Terraform.
|
4
4
|
|
5
5
|
[![Gem version][gem-version-shield]][kitchen-terraform-gem]
|
6
6
|
[![Gem downloads version][gem-downloads-version-shield]][kitchen-terraform-gem]
|
@@ -15,10 +15,10 @@
|
|
15
15
|
|
16
16
|
[![Gitter chat][gitter-shield]][gitter]
|
17
17
|
|
18
|
-
Kitchen-Terraform provides a set of [
|
19
|
-
which enable
|
20
|
-
|
21
|
-
|
18
|
+
Kitchen-Terraform provides a set of [Kitchen][kitchen] plugins
|
19
|
+
which enable the use of Kitchen to converge a [Terraform][terraform]
|
20
|
+
configuration and verify the resulting infrastructure systems with
|
21
|
+
[InSpec][inspec] controls.
|
22
22
|
|
23
23
|
As Kitchen-Terraform integrates several distinctive technologies in a
|
24
24
|
nontrivial manner, reviewing the documentation of each of the
|
@@ -36,7 +36,7 @@ Installation instructions can be found in the
|
|
36
36
|
[Terraform: Install Terraform][terraform-install] article.
|
37
37
|
|
38
38
|
Kitchen-Terraform supports versions of Terraform in the interval of
|
39
|
-
`>= 0.11.4, < 0.
|
39
|
+
`>= 0.11.4, < 0.15.0`.
|
40
40
|
|
41
41
|
[tfenv] can be used to manage versions of Terraform on the system.
|
42
42
|
|
@@ -50,7 +50,7 @@ Installation instructions can be found in the
|
|
50
50
|
|
51
51
|
Kitchen-Terraform aims to support all versions of Ruby that are in
|
52
52
|
["normal" or "security" maintenance][ruby-branches], which is currently
|
53
|
-
the interval of `>= 2.4, < 2.
|
53
|
+
the interval of `>= 2.4, < 2.8`.
|
54
54
|
|
55
55
|
[rbenv] can be used to manage versions of Ruby on the system.
|
56
56
|
|
@@ -75,7 +75,7 @@ the semantic versioning of the Ruby gem.
|
|
75
75
|
|
76
76
|
```ruby
|
77
77
|
source "https://rubygems.org/" do
|
78
|
-
gem "kitchen-terraform", "~> 5.
|
78
|
+
gem "kitchen-terraform", "~> 5.6"
|
79
79
|
end
|
80
80
|
```
|
81
81
|
|
@@ -102,7 +102,7 @@ example.
|
|
102
102
|
> Installing Kitchen-Terraform with RubyGems
|
103
103
|
|
104
104
|
```sh
|
105
|
-
gem install kitchen-terraform --version 5.
|
105
|
+
gem install kitchen-terraform --version 5.7.0
|
106
106
|
```
|
107
107
|
|
108
108
|
This approach is not recommended as it requires more effort to install
|
@@ -128,7 +128,7 @@ Ed25519-type SSH keys.
|
|
128
128
|
|
129
129
|
Kitchen-Terraform provides three Test Kitchen plugins which must be
|
130
130
|
configured in a
|
131
|
-
[
|
131
|
+
[Kitchen configuration file][kitchen-configuration-file] in
|
132
132
|
order to successfully test Terraform configuration.
|
133
133
|
|
134
134
|
The [Terraform driver][terraform-driver] manages the state of the
|
@@ -143,167 +143,27 @@ Terraform state.
|
|
143
143
|
More information can be found in the
|
144
144
|
[Ruby gem documentation][ruby-gem-documentation].
|
145
145
|
|
146
|
-
###
|
146
|
+
### Caveats
|
147
147
|
|
148
|
-
|
149
|
-
|
148
|
+
Versions of Terraform in the 0.11 series may cause `kitchen test` to
|
149
|
+
fail if the initial destroy targets an empty Terraform state. A
|
150
|
+
workaround for this problem is to use
|
151
|
+
`kitchen verify && kitchen destroy` instead of `kitchen test`. More
|
152
|
+
details about the problem are available in
|
153
|
+
[issue #271](issue-271).
|
150
154
|
|
151
|
-
|
155
|
+
### Tutorials and Examples
|
152
156
|
|
153
|
-
|
154
|
-
test system as described in the [Installation](#installation) section.
|
155
|
-
|
156
|
-
The [Docker Community Edition][docker-community-edition] is assumed to
|
157
|
-
have been installed on the test system.
|
158
|
-
|
159
|
-
The working directory on the test system is assumed to contain a
|
160
|
-
hierarchy of files comprising the following blocks.
|
161
|
-
|
162
|
-
> Directory hierarchy
|
163
|
-
|
164
|
-
```
|
165
|
-
.
|
166
|
-
├── .kitchen.yml
|
167
|
-
├── Gemfile
|
168
|
-
├── main.tf
|
169
|
-
├── outputs.tf
|
170
|
-
└── test
|
171
|
-
└── integration
|
172
|
-
└── example
|
173
|
-
├── controls
|
174
|
-
│ ├── operating_system.rb
|
175
|
-
└── inspec.yml
|
176
|
-
```
|
177
|
-
|
178
|
-
> Gemfile
|
179
|
-
|
180
|
-
```ruby
|
181
|
-
source "https://rubygems.org/"
|
182
|
-
|
183
|
-
gem 'kitchen-terraform', '~> 5.1'
|
184
|
-
```
|
185
|
-
|
186
|
-
> ./kitchen.yml (Test Kitchen configuration)
|
187
|
-
|
188
|
-
```yaml
|
189
|
-
driver:
|
190
|
-
name: terraform
|
191
|
-
|
192
|
-
provisioner:
|
193
|
-
name: terraform
|
194
|
-
|
195
|
-
verifier:
|
196
|
-
name: terraform
|
197
|
-
systems:
|
198
|
-
- name: container
|
199
|
-
backend: ssh
|
200
|
-
hosts_output: container_hostname
|
201
|
-
password: root
|
202
|
-
port: 2222
|
203
|
-
user: root
|
204
|
-
|
205
|
-
platforms:
|
206
|
-
- name: ubuntu
|
207
|
-
|
208
|
-
suites:
|
209
|
-
- name: example
|
210
|
-
```
|
211
|
-
|
212
|
-
Although Kitchen-Terraform supports multiple versions of Terraform, below snippets are compatible with v0.12:
|
213
|
-
> ./main.tf
|
214
|
-
|
215
|
-
```hcl
|
216
|
-
provider "docker" {
|
217
|
-
host = "unix:///var/run/docker.sock"
|
218
|
-
}
|
219
|
-
|
220
|
-
data "docker_registry_image" "ubuntu" {
|
221
|
-
name = "rastasheep/ubuntu-sshd:latest"
|
222
|
-
}
|
223
|
-
|
224
|
-
resource "docker_image" "ubuntu" {
|
225
|
-
name = data.docker_registry_image.ubuntu.name
|
226
|
-
pull_triggers = ["${data.docker_registry_image.ubuntu.sha256_digest}"]
|
227
|
-
}
|
228
|
-
|
229
|
-
resource "docker_container" "ubuntu" {
|
230
|
-
image = docker_image.ubuntu.name
|
231
|
-
must_run = true
|
232
|
-
name = "ubuntu_container"
|
233
|
-
|
234
|
-
ports {
|
235
|
-
external = 2222
|
236
|
-
internal = 22
|
237
|
-
}
|
238
|
-
}
|
239
|
-
```
|
240
|
-
|
241
|
-
> ./outputs.tf
|
242
|
-
|
243
|
-
```hcl
|
244
|
-
output "container_hostname" {
|
245
|
-
description = "The hostname of the container."
|
246
|
-
value = "127.0.0.1"
|
247
|
-
}
|
248
|
-
```
|
249
|
-
|
250
|
-
> ./test/integration/example/inspec.yml
|
251
|
-
|
252
|
-
```yaml
|
253
|
-
name: example
|
254
|
-
```
|
255
|
-
|
256
|
-
> ./test/integration/example/controls/operating_system.rb
|
257
|
-
|
258
|
-
```ruby
|
259
|
-
# frozen_string_literal: true
|
260
|
-
|
261
|
-
control "operating_system" do
|
262
|
-
describe "the operating system" do
|
263
|
-
subject do
|
264
|
-
command("cat /etc/os-release").stdout
|
265
|
-
end
|
266
|
-
|
267
|
-
it "is Ubuntu" do
|
268
|
-
is_expected.to match /Ubuntu/
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
|
-
```
|
273
|
-
|
274
|
-
Running the following command would initialize the working directory for
|
275
|
-
Terraform, create a Docker container by applying the configuration file,
|
276
|
-
and verify that the container is running Ubuntu.
|
277
|
-
|
278
|
-
> Verifying with Kitchen-Terraform
|
279
|
-
|
280
|
-
```sh
|
281
|
-
$ bundle install
|
282
|
-
$ bundle exec kitchen test
|
283
|
-
-----> Starting Kitchen...
|
284
|
-
...
|
285
|
-
$$$$$$ Running command `terraform init...`
|
286
|
-
...
|
287
|
-
$$$$$$ Running command `terraform apply...`
|
288
|
-
...
|
289
|
-
docker_container.ubuntu: Creation complete after 1s...
|
290
|
-
|
291
|
-
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
|
292
|
-
...
|
293
|
-
Finished converging <example-ubuntu>...
|
294
|
-
...
|
295
|
-
-----> Verifying <example-ubuntu>...
|
296
|
-
Verifying host 'localhost' of system 'container'
|
297
|
-
...
|
298
|
-
✔ operating_system: the operating system is Ubuntu
|
299
|
-
...
|
300
|
-
Profile Summary: 1 successful control, 0 control failures, 0 controls skipped
|
301
|
-
...
|
302
|
-
```
|
303
|
-
|
304
|
-
More information can be found on the
|
157
|
+
Several tutorials are available on the
|
305
158
|
[Kitchen-Terraform Tutorials][kitchen-terraform-tutorials] page.
|
306
159
|
|
160
|
+
The integration tests for Kitchen-Terraform can also be viewed as
|
161
|
+
examples of how it works. The
|
162
|
+
[integration test Kitchen configuration file][int-kitchen-config]
|
163
|
+
and the [integration test directory][test-directory] provide several
|
164
|
+
functional examples which exercise various features of
|
165
|
+
Kitchen-Terraform.
|
166
|
+
|
307
167
|
## Contributing
|
308
168
|
|
309
169
|
Kitchen-Terraform thrives on community contributions.
|
@@ -321,7 +181,8 @@ Information about changes to Kitchen-Terraform can be found in the
|
|
321
181
|
|
322
182
|
## Maintainers
|
323
183
|
|
324
|
-
Kitchen-Terraform is maintained by
|
184
|
+
Kitchen-Terraform is maintained by [community contributors][contributors]
|
185
|
+
and New Context.
|
325
186
|
|
326
187
|
<img
|
327
188
|
alt="New Context logo"
|
@@ -374,17 +235,22 @@ Kitchen-Terraform is distributed under the [Apache License][license].
|
|
374
235
|
[code-coverage-shield]: https://img.shields.io/codeclimate/coverage/newcontext-oss/kitchen-terraform.svg
|
375
236
|
[code-coverage]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/
|
376
237
|
[contributing-document]: https://github.com/newcontext-oss/kitchen-terraform/blob/master/CONTRIBUTING.md
|
238
|
+
[contributors]: https://github.com/newcontext-oss/kitchen-terraform/graphs/contributors
|
377
239
|
[docker]: https://www.docker.com/
|
378
240
|
[docker-community-edition]: https://store.docker.com/editions/community/docker-ce-server-ubuntu
|
379
241
|
[docker-provider]: https://www.terraform.io/docs/providers/docker/index.html
|
380
242
|
[gem-downloads-total-shield]: https://img.shields.io/gem/dt/kitchen-terraform.svg
|
381
243
|
[gem-downloads-version-shield]: https://img.shields.io/gem/dtv/kitchen-terraform.svg
|
382
244
|
[gem-version-shield]: https://img.shields.io/gem/v/kitchen-terraform.svg
|
383
|
-
[hakiri-shield]: https://hakiri.io/github/newcontext-oss/kitchen-terraform/master.svg
|
384
|
-
[hakiri]: https://hakiri.io/github/newcontext-oss/kitchen-terraform/
|
385
245
|
[gitter-shield]: https://img.shields.io/gitter/room/kitchen-terraform/Lobby.svg
|
386
246
|
[gitter]: https://gitter.im/kitchen-terraform/Lobby
|
247
|
+
[hakiri-shield]: https://hakiri.io/github/newcontext-oss/kitchen-terraform/master.svg
|
248
|
+
[hakiri]: https://hakiri.io/github/newcontext-oss/kitchen-terraform/
|
387
249
|
[inspec]: https://www.inspec.io/
|
250
|
+
[int-kitchen-config]: https://github.com/newcontext-oss/kitchen-terraform/blob/master/kitchen.yml
|
251
|
+
[issue-271]: https://github.com/newcontext-oss/kitchen-terraform/issues/271
|
252
|
+
[kitchen]: http://kitchen.ci/index.html
|
253
|
+
[kitchen-configuration-file]: https://docs.chef.io/config_yml_kitchen.html
|
388
254
|
[kitchen-terraform-gem]: https://rubygems.org/gems/kitchen-terraform
|
389
255
|
[kitchen-terraform-logo]: https://raw.githubusercontent.com/newcontext-oss/kitchen-terraform/master/assets/logo.png
|
390
256
|
[kitchen-terraform-tutorials]: https://newcontext-oss.github.io/kitchen-terraform/tutorials/
|
@@ -411,8 +277,7 @@ Kitchen-Terraform is distributed under the [Apache License][license].
|
|
411
277
|
[terraform-provisioner]: http://www.rubydoc.info/github/newcontext-oss/kitchen-terraform/Kitchen/Provisioner/Terraform
|
412
278
|
[terraform-verifier]: http://www.rubydoc.info/github/newcontext-oss/kitchen-terraform/Kitchen/Verifier/Terraform
|
413
279
|
[terraform]: https://www.terraform.io/
|
414
|
-
[test-
|
415
|
-
[test-kitchen]: http://kitchen.ci/index.html
|
280
|
+
[test-directory]: https://github.com/newcontext-oss/kitchen-terraform/tree/master/test
|
416
281
|
[tfenv]: https://github.com/kamatama41/tfenv
|
417
282
|
[travis-build-status-shield]: https://img.shields.io/travis/com/newcontext-oss/kitchen-terraform.svg
|
418
283
|
[travis-build-status]: https://travis-ci.com/newcontext-oss/kitchen-terraform
|
@@ -130,6 +130,8 @@ module Kitchen
|
|
130
130
|
#
|
131
131
|
# The +bastion_host+ key must be used in combination with a backend which supports remote connections.
|
132
132
|
#
|
133
|
+
# The +bastion_host_output+ key will take priority over the +bastion_host+ key.
|
134
|
+
#
|
133
135
|
# <em>Example kitchen.yml</em>
|
134
136
|
# verifier:
|
135
137
|
# name: terraform
|
@@ -138,12 +140,29 @@ module Kitchen
|
|
138
140
|
# backend: ssh
|
139
141
|
# bastion_host: bastion-host.domain
|
140
142
|
#
|
143
|
+
# ====== bastion_host_output
|
144
|
+
#
|
145
|
+
# The value of the +bastion_host_output+ key is a scalar which is used to obtain the address of a bastion host in
|
146
|
+
# the system from a Terraform output.
|
147
|
+
#
|
148
|
+
# The scalar must match the name of an output with a value which is a string.
|
149
|
+
#
|
150
|
+
# The +bastion_host_output+ key must be used in combination with a backend which enables remote connections.
|
151
|
+
#
|
152
|
+
# <em>Example kitchen.yml</em>
|
153
|
+
# verifier:
|
154
|
+
# name: terraform
|
155
|
+
# systems:
|
156
|
+
# - name: a system
|
157
|
+
# backend: ssh
|
158
|
+
# bastion_host_output: an_output
|
159
|
+
#
|
141
160
|
# ====== bastion_port
|
142
161
|
#
|
143
162
|
# The value of the +bastion_port+ key is an integer which is used as the port number to connect to on the bastion
|
144
163
|
# host.
|
145
164
|
#
|
146
|
-
# The +bastion_port+ key must be used in combination with the +bastion_host+ key.
|
165
|
+
# The +bastion_port+ key must be used in combination with the +bastion_host_output+ key or the +bastion_host+ key.
|
147
166
|
#
|
148
167
|
# <em>Example kitchen.yml</em>
|
149
168
|
# verifier:
|
@@ -151,7 +170,7 @@ module Kitchen
|
|
151
170
|
# systems:
|
152
171
|
# - name: a system
|
153
172
|
# backend: ssh
|
154
|
-
#
|
173
|
+
# bastion_host_output: an_output
|
155
174
|
# bastion_port: 1234
|
156
175
|
#
|
157
176
|
# ====== bastion_user
|
@@ -159,7 +178,7 @@ module Kitchen
|
|
159
178
|
# The value of the +bastion_user+ key is a scalar which is used as the username for authentication with the
|
160
179
|
# bastion host.
|
161
180
|
#
|
162
|
-
# The +bastion_user+ key must be used in combination with the +bastion_host+ key.
|
181
|
+
# The +bastion_user+ key must be used in combination with the +bastion_host_output+ key or the +bastion_host+ key.
|
163
182
|
#
|
164
183
|
# <em>Example kitchen.yml</em>
|
165
184
|
# verifier:
|
@@ -167,7 +186,7 @@ module Kitchen
|
|
167
186
|
# systems:
|
168
187
|
# - name: a system
|
169
188
|
# backend: ssh
|
170
|
-
#
|
189
|
+
# bastion_host_output: an_output
|
171
190
|
# bastion_user: bastion-user
|
172
191
|
#
|
173
192
|
# ====== controls
|
@@ -554,6 +573,7 @@ module Kitchen
|
|
554
573
|
optional(:attrs_outputs).filled :hash?
|
555
574
|
optional(:backend_cache).value :bool?
|
556
575
|
optional(:bastion_host).filled :str?
|
576
|
+
optional(:bastion_host_output).filled :str?
|
557
577
|
optional(:bastion_port).value :int?
|
558
578
|
optional(:bastion_user).filled :str?
|
559
579
|
optional(:controls).each(:filled?, :str?)
|
@@ -42,7 +42,7 @@ module Kitchen
|
|
42
42
|
# @see Kitchen::Configurable#finalize_config!
|
43
43
|
def finalize_config!(instance)
|
44
44
|
super instance
|
45
|
-
self.version_requirement = ::Gem::Requirement.new ">= 0.11.4", "< 0.
|
45
|
+
self.version_requirement = ::Gem::Requirement.new ">= 0.11.4", "< 0.15.0"
|
46
46
|
self.workspace_name = "kitchen-terraform-#{::Shellwords.escape instance.name}"
|
47
47
|
end
|
48
48
|
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "inspec"
|
18
|
+
require "kitchen/terraform/system_bastion_host_resolver"
|
18
19
|
require "kitchen/terraform/system_inspec_map"
|
19
20
|
require "rubygems"
|
20
21
|
|
@@ -40,28 +41,46 @@ module Kitchen
|
|
40
41
|
#
|
41
42
|
# @param attributes [Hash] the attributes to be added to the InSpec options.
|
42
43
|
# @param system_configuration_attributes [Hash] the configuration attributes of a system.
|
44
|
+
# @raise [Kitchen::ClientError] if the system bastion host fails to be resolved.
|
43
45
|
# @return [Hash] a mapping of InSpec options.
|
44
46
|
def build(attributes:, system_configuration_attributes:)
|
45
|
-
system_configuration_attributes
|
46
|
-
|
47
|
-
|
48
|
-
options.store system_inspec_map.fetch(attribute_name), attribute_value
|
49
|
-
end
|
47
|
+
map_system_to_inspec system_configuration_attributes: system_configuration_attributes
|
48
|
+
options.store self.class.inputs_key, attributes
|
49
|
+
resolve_bastion_host system_configuration_attributes: system_configuration_attributes
|
50
50
|
|
51
|
-
options
|
51
|
+
options
|
52
52
|
end
|
53
53
|
|
54
54
|
# #initialize prepares a new instance of the class.
|
55
55
|
#
|
56
|
+
# @param outputs [Hash] the Terraform output variables.
|
56
57
|
# @return [Kitchen::Terraform::InSpecOptionsFactory]
|
57
|
-
def initialize
|
58
|
+
def initialize(outputs:)
|
58
59
|
self.options = { "distinct_exit" => false }
|
60
|
+
self.system_bastion_host_resolver = ::Kitchen::Terraform::SystemBastionHostResolver.new outputs: outputs
|
59
61
|
self.system_inspec_map = ::Kitchen::Terraform::SYSTEM_INSPEC_MAP.dup
|
60
62
|
end
|
61
63
|
|
62
64
|
private
|
63
65
|
|
64
|
-
attr_accessor :options, :system_inspec_map
|
66
|
+
attr_accessor :options, :system_bastion_host_resolver, :system_inspec_map
|
67
|
+
|
68
|
+
def map_system_to_inspec(system_configuration_attributes:)
|
69
|
+
system_configuration_attributes.lazy.select do |attribute_name, _|
|
70
|
+
system_inspec_map.key?(attribute_name)
|
71
|
+
end.each do |attribute_name, attribute_value|
|
72
|
+
options.store system_inspec_map.fetch(attribute_name), attribute_value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def resolve_bastion_host(system_configuration_attributes:)
|
77
|
+
system_bastion_host_resolver.resolve(
|
78
|
+
bastion_host: system_configuration_attributes.fetch(:bastion_host, ""),
|
79
|
+
bastion_host_output: system_configuration_attributes.fetch(:bastion_host_output, ""),
|
80
|
+
) do |bastion_host:|
|
81
|
+
options.store :bastion_host, bastion_host
|
82
|
+
end
|
83
|
+
end
|
65
84
|
end
|
66
85
|
end
|
67
86
|
end
|
@@ -61,6 +61,11 @@ module Kitchen
|
|
61
61
|
""
|
62
62
|
end
|
63
63
|
self.runner = ::Inspec::Runner.new options.merge logger: ::Inspec::Log.logger
|
64
|
+
|
65
|
+
v2_loader = ::Inspec::Plugin::V2::Loader.new
|
66
|
+
v2_loader.load_all
|
67
|
+
v2_loader.exit_on_load_error
|
68
|
+
|
64
69
|
profile_locations.each do |profile_location|
|
65
70
|
runner.add_target profile_location
|
66
71
|
end
|
@@ -81,7 +86,7 @@ module Kitchen
|
|
81
86
|
def run
|
82
87
|
yield exit_code: runner.run
|
83
88
|
rescue => error
|
84
|
-
raise ::Kitchen::TransientFailure, "#{action} failed:\n\t#{error.message}"
|
89
|
+
raise ::Kitchen::TransientFailure, "#{action} failed:\n\t\t#{error.message}"
|
85
90
|
end
|
86
91
|
end
|
87
92
|
end
|
@@ -75,9 +75,10 @@ module Kitchen
|
|
75
75
|
# @param workspace_name [String] the name of the Terraform workspace to select or to create.
|
76
76
|
# @return [Kitchen::Terraform::Driver::Converge]
|
77
77
|
def initialize(config:, logger:, version_requirement:, workspace_name:)
|
78
|
+
client = config.fetch :client
|
78
79
|
hash_config = config.to_hash.merge workspace_name: workspace_name
|
79
80
|
self.command_executor = ::Kitchen::Terraform::CommandExecutor.new(
|
80
|
-
client:
|
81
|
+
client: client,
|
81
82
|
logger: logger,
|
82
83
|
)
|
83
84
|
self.logger = logger
|
@@ -86,11 +87,9 @@ module Kitchen
|
|
86
87
|
self.apply = ::Kitchen::Terraform::Command::Apply.new config: config
|
87
88
|
self.get = ::Kitchen::Terraform::Command::Get.new
|
88
89
|
self.output = ::Kitchen::Terraform::Command::Output.new
|
90
|
+
initialize_outputs_handlers client: client, logger: logger
|
89
91
|
self.validate = ::Kitchen::Terraform::Command::Validate.new config: config
|
90
92
|
self.workspace_select = ::Kitchen::Terraform::Command::WorkspaceSelect.new config: hash_config
|
91
|
-
self.outputs_manager = ::Kitchen::Terraform::OutputsManager.new
|
92
|
-
self.outputs_parser = ::Kitchen::Terraform::OutputsParser.new
|
93
|
-
self.outputs_reader = ::Kitchen::Terraform::OutputsReader.new command_executor: command_executor
|
94
93
|
self.variables = config.fetch :variables
|
95
94
|
self.variables_manager = ::Kitchen::Terraform::VariablesManager.new
|
96
95
|
self.verify_version = ::Kitchen::Terraform::VerifyVersion.new(
|
@@ -144,6 +143,17 @@ module Kitchen
|
|
144
143
|
build_infrastructure
|
145
144
|
end
|
146
145
|
|
146
|
+
def initialize_outputs_handlers(client:, logger:)
|
147
|
+
self.outputs_manager = ::Kitchen::Terraform::OutputsManager.new
|
148
|
+
self.outputs_parser = ::Kitchen::Terraform::OutputsParser.new
|
149
|
+
self.outputs_reader = ::Kitchen::Terraform::OutputsReader.new(
|
150
|
+
command_executor: ::Kitchen::Terraform::CommandExecutor.new(
|
151
|
+
client: client,
|
152
|
+
logger: ::Kitchen::Terraform::DebugLogger.new(logger),
|
153
|
+
),
|
154
|
+
)
|
155
|
+
end
|
156
|
+
|
147
157
|
def parse_outputs(json_outputs:)
|
148
158
|
logger.warn "Parsing the Terraform output variables as JSON..."
|
149
159
|
outputs_parser.parse json_outputs: json_outputs do |parsed_outputs:|
|
@@ -165,7 +175,7 @@ module Kitchen
|
|
165
175
|
def save_outputs(parsed_outputs:, state:)
|
166
176
|
logger.warn "Writing the output variables to the Kitchen instance state..."
|
167
177
|
outputs_manager.save outputs: parsed_outputs, state: state
|
168
|
-
logger.warn "Finished writing the output
|
178
|
+
logger.warn "Finished writing the output variables to the Kitchen instance state."
|
169
179
|
end
|
170
180
|
|
171
181
|
def save_variables_and_outputs(state:)
|
@@ -19,31 +19,31 @@ require "kitchen"
|
|
19
19
|
module Kitchen
|
20
20
|
module Terraform
|
21
21
|
module Raise
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
# ActionFailed is the class of objects which handle errors resulting in failed actions.
|
23
|
+
class ActionFailed
|
24
|
+
# #call logs an error message and raises an error with the message.
|
25
|
+
#
|
26
|
+
# @param message [String] the error message.
|
27
|
+
# @raise [Kitchen::ActionFailed]
|
28
|
+
# @return [void]
|
29
|
+
def call(message:)
|
30
|
+
logger.error message
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
raise ::Kitchen::ActionFailed, message
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
# #initialize prepares a new instance of the class.
|
36
|
+
#
|
37
|
+
# @param logger [Kitchen::Logger] a logger to log messages.
|
38
|
+
# @return [Kitchen::Terraform::ActionFailed]
|
39
|
+
def initialize(logger:)
|
40
|
+
self.logger = logger
|
41
|
+
end
|
42
42
|
|
43
|
-
|
43
|
+
private
|
44
44
|
|
45
|
-
|
45
|
+
attr_accessor :logger
|
46
|
+
end
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
|
-
end
|
@@ -46,7 +46,6 @@ module Kitchen
|
|
46
46
|
self.hosts = configuration_attributes.fetch :hosts do
|
47
47
|
[]
|
48
48
|
end.dup
|
49
|
-
self.inspec_options_factory = ::Kitchen::Terraform::InSpecOptionsFactory.new
|
50
49
|
self.logger = logger
|
51
50
|
end
|
52
51
|
|
@@ -72,17 +71,20 @@ module Kitchen
|
|
72
71
|
|
73
72
|
private
|
74
73
|
|
75
|
-
attr_accessor :attrs, :attrs_outputs, :configuration_attributes, :hosts, :
|
74
|
+
attr_accessor :attrs, :attrs_outputs, :configuration_attributes, :hosts, :logger
|
76
75
|
|
77
|
-
def execute_inspec_runner(fail_fast:)
|
76
|
+
def execute_inspec_runner(fail_fast:, options:)
|
78
77
|
::Kitchen::Terraform::InSpecFactory.new(fail_fast: fail_fast, hosts: hosts).build(
|
79
|
-
options:
|
78
|
+
options: options,
|
80
79
|
profile_locations: configuration_attributes.fetch(:profile_locations),
|
81
80
|
).exec
|
82
81
|
end
|
83
82
|
|
84
|
-
def inspec_options
|
85
|
-
|
83
|
+
def inspec_options(outputs:)
|
84
|
+
::Kitchen::Terraform::InSpecOptionsFactory.new(outputs: outputs).build(
|
85
|
+
attributes: attrs,
|
86
|
+
system_configuration_attributes: configuration_attributes,
|
87
|
+
)
|
86
88
|
end
|
87
89
|
|
88
90
|
def resolve(outputs:, variables:)
|
@@ -102,7 +104,7 @@ module Kitchen
|
|
102
104
|
def resolve_and_execute(fail_fast:, outputs:, variables:)
|
103
105
|
logger.warn "Verifying the '#{self}' system..."
|
104
106
|
resolve outputs: outputs, variables: variables
|
105
|
-
execute_inspec_runner fail_fast: fail_fast
|
107
|
+
execute_inspec_runner fail_fast: fail_fast, options: inspec_options(outputs: outputs)
|
106
108
|
logger.warn "Finished verifying the '#{self}' system."
|
107
109
|
end
|
108
110
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2016-2019 New Context, Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "kitchen"
|
18
|
+
|
19
|
+
module Kitchen
|
20
|
+
module Terraform
|
21
|
+
# SystemBastionHostResolver is the class of objects which resolve a bastion host of a system which may be either
|
22
|
+
# dynamically obtained from a Terraform output variable or statically defined.
|
23
|
+
class SystemBastionHostResolver
|
24
|
+
# #initialize prepares a new instance of the class.
|
25
|
+
#
|
26
|
+
# @param outputs [Hash] a map of Terraform output variables.
|
27
|
+
# @return [Kitchen::Terraform::SystemBastionHostResolver]
|
28
|
+
def initialize(outputs:)
|
29
|
+
self.outputs = Hash[outputs]
|
30
|
+
end
|
31
|
+
|
32
|
+
# #resolve resolves a bastion host from either the specified Terraform output or the static value.
|
33
|
+
#
|
34
|
+
# @param bastion_host [String] a statically defined host.
|
35
|
+
# @param bastion_host_output [String] the name of the Terraform output which contains a bastion host.
|
36
|
+
# @yieldparam bastion_host [String] the bastion host.
|
37
|
+
# @raise [Kitchen::ClientError] if the specified Terraform output is not found.
|
38
|
+
# @return [self]
|
39
|
+
def resolve(bastion_host:, bastion_host_output:)
|
40
|
+
if !bastion_host.empty?
|
41
|
+
yield bastion_host: bastion_host
|
42
|
+
elsif !bastion_host_output.empty?
|
43
|
+
yield bastion_host: resolved_output(bastion_host_output: bastion_host_output).fetch(:value)
|
44
|
+
end
|
45
|
+
|
46
|
+
self
|
47
|
+
rescue ::KeyError
|
48
|
+
raise(
|
49
|
+
::Kitchen::ClientError,
|
50
|
+
"Resolving the system bastion host failed due to the absence of the 'value' key from the " \
|
51
|
+
"'#{bastion_host_output}' Terraform output of the Kitchen instance state. This error indicates that the " \
|
52
|
+
"output format of `terraform output -json` is unexpected."
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
attr_accessor :outputs
|
59
|
+
|
60
|
+
def resolved_output(bastion_host_output:)
|
61
|
+
outputs.fetch bastion_host_output.to_sym
|
62
|
+
rescue ::KeyError
|
63
|
+
raise(
|
64
|
+
::Kitchen::ClientError,
|
65
|
+
"Resolving the system bastion host failed due to the absence of the '#{bastion_host_output}' key from the " \
|
66
|
+
"Terraform outputs of the Kitchen instance state. This error indicates either that `kitchen converge` must " \
|
67
|
+
"be executed again to update the Terraform outputs or that the wrong key was provided."
|
68
|
+
)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -160,7 +160,7 @@ module Kitchen
|
|
160
160
|
def load_outputs(state:)
|
161
161
|
logger.warn "Reading the Terraform output variables from the Kitchen instance state..."
|
162
162
|
::Kitchen::Terraform::OutputsManager.new.load outputs: outputs, state: state
|
163
|
-
logger.warn "Finished reading the Terraform output
|
163
|
+
logger.warn "Finished reading the Terraform output variables from the Kitchen instance state."
|
164
164
|
end
|
165
165
|
|
166
166
|
def profile_locations
|
@@ -183,9 +183,9 @@ module Kitchen
|
|
183
183
|
end
|
184
184
|
|
185
185
|
def verify_systems
|
186
|
-
logger.
|
186
|
+
logger.warn "Verifying the systems..."
|
187
187
|
systems_verifier.verify outputs: outputs, variables: variables
|
188
|
-
logger.
|
188
|
+
logger.warn "Finished verifying the systems."
|
189
189
|
end
|
190
190
|
end
|
191
191
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Lane
|
@@ -21,6 +21,7 @@ authors:
|
|
21
21
|
- curleighbraces
|
22
22
|
- Austin Heiman
|
23
23
|
- Gary Foster
|
24
|
+
- Ed Bartholomew
|
24
25
|
autorequire:
|
25
26
|
bindir: bin
|
26
27
|
cert_chain:
|
@@ -61,7 +62,7 @@ cert_chain:
|
|
61
62
|
JH4yGDzVEYaZHaohSDcYuGLK6OQylPu7oM75S+TNLWseDIT8bWgQk6NelVjtQQ2Q
|
62
63
|
XSbgfu863jyey/0qO01cUo3+iTqzl85cWg==
|
63
64
|
-----END CERTIFICATE-----
|
64
|
-
date:
|
65
|
+
date: 2021-02-24 00:00:00.000000000 Z
|
65
66
|
dependencies:
|
66
67
|
- !ruby/object:Gem::Dependency
|
67
68
|
name: bundler
|
@@ -204,145 +205,131 @@ dependencies:
|
|
204
205
|
- !ruby/object:Gem::Version
|
205
206
|
version: '4.2'
|
206
207
|
- !ruby/object:Gem::Dependency
|
207
|
-
name:
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
209
|
-
requirements:
|
210
|
-
- - "~>"
|
211
|
-
- !ruby/object:Gem::Version
|
212
|
-
version: 0.2.0
|
213
|
-
type: :development
|
214
|
-
prerelease: false
|
215
|
-
version_requirements: !ruby/object:Gem::Requirement
|
216
|
-
requirements:
|
217
|
-
- - "~>"
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
version: 0.2.0
|
220
|
-
- !ruby/object:Gem::Dependency
|
221
|
-
name: pry-coolline
|
208
|
+
name: rspec
|
222
209
|
requirement: !ruby/object:Gem::Requirement
|
223
210
|
requirements:
|
224
211
|
- - "~>"
|
225
212
|
- !ruby/object:Gem::Version
|
226
|
-
version: '
|
213
|
+
version: '3.4'
|
227
214
|
type: :development
|
228
215
|
prerelease: false
|
229
216
|
version_requirements: !ruby/object:Gem::Requirement
|
230
217
|
requirements:
|
231
218
|
- - "~>"
|
232
219
|
- !ruby/object:Gem::Version
|
233
|
-
version: '
|
220
|
+
version: '3.4'
|
234
221
|
- !ruby/object:Gem::Dependency
|
235
|
-
name:
|
222
|
+
name: rufo
|
236
223
|
requirement: !ruby/object:Gem::Requirement
|
237
224
|
requirements:
|
238
225
|
- - "~>"
|
239
226
|
- !ruby/object:Gem::Version
|
240
|
-
version: '0.
|
227
|
+
version: '0.7'
|
241
228
|
type: :development
|
242
229
|
prerelease: false
|
243
230
|
version_requirements: !ruby/object:Gem::Requirement
|
244
231
|
requirements:
|
245
232
|
- - "~>"
|
246
233
|
- !ruby/object:Gem::Version
|
247
|
-
version: '0.
|
234
|
+
version: '0.7'
|
248
235
|
- !ruby/object:Gem::Dependency
|
249
|
-
name:
|
236
|
+
name: simplecov
|
250
237
|
requirement: !ruby/object:Gem::Requirement
|
251
238
|
requirements:
|
252
239
|
- - "~>"
|
253
240
|
- !ruby/object:Gem::Version
|
254
|
-
version:
|
241
|
+
version: 0.16.1
|
255
242
|
type: :development
|
256
243
|
prerelease: false
|
257
244
|
version_requirements: !ruby/object:Gem::Requirement
|
258
245
|
requirements:
|
259
246
|
- - "~>"
|
260
247
|
- !ruby/object:Gem::Version
|
261
|
-
version:
|
248
|
+
version: 0.16.1
|
262
249
|
- !ruby/object:Gem::Dependency
|
263
|
-
name:
|
250
|
+
name: travis
|
264
251
|
requirement: !ruby/object:Gem::Requirement
|
265
252
|
requirements:
|
266
253
|
- - "~>"
|
267
254
|
- !ruby/object:Gem::Version
|
268
|
-
version: '
|
255
|
+
version: '1.8'
|
269
256
|
type: :development
|
270
257
|
prerelease: false
|
271
258
|
version_requirements: !ruby/object:Gem::Requirement
|
272
259
|
requirements:
|
273
260
|
- - "~>"
|
274
261
|
- !ruby/object:Gem::Version
|
275
|
-
version: '
|
262
|
+
version: '1.8'
|
276
263
|
- !ruby/object:Gem::Dependency
|
277
|
-
name:
|
264
|
+
name: yard
|
278
265
|
requirement: !ruby/object:Gem::Requirement
|
279
266
|
requirements:
|
280
267
|
- - "~>"
|
281
268
|
- !ruby/object:Gem::Version
|
282
|
-
version: '0.
|
269
|
+
version: '0.9'
|
283
270
|
type: :development
|
284
271
|
prerelease: false
|
285
272
|
version_requirements: !ruby/object:Gem::Requirement
|
286
273
|
requirements:
|
287
274
|
- - "~>"
|
288
275
|
- !ruby/object:Gem::Version
|
289
|
-
version: '0.
|
276
|
+
version: '0.9'
|
290
277
|
- !ruby/object:Gem::Dependency
|
291
|
-
name:
|
278
|
+
name: reek
|
292
279
|
requirement: !ruby/object:Gem::Requirement
|
293
280
|
requirements:
|
294
281
|
- - "~>"
|
295
282
|
- !ruby/object:Gem::Version
|
296
|
-
version: 0.
|
283
|
+
version: 6.0.2
|
297
284
|
type: :development
|
298
285
|
prerelease: false
|
299
286
|
version_requirements: !ruby/object:Gem::Requirement
|
300
287
|
requirements:
|
301
288
|
- - "~>"
|
302
289
|
- !ruby/object:Gem::Version
|
303
|
-
version: 0.
|
290
|
+
version: 6.0.2
|
304
291
|
- !ruby/object:Gem::Dependency
|
305
|
-
name:
|
292
|
+
name: delegate
|
306
293
|
requirement: !ruby/object:Gem::Requirement
|
307
294
|
requirements:
|
308
295
|
- - "~>"
|
309
296
|
- !ruby/object:Gem::Version
|
310
|
-
version:
|
311
|
-
type: :
|
297
|
+
version: 0.1.0
|
298
|
+
type: :runtime
|
312
299
|
prerelease: false
|
313
300
|
version_requirements: !ruby/object:Gem::Requirement
|
314
301
|
requirements:
|
315
302
|
- - "~>"
|
316
303
|
- !ruby/object:Gem::Version
|
317
|
-
version:
|
304
|
+
version: 0.1.0
|
318
305
|
- !ruby/object:Gem::Dependency
|
319
|
-
name:
|
306
|
+
name: dry-validation
|
320
307
|
requirement: !ruby/object:Gem::Requirement
|
321
308
|
requirements:
|
322
309
|
- - "~>"
|
323
310
|
- !ruby/object:Gem::Version
|
324
|
-
version: '0.
|
325
|
-
type: :
|
311
|
+
version: '0.13'
|
312
|
+
type: :runtime
|
326
313
|
prerelease: false
|
327
314
|
version_requirements: !ruby/object:Gem::Requirement
|
328
315
|
requirements:
|
329
316
|
- - "~>"
|
330
317
|
- !ruby/object:Gem::Version
|
331
|
-
version: '0.
|
318
|
+
version: '0.13'
|
332
319
|
- !ruby/object:Gem::Dependency
|
333
|
-
name:
|
320
|
+
name: mixlib-shellout
|
334
321
|
requirement: !ruby/object:Gem::Requirement
|
335
322
|
requirements:
|
336
323
|
- - "~>"
|
337
324
|
- !ruby/object:Gem::Version
|
338
|
-
version: '0
|
325
|
+
version: '3.0'
|
339
326
|
type: :runtime
|
340
327
|
prerelease: false
|
341
328
|
version_requirements: !ruby/object:Gem::Requirement
|
342
329
|
requirements:
|
343
330
|
- - "~>"
|
344
331
|
- !ruby/object:Gem::Version
|
345
|
-
version: '0
|
332
|
+
version: '3.0'
|
346
333
|
- !ruby/object:Gem::Dependency
|
347
334
|
name: inspec
|
348
335
|
requirement: !ruby/object:Gem::Requirement
|
@@ -350,6 +337,15 @@ dependencies:
|
|
350
337
|
- - ">="
|
351
338
|
- !ruby/object:Gem::Version
|
352
339
|
version: '3'
|
340
|
+
- - "!="
|
341
|
+
- !ruby/object:Gem::Version
|
342
|
+
version: 4.24.26
|
343
|
+
- - "!="
|
344
|
+
- !ruby/object:Gem::Version
|
345
|
+
version: 4.24.28
|
346
|
+
- - "!="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: 4.24.32
|
353
349
|
- - "<"
|
354
350
|
- !ruby/object:Gem::Version
|
355
351
|
version: '5'
|
@@ -360,6 +356,15 @@ dependencies:
|
|
360
356
|
- - ">="
|
361
357
|
- !ruby/object:Gem::Version
|
362
358
|
version: '3'
|
359
|
+
- - "!="
|
360
|
+
- !ruby/object:Gem::Version
|
361
|
+
version: 4.24.26
|
362
|
+
- - "!="
|
363
|
+
- !ruby/object:Gem::Version
|
364
|
+
version: 4.24.28
|
365
|
+
- - "!="
|
366
|
+
- !ruby/object:Gem::Version
|
367
|
+
version: 4.24.32
|
363
368
|
- - "<"
|
364
369
|
- !ruby/object:Gem::Version
|
365
370
|
version: '5'
|
@@ -369,28 +374,14 @@ dependencies:
|
|
369
374
|
requirements:
|
370
375
|
- - "~>"
|
371
376
|
- !ruby/object:Gem::Version
|
372
|
-
version: '2.
|
377
|
+
version: '2.3'
|
373
378
|
type: :runtime
|
374
379
|
prerelease: false
|
375
380
|
version_requirements: !ruby/object:Gem::Requirement
|
376
381
|
requirements:
|
377
382
|
- - "~>"
|
378
383
|
- !ruby/object:Gem::Version
|
379
|
-
version: '2.
|
380
|
-
- !ruby/object:Gem::Dependency
|
381
|
-
name: mixlib-shellout
|
382
|
-
requirement: !ruby/object:Gem::Requirement
|
383
|
-
requirements:
|
384
|
-
- - "~>"
|
385
|
-
- !ruby/object:Gem::Version
|
386
|
-
version: '3.0'
|
387
|
-
type: :runtime
|
388
|
-
prerelease: false
|
389
|
-
version_requirements: !ruby/object:Gem::Requirement
|
390
|
-
requirements:
|
391
|
-
- - "~>"
|
392
|
-
- !ruby/object:Gem::Version
|
393
|
-
version: '3.0'
|
384
|
+
version: '2.3'
|
394
385
|
- !ruby/object:Gem::Dependency
|
395
386
|
name: test-kitchen
|
396
387
|
requirement: !ruby/object:Gem::Requirement
|
@@ -508,6 +499,7 @@ files:
|
|
508
499
|
- lib/kitchen/terraform/system.rb
|
509
500
|
- lib/kitchen/terraform/system_attrs_inputs_resolver.rb
|
510
501
|
- lib/kitchen/terraform/system_attrs_outputs_resolver.rb
|
502
|
+
- lib/kitchen/terraform/system_bastion_host_resolver.rb
|
511
503
|
- lib/kitchen/terraform/system_hosts_resolver.rb
|
512
504
|
- lib/kitchen/terraform/system_inspec_map.rb
|
513
505
|
- lib/kitchen/terraform/systems_verifier.rb
|
@@ -543,16 +535,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
543
535
|
version: '2.4'
|
544
536
|
- - "<"
|
545
537
|
- !ruby/object:Gem::Version
|
546
|
-
version: '2.
|
538
|
+
version: '2.8'
|
547
539
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
548
540
|
requirements:
|
549
541
|
- - ">="
|
550
542
|
- !ruby/object:Gem::Version
|
551
543
|
version: '0'
|
552
544
|
requirements:
|
553
|
-
- Terraform >= v0.11.4, < v0.
|
554
|
-
|
555
|
-
rubygems_version: 2.7.7
|
545
|
+
- Terraform >= v0.11.4, < v0.15.0
|
546
|
+
rubygems_version: 3.0.3
|
556
547
|
signing_key:
|
557
548
|
specification_version: 4
|
558
549
|
summary: Test Kitchen plugins for testing Terraform configuration
|
metadata.gz.sig
CHANGED
Binary file
|