class CFnDK::Stacks

Public Class Methods

new(data, option, credentials) click to toggle source
# File lib/cfndk/stacks.rb, line 3
def initialize(data, option, credentials)
  @option = option
  @credentials = credentials
  @global_config = CFnDK::GlobalConfig.new(data, option)
  prepare_stack(data)
  prepare_sequence
end

Public Instance Methods

create() click to toggle source
# File lib/cfndk/stacks.rb, line 11
def create
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].create
    end
    stacks.each do |name|
      @stacks[name].wait_until_create
    end
  end
end
create_change_set() click to toggle source
# File lib/cfndk/stacks.rb, line 54
def create_change_set
  @sequence.each do |stacks|
    wait_until_stacks = []
    stacks.each do |name|
      wait_until_stacks.push(@stacks[name].create_change_set)
    end
    wait_until_stacks.compact!
    wait_until_stacks.each do |name|
      @stacks[name].wait_until_create_change_set
    end
  end
end
delete_change_set() click to toggle source
# File lib/cfndk/stacks.rb, line 86
def delete_change_set
  @sequence.reverse_each do |stacks|
    stacks.each do |name|
      @stacks[name].delete_change_set
    end
  end
end
destroy() click to toggle source
# File lib/cfndk/stacks.rb, line 35
def destroy
  @sequence.reverse_each do |stacks|
    stacks.each do |name|
      @stacks[name].destroy
    end
    stacks.each do |name|
      @stacks[name].wait_until_destroy
    end
  end
end
execute_change_set() click to toggle source
# File lib/cfndk/stacks.rb, line 67
def execute_change_set
  @sequence.each do |stacks|
    created_stacks = []
    wait_until_stacks = []
    stacks.each do |name|
      created_stacks.push(name) if @stacks[name].created?
      wait_until_stacks.push(@stacks[name].execute_change_set)
    end
    wait_until_stacks.compact!
    wait_until_stacks.each do |name|
      if created_stacks.include?(name)
        @stacks[name].wait_until_update
      else
        @stacks[name].wait_until_create
      end
    end
  end
end
post_command_execute() click to toggle source
# File lib/cfndk/stacks.rb, line 118
def post_command_execute
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].post_command_execute
    end
  end
end
pre_command_execute() click to toggle source
# File lib/cfndk/stacks.rb, line 110
def pre_command_execute
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].pre_command_execute
    end
  end
end
report() click to toggle source
# File lib/cfndk/stacks.rb, line 102
def report
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].report
    end
  end
end
report_change_set() click to toggle source
# File lib/cfndk/stacks.rb, line 94
def report_change_set
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].report_change_set
    end
  end
end
update() click to toggle source
# File lib/cfndk/stacks.rb, line 22
def update
  @sequence.each do |stacks|
    updating_stacks = []
    stacks.each do |name|
      result = @stacks[name].update
      updating_stacks.push name if result
    end
    updating_stacks.each do |name|
      @stacks[name].wait_until_update
    end
  end
end
validate() click to toggle source
# File lib/cfndk/stacks.rb, line 46
def validate
  @sequence.each do |stacks|
    stacks.each do |name|
      @stacks[name].validate
    end
  end
end

Private Instance Methods

prepare_sequence() click to toggle source
# File lib/cfndk/stacks.rb, line 136
def prepare_sequence
  @sequence = []
  names_of_upprocessed_stack = @stacks.keys
  names_of_processed_stack = []
  until names_of_upprocessed_stack.empty?
    names = names_of_upprocessed_stack.select do |name|
      @stacks[name].depends.all? do |depend_name|
        names_of_processed_stack.include? depend_name
      end
    end
    raise "There are cyclic dependency or stack doesn't exist. unprocessed_stack: " + names_of_upprocessed_stack.join(',') if names.empty?
    names_of_processed_stack += names
    names_of_upprocessed_stack -= names
    @sequence.push names
  end
end
prepare_stack(data) click to toggle source
# File lib/cfndk/stacks.rb, line 128
def prepare_stack(data)
  @stacks = {}
  return unless data['stacks'].is_a?(Hash)
  data['stacks'].each do |name, properties|
    @stacks[name] = Stack.new(name, properties, @option, @global_config, @credentials)
  end
end