rhaproxy 0.1.0
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.
- data/Changelog +0 -0
- data/MIT-LICENSE +21 -0
- data/README +58 -0
- data/lib/rhaproxy/backend.rb +5014 -0
- data/lib/rhaproxy/defaults.rb +3713 -0
- data/lib/rhaproxy/frontend.rb +3251 -0
- data/lib/rhaproxy/global.rb +590 -0
- data/lib/rhaproxy/listen.rb +6090 -0
- data/lib/rhaproxy/peers.rb +110 -0
- data/lib/rhaproxy/userlist.rb +93 -0
- data/lib/rhaproxy/version.rb +17 -0
- data/lib/rhaproxy.rb +9 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_rhaproxy.rb +11 -0
- metadata +81 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
# = rhaproxy - A HAproxy gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/rhaproxy
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# class RhaproxyPeers.new( array, str, array)
|
10
|
+
#
|
11
|
+
|
12
|
+
#
|
13
|
+
# It is possible to synchronize server entries in stick tables between several
|
14
|
+
# haproxy instances over TCP connections in a multi-master fashion. Each instance
|
15
|
+
# pushes its local updates and insertions to remote peers. Server IDs are used to
|
16
|
+
# identify servers remotely, so it is important that configurations look similar
|
17
|
+
# or at least that the same IDs are forced on each server on all participants.
|
18
|
+
# Interrupted exchanges are automatically detected and recovered from the last
|
19
|
+
# known point. In addition, during a soft restart, the old process connects to
|
20
|
+
# the new one using such a TCP connection to push all its entries before the new
|
21
|
+
# process tries to connect to other peers. That ensures very fast replication
|
22
|
+
# during a reload, it typically takes a fraction of a second even for large
|
23
|
+
# tables.
|
24
|
+
#
|
25
|
+
class RhaproxyPeers
|
26
|
+
|
27
|
+
#
|
28
|
+
# name <peersect>
|
29
|
+
# Creates a new peer name <peersect>. It is an independant section,
|
30
|
+
# which is referenced by one or more stick-tables.
|
31
|
+
#
|
32
|
+
attr_accessor :name
|
33
|
+
|
34
|
+
#
|
35
|
+
# peers <peersect>
|
36
|
+
# Creates a new peer list with name <peersect>. It is an independant section,
|
37
|
+
# which is referenced by one or more stick-tables.
|
38
|
+
# This is under the peers_section.
|
39
|
+
#
|
40
|
+
#
|
41
|
+
attr_accessor :peers
|
42
|
+
|
43
|
+
#
|
44
|
+
# peer <peername> <ip>:<port>
|
45
|
+
# Defines a peer inside a peers section.
|
46
|
+
# If <peername> is set to the local peer name (by default hostname, or forced
|
47
|
+
# using "-L" command line option), haproxy will listen for incoming remote peer
|
48
|
+
# connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
|
49
|
+
# to join the remote peer, and <peername> is used at the protocol level to
|
50
|
+
# identify and validate the remote peer on the server side.
|
51
|
+
#
|
52
|
+
# During a soft restart, local peer <ip>:<port> is used by the old instance to
|
53
|
+
# connect the new one and initiate a complete replication (teaching process).
|
54
|
+
#
|
55
|
+
# It is strongly recommended to have the exact same peers declaration on all
|
56
|
+
# peers and to only rely on the "-L" command line argument to change the local
|
57
|
+
# peer name. This makes it easier to maintain coherent configuration files
|
58
|
+
# across all peers.
|
59
|
+
#
|
60
|
+
attr_accessor :peer
|
61
|
+
|
62
|
+
#
|
63
|
+
# Returns a new RhaproxyPeers Object
|
64
|
+
#
|
65
|
+
def initialize()
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# Compile the HAproxy peers configuration
|
70
|
+
#
|
71
|
+
def config
|
72
|
+
|
73
|
+
if @name
|
74
|
+
|
75
|
+
conf = option_string()
|
76
|
+
|
77
|
+
return conf
|
78
|
+
|
79
|
+
else
|
80
|
+
|
81
|
+
puts "no peers section name defined"
|
82
|
+
|
83
|
+
return false
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def option_string()
|
92
|
+
|
93
|
+
ostring = " " + "peers " + @name.to_s + "\n"
|
94
|
+
|
95
|
+
if @peers
|
96
|
+
ostring += " " + "peers " + @peers.to_s + "\n"
|
97
|
+
end
|
98
|
+
|
99
|
+
if @peer
|
100
|
+
ostring += " " + "peer " + @peer.to_s + "\n"
|
101
|
+
end
|
102
|
+
|
103
|
+
ostring += "\n"
|
104
|
+
|
105
|
+
return ostring
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# = rhaproxy - A HAproxy gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/rhaproxy
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
#
|
9
|
+
# class RhaproxyUserlist.new( array, str, array)
|
10
|
+
#
|
11
|
+
|
12
|
+
#
|
13
|
+
# It is possible to control access to frontend/backend/listen sections or to
|
14
|
+
# http stats by allowing only authenticated and authorized users. To do this,
|
15
|
+
# it is required to create at least one userlist and to define users.
|
16
|
+
#
|
17
|
+
class RhaproxyUserlist
|
18
|
+
|
19
|
+
#
|
20
|
+
# name <listname>
|
21
|
+
# Creates new userlist with name <listname>. Many independent userlists can be
|
22
|
+
# used to store authentication & authorization data for independent customers.
|
23
|
+
#
|
24
|
+
attr_accessor :name
|
25
|
+
|
26
|
+
#
|
27
|
+
# group <groupname> [users <user>,<user>,(...)]
|
28
|
+
# Adds group <groupname> to the current userlist. It is also possible to
|
29
|
+
# attach users to this group by using a comma separated list of names
|
30
|
+
# proceeded by "users" keyword.
|
31
|
+
#
|
32
|
+
attr_accessor :group
|
33
|
+
|
34
|
+
#
|
35
|
+
# user <username> [password|insecure-password <password>]
|
36
|
+
# [groups <group>,<group>,(...)]
|
37
|
+
# Adds user <username> to the current userlist. Both secure (encrypted) and
|
38
|
+
# insecure (unencrypted) passwords can be used. Encrypted passwords are
|
39
|
+
# evaluated using the crypt(3) function so depending of the system's
|
40
|
+
# capabilities, different algorithms are supported. For example modern Glibc
|
41
|
+
# based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
|
42
|
+
# DES-based method of crypting passwords.
|
43
|
+
#
|
44
|
+
attr_accessor :user
|
45
|
+
|
46
|
+
#
|
47
|
+
# Returns a new RhaproxyUserlist Object
|
48
|
+
#
|
49
|
+
def initialize()
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Compile the HAproxy userlist configuration
|
54
|
+
#
|
55
|
+
def config
|
56
|
+
|
57
|
+
if @name
|
58
|
+
|
59
|
+
conf = option_string()
|
60
|
+
|
61
|
+
return conf
|
62
|
+
|
63
|
+
else
|
64
|
+
|
65
|
+
puts "no userlists name defined"
|
66
|
+
|
67
|
+
return false
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def option_string()
|
76
|
+
|
77
|
+
ostring = " " + "userlist " + @name + "\n"
|
78
|
+
|
79
|
+
if @group
|
80
|
+
ostring += " " + "group " + @group + "\n"
|
81
|
+
end
|
82
|
+
|
83
|
+
if @user
|
84
|
+
ostring += " " + "user " + @user + "\n"
|
85
|
+
end
|
86
|
+
|
87
|
+
ostring += "\n"
|
88
|
+
|
89
|
+
return ostring
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# = rhaproxy - A HAproxy gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/rhaproxy
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
module RHAproxy #:nodoc:
|
9
|
+
module VERSION #:nodoc:
|
10
|
+
MAJOR = 0
|
11
|
+
MINOR = 1
|
12
|
+
TINY = 0
|
13
|
+
|
14
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/lib/rhaproxy.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# = rhaproxy - A HAproxy gem for Ruby
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/rhaproxy
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
|
8
|
+
Dir[File.join(File.dirname(__FILE__), 'rhaproxy/**/*.rb')].sort.each { |lib| require lib }
|
9
|
+
|