kitchen-terraform 4.7.0 → 4.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0848f7074fecffac74e56a1b39e4598dfd594d82e3bed471f0b1a63e169e9ff5'
4
- data.tar.gz: a41ea06cd4949a662e4ca66b859afa44d2730653b59ff62b4d6dee3fc37c8d22
3
+ metadata.gz: 47a51e0ce916a62c6b14c16662703371bdff9256fb2ab127080cc3b18723f80a
4
+ data.tar.gz: 5088420cf548532cf0f845f208ede28e41fe1d9a9d989c01cfd72eaba9fceaa0
5
5
  SHA512:
6
- metadata.gz: af6738cff28a4109dd94722f81e162cebe0723388a038f7db1fd96f5776b082145898748bae44e3794e14627e842f282a460dffc762cb693be1ee92400f8ef49
7
- data.tar.gz: 52a8f5091ea9203bf8a3c44ca1af5d7ee3190395283ad94e096c2486c0bc84ebca5cd39d4abc15090af9a840e577c1254b79284100f8cecf6cbb343907fd2503
6
+ metadata.gz: 1f9bb569f6a8a0b9da54935a1b3e4009ca4f5d7174d989949f5fb919490f4cf0ff4e422bc00c15b4629ca62776620753e9d4cab71c1d3c23579c380a6b9806ee
7
+ data.tar.gz: 742477dc25ee6e48d39a477a3f3e2565c3b3563a8f0f4112b949d670a4778db224822a6c96c0a83e08992d20859107b94d8746f62e161aa0b020fb37eae3ec80
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -266,19 +266,31 @@ class ::Kitchen::Driver::Terraform < ::Kitchen::Driver::Base
266
266
  raise ::Kitchen::ActionFailed, error.message
267
267
  end
268
268
 
269
+ # Retrieves the Terraform input variables for a Kitchen instance provided by the configuration.
270
+ #
271
+ # @return [self]
272
+ # @yieldparam inputs [::Hash] the input variables.
273
+ def retrieve_inputs
274
+ yield inputs: config_variables
275
+
276
+ self
277
+ end
278
+
269
279
  # Retrieves the Terraform state outputs for a Kitchen instance by selecting the test workspace and fetching the
270
280
  # outputs.
271
281
  #
272
282
  # @raise [::Kitchen::ActionFailed] if the result of the action is a failure.
273
- # @return [void]
274
- # @yieldparam output [::Hash] the state output.
283
+ # @return [self]
284
+ # @yieldparam outputs [::Hash] the state output.
275
285
  def retrieve_outputs(&block)
276
286
  run_workspace_select_instance
277
287
  ::Kitchen::Terraform::Command::Output.run(
278
288
  client: config_client,
279
- options: {cwd: config_root_module_directory, live_stream: debug_logger, timeout: config_command_timeout},
289
+ options: { cwd: config_root_module_directory, live_stream: debug_logger, timeout: config_command_timeout },
280
290
  &block
281
291
  )
292
+
293
+ self
282
294
  rescue ::Kitchen::Terraform::Error => error
283
295
  raise ::Kitchen::ActionFailed, error.message
284
296
  end
@@ -62,7 +62,7 @@ module ::Kitchen::Terraform::Command::Output
62
62
  # @api private
63
63
  def run_shell_out(client:, options:)
64
64
  ::Kitchen::Terraform::ShellOut.run client: client, command: "output -json", options: options do |standard_output:|
65
- yield outputs: ::JSON.parse(standard_output)
65
+ yield outputs: ::Kitchen::Util.stringified_hash(::JSON.parse(standard_output))
66
66
  end
67
67
  end
68
68
  end
@@ -21,19 +21,28 @@ module Kitchen
21
21
  module Terraform
22
22
  module ConfigSchemas
23
23
  # A system is a mapping which is used to configure the execution of {https://www.inspec.io/docs/ InSpec tests}
24
- # against a system in the Terraform state.
24
+ # against a system in the Terraform state. The keys of a system mapping correlate to the arguments and the
25
+ # options of the {https://www.inspec.io/docs/reference/cli/#exec +inspec exec+} command-line interface
26
+ # subcomamand.
25
27
  #
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} by default. The profile must be
28
+ # ===== InSpec Profiles
29
+ #
30
+ # All systems within the same {https://kitchen.ci/docs/getting-started/adding-suite Kitchen suite} are by default
31
+ # tested using the same {https://www.inspec.io/docs/reference/profiles/ InSpec profile}. The profile must be
28
32
  # implemented in the directory located at `<Kitchen root>/test/integration/<suite name>`. This behaviour can be
29
33
  # overridden with the <code>profile_locations</code> key.
30
34
  #
31
- # The values of all {https://www.terraform.io/docs/configuration/outputs.html Terraform outputs} are associated
32
- # with equivalently named
33
- # {https://www.inspec.io/docs/reference/profiles/#profile-attributes InSpec profile attributes}.
34
- #
35
- # The keys of a system mapping correlate to the arguments and the options of the
36
- # {https://www.inspec.io/docs/reference/cli/#exec +inspec exec+} command-line interface subcomamand.
35
+ # The values of any {https://www.terraform.io/docs/configuration/variables.html Terraform input variables}
36
+ # configured with the driver's <code>variables</code> attribute and the values of any
37
+ # {https://www.terraform.io/docs/configuration/outputs.html Terraform output variables} which exist in the
38
+ # Terraform state are associated with equivalently named
39
+ # {https://www.inspec.io/docs/reference/profiles/#profile-attributes InSpec profile attributes}, prefixed with
40
+ # <code>input_</code> or <code>output_</code>, respectively. The values of the output variables are also
41
+ # associated with equivalently named profile attributes without any prefixes for backward compatibility. Output
42
+ # variable associations can be overridden with the <code>attrs_outputs</code> key. For example, the value of an
43
+ # input variable named `test` will be associated with an attribute named `input_test`, and the value of an output
44
+ # variable named `test` will be associated with an attribute named `output_test` as well as an attribute named
45
+ # `test`.
37
46
  #
38
47
  # ===== Required Keys
39
48
  #
@@ -65,10 +65,12 @@ module Kitchen
65
65
 
66
66
  # #verify verifies the system by executing InSpec.
67
67
  #
68
+ # @param inputs [::Hash] the Terraform input variables to be utilized as InSpec profile attributes.
68
69
  # @param inspec_options [::Hash] the options to be passed to InSpec.
70
+ # @param outputs [::Hash] the Terraform output variables to be utilized as InSpec profile attributes.
69
71
  # @return [self]
70
- def verify(inspec_options:, outputs:)
71
- resolve outputs: outputs
72
+ def verify(inputs:, inspec_options:, outputs:)
73
+ resolve inputs: inputs, outputs: outputs
72
74
  execute_inspec options: inspec_options
73
75
 
74
76
  self
@@ -81,7 +83,7 @@ module Kitchen
81
83
  def execute_inspec(options:)
82
84
  inspec.new(
83
85
  options: options_with_attributes(options: options),
84
- profile_locations: @mapping.fetch(:profile_locations)
86
+ profile_locations: @mapping.fetch(:profile_locations),
85
87
  ).exec(system: self)
86
88
  end
87
89
 
@@ -108,16 +110,16 @@ module Kitchen
108
110
  options.merge attributes: @attributes
109
111
  end
110
112
 
111
- def resolve(outputs:)
112
- resolve_attrs outputs: outputs
113
+ def resolve(inputs:, outputs:)
114
+ resolve_attrs inputs: inputs, outputs: outputs
113
115
  resolve_hosts outputs: outputs
114
116
  end
115
117
 
116
- def resolve_attrs(outputs:)
117
- ::Kitchen::Terraform::SystemAttrsResolver.new(outputs: outputs).resolve(
118
+ def resolve_attrs(inputs:, outputs:)
119
+ ::Kitchen::Terraform::SystemAttrsResolver.new(inputs: inputs, outputs: outputs).resolve(
118
120
  attrs_outputs_keys: @attrs_outputs.keys,
119
121
  attrs_outputs_values: @attrs_outputs.values,
120
- system: self
122
+ system: self,
121
123
  )
122
124
 
123
125
  self
@@ -28,9 +28,9 @@ module Kitchen
28
28
  # @param system [::Kitchen::Terraform::System] the system.
29
29
  # @raise [::Kitchen::Terraform::Error] if the fetching the value of the output fails.
30
30
  def resolve(attrs_outputs_keys:, attrs_outputs_values:, system:)
31
- system.add_attrs attrs: @outputs.merge(
32
- attrs_outputs_keys.lazy.map(&:to_s).zip(@outputs.fetch_values(*attrs_outputs_values)).to_h
33
- )
31
+ system.add_attrs(attrs: @inputs.merge(@outputs.merge(
32
+ attrs_outputs_keys.lazy.map(&:to_s).zip(@outputs.fetch_values(*attrs_outputs_values)).to_h
33
+ )))
34
34
 
35
35
  self
36
36
  rescue ::KeyError => key_error
@@ -42,12 +42,16 @@ module Kitchen
42
42
  # #initialize prepares the instance to be used.
43
43
  #
44
44
  # @param outputs [#to_hash] the outputs of the Terraform state under test.
45
- def initialize(outputs:)
46
- @outputs = Hash[outputs].inject({}) do |hash, (key, value)|
47
- hash.store key, value.fetch("value")
48
-
49
- hash
50
- end
45
+ def initialize(inputs:, outputs:)
46
+ @inputs = inputs.map do |key, value|
47
+ ["input_#{key}", value]
48
+ end.to_h
49
+ @outputs = Hash[outputs].map do |key, value|
50
+ [key, value.fetch("value")]
51
+ end.to_h
52
+ @outputs.merge!(@outputs.map do |key, value|
53
+ ["output_#{key}", value]
54
+ end.to_h)
51
55
  rescue ::KeyError => key_error
52
56
  raise ::Kitchen::Terraform::Error, "Preparing to resolve attrs failed\n#{key_error}"
53
57
  end
@@ -72,7 +72,7 @@ module ::Kitchen::Terraform::Version
72
72
 
73
73
  # @api private
74
74
  def value
75
- self.value = ::Gem::Version.new "4.7.0" if not @value
75
+ self.value = ::Gem::Version.new "4.8.0" if not @value
76
76
  @value
77
77
  end
78
78
 
@@ -87,7 +87,7 @@ module Kitchen
87
87
  # @raise [::Kitchen::ActionFailed] if the result of the action is a failure.
88
88
  # @return [void]
89
89
  def call(_kitchen_state)
90
- load_outputs
90
+ load_variables
91
91
  verify_systems
92
92
  if !@error_messages.empty?
93
93
  raise ::Kitchen::ActionFailed, @error_messages.join("\n\n")
@@ -105,17 +105,6 @@ module Kitchen
105
105
  false
106
106
  end
107
107
 
108
- # finalize_config! configures InSpec options which remain consistent between systems.
109
- #
110
- # @param kitchen_instance [::Kitchen::Instance] an associated Kitchen instance.
111
- # @return [self]
112
- def finalize_config!(kitchen_instance)
113
- super kitchen_instance
114
- @inspec_options.merge! "color" => config_color
115
-
116
- self
117
- end
118
-
119
108
  private
120
109
 
121
110
  def handle_error(message:)
@@ -127,20 +116,21 @@ module Kitchen
127
116
  end
128
117
  end
129
118
 
130
- def load_outputs
119
+ def load_variables
131
120
  instance.driver.retrieve_outputs do |outputs:|
132
- @outputs.replace ::Kitchen::Util.stringified_hash outputs
121
+ @outputs.replace outputs
122
+ end.retrieve_inputs do |inputs:|
123
+ @inputs.replace inputs
133
124
  end
134
125
  end
135
126
 
136
127
  def initialize(configuration = {})
137
128
  init_config configuration
138
129
  @error_messages = []
139
- @inspec_options = { "distinct_exit" => false }
130
+ @inputs = {}
140
131
  @outputs = {}
141
132
  end
142
133
 
143
-
144
134
  # load_needed_dependencies! loads the InSpec libraries required to verify a Terraform state.
145
135
  #
146
136
  # @raise [::Kitchen::ClientError] if loading the InSpec libraries fails.
@@ -154,13 +144,15 @@ module Kitchen
154
144
  end
155
145
 
156
146
  def system_inspec_options(system:)
157
- ::Kitchen::Terraform::InSpecOptionsMapper.new(system: system).map options: @inspec_options.dup
147
+ ::Kitchen::Terraform::InSpecOptionsMapper.new(system: system)
148
+ .map(options: { "color" => config_color, "distinct_exit" => false })
158
149
  end
159
150
 
160
151
  def verify(system:)
161
152
  ::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)
153
+ mapping: { profile_locations: [::File.join(config.fetch(:test_base_path), instance.suite.name)] }
154
+ .merge(system),
155
+ ).verify(inputs: @inputs, inspec_options: system_inspec_options(system: system), outputs: @outputs)
164
156
  rescue => error
165
157
  handle_error message: error.message
166
158
  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.7.0
4
+ version: 4.8.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-13 00:00:00.000000000 Z
64
+ date: 2019-04-14 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