kitchen-terraform 4.7.0 → 4.8.0

Sign up to get free protection for your applications and to get access to all the features.
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