Sha256: ae55ae4831e9227d04ffe729d7139581a845eb8a105ca761cabe0326466ae3e9
Contents?: true
Size: 1.62 KB
Versions: 4
Compression:
Stored size: 1.62 KB
Contents
require 'aws-sdk' module TerraformDevKit # Represents a terraform lock table. class TerraformRemoteState ATTRIBUTES = [ { attribute_name: 'LockID', attribute_type: 'S' } ] KEYS = [ { attribute_name: 'LockID', key_type: 'HASH' } ] def initialize(dynamodb, s3) @dynamodb = dynamodb @s3 = s3 end 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 def destroy(environment, project) table_name = table_name(environment, project) @dynamodb.delete_table(table_name) @s3.delete_bucket(state_bucket_name(environment, project)) end private_class_method 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 private_class_method def table_name(environment, project) "#{project.acronym}-#{environment.name}-lock-table" end private_class_method def state_bucket_name(environment, project) "#{project.name}-#{environment.name}-state" end end end
Version data entries
4 entries across 4 versions & 1 rubygems