Top Level Namespace

Defined Under Namespace

Modules: Elbow

Instance Method Summary collapse

Instance Method Details

#elastic_load_balancer(name, *args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/elbow/capistrano.rb', line 5

def elastic_load_balancer(name, *args)

    include Capistrano::DSL

    packet = Net::DNS::Resolver.start(name)
    all_cnames= packet.answer.reject { |p| !p.instance_of? Net::DNS::RR::CNAME }
    cname = all_cnames.find { |c| c.name == "#{name}."}
    cname = cname.cname[0..-2]

    aws_region= fetch(:aws_region, 'us-east-1')
    AWS.config(:access_key_id => fetch(:aws_access_key_id),
        :secret_access_key => fetch(:aws_secret_access_key),
        :ec2_endpoint => "ec2.#{aws_region}.amazonaws.com",
        :elb_endpoint => "elasticloadbalancing.#{aws_region}.amazonaws.com")

    load_balancer = AWS::ELB.new.load_balancers.find { |elb| elb.dns_name.downcase == cname.downcase }
    raise "EC2 Load Balancer not found for #{name} in region #{aws_region}" if load_balancer.nil?

    load_balancer.instances.each do |instance|
        hostname = instance.dns_name || instance.private_ip_address
        server(hostname, *args)
    end
end