class Object

Public Instance Methods

autoscale(groupname, *args) click to toggle source
# File lib/capistrano/asg.rb, line 27
def autoscale(groupname, *args)
  include Capistrano::DSL
  include Capistrano::Asg::Aws::AutoScaling
  include Capistrano::Asg::Aws::EC2

  autoscaling_group = autoscaling_resource.group(groupname)
  asg_instances = autoscaling_group.instances

  set :aws_autoscale_group, groupname
  region = fetch(:aws_region)
  regions = fetch(:regions, {})
  (regions[region] ||= []) << groupname
  set :regions, regions

  asg_instances.each do |asg_instance|
    if asg_instance.health_status != 'Healthy'
      puts "Autoscaling: Skipping unhealthy instance #{asg_instance.id}"
    else
      ec2_instance = ec2_resource.instance(asg_instance.id)
      hostname = ec2_instance.private_ip_address
      puts "Autoscaling: Adding server #{hostname}"
      server(hostname, *args)
    end
  end

  if asg_instances.count > 0 && fetch(:create_ami, true)
    after('deploy:finishing', 'asg:scale')
  else
    puts 'Autoscaling: AMI could not be created because no running instances were found.\
      Is your autoscale group name correct?'
  end

  reset_autoscaling_objects
  reset_ec2_objects
end