halb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/halb.rb CHANGED
@@ -0,0 +1,2 @@
1
+ require 'halb/deploy'
2
+ require 'halb/load_balancer'
@@ -0,0 +1,23 @@
1
+ require 'socket'
2
+
3
+ module Halb
4
+ class Deploy
5
+ def initialize(load_balancers, machines)
6
+ @load_balancers=load_balancers
7
+ @this_computer=Socket.gethostname.downcase
8
+ @machines = machines
9
+ end
10
+
11
+ def active_balancer
12
+ @load_balancers.detect { |lb| lb.active? }
13
+ end
14
+
15
+ def remove_from_production
16
+ active_balancer.put_in_maintenance(@machines[@this_computer])
17
+ end
18
+
19
+ def put_into_production
20
+ active_balancer.remove_from_maintenance(@machines[@this_computer])
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,51 @@
1
+ require 'net/ssh'
2
+
3
+ module Halb
4
+ class LoadBalancer
5
+ SHOW_ACTIVE_HOSTS_COMMAND='ipvsadm -l -n'
6
+
7
+ def initialize(host, user, ssh_keys)
8
+ @host, @user, @ssh_keys = host, user, ssh_keys
9
+ end
10
+
11
+ def active?
12
+ !/TCP[ ]+\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/.match(get_output_of(SHOW_ACTIVE_HOSTS_COMMAND)).nil?
13
+ end
14
+
15
+ def get_output_of(command)
16
+ output=''
17
+ open_connection do |ssh|
18
+ output=ssh.exec!(command)
19
+ end
20
+ output
21
+ end
22
+
23
+ def put_in_maintenance(ip_address)
24
+ service_endpoint=service_endpoint_for(ip_address)
25
+ perform(:command => "touch /etc/ha.d/maintenance/#{service_endpoint}", :exit_when => lambda { |ssh| !ssh.exec!(SHOW_ACTIVE_HOSTS_COMMAND).include?(service_endpoint) })
26
+ end
27
+
28
+ def remove_from_maintenance(ip_address)
29
+ service_endpoint = service_endpoint_for(ip_address)
30
+ perform(:command => "rm /etc/ha.d/maintenance/#{service_endpoint}", :exit_when => lambda { |ssh| ssh.exec!(SHOW_ACTIVE_HOSTS_COMMAND).include?(service_endpoint) })
31
+ end
32
+
33
+ def service_endpoint_for(ip_address)
34
+ "#{ip_address}:80"
35
+ end
36
+
37
+ def perform(params)
38
+ open_connection do |ssh|
39
+ ssh.exec!(params[:command])
40
+ loop do
41
+ break if params[:exit_when].call(ssh)
42
+ sleep(1)
43
+ end
44
+ end
45
+ end
46
+
47
+ def open_connection(&block)
48
+ Net::SSH.start(@host, 'root', :keys => @ssh_keys, &block)
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: halb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &11187500 !ruby/object:Gem::Requirement
16
+ requirement: &16720700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *11187500
24
+ version_requirements: *16720700
25
+ - !ruby/object:Gem::Dependency
26
+ name: net-ssh
27
+ requirement: &16719360 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *16719360
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: mocha
27
- requirement: &11130580 !ruby/object:Gem::Requirement
38
+ requirement: &16717980 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *11130580
46
+ version_requirements: *16717980
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: test-unit
38
- requirement: &11129640 !ruby/object:Gem::Requirement
49
+ requirement: &17139380 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,13 +54,15 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *11129640
57
+ version_requirements: *17139380
47
58
  description:
48
59
  email:
49
60
  executables: []
50
61
  extensions: []
51
62
  extra_rdoc_files: []
52
63
  files:
64
+ - lib/halb/deploy.rb
65
+ - lib/halb/load_balancer.rb
53
66
  - lib/halb.rb
54
67
  homepage: https://github.com/TeamIguana/halb
55
68
  licenses: []