module RodeoClown::InstanceBuilder

Attributes

availability_zones[R]
key_pair[R]
options[R]
tags[RW]

Public Instance Methods

build_instances(template = nil) click to toggle source

Build instances using build options

if :template is passed, only build on, used as a template for a new image

# File lib/rodeo_clown/instance_builder.rb, line 34
def build_instances(template = nil)
  build_args =
    if template == :template
      [build_options.first.merge(count: 1)]
    else
      build_options
    end

  build_args.map do |args|
    instances = create_instance args
    apply_tags(instances)
    instances
  end.flatten
end
build_options() click to toggle source
# File lib/rodeo_clown/instance_builder.rb, line 21
def build_options
  if availability_zones.any?
    availability_zones.map do |zone|
      configs.merge(availability_zone: zone)
    end
  else
    [configs]
  end
end
key_pair=(key_pair_name) click to toggle source
# File lib/rodeo_clown/instance_builder.rb, line 17
def key_pair=(key_pair_name)
  @key_pair = AWS::EC2::KeyPair.new(key_pair_name)
end
many_from_options(options) click to toggle source
# File lib/rodeo_clown/instance_builder.rb, line 8
def many_from_options(options)
  options = options.symbolize_keys # Create a duplicate

  @key_pair_name      = options.delete(:key_pair_name)
  @tags               = options.delete(:tags)
  @availability_zones = options.delete(:availability_zones) || []
  @options            = options
end

Private Instance Methods

apply_tags(instances) click to toggle source
# File lib/rodeo_clown/instance_builder.rb, line 51
def apply_tags(instances)
  rc_tags = { 
    "rc_created_by" => "Rodeo Clown #{RodeoClown::VERSION}",
    "rc_created_at" => Time.now.to_s 
  }

  [*instances].each {|i| i.tags.set(tags.merge(rc_tags)) }
end
configs() click to toggle source
# File lib/rodeo_clown/instance_builder.rb, line 60
def configs
  options.merge(:key_pair => key_pair)
end