capistrano-elb 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,80 @@
1
+ require 'fog'
2
+ require 'yaml'
3
+ require 'capistrano'
4
+ require 'pp'
5
+ # require "dir"
6
+
7
+ class CapELB
8
+ def initialize(configdir=File.join(Dir.pwd, 'config'))
9
+ ec2credentials = YAML::load(File.open(File.join(configdir, 'ec2credentials.yaml')))
10
+ aws = Fog::Compute.new(ec2credentials.merge({:provider=>'AWS'}))
11
+ @regions = aws.describe_regions.body["regionInfo"].map {|region| region["regionName"]}
12
+
13
+ @compute = {}
14
+ @regions.each do |region|
15
+ @compute.merge!(region => Fog::Compute.new(ec2credentials.merge({:provider=>'AWS',:region=>region})))
16
+ end
17
+
18
+ @elb = {}
19
+ @regions.each do |region|
20
+ @elb.merge!(region => Fog::AWS::ELB.new(ec2credentials.merge(:region=>region)))
21
+ end
22
+
23
+ @lbsfile = File.join(configdir, 'lbs.yaml')
24
+
25
+ @lbs = load_config
26
+ end
27
+
28
+ def config_from_aws
29
+ lbs = {}
30
+ @regions.each do |region|
31
+ loadBalancerDescriptions =
32
+ @elb[region].describe_load_balancers.body["DescribeLoadBalancersResult"]["LoadBalancerDescriptions"]
33
+ loadBalancerDescriptions.each do |lb|
34
+ lbs.merge!({region => {lb["LoadBalancerName"] => lb["Instances"]}})
35
+ end
36
+ end
37
+ lbs
38
+ end
39
+
40
+ def save_config
41
+ File.open( @lbsfile, 'w' ) do |file|
42
+ YAML.dump( config_from_aws, file )
43
+ end
44
+ end
45
+
46
+ def load_config
47
+ unless File.exists? @lbsfile
48
+ save_config
49
+ end
50
+ YAML::load(File.open(@lbsfile))
51
+ end
52
+
53
+ def check_config
54
+ load_config == config_from_aws
55
+ end
56
+
57
+ def add(serverlist)
58
+ each_server_by_lbs(serverlist) do |region, lbname, servers|
59
+ region.register_instances_with_load_balancer(servers, lbname)
60
+ end
61
+ end
62
+
63
+ def remove(serverlist)
64
+ each_server_by_lbs(serverlist) do |region, lbname, servers|
65
+ region.deregister_instances_from_load_balancer(servers, lbname)
66
+ end
67
+ end
68
+
69
+ def each_server_by_lbs(serverlist)
70
+ @lbs.each_pair do |region, lbs|
71
+ lbs.each_pair do |lbname, target_instances|
72
+ to_change = @compute[region].servers.select{|server| serverlist.include? server.dns_name}.map{|server| server.id}
73
+ yield(@elb[region], lbname, to_change) unless to_change.empty?
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+
80
+
@@ -0,0 +1,30 @@
1
+ require "capistrano-elb"
2
+ require "pp"
3
+
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ namespace :elb do
6
+ capELB = CapELB.new()
7
+
8
+ task :remove do
9
+ servers = roles[:web].servers.map {|server| server.host}
10
+ pp servers
11
+ capELB.remove servers
12
+ end
13
+
14
+ task :add do
15
+ servers = roles[:web].servers.map {|server| server.host}
16
+ capELB.add servers
17
+ end
18
+
19
+ task :save do
20
+ capELB.save_config
21
+ end
22
+
23
+ task :check do
24
+ puts capELB.check_config
25
+ end
26
+ end
27
+
28
+ before "deploy", "elb:remove"
29
+ after "deploy", "elb:add"
30
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-elb
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.2'
5
+ prerelease: !!null
6
+ platform: ruby
7
+ authors:
8
+ - thattommyhall
9
+ autorequire: !!null
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-04-11 00:00:00.000000000 +01:00
13
+ default_executable: !!null
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fog
17
+ requirement: &2156032200 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2156032200
26
+ - !ruby/object:Gem::Dependency
27
+ name: excon
28
+ requirement: &2156031720 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *2156031720
37
+ description: Remove servers automagically from ELB before deploy
38
+ email: tom.hall@forward.co.uk
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - lib/capistrano-elb.rb
44
+ - lib/capistrano-elb/tasks.rb
45
+ has_rdoc: true
46
+ homepage: https://github.com/thattommyhall/capistrano-elb
47
+ licenses: []
48
+ post_install_message: !!null
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project: !!null
66
+ rubygems_version: 1.5.0
67
+ signing_key: !!null
68
+ specification_version: 3
69
+ summary: Automagically remove/readd servers from EC2 load balancers as you cap deploy
70
+ test_files: []