class RakeTerraform::TaskSets::Terraform

rubocop:disable Metrics/ClassLength

Attributes

delegate[R]

Public Class Methods

define(*args, &configuration_block) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 10
def self.define(*args, &configuration_block)
  new(*args, &configuration_block).define_on(Rake.application)
end
new(*args, &configuration_block) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 16
def initialize(*args, &configuration_block)
  @opts = args[0]
  @delegate =
    RakeDependencies::TaskSets::All.new(
      task_set_opts, &configuration_block
    )
end

Public Instance Methods

binary() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 29
def binary
  @binary ||= File.join(path, binary_directory, binary_name)
end
define_on(application) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 24
def define_on(application)
  @delegate.define_on(application)
  self
end

Private Instance Methods

binary_directory() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 82
def binary_directory
  @binary_directory ||= 'bin'
end
binary_name() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 86
def binary_name
  @binary_name ||= 'terraform'
end
contains_version_number?(result) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 172
def contains_version_number?(result)
  version_line(result) =~ /#{version}/
end
correct_version?(binary) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 123
def correct_version?(binary)
  result = StringIO.new
  command = version_command(binary)

  log_version_lookup(command)

  command.execute(stdout: result)

  log_version_information(result)
  log_check_outcome(result)

  contains_version_number?(result)
end
dependency() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 69
def dependency
  @dependency ||= 'terraform'
end
exist?(binary) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 119
def exist?(binary)
  File.exist?(binary)
end
exists_with_correct_version?(binary) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 113
def exists_with_correct_version?(binary)
  log_binary_location(binary)

  exist?(binary) && correct_version?(binary)
end
file_name_template() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 104
def file_name_template
  @file_name_template ||=
    'terraform_<%= @version %>_<%= @os_id %>_amd64<%= @ext %>'
end
log_binary_location(binary) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 144
def log_binary_location(binary)
  logger.info("Terraform binary should be at: #{binary}")
end
log_check_outcome(result) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 161
def log_check_outcome(result)
  logger.debug(
    "Version: '#{version}' is in version line: " \
    "'#{version_line(result)}'?: #{contains_version_number?(result)}"
  )
end
log_version_information(result) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 155
def log_version_information(result)
  logger.info(
    "Terraform version information is: \n#{result}"
  )
end
log_version_lookup(command) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 148
def log_version_lookup(command)
  logger.info(
    'Fetching terraform version information using command: ' \
      "#{command}"
  )
end
logger() click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/rake_terraform/task_sets/terraform.rb, line 58
def logger
  @logger ||=
    @opts[:logger] ||
    Logger.new($stderr,
               level: Logger.const_get(ENV['TF_LOG'] || 'WARN'))
end
namespace() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 65
def namespace
  @namespace ||= @opts[:namespace] || :terraform
end
needs_fetch() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 109
def needs_fetch
  @needs_fetch ||= ->(_) { return !exists_with_correct_version?(binary) }
end
os_ids() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 94
def os_ids
  @os_ids ||= { mac: 'darwin', linux: 'linux' }
end
path() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 77
def path
  @path ||= @opts[:path] ||
            File.join(Dir.pwd, 'vendor', 'terraform')
end
task_set_opts() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/rake_terraform/task_sets/terraform.rb, line 37
def task_set_opts
  {
    namespace: namespace,
    dependency: dependency,
    version: version,
    path: path,
    type: type,

    os_ids: os_ids,

    uri_template: uri_template,
    file_name_template: file_name_template,

    binary_directory: binary_directory,

    needs_fetch: needs_fetch
  }
end
type() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 90
def type
  @type ||= :zip
end
uri_template() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 98
def uri_template
  @uri_template ||=
    'https://releases.hashicorp.com/terraform/<%= @version %>/' \
    'terraform_<%= @version %>_<%= @os_id %>_amd64<%= @ext %>'
end
version() click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 73
def version
  @version ||= @opts[:version] || '0.10.3'
end
version_command(binary) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 137
def version_command(binary)
  Lino::CommandLineBuilder
    .for_command(binary)
    .with_flag('-version')
    .build
end
version_line(result) click to toggle source
# File lib/rake_terraform/task_sets/terraform.rb, line 168
def version_line(result)
  result.string.lines.first
end