class Kitchen::Terraform::Provisioner::Converge

A Test Kitchen instance is converged through the following steps.

Selecting the Test Terraform Workspace

{include:Kitchen::Terraform::Command::WorkspaceSelect}

Updating the Terraform Dependency Modules

{include:Kitchen::Terraform::Command::Get}

Validating the Terraform Root Module
Terraform >= 0.15.0

{include:Kitchen::Terraform::Command::Validate::PostZeroFifteenZero}

Terraform < 0.15.0

{include:Kitchen::Terraform::Command::Validate::PreZeroFifteenZero}

Applying the Terraform State Changes

{include:Kitchen::Terraform::Command::Apply}

Retrieving the Terraform Output

{include:Kitchen::Terraform::Command::Output}

Attributes

apply[RW]
client_version[RW]
command_executor[RW]
complete_config[RW]
get[RW]
logger[RW]
options[RW]
output[RW]
outputs_manager[RW]
outputs_parser[RW]
outputs_reader[RW]
variables[RW]
variables_manager[RW]
verify_version[RW]
version[RW]
workspace_name[RW]
workspace_select[RW]

Public Class Methods

new(config:, logger:, version_requirement:, workspace_name:) click to toggle source

initialize prepares a new instance of the class.

@param config [Hash] the configuration of the driver. @param logger [Kitchen::Logger] a logger for logging messages. @param version_requirement [Gem::VersionRequirement] the required version of the Terraform client. @param workspace_name [String] the name of the Terraform workspace to select or to create. @return [Kitchen::Terraform::Driver::Converge]

# File lib/kitchen/terraform/provisioner/converge.rb, line 85
def initialize(config:, logger:, version_requirement:, workspace_name:)
  self.complete_config = config.to_hash.merge workspace_name: workspace_name
  client = complete_config.fetch :client
  self.client_version = ::Gem::Version.new "0.0.0"
  self.command_executor = ::Kitchen::Terraform::CommandExecutor.new(
    client: client,
    logger: logger,
  )
  self.logger = logger
  self.options = {
    cwd: complete_config.fetch(:root_module_directory),
    timeout: complete_config.fetch(:command_timeout),
  }
  self.workspace_name = workspace_name
  initialize_commands
  initialize_outputs_handlers client: client, logger: logger
  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

Public Instance Methods

call(state:) click to toggle source

call executes the action.

@param state [Hash] the Kitchen instance state. @raise [Kitchen::TransientFailure] if a command fails. @return [self]

# File lib/kitchen/terraform/provisioner/converge.rb, line 69
def call(state:)
  read_client_version
  verify_version.call version: client_version
  execute_workflow
  save_variables_and_outputs state: state

  self
end