Class: Provisionator::Ec2Launcher

Inherits:
Object
  • Object
show all
Defined in:
lib/provisionator/ec2_launcher.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Ec2Launcher

Returns a new instance of Ec2Launcher.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/provisionator/ec2_launcher.rb', line 12

def initialize options={}
  %w{ AWS_REGION AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY}.each do |env_var|
    raise "ENV['#{env_var}'] is required to be set"            unless ENV[env_var]
  end

  @options = options
  @options[:instance_type] ||= ENV['P_INSTANCE_TYPE'] || 'm1.small'
  @options[:no_release] ||= ENV['P_NO_RELEASE']
  @options[:ami_id] ||= ENV['P_AMI_ID'] || ami_id
  @options[:ebs_volumes] ||= []
  @options[:key_name] ||= ENV['P_KEY_NAME']
  @options[:security_groups] ||= ENV['P_SECURITY_GROUPS'].try(:split, ',')
  @options[:availability_zones] ||= ENV['P_AVAILABILITY_ZONES'].try(:split, ',') || ec2.availability_zones.map(&:name)
  @options[:instance_count] ||= ENV['P_INSTANCE_COUNT'].try(:to_i) || 1
  @options[:load_balancer_name] ||= ENV['P_LOAD_BALANCER_NAME']

  [:app_name, :chef_node, :ami_id, :key_name, :security_groups].each do |option|
    raise "option ':#{option}' is required" if options[option].nil?
  end
end

Class Method Details

.launch(options = {}) ⇒ Object



8
9
10
# File 'lib/provisionator/ec2_launcher.rb', line 8

def self.launch options={}
  new(options).launch
end

Instance Method Details

#launchObject



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/provisionator/ec2_launcher.rb', line 33

def launch     
  puts "Launching #{@options[:instance_count]} #{@options[:instance_type]} instance/s..." 

  instances = launch_instances
  wait_for_instances instances          
  register_with_load_balancer instances
  assign_elastic_ip instances.first

  instances.each do |instance|
    puts "Launched instance #{instance.id}, status: #{instance.status}, public dns: #{instance.dns_name}, public ip: #{instance.ip_address}"
  end
end