require 'capistrano/asg'
namespace :asg do
task :scale do set :aws_access_key_id, fetch(:aws_access_key_id, ENV['AWS_ACCESS_KEY_ID']) set :aws_secret_access_key, fetch(:aws_secret_access_key, ENV['AWS_SECRET_ACCESS_KEY']) asg_launch_config = {} asg_ami_id = {} # Iterate over relevant regions regions = fetch(:regions) regions.keys.each do |region| set :aws_region, region asg_launch_config[region] = {} asg_ami_id[region] = {} # Iterate over relevant ASGs regions[region].each do |asg| set :aws_autoscale_group, asg Capistrano::Asg::AMI.create do |ami| puts "Autoscaling: Created AMI: #{ami.aws_counterpart.id} from region #{region} in ASG #{asg}" Capistrano::Asg::LaunchConfiguration.create(ami, fetch("#{region}_#{asg}".to_sym, {})) do |lc| puts "Autoscaling: Created Launch Configuration: #{lc.aws_counterpart.name} from region #{region} in ASG #{asg}" asg_launch_config[region][asg] = lc.aws_counterpart.name asg_ami_id[region][asg] = ami.aws_counterpart.id lc.attach_to_autoscale_group! end end end end set :asg_launch_config, asg_launch_config set :asg_ami_id, asg_ami_id end
end