module Capistrano::AutoScaleDeploy
Constants
- VERSION
Public Class Methods
extend(configuration)
click to toggle source
# File lib/capistrano/autoscale_deploy.rb, line 6 def self.extend(configuration) configuration.load do Capistrano::Configuration.instance.load do _cset(:instances, {}) def connect_ec2 @ec2 ||= AWS::EC2.new({ access_key_id: fetch(:aws_access_key_id), secret_access_key: fetch(:aws_secret_access_key), region: fetch(:aws_default_region) }) end def sanitize_roles(roles) # remove :db (for migrations), remove :primary => :true (for assets precompile) roles.inject([]){|acc, role| if !role.is_a?(Hash) acc << role if role != :db else acc << role.reject{|k,v| k == :primary} end acc } end def autoscale(options = {}) begin connect_ec2 rescue Exception => e logger.info("unable to connect to ec2: #{e}") end # => filter('instance-state-code', '16') only running instances @ec2_instances = @ec2.instances.filter('tag-key', 'AutoScaleGroup').filter('tag-value', options[:AutoScaleGroup]).filter('instance-state-code', '16') logger.info("found #{@ec2_instances.count} servers for AutoScaleGroup: #{options[:AutoScaleGroup]} ") @ec2_instances.inject(instances){|acc, instance| acc[instance.ip_address] = options[:deploy_roles] acc } instances.each {|instance, roles| if instances.first[0] == instance server instance, *roles logger.info("First Server: #{instance} - #{roles}") else logger.info("Server: #{instance} - #{sanitize_roles(roles)}") server instance, *sanitize_roles(roles) end } end end end end
Public Instance Methods
autoscale(options = {})
click to toggle source
# File lib/capistrano/autoscale_deploy.rb, line 31 def autoscale(options = {}) begin connect_ec2 rescue Exception => e logger.info("unable to connect to ec2: #{e}") end # => filter('instance-state-code', '16') only running instances @ec2_instances = @ec2.instances.filter('tag-key', 'AutoScaleGroup').filter('tag-value', options[:AutoScaleGroup]).filter('instance-state-code', '16') logger.info("found #{@ec2_instances.count} servers for AutoScaleGroup: #{options[:AutoScaleGroup]} ") @ec2_instances.inject(instances){|acc, instance| acc[instance.ip_address] = options[:deploy_roles] acc } instances.each {|instance, roles| if instances.first[0] == instance server instance, *roles logger.info("First Server: #{instance} - #{roles}") else logger.info("Server: #{instance} - #{sanitize_roles(roles)}") server instance, *sanitize_roles(roles) end } end
connect_ec2()
click to toggle source
# File lib/capistrano/autoscale_deploy.rb, line 11 def connect_ec2 @ec2 ||= AWS::EC2.new({ access_key_id: fetch(:aws_access_key_id), secret_access_key: fetch(:aws_secret_access_key), region: fetch(:aws_default_region) }) end
sanitize_roles(roles)
click to toggle source
# File lib/capistrano/autoscale_deploy.rb, line 19 def sanitize_roles(roles) # remove :db (for migrations), remove :primary => :true (for assets precompile) roles.inject([]){|acc, role| if !role.is_a?(Hash) acc << role if role != :db else acc << role.reject{|k,v| k == :primary} end acc } end