class Hygroscope::Stack

Attributes

capabilities[W]
client[R]
name[RW]
on_failure[W]
parameters[RW]
tags[RW]
template[W]
timeout[W]

Public Class Methods

new(name, region, profile) click to toggle source
# File lib/hygroscope/stack.rb, line 9
def initialize(name, region, profile)
  @name = name
  @parameters = {}
  @tags = {}
  @template = ''
  @capabilities = []
  @timeout = 15
  @on_failure = 'DO_NOTHING'

  @region = region
  @profile = profile
  @credentials = Aws::SharedCredentials.new(profile_name: @profile)
  @client = Aws::CloudFormation::Client.new(region: @region, credentials: @credentials)
end

Public Instance Methods

create!() click to toggle source
# File lib/hygroscope/stack.rb, line 24
def create!
  stack_parameters = []
  @parameters.each do |k, v|
    stack_parameters << {
      parameter_key:   k,
      parameter_value: v.to_s
    }
  end

  stack_tags = []
  @tags.each do |k, v|
    stack_tags << {
      key:   k,
      value: v.to_s
    }
  end

  stack_opts = {
    stack_name:         @name,
    template_body:      @template,
    parameters:         stack_parameters,
    timeout_in_minutes: @timeout,
    on_failure:         @on_failure
  }

  stack_opts['capabilities'] = @capabilities unless @capabilities.empty?
  stack_opts['tags'] = stack_tags

  begin
    stack_id = @client.create_stack(stack_opts)
  rescue => e
    raise e
  end

  stack_id
end
delete!() click to toggle source
# File lib/hygroscope/stack.rb, line 94
def delete!
  @client.delete_stack(stack_name: @name)
rescue => e
  raise e
end
describe() click to toggle source
# File lib/hygroscope/stack.rb, line 100
def describe
  resp = @client.describe_stacks(stack_name: @name)
rescue => e
  raise e
else
  resp.stacks.first
end
list_resources() click to toggle source
# File lib/hygroscope/stack.rb, line 108
def list_resources
  resp = @client.describe_stack_resources(stack_name: @name)
rescue => e
  raise e
else
  resources = []
  resp.stack_resources.each do |r|
    resources << {
      name:   r.logical_resource_id,
      type:   r.resource_type,
      status: r.resource_status
    }
  end

  resources
end
update!() click to toggle source
# File lib/hygroscope/stack.rb, line 61
def update!
  stack_parameters = []
  @parameters.each do |k, v|
    stack_parameters << if v == 'HYGROSCOPE_USE_PREVIOUS_VALUE'
                          {
                            parameter_key:      k,
                            use_previous_value: true
                          }
                        else
                          {
                            parameter_key:   k,
                            parameter_value: v.to_s
                          }
                        end
  end

  stack_opts = {
    stack_name:    @name,
    template_body: @template,
    parameters:    stack_parameters
  }

  stack_opts['capabilities'] = @capabilities unless @capabilities.empty?

  begin
    stack_id = @client.update_stack(stack_opts)
  rescue => e
    raise e
  end

  stack_id
end