kitchen-terraform 6.1.0 → 7.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,7 @@
15
15
  # limitations under the License.
16
16
 
17
17
  require "kitchen"
18
- require "kitchen/terraform/command_executor"
18
+ require "kitchen/shell_out"
19
19
  require "kitchen/terraform/command/destroy"
20
20
  require "kitchen/terraform/command/init_factory"
21
21
  require "kitchen/terraform/command/version"
@@ -60,7 +60,7 @@ module Kitchen
60
60
  class Destroy
61
61
  # #call executes the action.
62
62
  #
63
- # @raise [Kitchen::TransientFailure] if a command fails.
63
+ # @raise [Kitchen::StandardError] if a command fails.
64
64
  # @return [self]
65
65
  def call
66
66
  read_client_version
@@ -73,19 +73,16 @@ module Kitchen
73
73
  # #initialize prepares a new instance of the class.
74
74
  #
75
75
  # @param config [Hash] the configuration of the driver.
76
+ # @param connection [Kitchen::Terraform::Transport::Connection] a Terraform connection.
76
77
  # @param logger [Kitchen::Logger] a logger for logging messages.
77
78
  # @param version_requirement [Gem::VersionRequirement] the required version of the Terraform client.
78
79
  # @param workspace_name [String] the name of the Terraform workspace to select or to create.
79
80
  # @return [Kitchen::Terraform::Driver::Destroy]
80
- def initialize(config:, logger:, version_requirement:, workspace_name:)
81
+ def initialize(config:, connection:, logger:, version_requirement:, workspace_name:)
81
82
  self.complete_config = config.to_hash.merge upgrade_during_init: false, workspace_name: workspace_name
83
+ self.connection = connection
82
84
  self.client_version = ::Gem::Version.new "0.0.0"
83
- self.command_executor = ::Kitchen::Terraform::CommandExecutor.new(
84
- client: complete_config.fetch(:client),
85
- logger: logger,
86
- )
87
85
  self.logger = logger
88
- define_options
89
86
  self.workspace_name = workspace_name
90
87
  self.destroy = ::Kitchen::Terraform::Command::Destroy.new config: complete_config
91
88
  self.workspace_delete_test = ::Kitchen::Terraform::Command::WorkspaceDelete.new config: complete_config
@@ -106,13 +103,11 @@ module Kitchen
106
103
 
107
104
  attr_accessor(
108
105
  :client_version,
109
- :command_executor,
110
106
  :complete_config,
111
- :destroy_options,
107
+ :connection,
112
108
  :destroy,
113
109
  :init,
114
110
  :logger,
115
- :options,
116
111
  :verify_version,
117
112
  :version,
118
113
  :workspace_delete_test,
@@ -124,32 +119,19 @@ module Kitchen
124
119
 
125
120
  def create_test_workspace
126
121
  logger.warn "Creating the #{workspace_name} Terraform workspace..."
127
- command_executor.run command: workspace_new_test, options: options do |standard_output|
128
- end
122
+ connection.execute workspace_new_test
129
123
  logger.warn "Finished creating the #{workspace_name} Terraform workspace."
130
124
  end
131
125
 
132
- def define_options
133
- self.options = {
134
- cwd: complete_config.fetch(:root_module_directory),
135
- timeout: complete_config.fetch(:command_timeout),
136
- }
137
- self.destroy_options = options.merge(
138
- environment: { "LC_ALL" => nil, "TF_IN_AUTOMATION" => "true", "TF_WARN_OUTPUT_ERRORS" => "true" },
139
- )
140
- end
141
-
142
126
  def destroy_infrastructure
143
127
  logger.warn "Destroying the Terraform-managed infrastructure..."
144
- command_executor.run command: destroy, options: destroy_options do |standard_output|
145
- end
128
+ connection.execute destroy
146
129
  logger.warn "Finished destroying the Terraform-managed infrastructure."
147
130
  end
148
131
 
149
132
  def delete_test_workspace
150
133
  logger.warn "Deleting the #{workspace_name} Terraform workspace..."
151
- command_executor.run command: workspace_delete_test, options: options do |standard_output|
152
- end
134
+ connection.execute workspace_delete_test
153
135
  logger.warn "Finished deleting the #{workspace_name} Terraform workspace."
154
136
  end
155
137
 
@@ -163,36 +145,28 @@ module Kitchen
163
145
 
164
146
  def initialize_directory
165
147
  logger.warn "Initializing the Terraform working directory..."
166
- command_executor.run(
167
- command: ::Kitchen::Terraform::Command::InitFactory.new(version: client_version)
168
- .build(config: complete_config),
169
- options: options,
170
- ) do |standard_output|
171
- end
148
+ connection.execute ::Kitchen::Terraform::Command::InitFactory.new(version: client_version)
149
+ .build(config: complete_config)
172
150
  logger.warn "Finished initializing the Terraform working directory."
173
151
  end
174
152
 
175
153
  def read_client_version
176
154
  logger.warn "Reading the Terraform client version..."
177
- command_executor.run command: version, options: options do |standard_output|
178
- self.client_version = ::Gem::Version.new standard_output.slice /Terraform v(\d+\.\d+\.\d+)/, 1
179
- end
155
+ self.client_version = ::Gem::Version.new connection.execute(version).slice /Terraform v(\d+\.\d+\.\d+)/, 1
180
156
  logger.warn "Finished reading the Terraform client version."
181
157
  end
182
158
 
183
159
  def select_default_workspace
184
160
  logger.warn "Selecting the default Terraform workspace..."
185
- command_executor.run command: workspace_select_default, options: options do |standard_output|
186
- end
161
+ connection.execute workspace_select_default
187
162
  logger.warn "Finished selecting the default Terraform workspace."
188
163
  end
189
164
 
190
165
  def select_or_create_test_workspace
191
166
  logger.warn "Selecting the #{workspace_name} Terraform workspace..."
192
- command_executor.run command: workspace_select_test, options: options do |standard_output|
193
- end
167
+ connection.execute workspace_select_test
194
168
  logger.warn "Finished selecting the #{workspace_name} Terraform workspace."
195
- rescue ::Kitchen::TransientFailure
169
+ rescue ::Kitchen::ShellOut::ShellCommandFailed
196
170
  create_test_workspace
197
171
  end
198
172
  end
@@ -26,38 +26,32 @@ module Kitchen
26
26
  # @raise [Kitchen::TransientFailure] if running the output command fails.
27
27
  # @yieldparam json_outputs [String] the output variables as a string of JSON.
28
28
  # @return [self]
29
- def read(command:, options:)
30
- run command: command, options: options do |json_outputs:|
31
- yield json_outputs: json_outputs
29
+ def read(command:)
30
+ json_outputs = "{}"
31
+
32
+ begin
33
+ json_outputs = connection.execute command
34
+ rescue ::Kitchen::StandardError => error
35
+ no_outputs_defined.match ::Regexp.escape error.original.to_s or raise ::Kitchen::TransientFailure, error.message
32
36
  end
33
37
 
38
+ yield json_outputs: json_outputs
39
+
34
40
  self
35
41
  end
36
42
 
37
43
  # #initialize prepares a new instance of the class.
38
44
  #
39
- # @param command_executor [Kitchen::Terraform::CommandExecutor] an executor to run the output command.
45
+ # @param connection [Kitchen::Terraform::Transport::Connection] a Terraform connection.
40
46
  # @return [Kitchen::Terraform::OutputsReader]
41
- def initialize(command_executor:)
42
- self.command_executor = command_executor
47
+ def initialize(connection:)
48
+ self.connection = connection
43
49
  self.no_outputs_defined = /no\\ outputs\\ defined/
44
50
  end
45
51
 
46
52
  private
47
53
 
48
- attr_accessor :command_executor, :no_outputs_defined
49
-
50
- def run(command:, options:)
51
- command_executor.run command: command, options: options do |standard_output|
52
- yield json_outputs: standard_output
53
- end
54
- rescue ::Kitchen::TransientFailure => error
55
- if no_outputs_defined.match ::Regexp.escape error.original.to_s
56
- yield json_outputs: "{}"
57
- else
58
- raise error
59
- end
60
- end
54
+ attr_accessor :connection, :no_outputs_defined
61
55
  end
62
56
  end
63
57
  end
@@ -15,7 +15,6 @@
15
15
  # limitations under the License.
16
16
 
17
17
  require "kitchen"
18
- require "kitchen/terraform/command_executor"
19
18
  require "kitchen/terraform/command/apply"
20
19
  require "kitchen/terraform/command/get"
21
20
  require "kitchen/terraform/command/output"
@@ -78,26 +77,22 @@ module Kitchen
78
77
  # #initialize prepares a new instance of the class.
79
78
  #
80
79
  # @param config [Hash] the configuration of the driver.
80
+ # @param connection [Kitchen::Terraform::Transport::Connection] a Terraform connection.
81
+ # @param debug_connection [Kitchen::Terraform::Transport::Connection] a Terraform connection that logs at the
82
+ # debug level.
81
83
  # @param logger [Kitchen::Logger] a logger for logging messages.
82
84
  # @param version_requirement [Gem::VersionRequirement] the required version of the Terraform client.
83
85
  # @param workspace_name [String] the name of the Terraform workspace to select or to create.
84
86
  # @return [Kitchen::Terraform::Driver::Converge]
85
- def initialize(config:, logger:, version_requirement:, workspace_name:)
87
+ def initialize(config:, connection:, debug_connection:, logger:, version_requirement:, workspace_name:)
86
88
  self.complete_config = config.to_hash.merge workspace_name: workspace_name
87
- client = complete_config.fetch :client
88
89
  self.client_version = ::Gem::Version.new "0.0.0"
89
- self.command_executor = ::Kitchen::Terraform::CommandExecutor.new(
90
- client: client,
91
- logger: logger,
92
- )
90
+ self.connection = connection
91
+ self.debug_connection = debug_connection
93
92
  self.logger = logger
94
- self.options = {
95
- cwd: complete_config.fetch(:root_module_directory),
96
- timeout: complete_config.fetch(:command_timeout),
97
- }
98
93
  self.workspace_name = workspace_name
99
94
  initialize_commands
100
- initialize_outputs_handlers client: client, logger: logger
95
+ initialize_outputs_handlers
101
96
  self.variables = complete_config.fetch :variables
102
97
  self.variables_manager = ::Kitchen::Terraform::VariablesManager.new
103
98
  self.verify_version = ::Kitchen::Terraform::VerifyVersion.new(
@@ -110,13 +105,12 @@ module Kitchen
110
105
  private
111
106
 
112
107
  attr_accessor(
113
- :apply,
114
108
  :client_version,
115
- :command_executor,
116
109
  :complete_config,
110
+ :connection,
111
+ :debug_connection,
117
112
  :get,
118
113
  :logger,
119
- :options,
120
114
  :output,
121
115
  :outputs_manager,
122
116
  :outputs_parser,
@@ -131,15 +125,13 @@ module Kitchen
131
125
 
132
126
  def build_infrastructure
133
127
  logger.warn "Building the infrastructure based on the Terraform configuration..."
134
- command_executor.run command: apply, options: options do |standard_output|
135
- end
128
+ connection.execute ::Kitchen::Terraform::Command::Apply.new config: complete_config
136
129
  logger.warn "Finished building the infrastructure based on the Terraform configuration."
137
130
  end
138
131
 
139
132
  def download_modules
140
133
  logger.warn "Downloading the modules needed for the Terraform configuration..."
141
- command_executor.run command: get, options: options do |standard_output|
142
- end
134
+ connection.execute get
143
135
  logger.warn "Finished downloading the modules needed for the Terraform configuration."
144
136
  end
145
137
 
@@ -151,22 +143,16 @@ module Kitchen
151
143
  end
152
144
 
153
145
  def initialize_commands
154
- self.apply = ::Kitchen::Terraform::Command::Apply.new config: complete_config
155
146
  self.get = ::Kitchen::Terraform::Command::Get.new
156
147
  self.output = ::Kitchen::Terraform::Command::Output.new
157
148
  self.workspace_select = ::Kitchen::Terraform::Command::WorkspaceSelect.new config: complete_config
158
149
  self.version = ::Kitchen::Terraform::Command::Version.new
159
150
  end
160
151
 
161
- def initialize_outputs_handlers(client:, logger:)
152
+ def initialize_outputs_handlers
162
153
  self.outputs_manager = ::Kitchen::Terraform::OutputsManager.new
163
154
  self.outputs_parser = ::Kitchen::Terraform::OutputsParser.new
164
- self.outputs_reader = ::Kitchen::Terraform::OutputsReader.new(
165
- command_executor: ::Kitchen::Terraform::CommandExecutor.new(
166
- client: client,
167
- logger: ::Kitchen::Terraform::DebugLogger.new(logger),
168
- ),
169
- )
155
+ self.outputs_reader = ::Kitchen::Terraform::OutputsReader.new connection: debug_connection
170
156
  end
171
157
 
172
158
  def parse_outputs(json_outputs:)
@@ -180,7 +166,7 @@ module Kitchen
180
166
 
181
167
  def read_and_parse_outputs(&block)
182
168
  logger.warn "Reading the output variables from the Terraform state..."
183
- outputs_reader.read command: output, options: options do |json_outputs:|
169
+ outputs_reader.read command: output do |json_outputs:|
184
170
  logger.warn "Finished reading the output variables from the Terraform state."
185
171
 
186
172
  parse_outputs json_outputs: json_outputs, &block
@@ -189,9 +175,7 @@ module Kitchen
189
175
 
190
176
  def read_client_version
191
177
  logger.warn "Reading the Terraform client version..."
192
- command_executor.run command: version, options: options do |standard_output|
193
- self.client_version = ::Gem::Version.new standard_output.slice /Terraform v(\d+\.\d+\.\d+)/, 1
194
- end
178
+ self.client_version = ::Gem::Version.new connection.execute(version).slice /Terraform v(\d+\.\d+\.\d+)/, 1
195
179
  logger.warn "Finished reading the Terraform client version."
196
180
  end
197
181
 
@@ -212,19 +196,14 @@ module Kitchen
212
196
 
213
197
  def select_workspace
214
198
  logger.warn "Selecting the #{workspace_name} Terraform workspace..."
215
- command_executor.run command: workspace_select, options: options do |standard_output|
216
- end
199
+ connection.execute workspace_select
217
200
  logger.warn "Finished selecting the #{workspace_name} Terraform workspace."
218
201
  end
219
202
 
220
203
  def validate_files
221
204
  logger.warn "Validating the Terraform configuration files..."
222
- command_executor.run(
223
- command: ::Kitchen::Terraform::Command::ValidateFactory.new(version: client_version)
224
- .build(config: complete_config),
225
- options: options,
226
- ) do |standard_output|
227
- end
205
+ connection.execute ::Kitchen::Terraform::Command::ValidateFactory.new(version: client_version)
206
+ .build(config: complete_config)
228
207
  logger.warn "Finished validating the Terraform configuration files."
229
208
  end
230
209
  end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2016-2021 Copado NCS LLC
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/transport/exec"
18
+
19
+ module Kitchen
20
+ module Terraform
21
+ module Transport
22
+ # Terraform commands are run by shelling out and using the
23
+ # {https://www.terraform.io/docs/commands/index.html command-line interface}.
24
+ #
25
+ # The shell out environment includes the TF_IN_AUTOMATION environment variable as specified by the
26
+ # {https://www.terraform.io/guides/running-terraform-in-automation.html#controlling-terraform-output-in-automation Running Terraform in Automation guide}.
27
+ class Connection < ::Kitchen::Transport::Exec::Connection
28
+ # #execute executes a Terraform CLI command on the local host.
29
+ #
30
+ # @param command [String] the Terraform command to be executed locally.
31
+ # @return [String] the standard output of the command.
32
+ # @raise [Kitchen::Transport::TransportFailed] if the command does not exit successfully.
33
+ def execute(command)
34
+ super "#{client} #{command}"
35
+
36
+ stdout
37
+ end
38
+
39
+ # #run_command executes a command in a subshell on the local running system.
40
+ #
41
+ # @param command [String] the command to be executed locally.
42
+ # @param options [Hash] additional configuration of the command.
43
+ # @return [String] the standard output of the command.
44
+ # @raise [Kitchen::ShellOut::ShellCommandFailed] if the command fails.
45
+ # @raise [Kitchen::StandardError] for all other unexpected exceptions.
46
+ def run_command(command, options = {})
47
+ self.stdout = super command, options.merge(
48
+ cwd: root_module_directory,
49
+ environment: environment.merge("LC_ALL" => nil, "TF_IN_AUTOMATION" => "true"),
50
+ timeout: command_timeout,
51
+ )
52
+ end
53
+
54
+ private
55
+
56
+ attr_accessor :client, :command_timeout, :environment, :options, :root_module_directory, :stdout
57
+
58
+ # #init_options initializes incoming options for use by the object.
59
+ #
60
+ # @param options [Hash] configuration options.
61
+ # @return [void]
62
+ # @api private
63
+ def init_options(options)
64
+ super
65
+
66
+ self.client = options.delete :client
67
+ self.command_timeout = options.delete :command_timeout
68
+ self.environment = options.delete(:environment) || {}
69
+ self.root_module_directory = options.delete :root_module_directory
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2016-2021 Copado NCS LLC
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
+ module Kitchen
18
+ module Terraform
19
+ # Transport is the namespace for transport strategies.
20
+ module Transport
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2016-2021 Copado NCS LLC
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
+ module Kitchen
18
+ module Terraform
19
+ # Verifier is the namespace for verifier strategies.
20
+ module Verifier
21
+ end
22
+ end
23
+ end
@@ -71,7 +71,7 @@ module Kitchen
71
71
 
72
72
  # @api private
73
73
  def value
74
- self.value = ::Gem::Version.new "6.1.0" if not @value
74
+ self.value = ::Gem::Version.new "7.0.1" if not @value
75
75
  @value
76
76
  end
77
77
 
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2016-2021 Copado NCS LLC
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/terraform/config_attribute/client"
18
+ require "kitchen/terraform/config_attribute/command_timeout"
19
+ require "kitchen/terraform/config_attribute/root_module_directory"
20
+ require "kitchen/terraform/configurable"
21
+ require "kitchen/terraform/transport/connection"
22
+ require "kitchen/transport/exec"
23
+
24
+ module Kitchen
25
+ # This namespace is defined by Kitchen.
26
+ #
27
+ # @see http://www.rubydoc.info/gems/test-kitchen/Kitchen/Transport
28
+ module Transport
29
+ # The Terraform transport is responsible for the integration with the
30
+ # {https://developer.hashicorp.com/terraform/cli/commands Terraform CLI}.
31
+ #
32
+ # === Configuration Attributes
33
+ #
34
+ # The configuration attributes of the transport control the behaviour of the Terraform commands that are run.
35
+ # Within the
36
+ # {http://kitchen.ci/docs/getting-started/kitchen-yml Test Kitchen configuration file}, these attributes must be
37
+ # declared in the +transport+ mapping along with the plugin name.
38
+ #
39
+ # transport:
40
+ # name: terraform
41
+ # a_configuration_attribute: some value
42
+ #
43
+ # ==== client
44
+ #
45
+ # {include:Kitchen::Terraform::ConfigAttribute::Client}
46
+ #
47
+ # ==== command_timeout
48
+ #
49
+ # {include:Kitchen::Terraform::ConfigAttribute::CommandTimeout}
50
+ #
51
+ # ==== root_module_directory
52
+ #
53
+ # {include:Kitchen::Terraform::ConfigAttribute::RootModuleDirectory}
54
+ #
55
+ # === Ruby Interface
56
+ #
57
+ # This class implements the interface of Kitchen::Configurable which requires the following Reek suppressions:
58
+ # :reek:MissingSafeMethod { exclude: [ finalize_config! ] }
59
+ #
60
+ # @version 2
61
+ class Terraform < ::Kitchen::Transport::Exec
62
+ kitchen_transport_api_version 2
63
+
64
+ include ::Kitchen::Terraform::ConfigAttribute::Client
65
+
66
+ include ::Kitchen::Terraform::ConfigAttribute::CommandTimeout
67
+
68
+ include ::Kitchen::Terraform::ConfigAttribute::RootModuleDirectory
69
+
70
+ include ::Kitchen::Terraform::Configurable
71
+
72
+ # #connection creates a new Connection, configured by a merging of configuration
73
+ # and state data.
74
+ #
75
+ # @param state [Hash] mutable instance state.
76
+ # @return [Kitchen::Terraform::Transport::Connection] a connection for this transport.
77
+ # @raise [Kitchen::Transport::TransportFailed] if a connection could not be returned.
78
+ def connection(state, &block)
79
+ options = connection_options config.to_hash.merge state
80
+
81
+ ::Kitchen::Terraform::Transport::Connection.new options, &block
82
+ end
83
+
84
+ # doctor checks the system and configuration for common errors.
85
+ #
86
+ # @param _state [Hash] the mutable Kitchen instance state.
87
+ # @return [Boolean] +true+ if any errors are found; +false+ if no errors are found.
88
+ def doctor(_state)
89
+ errors = false
90
+
91
+ methods.each do |method|
92
+ next if !method.match? /doctor_config_.*/
93
+
94
+ error = send method
95
+ errors = errors || error
96
+ end
97
+
98
+ errors
99
+ end
100
+
101
+ # #finalize_config! invokes the super implementation and then initializes the strategies.
102
+ #
103
+ # @param instance [Kitchen::Instance] an associated instance.
104
+ # @raise [Kitchen::ClientError] if the instance is nil.
105
+ # @return [self]
106
+ def finalize_config!(instance)
107
+ super instance
108
+
109
+ self
110
+ end
111
+
112
+ # #initialize prepares a new instance of the class.
113
+ #
114
+ # @param config [Hash] the transport configuration.
115
+ # @return [Kitchen::Transport::Terraform]
116
+ def initialize(config = {})
117
+ super config
118
+ end
119
+
120
+ private
121
+
122
+ # #connection_options builds the hash of options needed by the Connection object on construction.
123
+ #
124
+ # @param data [Hash] merged configuration and mutable state data.
125
+ # @return [Hash] hash of connection options.
126
+ # @api private
127
+ def connection_options(data)
128
+ opts = super
129
+
130
+ opts.merge! data
131
+ opts.merge! logger: logger
132
+
133
+ opts
134
+ end
135
+ end
136
+ end
137
+ end
@@ -30,7 +30,7 @@ module Kitchen
30
30
  #
31
31
  # @see https://www.rubydoc.info/gems/test-kitchen/Kitchen/Verifier
32
32
  module Verifier
33
- # The verifier utilizes the {https://www.inspec.io/ InSpec infrastructure testing framework} to verify the
33
+ # The Terraform verifier utilizes {https://community.chef.io/tools/chef-inspec InSpec} to verify the
34
34
  # behaviour and state of resources in the Terraform state.
35
35
  #
36
36
  # === Commands
@@ -118,9 +118,17 @@ module Kitchen
118
118
  #
119
119
  # @param _state [Hash] the mutable Kitchen instance state.
120
120
  # @return [Boolean] +true+ if any errors are found; +false+ if no errors are found.
121
- # @see https://github.com/test-kitchen/test-kitchen/blob/v1.21.2/lib/kitchen/verifier/base.rb#L85-L91
122
121
  def doctor(_state)
123
- false
122
+ errors = false
123
+
124
+ methods.each do |method|
125
+ next if !method.match? /doctor_config_.*/
126
+
127
+ error = send method
128
+ errors = errors || error
129
+ end
130
+
131
+ errors
124
132
  end
125
133
 
126
134
  # #initialize prepares a new instance of the class.
data.tar.gz.sig CHANGED
Binary file