Class: Kitchen::Terraform::Driver::Destroy

Inherits:
Object
  • Object
show all
Defined in:
lib/kitchen/terraform/driver/destroy.rb

Overview

A Test Kitchen instance is destroyed through the following steps.

Initializing the Terraform Working Directory
Terraform >= 0.15.0

The working directory is initialized by running a command like the following example:

<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_init identifier id'>init</span> \
  <span class='minus op'>-</span><span class='rubyid_backend identifier id'>backend</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_backend identifier id'>backend</span><span class='minus op'>-</span><span class='rubyid_config identifier id'>config</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_backend_configurations identifier id'>backend_configurations</span><span class='lbrack token'>[</span><span class='integer val'>0</span><span class='rbrack token'>]</span><span class='gt op'>></span> <span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
  <span class='minus op'>-</span><span class='rubyid_force identifier id'>force</span><span class='minus op'>-</span><span class='rubyid_copy identifier id'>copy</span> \
  <span class='minus op'>-</span><span class='rubyid_get identifier id'>get</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</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='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_plugin identifier id'>plugin</span><span class='minus op'>-</span><span class='rubyid_dir identifier id'>dir</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_plugin_directory identifier id'>plugin_directory</span><span class='gt op'>></span><span class='rbrack token'>]</span> \
  <span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_upgrade identifier id'>upgrade</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span><span class='rbrack token'>]</span> \
  <span class='lt op'><</span><span class='rubyid_root_module_directory identifier id'>root_module_directory</span><span class='gt op'>></span>

Terraform < 0.15.0

The working directory is initialized by running a command like the following example:

<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_init identifier id'>init</span> \
  <span class='minus op'>-</span><span class='rubyid_backend identifier id'>backend</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_backend identifier id'>backend</span><span class='minus op'>-</span><span class='rubyid_config identifier id'>config</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_backend_configurations identifier id'>backend_configurations</span><span class='lbrack token'>[</span><span class='integer val'>0</span><span class='rbrack token'>]</span><span class='gt op'>></span> <span class='dot3 op'>...</span><span class='rbrack token'>]</span> \
  <span class='minus op'>-</span><span class='rubyid_force identifier id'>force</span><span class='minus op'>-</span><span class='rubyid_copy identifier id'>copy</span> \
  <span class='minus op'>-</span><span class='rubyid_get identifier id'>get</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span> \
  <span class='minus op'>-</span><span class='rubyid_get identifier id'>get</span><span class='minus op'>-</span><span class='rubyid_plugins identifier id'>plugins</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</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_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='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_plugin identifier id'>plugin</span><span class='minus op'>-</span><span class='rubyid_dir identifier id'>dir</span><span class='assign token'>=</span><span class='lt op'><</span><span class='rubyid_plugin_directory identifier id'>plugin_directory</span><span class='gt op'>></span><span class='rbrack token'>]</span> \
  <span class='lbrack token'>[</span><span class='minus op'>-</span><span class='rubyid_upgrade identifier id'>upgrade</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span><span class='rbrack token'>]</span> \
  <span class='minus op'>-</span><span class='rubyid_verify identifier id'>verify</span><span class='minus op'>-</span><span class='rubyid_plugins identifier id'>plugins</span><span class='assign token'>=</span><span class='rubyid_true true kw'>true</span> \
  <span class='lt op'><</span><span class='rubyid_root_module_directory identifier id'>root_module_directory</span><span class='gt op'>></span>

Selecting or Creating 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>

The workspace is created 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_new identifier id'>new</span> <span class='lt op'><</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>

Destroying the Terraform State

The state is destroyed by running a command like the following example:

<span class='rubyid_terraform identifier id'>terraform</span> <span class='rubyid_destroy identifier id'>destroy</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='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='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_root_module_directory identifier id'>root_module_directory</span><span class='gt op'>></span>

Selecting the Default 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>

Deleting the Test Terraform Workspace

The workspace is deleted 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_delete identifier id'>delete</span> <span class='lt op'><</span><span class='rubyid_name identifier id'>name</span><span class='gt op'>></span>

Instance Method Summary collapse

Constructor Details

#initialize(config:, connection:, logger:, version_requirement:, workspace_name:) ⇒ Kitchen::Terraform::Driver::Destroy

#initialize prepares a new instance of the class.

Parameters:

  • config (Hash)

    the configuration of the driver.

  • connection (Kitchen::Terraform::Transport::Connection)

    a Terraform connection.

  • logger (Kitchen::Logger)

    a logger for logging messages.

  • version_requirement (Gem::VersionRequirement)

    the required version of the Terraform client.

  • workspace_name (String)

    the name of the Terraform workspace to select or to create.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/kitchen/terraform/driver/destroy.rb', line 81

def initialize(config:, connection:, logger:, version_requirement:, workspace_name:)
  self.complete_config = config.to_hash.merge upgrade_during_init: false, workspace_name: workspace_name
  self.connection = connection
  self.client_version = ::Gem::Version.new "0.0.0"
  self.logger = logger
  self.workspace_name = workspace_name
  self.destroy = ::Kitchen::Terraform::Command::Destroy.new config: complete_config
  self.workspace_delete_test = ::Kitchen::Terraform::Command::WorkspaceDelete.new config: complete_config
  self.workspace_new_test = ::Kitchen::Terraform::Command::WorkspaceNew.new config: complete_config
  self.workspace_select_test = ::Kitchen::Terraform::Command::WorkspaceSelect.new config: complete_config
  self.workspace_select_default = ::Kitchen::Terraform::Command::WorkspaceSelect.new(
    config: complete_config.merge(workspace_name: "default"),
  )
  self.verify_version = ::Kitchen::Terraform::VerifyVersion.new(
    config: complete_config,
    logger: logger,
    version_requirement: version_requirement,
  )
  self.version = ::Kitchen::Terraform::Command::Version.new
end

Instance Method Details

#callself

#call executes the action.

Returns:

  • (self)

Raises:

  • (Kitchen::StandardError)

    if a command fails.



65
66
67
68
69
70
71
# File 'lib/kitchen/terraform/driver/destroy.rb', line 65

def call
  read_client_version
  verify_version.call version: client_version
  execute_workflow

  self
end