Class: Kitchen::Terraform::Provisioner::Converge
- Inherits:
-
Object
- Object
- Kitchen::Terraform::Provisioner::Converge
- Defined in:
- lib/kitchen/terraform/provisioner/converge.rb
Overview
A Test Kitchen instance is converged through the following steps.
Selecting the Test Terraform Workspace
The workspace is selected by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_workspace identifier id'>workspace</span> <span class='rubyid_select identifier id'>select</span> <span class='lt op'><</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>
Updating the Terraform Dependency Modules
The dependency modules are updated by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_get identifier id'>get</span> <span class='minus op'>-</span><span class='rubyid_update identifier id'>update</span> <span class='lt op'><</span><span class='rubyid_directory identifier id'>directory</span><span class='gt op'>></span>
Validating the Terraform Root Module
Terraform >= 0.15.0
The root module is validated by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_validate identifier id'>validate</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_no identifier id'>no</span><span class='minus op'>-</span><span class='rubyid_color identifier id'>color</span><span class='rbrack token'>]</span> \
<span class='lt op'><</span><span class='rubyid_directory identifier id'>directory</span><span class='gt op'>></span>
Terraform < 0.15.0
The root module is validated by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_validate identifier id'>validate</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_no identifier id'>no</span><span class='minus op'>-</span><span class='rubyid_color identifier id'>color</span><span class='rbrack token'>]</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_var identifier id'>var</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_variables identifier id'>variables</span><span class='dot token'>.</span><span class='rubyid_first identifier id'>first</span><span class='gt op'>></span><span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_var identifier id'>var</span><span class='minus op'>-</span><span class='rubyid_file identifier id'>file</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_variable_files identifier id'>variable_files</span><span class='dot token'>.</span><span class='rubyid_first identifier id'>first</span><span class='gt op'>></span><span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
<span class='lt op'><</span><span class='rubyid_directory identifier id'>directory</span><span class='gt op'>></span>
Applying the Terraform State Changes
The state changes are applied by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_apply identifier id'>apply</span>\
<span class='minus op'>-</span><span class='rubyid_lock identifier id'>lock</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_lock identifier id'>lock</span><span class='gt op'>></span> \
<span class='minus op'>-</span><span class='rubyid_lock identifier id'>lock</span><span class='minus op'>-</span><span class='rubyid_timeout identifier id'>timeout</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_lock_timeout identifier id'>lock_timeout</span><span class='gt op'>></span><span class='rubyid_s identifier id'>s</span> \
<span class='minus op'>-</span><span class='rubyid_input identifier id'>input</span><span class='assign token'>=</span><span class='rubyid_false false kw'>false</span> \
<span class='minus op'>-</span><span class='rubyid_auto identifier id'>auto</span><span class='minus op'>-</span><span class='rubyid_approve identifier id'>approve</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_no identifier id'>no</span><span class='minus op'>-</span><span class='rubyid_color identifier id'>color</span><span class='rbrack token'>]</span> \
<span class='minus op'>-</span><span class='rubyid_parallelism identifier id'>parallelism</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_parallelism identifier id'>parallelism</span><span class='gt op'>></span> \
<span class='minus op'>-</span><span class='rubyid_refresh identifier id'>refresh</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_var identifier id'>var</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_variables identifier id'>variables</span><span class='dot token'>.</span><span class='rubyid_first identifier id'>first</span><span class='gt op'>></span><span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
<span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_var identifier id'>var</span><span class='minus op'>-</span><span class='rubyid_file identifier id'>file</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_variable_files identifier id'>variable_files</span><span class='dot token'>.</span><span class='rubyid_first identifier id'>first</span><span class='gt op'>></span><span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
<span class='lt op'><</span><span class='rubyid_directory identifier id'>directory</span><span class='gt op'>></span>
Retrieving the Terraform Output
The outputs are retrieved by running a command like the following example:
<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_output identifier id'>output</span> <span class='minus op'>-</span><span class='rubyid_json identifier id'>json</span>
Instance Method Summary collapse
-
#call(state:) ⇒ self
#call executes the action.
-
#initialize(config:, connection:, debug_connection:, logger:, version_requirement:, workspace_name:) ⇒ Kitchen::Terraform::Driver::Converge
constructor
#initialize prepares a new instance of the class.
Constructor Details
#initialize(config:, connection:, debug_connection:, logger:, version_requirement:, workspace_name:) ⇒ Kitchen::Terraform::Driver::Converge
#initialize prepares a new instance of the class.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/kitchen/terraform/provisioner/converge.rb', line 87 def initialize(config:, connection:, debug_connection:, logger:, version_requirement:, workspace_name:) self.complete_config = config.to_hash.merge workspace_name: workspace_name self.client_version = ::Gem::Version.new "0.0.0" self.connection = connection self.debug_connection = debug_connection self.logger = logger self.workspace_name = workspace_name initialize_commands initialize_outputs_handlers self.variables = complete_config.fetch :variables self.variables_manager = ::Kitchen::Terraform::VariablesManager.new self.verify_version = ::Kitchen::Terraform::VerifyVersion.new( config: complete_config, logger: logger, version_requirement: version_requirement, ) end |
Instance Method Details
#call(state:) ⇒ self
#call executes the action.
68 69 70 71 72 73 74 75 |
# File 'lib/kitchen/terraform/provisioner/converge.rb', line 68 def call(state:) read_client_version verify_version.call version: client_version execute_workflow save_variables_and_outputs state: state self end |