class YleTf::Action::TerraformInit

Constants

TF_CMD_ARGS
TF_CMD_OPTS

Attributes

config[R]

Public Class Methods

new(app) click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 23
def initialize(app)
  @app = app
end

Public Instance Methods

backend() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 72
def backend
  @backend ||= find_backend
end
call(env) click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 27
def call(env)
  @config = env[:config]

  Logger.info('Initializing Terraform')
  Logger.debug("Backend configuration: #{backend}")

  init_dir

  if env[:tf_command] == 'init'
    # Skip initializing Terraform here, as it will be done by the
    # actuall command later in the middleware stack.
    @app.call(env)
    store_terraform_lock
  else
    init_terraform
    store_terraform_lock
    @app.call(env)
  end

  tear_down
end
copy_to_module_dir(file) click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 98
def copy_to_module_dir(file)
  FileUtils.cp(file, config.module_dir.to_s) if File.exist?(file)
end
find_backend() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 80
def find_backend
  backend_type = config.fetch('backend', 'type').downcase
  backend_proc = Plugin.manager.backends[backend_type]

  klass = backend_proc.call
  klass.new(config)
end
init_dir() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 49
def init_dir
  Logger.debug('Configuring the backend')
  backend.configure

  Logger.debug('Symlinking errored.tfstate')
  symlink_to_module_dir('errored.tfstate')
end
init_terraform() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 62
def init_terraform
  Logger.debug('Initializing Terraform')
  YleTf::System.cmd('terraform', 'init', *tf_init_args, **TF_CMD_OPTS)
end
store_terraform_lock() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 67
def store_terraform_lock
  Logger.debug('Storing .terraform.lock.hcl')
  copy_to_module_dir('.terraform.lock.hcl')
end
tear_down() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 57
def tear_down
  Logger.debug('Tearing down backend')
  backend.tear_down
end
tf_init_args() click to toggle source
# File lib/yle_tf/action/terraform_init.rb, line 76
def tf_init_args
  TF_CMD_ARGS + Shellwords.split(ENV.fetch('TF_INIT_ARGS', ''))
end