module StackMaster

Constants

DEBUG_DEFAULT
NON_INTERACTIVE_DEFAULT
QUIET_DEFAULT
SKIP_ACCOUNT_CHECK_DEFAULT
VERSION

Attributes

non_interactive_answer[RW]

Public Class Methods

new(config, base_dir) click to toggle source
# File lib/stack_master/config.rb, line 39
def initialize(config, base_dir)
  @config = config
  @base_dir = base_dir
  @template_dir = config.fetch('template_dir', nil)
  @parameters_dir = config.fetch('parameters_dir', nil)
  @stack_defaults = config.fetch('stack_defaults', {})
  @region_aliases = Utils.underscore_keys_to_hyphen(config.fetch('region_aliases', {}))
  @region_to_aliases = @region_aliases.inject({}) do |hash, (key, value)|
    hash[value] ||= []
    hash[value] << key
    hash
  end
  @region_defaults = normalise_region_defaults(config.fetch('region_defaults', {}))
  @stacks = []
  load_template_compilers(config)
  load_config
end

Public Instance Methods

base_dir() click to toggle source
# File lib/stack_master.rb, line 166
def base_dir
  File.expand_path(File.join(File.dirname(__FILE__), ".."))
end
cloud_formation_driver() click to toggle source
# File lib/stack_master.rb, line 170
def cloud_formation_driver
  @cloud_formation_driver ||= AwsDriver::CloudFormation.new
end
cloud_formation_driver=(value) click to toggle source
# File lib/stack_master.rb, line 174
def cloud_formation_driver=(value)
  @cloud_formation_driver = value
end
colorize(text, color) click to toggle source
# File lib/stack_master.rb, line 206
def colorize(text, color)
  if colorize?
    Rainbow(text).color(color)
  else
    text
  end
end
colorize?() click to toggle source
# File lib/stack_master.rb, line 214
def colorize?
  ENV.fetch('COLORIZE') { 'true' } == 'true'
end
debug(message) click to toggle source
# File lib/stack_master.rb, line 135
def debug(message)
  return unless debug?
  stderr.puts Rainbow("[DEBUG] #{message}").color(:green)
end
debug!() click to toggle source
# File lib/stack_master.rb, line 126
def debug!
  @debug = true
end
debug?() click to toggle source
# File lib/stack_master.rb, line 131
def debug?
  @debug
end
filter(region = nil, stack_name = nil) click to toggle source
# File lib/stack_master/config.rb, line 57
def filter(region = nil, stack_name = nil)
  @stacks.select do |s|
    (region.blank? || s.region == region || s.region == region.gsub('_', '-')) &&
      (stack_name.blank? || s.stack_name == stack_name || s.stack_name == stack_name.gsub('_', '-'))
  end
end
find_stack(region, stack_name) click to toggle source
# File lib/stack_master/config.rb, line 64
def find_stack(region, stack_name)
  filter(region, stack_name).first
end
interactive?() click to toggle source
# File lib/stack_master.rb, line 113
def interactive?
  !non_interactive?
end
non_interactive!() click to toggle source
# File lib/stack_master.rb, line 122
def non_interactive!
  @non_interactive = true
end
non_interactive?() click to toggle source
# File lib/stack_master.rb, line 117
def non_interactive?
  @non_interactive
end
quiet!() click to toggle source
# File lib/stack_master.rb, line 140
def quiet!
  @quiet = true
end
quiet?() click to toggle source
# File lib/stack_master.rb, line 145
def quiet?
  @quiet
end
reset_flags() click to toggle source
# File lib/stack_master.rb, line 149
def reset_flags
  @quiet = QUIET_DEFAULT
  @skip_account_check = SKIP_ACCOUNT_CHECK_DEFAULT
end
s3_driver() click to toggle source
# File lib/stack_master.rb, line 178
def s3_driver
  @s3_driver ||= AwsDriver::S3.new
end
s3_driver=(value) click to toggle source
# File lib/stack_master.rb, line 182
def s3_driver=(value)
  @s3_driver = value
end
skip_account_check!() click to toggle source
# File lib/stack_master.rb, line 154
def skip_account_check!
  @skip_account_check = true
end
skip_account_check?() click to toggle source
# File lib/stack_master.rb, line 159
def skip_account_check?
  @skip_account_check
end
stderr() click to toggle source
# File lib/stack_master.rb, line 198
def stderr
  @stderr || $stderr
end
stderr=(io) click to toggle source
# File lib/stack_master.rb, line 202
def stderr=(io)
  @stderr = io
end
stdin() click to toggle source
# File lib/stack_master.rb, line 194
def stdin
  $stdin
end
stdout() click to toggle source
# File lib/stack_master.rb, line 186
def stdout
  @stdout || $stdout
end
stdout=(io) click to toggle source
# File lib/stack_master.rb, line 190
def stdout=(io)
  @stdout = io
end
unalias_region(region) click to toggle source
# File lib/stack_master/config.rb, line 68
def unalias_region(region)
  @region_aliases.fetch(region) { region }
end

Private Instance Methods

build_stack_defaults(region) click to toggle source
# File lib/stack_master/config.rb, line 129
def build_stack_defaults(region)
  region_defaults = @region_defaults.fetch(region, {}).deep_dup
  @stack_defaults.deep_dup.deeper_merge(region_defaults)
end
default_template_compilers() click to toggle source
# File lib/stack_master/config.rb, line 89
def default_template_compilers
  {
    rb: :sparkle_formation,
    json: :json,
    yml:  :yaml,
    yaml: :yaml,
    erb:  :yaml_erb,
  }
end
load_config() click to toggle source
# File lib/stack_master/config.rb, line 99
def load_config
  unaliased_stacks = resolve_region_aliases(@config.fetch('stacks'))
  load_stacks(unaliased_stacks)
end
load_stacks(stacks) click to toggle source
# File lib/stack_master/config.rb, line 111
def load_stacks(stacks)
  stacks.each do |region, stacks_for_region|
    region = Utils.underscore_to_hyphen(region)
    stacks_for_region.each do |stack_name, attributes|
      stack_name = Utils.underscore_to_hyphen(stack_name)
      stack_attributes = build_stack_defaults(region).deeper_merge!(attributes).merge(
        'region' => region,
        'stack_name' => stack_name,
        'base_dir' => @base_dir,
        'template_dir' => @template_dir,
        'parameters_dir' => @parameters_dir,
        'additional_parameter_lookup_dirs' => @region_to_aliases[region])
      stack_attributes['allowed_accounts'] = attributes['allowed_accounts'] if attributes['allowed_accounts']
      @stacks << StackDefinition.new(stack_attributes)
    end
  end
end
load_template_compilers(config) click to toggle source
# File lib/stack_master/config.rb, line 73
def load_template_compilers(config)
  @template_compilers = {}
  populate_template_compilers(config.fetch('template_compilers', {}))
  merge_defaults_to_user_defined_compilers
end
merge_defaults_to_user_defined_compilers() click to toggle source
# File lib/stack_master/config.rb, line 79
def merge_defaults_to_user_defined_compilers
  @template_compilers = default_template_compilers.merge(@template_compilers)
end
normalise_region_defaults(region_defaults) click to toggle source
# File lib/stack_master/config.rb, line 134
def normalise_region_defaults(region_defaults)
  region_defaults.inject({}) do |normalised_aliases, (region_or_alias, value)|
    region = unalias_region(region_or_alias)
    normalised_aliases[Utils.underscore_to_hyphen(region)] = value
    normalised_aliases
  end
end
populate_template_compilers(user_defined_compilers) click to toggle source
# File lib/stack_master/config.rb, line 83
def populate_template_compilers user_defined_compilers
  user_defined_compilers.each do |key, val|
    @template_compilers[key.to_sym] = val.to_sym
  end
end
resolve_region_aliases(stacks) click to toggle source
# File lib/stack_master/config.rb, line 104
def resolve_region_aliases(stacks)
  stacks.inject({}) do |hash, (region, attributes)|
    hash[unalias_region(region)] = attributes
    hash
  end
end