class TerraformDevKit::Aws::TerraformRemoteState

Constants

ATTRIBUTES
KEYS

Public Class Methods

new(dynamodb, s3) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 20
def initialize(dynamodb, s3)
  @dynamodb = dynamodb
  @s3 = s3
end

Public Instance Methods

destroy(environment, project) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 40
def destroy(environment, project)
  table_name = table_name(environment, project)

  @dynamodb.delete_table(table_name)
  @s3.delete_bucket(state_bucket_name(environment, project))
end
init(environment, project) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 25
def init(environment, project)
  table_name = table_name(environment, project)
  return if lock_table_exists_and_is_active(table_name)

  @dynamodb.create_table(table_name, ATTRIBUTES, KEYS, 1, 1)

  begin
    @s3.create_bucket(state_bucket_name(environment, project))
  rescue ::Aws::S3::Errors::BucketAlreadyOwnedByYou
    return
  end

  sleep(0.2) until lock_table_exists_and_is_active(table_name)
end

Private Instance Methods

lock_table_exists_and_is_active(table_name) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 48
def lock_table_exists_and_is_active(table_name)
  begin
    return @dynamodb.get_table_status(table_name) == 'ACTIVE'
  rescue ::Aws::DynamoDB::Errors::ResourceNotFoundException
    return false
  end
end
state_bucket_name(environment, project) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 62
def state_bucket_name(environment, project)
  "#{project.name}-#{environment.name}-state"
end
table_name(environment, project) click to toggle source
# File lib/TerraformDevKit/aws/terraform_remote_state.rb, line 57
def table_name(environment, project)
  "#{project.acronym}-#{environment.name}-lock-table"
end