require 'capistrano/helpers/aws_helper' require 'capistrano/helpers/cap_helper'
namespace :load do
task :defaults do set :aws_autoscaling, true set :aws_region, 'us-west-2' set :aws_deploy_roles, %w{web app db} set :aws_ip_type, 'public_dns_name' end
end
namespace :deploy do
before :starting, :check_autoscaling_hooks do invoke 'autoscaling_deploy:setup_instances' if fetch(:aws_autoscaling) end
end
namespace :autoscaling_deploy do
include AwsHelper include CapHelper desc 'Add server from Auto Scaling Group.' task :setup_instances do ec2_instances = fetch_ec2_instances aws_deploy_roles = fetch(:aws_deploy_roles) aws_deploy_user = fetch(:aws_deploy_user) ec2_instances.each {|instance| if ec2_instances.first == instance server instance, user: aws_deploy_user, roles: aws_deploy_roles, primary: true puts("First Server: #{instance} - #{aws_deploy_roles}") else server instance, user: aws_deploy_user, roles: sanitize_roles(aws_deploy_roles) puts("Server: #{instance} - #{sanitize_roles(aws_deploy_roles)}") end } end def fetch_ec2_instances region = fetch(:aws_region) key = fetch(:aws_access_key_id) secret = fetch(:aws_secret_access_key) group_name = fetch(:aws_autoscaling_group_name) ip_type = fetch(:aws_ip_type) instances = get_instances(region, key, secret, group_name, ip_type) puts("Found #{instances.count} servers (#{instances.join(',')}) for Auto Scaling Group: #{group_name} ") instances end
end