class TerraformWrapper::Shared::Backends::AWS

Attributes

bucket[R]
encrypt[R]
key[R]
region[R]

Public Class Methods

new(options:, variables:) click to toggle source
# File lib/terraform-wrapper/shared/backends/aws.rb, line 38
def initialize(options:, variables:)
  construct(options: options, variables: variables)
end

Public Instance Methods

hash() click to toggle source
# File lib/terraform-wrapper/shared/backends/aws.rb, line 44
def hash()
  result = Hash.new

  result["bucket"]  = @bucket
  result["region"]  = @region
  result["key"]     = @key
  result["encrypt"] = @encrypt.to_s

  result["kms_key_id"] = @kms  unless @kms.nil?
  result["role_arn"]   = @role unless @role.nil?

  return result
end

Private Instance Methods

specific() click to toggle source
# File lib/terraform-wrapper/shared/backends/aws.rb, line 64
def specific()
  kms  = nil
  role = nil

  logger.fatal("AWS backend mandatory option 'bucket' has not been set!") unless @options.key?("bucket")
  logger.fatal("AWS backend mandatory option 'region' has not been set!") unless @options.key?("region")

  bucket = @options["bucket"]

  logger.fatal("AWS backend S3 bucket name must be a string!") unless bucket.kind_of?(String)
  logger.fatal("AWS backend S3 bucket name must not be blank!") if bucket.strip.empty?

  region = @options["region"]

  logger.fatal("AWS backend S3 bucket region must be a string!") unless region.kind_of?(String)
  logger.fatal("AWS backend S3 bucket region must not be blank!") if region.strip.empty?

  key = @options.key?("key") ? @options["key"] : File.join("%{service}", "%{config}", "%{component}" + @@ext)

  logger.fatal("AWS backend S3 bucket key must be a string!") unless key.kind_of?(String)
  logger.fatal("AWS backend S3 bucket key must not be blank!") if key.strip.empty?

  encrypt = @options.key?("encrypt") ? @options["encrypt"] : true

  logger.fatal("AWS backend S3 bucket encryption enabled must be a Boolean!") unless [ true, false ].include?(encrypt)

  if @options.key?("kms") then
    kms = @options["kms"]

    logger.fatal("AWS backend S3 bucket encryption KMS key ARN must be a string if specified!") unless kms.kind_of?(String)
    logger.fatal("AWS backend S3 bucket encryption KMS key ARN must not be blank if specified!") if kms.strip.empty?
  end

  if @options.key?("role") then
    role = @options["role"]

    logger.fatal("AWS backend role to assume ARN must be a string if specified!") unless role.kind_of?(String)
    logger.fatal("AWS backend role to assume ARN must not be blank if specified!") if role.strip.empty?
  end

  @variables.core.keys.map{ |sym| sym.to_s }.each do |core|
    logger.fatal("AWS backend S3 bucket name or key must include %{#{core}}.") unless (bucket.include?("%{#{core}}") or key.include?("%{#{core}}"))
  end

  begin
    bucket = bucket % @variables.identifiers
    region = region % @variables.identifiers
    key    = key    % @variables.identifiers
    kms    = kms    % @variables.identifiers unless kms.nil?
    role   = role   % @variables.identifiers unless role.nil?
  rescue
    logger.fatal("AWS backend options contain identifiers that are not included in the configuration file!")
  end

  logger.fatal("Key: #{key} is too long for backend of type: #{@@type}") if key.length > 1024

  @bucket  = bucket
  @region  = region
  @key     = key
  @encrypt = encrypt
  @kms     = kms
  @role    = role
end