class Dynamocli::AWS::Stack

Constants

CLOUDFORMARTION
DEPLOY_COMPLETED_KEY
LOGGER

Attributes

cloudformation[R]
logger[R]
name[R]
original_template[R]
policy_body[R]
resources[R]
stack_on_aws[R]
table_name[R]
table_resource[R]
template_body[R]
template_without_table[R]

Public Class Methods

new(table_name:, table_resource:, cloudformation: nil, logger: nil) click to toggle source
# File lib/dynamocli/aws/stack.rb, line 17
def initialize(table_name:, table_resource:, cloudformation: nil, logger: nil)
  @table_name = table_name
  @table_resource = table_resource
  @cloudformation = cloudformation || CLOUDFORMARTION.new
  @logger = logger || LOGGER.new

  set_attributes_now_because_they_will_change
end

Public Instance Methods

deploying?() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 26
def deploying?
  current_status != DEPLOY_COMPLETED_KEY
end

Private Instance Methods

current_status() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 94
def current_status
  cloudformation.describe_stacks(stack_name: name)[0][0].stack_status
end
parse_template(template) click to toggle source
# File lib/dynamocli/aws/stack.rb, line 84
def parse_template(template)
  JSON.parse(template)
rescue JSON::ParserError
  YAML.load(template)
end
set_attributes_now_because_they_will_change() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 39
def set_attributes_now_because_they_will_change
  set_name
  set_stack_on_aws
  set_resources
  set_template_body
  set_original_template
  set_template_without_table
  set_policy_body
end
set_name() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 49
def set_name
  @name ||= table_resource[:stack_name]
end
set_original_template() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 65
def set_original_template
  @original_template ||= parse_template(template_body)
end
set_policy_body() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 90
def set_policy_body
  @policy_body ||= cloudformation.get_stack_policy(stack_name: name).stack_policy_body
end
set_resources() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 57
def set_resources
  @resources ||= cloudformation.describe_stack_resources(physical_resource_id: table_name).to_h
end
set_stack_on_aws() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 53
def set_stack_on_aws
  @stack_on_aws ||= cloudformation.describe_stacks(stack_name: name)[0][0]
end
set_template_body() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 61
def set_template_body
  @template_body ||= cloudformation.get_template(stack_name: name).to_h[:template_body]
end
set_template_without_table() click to toggle source
# File lib/dynamocli/aws/stack.rb, line 69
def set_template_without_table
  @template_without_table ||= parse_template(template_body).tap do |template_without_table|
    tables = original_template["Resources"].select { |_, v| v["Type"] == "AWS::DynamoDB::Table" }
    table = tables.find { |_, v| v["Properties"]["TableName"] == table_name }

    if tables.nil?
      logger.error("table #{table_name} not found in the #{@name} stack")
      exit(42)
    end

    logical_resource_id = table.first
    template_without_table["Resources"].delete(logical_resource_id)
  end
end