class StackMaster::TestDriver::CloudFormation

Public Class Methods

new() click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 66
def initialize
  reset
end

Public Instance Methods

add_stack(stack) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 173
def add_stack(stack)
  @stacks[stack.fetch(:stack_name)] = Stack.new(stack)
end
add_stack_event(event) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 186
def add_stack_event(event)
  stack_name = event.fetch(:stack_name)
  @stack_events[stack_name] ||= []
  @stack_events[stack_name] << StackEvent.new(event)
end
add_stack_resource(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 177
def add_stack_resource(options)
  @stack_resources[options.fetch(:stack_name)] ||= []
  @stack_resources[options.fetch(:stack_name)] << StackResource.new(options)
end
create_change_set(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 87
def create_change_set(options)
  id = SecureRandom.uuid
  options.merge!(change_set_id: id)
  @change_sets[id] = options
  @change_sets[options.fetch(:change_set_name)] = options
  stack_name = options.fetch(:stack_name)
  add_stack(stack_name: stack_name, stack_status: 'REVIEW_IN_PROGRESS') unless @stacks[stack_name]
  OpenStruct.new(id: id)
end
create_stack(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 158
def create_stack(options)
  stack_name = options.fetch(:stack_name)
  add_stack(options)
  @stack_policies[stack_name] = options[:stack_policy_body]
end
delete_change_set(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 116
def delete_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  @change_sets.delete(change_set_id)
end
delete_stack(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 164
def delete_stack(options)
  stack_name = options.fetch(:stack_name)
  @stacks.delete(stack_name)
end
describe_change_set(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 97
def describe_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  change_set = @change_sets.fetch(change_set_id)
  change_details = [
    OpenStruct.new(evaluation: 'Static', change_source: 'ResourceReference', target: OpenStruct.new(attribute: 'Properties', requires_recreation: 'Always', name: 'blah'))
  ]
  change = OpenStruct.new(action: 'Modify', replacement: 'True', scope: ['Properties'], details: change_details)
  changes = [
    OpenStruct.new(type: 'AWS::Resource', resource_change: change)
  ]
  OpenStruct.new(change_set.merge(changes: changes, status: 'CREATE_COMPLETE'))
end
describe_stack_events(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 153
def describe_stack_events(options)
  events = @stack_events[options.fetch(:stack_name)] || []
  OpenStruct.new(stack_events: events, next_token: nil)
end
describe_stack_resources(options = {}) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 135
def describe_stack_resources(options = {})
  @stacks.fetch(options.fetch(:stack_name)) { raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist') }
  OpenStruct.new(stack_resources: @stack_resources[options.fetch(:stack_name)])
end
describe_stacks(options = {}) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 121
def describe_stacks(options = {})
  stack_name = options[:stack_name]
  stacks = if stack_name
    if @stacks[stack_name]
      [@stacks[stack_name]]
    else
      raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist')
    end
  else
    @stacks.values
  end
  OpenStruct.new(stacks: stacks, next_token: nil)
end
execute_change_set(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 110
def execute_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  change_set = @change_sets.fetch(change_set_id)
  @stacks[change_set.fetch(:stack_name)].attributes = change_set
end
get_stack_policy(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 145
def get_stack_policy(options)
  OpenStruct.new(stack_policy_body: @stack_policies[options.fetch(:stack_name)])
end
get_template(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 140
def get_template(options)
  template_body = @templates[options[:stack_name]] || nil
  OpenStruct.new(template_body: template_body)
end
region() click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 70
def region
  @region ||= ENV['AWS_REGION'] || Aws.config[:region] || Aws.shared_config.region
end
reset() click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 78
def reset
  @stacks = {}
  @templates = {}
  @stack_events = {}
  @stack_resources = {}
  @stack_policies = {}
  @change_sets = {}
end
set_region(region) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 74
def set_region(region)
  @region = region
end
set_stack_policy(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 149
def set_stack_policy(options)
  @stack_policies[options.fetch(:stack_name)] = options[:stack_policy_body]
end
set_template(stack_name, template) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 182
def set_template(stack_name, template)
  @templates[stack_name] = template
end
validate_template(options) click to toggle source
# File lib/stack_master/test_driver/cloud_formation.rb, line 169
def validate_template(options)
  true
end