module TerraformWrapper

Constants

VERSION

Public Class Methods

create_directory(directory:, exists: true, purpose: nil) click to toggle source
# File lib/terraform-wrapper/common.rb, line 7
def self.create_directory(directory:, exists: true, purpose: nil)
  return exists if File.directory?(directory)

  result = false

  if not purpose.nil? and purpose.kind_of?(String) and not purpose.strip.empty? then
    @logger.info("Creating directory for: #{purpose}, path: #{directory}")
  else
    @logger.info("Creating directory: #{directory}")
  end

  FileUtils.mkdir_p(directory)

  result = File.directory?(directory)
end
deployment_tasks(component:, options: Hash.new, service:) click to toggle source
# File lib/terraform-wrapper.rb, line 25
def self.deployment_tasks(component:, options: Hash.new, service:)
  @logger.info("Building tasks for service: #{service}, component: #{component}...")

  @logger.fatal("Options must be specified as a hash!") unless options.kind_of?(Hash)

  binary_options = Hash.new
  binary_options["base"]    = options.key?("binary-base")    ? options["binary-base"]    : File.join(Dir.pwd, "vendor", "terraform")
  binary_options["version"] = options.key?("binary-version") ? options["binary-version"] : Shared::Latest.instance.version

  code_options = Hash.new
  code_options["base"] = options.key?("code-base") ? options["code-base"] : File.join(Dir.pwd, "terraform")
  code_options["name"] = component

  config_options = Hash.new
  config_options["auth-azure"]         = options.key?("config-auth-azure")         ? options["config-auth-azure"]         : false
  config_options["auth-azure-options"] = options.key?("config-auth-azure-options") ? options["config-auth-azure-options"] : Hash.new
  config_options["base"]               = options.key?("config-base")               ? options["config-base"]               : File.join(Dir.pwd, "config")
  config_options["backend"]            = options.key?("config-backend")            ? options["config-backend"]            : "local"
  config_options["backend-options"]    = options.key?("config-backend-options")    ? options["config-backend-options"]    : Hash.new
  config_options["service"]            = service

  provider_options = Hash.new
  provider_options["platforms"] = options.key?("provider-platforms") ? options["provider-platforms"] : Array.new

  provider = TerraformWrapper::Shared::Provider.new(options: provider_options)
  binary   = TerraformWrapper::Shared::Binary.new(options: binary_options, provider: provider)
  code     = TerraformWrapper::Shared::Code.new(options: code_options)

  tasks = Array.new
  tasks << TerraformWrapper::Tasks::Apply.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::Binary.new(binary: binary)
  tasks << TerraformWrapper::Tasks::Clean.new(code: code)
  tasks << TerraformWrapper::Tasks::Destroy.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::Import.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::Init.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::Plan.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::PlanDestroy.new(binary: binary, code: code, options: config_options)
  tasks << TerraformWrapper::Tasks::Upgrade.new(binary: binary, code: code)
  tasks << TerraformWrapper::Tasks::Validate.new(binary: binary, code: code)
  return tasks
end
find(base:, name:, exts:, description: "File") click to toggle source
# File lib/terraform-wrapper/common.rb, line 25
def self.find(base:, name:, exts:, description: "File")
  exts.each do |ext|
    path = File.join(base, name + ext)
    return path if File.file?(path)
  end

  @logger.fatal("#{description} name: #{name} not found in location: #{base}!")
end