kitchen-terraform 4.6.0 → 4.7.0
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +9 -6
- data/lib/kitchen/terraform/config_schemas/system.rb +27 -4
- data/lib/kitchen/terraform/inspec.rb +4 -2
- data/lib/kitchen/terraform/inspec_with_hosts.rb +7 -6
- data/lib/kitchen/terraform/inspec_without_hosts.rb +6 -5
- data/lib/kitchen/terraform/system.rb +7 -7
- data/lib/kitchen/terraform/version.rb +1 -1
- data/lib/kitchen/verifier/terraform.rb +4 -8
- metadata +2 -2
- 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: '0848f7074fecffac74e56a1b39e4598dfd594d82e3bed471f0b1a63e169e9ff5'
|
|
4
|
+
data.tar.gz: a41ea06cd4949a662e4ca66b859afa44d2730653b59ff62b4d6dee3fc37c8d22
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: af6738cff28a4109dd94722f81e162cebe0723388a038f7db1fd96f5776b082145898748bae44e3794e14627e842f282a460dffc762cb693be1ee92400f8ef49
|
|
7
|
+
data.tar.gz: 52a8f5091ea9203bf8a3c44ca1af5d7ee3190395283ad94e096c2486c0bc84ebca5cd39d4abc15090af9a840e577c1254b79284100f8cecf6cbb343907fd2503
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data.tar.gz.sig
CHANGED
|
Binary file
|
data/README.md
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
[![Gem downloads total][gem-downloads-total-shield]][kitchen-terraform-gem]
|
|
8
8
|
|
|
9
9
|
[![Build status][build-status-shield]][build-status]
|
|
10
|
-
[![
|
|
10
|
+
[![Code coverage][code-coverage-shield]][code-coverage]
|
|
11
11
|
[![Maintainability][maintainability-shield]][maintainability]
|
|
12
|
+
[![Technical debt][technical-debt-shield]][technical-debt]
|
|
12
13
|
[![Dependencies][hakiri-shield]][hakiri]
|
|
13
14
|
|
|
14
15
|
[![Gitter chat][gitter-shield]][gitter]
|
|
@@ -355,12 +356,14 @@ Kitchen-Terraform is distributed under the [Apache License][license].
|
|
|
355
356
|
|
|
356
357
|
<!-- Markdown links and image definitions -->
|
|
357
358
|
|
|
358
|
-
[build-status-shield]: https://img.shields.io/travis/newcontext-oss/kitchen-terraform.svg
|
|
359
|
+
[build-status-shield]: https://img.shields.io/travis/com/newcontext-oss/kitchen-terraform.svg
|
|
359
360
|
[build-status]: https://travis-ci.com/newcontext-oss/kitchen-terraform
|
|
360
361
|
[bundler-getting-started]: https://bundler.io/#getting-started
|
|
361
362
|
[bundler-in-depth]: https://bundler.io/gemfile.html
|
|
362
363
|
[bundler]: https://bundler.io/index.html#getting-started
|
|
363
364
|
[changelog]: https://github.com/newcontext-oss/kitchen-terraform/blob/master/CHANGELOG.md
|
|
365
|
+
[code-coverage-shield]: https://img.shields.io/codeclimate/coverage/newcontext-oss/kitchen-terraform.svg
|
|
366
|
+
[code-coverage]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/
|
|
364
367
|
[contributing-document]: https://github.com/newcontext-oss/kitchen-terraform/blob/master/CONTRIBUTING.md
|
|
365
368
|
[docker]: https://www.docker.com/
|
|
366
369
|
[docker-community-edition]: https://store.docker.com/editions/community/docker-ce-server-ubuntu
|
|
@@ -377,8 +380,8 @@ Kitchen-Terraform is distributed under the [Apache License][license].
|
|
|
377
380
|
[kitchen-terraform-logo]: https://raw.githubusercontent.com/newcontext-oss/kitchen-terraform/master/assets/logo.png
|
|
378
381
|
[kitchen-terraform-tutorials]: https://newcontext-oss.github.io/kitchen-terraform/tutorials/
|
|
379
382
|
[license]: https://github.com/newcontext-oss/kitchen-terraform/blob/master/LICENSE
|
|
380
|
-
[maintainability-shield]: https://
|
|
381
|
-
[maintainability]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/
|
|
383
|
+
[maintainability-shield]: https://img.shields.io/codeclimate/maintainability-percentage/newcontext-oss/kitchen-terraform.svg
|
|
384
|
+
[maintainability]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/
|
|
382
385
|
[new-context-github]: https://github.com/newcontext
|
|
383
386
|
[new-context-linkedin]: https://www.linkedin.com/company/-new-context-
|
|
384
387
|
[new-context-twitter]: https://twitter.com/newcontext
|
|
@@ -390,14 +393,14 @@ Kitchen-Terraform is distributed under the [Apache License][license].
|
|
|
390
393
|
[ruby-installation]: https://www.ruby-lang.org/en/documentation/installation/
|
|
391
394
|
[ruby]: https://www.ruby-lang.org/en/
|
|
392
395
|
[rubygems-installing-gems]: http://guides.rubygems.org/rubygems-basics/#rubygems-installing-gems
|
|
396
|
+
[technical-debt-shield]: https://img.shields.io/codeclimate/tech-debt/newcontext-oss/kitchen-terraform.svg
|
|
397
|
+
[technical-debt]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/
|
|
393
398
|
[terraform-cli]: https://www.terraform.io/docs/commands/index.html
|
|
394
399
|
[terraform-driver]: http://www.rubydoc.info/github/newcontext-oss/kitchen-terraform/Kitchen/Driver/Terraform
|
|
395
400
|
[terraform-install]: https://www.terraform.io/intro/getting-started/install.html
|
|
396
401
|
[terraform-provisioner]: http://www.rubydoc.info/github/newcontext-oss/kitchen-terraform/Kitchen/Provisioner/Terraform
|
|
397
402
|
[terraform-verifier]: http://www.rubydoc.info/github/newcontext-oss/kitchen-terraform/Kitchen/Verifier/Terraform
|
|
398
403
|
[terraform]: https://www.terraform.io/
|
|
399
|
-
[test-coverage-shield]: https://api.codeclimate.com/v1/badges/73d4a2280a30e680bac4/test_coverage
|
|
400
|
-
[test-coverage]: https://codeclimate.com/github/newcontext-oss/kitchen-terraform/test_coverage
|
|
401
404
|
[test-kitchen-configuration-file]: https://docs.chef.io/config_yml_kitchen.html
|
|
402
405
|
[test-kitchen]: http://kitchen.ci/index.html
|
|
403
406
|
[tfenv]: https://github.com/kamatama41/tfenv
|
|
@@ -24,14 +24,15 @@ module Kitchen
|
|
|
24
24
|
# against a system in the Terraform state.
|
|
25
25
|
#
|
|
26
26
|
# All systems within the same {https://kitchen.ci/docs/getting-started/adding-suite Kitchen suite} are tested
|
|
27
|
-
# using the same {https://www.inspec.io/docs/reference/profiles/ InSpec profile}. The profile must be
|
|
28
|
-
# in the directory located at `<Kitchen root>/test/integration/<suite name>`.
|
|
27
|
+
# using the same {https://www.inspec.io/docs/reference/profiles/ InSpec profile} by default. The profile must be
|
|
28
|
+
# implemented in the directory located at `<Kitchen root>/test/integration/<suite name>`. This behaviour can be
|
|
29
|
+
# overridden with the <code>profile_locations</code> key.
|
|
29
30
|
#
|
|
30
31
|
# The values of all {https://www.terraform.io/docs/configuration/outputs.html Terraform outputs} are associated
|
|
31
32
|
# with equivalently named
|
|
32
33
|
# {https://www.inspec.io/docs/reference/profiles/#profile-attributes InSpec profile attributes}.
|
|
33
34
|
#
|
|
34
|
-
# The keys of a system mapping correlate to the options of the
|
|
35
|
+
# The keys of a system mapping correlate to the arguments and the options of the
|
|
35
36
|
# {https://www.inspec.io/docs/reference/cli/#exec +inspec exec+} command-line interface subcomamand.
|
|
36
37
|
#
|
|
37
38
|
# ===== Required Keys
|
|
@@ -66,7 +67,7 @@ module Kitchen
|
|
|
66
67
|
# ===== Optional Keys
|
|
67
68
|
#
|
|
68
69
|
# The following keys may be included by any system to alter the behaviour of InSpec. Any key which is omitted
|
|
69
|
-
# will be associated with a default value as defined by InSpec.
|
|
70
|
+
# will be associated with a default value as defined by InSpec except where otherwise noted.
|
|
70
71
|
#
|
|
71
72
|
# ====== attrs
|
|
72
73
|
#
|
|
@@ -297,6 +298,27 @@ module Kitchen
|
|
|
297
298
|
# backend: ssh
|
|
298
299
|
# port: 1234
|
|
299
300
|
#
|
|
301
|
+
# ====== profile_locations
|
|
302
|
+
#
|
|
303
|
+
# The value of the <code>profile_locations</code> key is a sequence of scalars which is used to locate
|
|
304
|
+
# {https://www.inspec.io/docs/reference/profiles/ InSpec profiles} containing the controls to be executed against
|
|
305
|
+
# the system. This key corresponds to the LOCATIONS argument of <code>inspec exec</code>.
|
|
306
|
+
#
|
|
307
|
+
# The default value contains a single scalar which assumes that a profile exists locally for the associated
|
|
308
|
+
# {https://kitchen.ci/docs/getting-started/adding-suite Kitchen suite} at
|
|
309
|
+
# <code><KITCHEN ROOT>/test/integration/<KITCHEN SUITE NAME></code>.
|
|
310
|
+
#
|
|
311
|
+
# <em>Example kitchen.yml</em>
|
|
312
|
+
# verifier:
|
|
313
|
+
# name: terraform
|
|
314
|
+
# systems:
|
|
315
|
+
# - name: a system
|
|
316
|
+
# backend: local
|
|
317
|
+
# profile_locations:
|
|
318
|
+
# - supermarket://username/linux-baseline
|
|
319
|
+
# - /path/to/profile
|
|
320
|
+
# - /path/to/a_test.rb
|
|
321
|
+
#
|
|
300
322
|
# ====== proxy_command
|
|
301
323
|
#
|
|
302
324
|
# The value of the +proxy_command+ key is a scalar which is used as a proxy command when connecting to a host via
|
|
@@ -535,6 +557,7 @@ module Kitchen
|
|
|
535
557
|
optional(:password).filled :str?
|
|
536
558
|
optional(:path).filled :str?
|
|
537
559
|
optional(:port).value :int?
|
|
560
|
+
optional(:profile_locations).each :filled?, :str?
|
|
538
561
|
optional(:proxy_command).filled :str?
|
|
539
562
|
optional(:reporter).each(:filled?, :str?)
|
|
540
563
|
optional(:self_signed).value :bool?
|
|
@@ -66,9 +66,11 @@ module Kitchen
|
|
|
66
66
|
|
|
67
67
|
private
|
|
68
68
|
|
|
69
|
-
def initialize(options:,
|
|
69
|
+
def initialize(options:, profile_locations:)
|
|
70
70
|
@runner = ::Inspec::Runner.new options.merge logger: ::Inspec::Log.logger
|
|
71
|
-
|
|
71
|
+
profile_locations.each do |profile_location|
|
|
72
|
+
@runner.add_target profile_location
|
|
73
|
+
end
|
|
72
74
|
end
|
|
73
75
|
end
|
|
74
76
|
end
|
|
@@ -29,20 +29,21 @@ module Kitchen
|
|
|
29
29
|
def exec(system:)
|
|
30
30
|
system.each_host do |host:|
|
|
31
31
|
::Kitchen::Terraform::InSpec
|
|
32
|
-
.new(options: options.merge(host: host),
|
|
33
|
-
.info(message: "Verifying host #{host}
|
|
32
|
+
.new(options: options.merge(host: host), profile_locations: profile_locations)
|
|
33
|
+
.info(message: "#{system}: Verifying host #{host}").exec
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
private
|
|
38
38
|
|
|
39
|
-
attr_accessor :options, :
|
|
39
|
+
attr_accessor :options, :profile_locations
|
|
40
40
|
|
|
41
41
|
# @param options [::Hash] options for execution.
|
|
42
|
-
# @param
|
|
43
|
-
|
|
42
|
+
# @param profile_locations [::Array<::String>] the locations of the InSpec profiles which contain the controls to
|
|
43
|
+
# be executed.
|
|
44
|
+
def initialize(options:, profile_locations:)
|
|
44
45
|
self.options = options
|
|
45
|
-
self.
|
|
46
|
+
self.profile_locations = profile_locations
|
|
46
47
|
end
|
|
47
48
|
end
|
|
48
49
|
end
|
|
@@ -26,18 +26,19 @@ module Kitchen
|
|
|
26
26
|
# @return [void]
|
|
27
27
|
def exec(system:)
|
|
28
28
|
::Kitchen::Terraform::InSpec
|
|
29
|
-
.new(options: options,
|
|
29
|
+
.new(options: options, profile_locations: profile_locations).info(message: "#{system}: Verifying").exec
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
private
|
|
33
33
|
|
|
34
|
-
attr_accessor :options, :
|
|
34
|
+
attr_accessor :options, :profile_locations
|
|
35
35
|
|
|
36
36
|
# @param options [::Hash] options for execution.
|
|
37
|
-
# @param
|
|
38
|
-
|
|
37
|
+
# @param profile_locations [::Array<::String>] the locations of the InSpec profiles which contain the controls to
|
|
38
|
+
# be executed.
|
|
39
|
+
def initialize(options:, profile_locations:)
|
|
39
40
|
self.options = options
|
|
40
|
-
self.
|
|
41
|
+
self.profile_locations = profile_locations
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
44
|
end
|
|
@@ -66,11 +66,10 @@ module Kitchen
|
|
|
66
66
|
# #verify verifies the system by executing InSpec.
|
|
67
67
|
#
|
|
68
68
|
# @param inspec_options [::Hash] the options to be passed to InSpec.
|
|
69
|
-
# @param inspec_profile_path [::String] the path to the profile which InSpec will execute.
|
|
70
69
|
# @return [self]
|
|
71
|
-
def verify(inspec_options:,
|
|
70
|
+
def verify(inspec_options:, outputs:)
|
|
72
71
|
resolve outputs: outputs
|
|
73
|
-
execute_inspec options: inspec_options
|
|
72
|
+
execute_inspec options: inspec_options
|
|
74
73
|
|
|
75
74
|
self
|
|
76
75
|
rescue => error
|
|
@@ -79,10 +78,11 @@ module Kitchen
|
|
|
79
78
|
|
|
80
79
|
private
|
|
81
80
|
|
|
82
|
-
def execute_inspec(options
|
|
83
|
-
inspec.new(
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
def execute_inspec(options:)
|
|
82
|
+
inspec.new(
|
|
83
|
+
options: options_with_attributes(options: options),
|
|
84
|
+
profile_locations: @mapping.fetch(:profile_locations)
|
|
85
|
+
).exec(system: self)
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def initialize(mapping:)
|
|
@@ -122,6 +122,7 @@ module Kitchen
|
|
|
122
122
|
if config_fail_fast
|
|
123
123
|
raise ::Kitchen::Terraform::Error, message
|
|
124
124
|
else
|
|
125
|
+
logger.error message
|
|
125
126
|
@error_messages.push message
|
|
126
127
|
end
|
|
127
128
|
end
|
|
@@ -139,9 +140,6 @@ module Kitchen
|
|
|
139
140
|
@outputs = {}
|
|
140
141
|
end
|
|
141
142
|
|
|
142
|
-
def inspec_profile_path
|
|
143
|
-
@inspec_profile_path ||= ::File.join config.fetch(:test_base_path), instance.suite.name
|
|
144
|
-
end
|
|
145
143
|
|
|
146
144
|
# load_needed_dependencies! loads the InSpec libraries required to verify a Terraform state.
|
|
147
145
|
#
|
|
@@ -160,11 +158,9 @@ module Kitchen
|
|
|
160
158
|
end
|
|
161
159
|
|
|
162
160
|
def verify(system:)
|
|
163
|
-
::Kitchen::Terraform::System.new(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
outputs: @outputs
|
|
167
|
-
)
|
|
161
|
+
::Kitchen::Terraform::System.new(
|
|
162
|
+
mapping: {profile_locations: [::File.join(config.fetch(:test_base_path), instance.suite.name)]}.merge(system)
|
|
163
|
+
).verify(inspec_options: system_inspec_options(system: system), outputs: @outputs)
|
|
168
164
|
rescue => error
|
|
169
165
|
handle_error message: error.message
|
|
170
166
|
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: 4.
|
|
4
|
+
version: 4.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aaron Lane
|
|
@@ -61,7 +61,7 @@ cert_chain:
|
|
|
61
61
|
XAjP/LERlXAwM+NCUycJw7BZMn7L2wIdnq6Le1rL6VJS17CZt2heuRtsF+3g0egR
|
|
62
62
|
x97GmUumeM67PGeVodlIV65tdXrdlqKlHcE=
|
|
63
63
|
-----END CERTIFICATE-----
|
|
64
|
-
date: 2019-04-
|
|
64
|
+
date: 2019-04-13 00:00:00.000000000 Z
|
|
65
65
|
dependencies:
|
|
66
66
|
- !ruby/object:Gem::Dependency
|
|
67
67
|
name: guard-bundler
|
metadata.gz.sig
CHANGED
|
Binary file
|