haproxy-tools 0.4.1 → 0.4.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.
- checksums.yaml +7 -0
- data/.ruby-version +1 -1
- data/CHANGES.rdoc +4 -0
- data/lib/haproxy/config.rb +2 -2
- data/lib/haproxy/renderer.rb +35 -2
- data/lib/haproxy/treetop/nodes.rb +9 -0
- data/lib/haproxy/version.rb +1 -1
- data/spec/haproxy/config_spec.rb +41 -2
- metadata +27 -43
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 8fed60d3c4f99736c6769b45e93493707bd84fa9
|
|
4
|
+
data.tar.gz: 7b569498dc1b5a98313472ab52ba2720801065fb
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: cb2dd7af439b9d698128e44f177bb29375161542798454beee4441088ef64769f86fb22fcaea63f2f4d54ccc9cddddb3944aff43353e98087f6d2d6463a18ee8
|
|
7
|
+
data.tar.gz: 35be4c064d1a62665289c25b43065e993bdac6e861a9b3310aa9a68373193cdb407975f4d0aec467b52751889e88250501e9cf55cf6da4a61c2c0b8ac7960021
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2.2.1
|
data/CHANGES.rdoc
CHANGED
data/lib/haproxy/config.rb
CHANGED
|
@@ -15,7 +15,7 @@ module HAProxy
|
|
|
15
15
|
new_server.name = name
|
|
16
16
|
new_server.host = host
|
|
17
17
|
new_server.port = options[:port] if options[:port]
|
|
18
|
-
new_server.attributes ||= options[:attributes] ||
|
|
18
|
+
new_server.attributes ||= options[:attributes] || {}
|
|
19
19
|
self.servers[name] = new_server
|
|
20
20
|
new_server
|
|
21
21
|
end
|
|
@@ -57,7 +57,7 @@ module HAProxy
|
|
|
57
57
|
self.frontends.find { |f| f.name == name }
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
def default(name)
|
|
60
|
+
def default(name=nil)
|
|
61
61
|
self.defaults.find { |d| d.name == name }
|
|
62
62
|
end
|
|
63
63
|
|
data/lib/haproxy/renderer.rb
CHANGED
|
@@ -8,6 +8,7 @@ module HAProxy
|
|
|
8
8
|
self.config = config
|
|
9
9
|
self.source_tree = source_tree
|
|
10
10
|
@server_list = {}
|
|
11
|
+
@config_list = {}
|
|
11
12
|
@context = self.config
|
|
12
13
|
@prev_context = self.config
|
|
13
14
|
@config_text = ''
|
|
@@ -32,10 +33,21 @@ module HAProxy
|
|
|
32
33
|
next if @context.servers[e.name].nil?
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
if e.class == HAProxy::Treetop::ConfigLine and @context.class == HAProxy::Default
|
|
37
|
+
# Keep track of the configs in this config block we've seen, so that we can detect and render new ones.
|
|
38
|
+
@config_list[e.key] = e
|
|
39
|
+
# Don't render the config *if* it's been removed from the config block.
|
|
40
|
+
next if @context.config[e.key].nil?
|
|
41
|
+
end
|
|
42
|
+
|
|
35
43
|
if e.class == HAProxy::Treetop::ServerLine
|
|
36
44
|
# Use a custom rendering method for servers, since we allow them to be
|
|
37
45
|
# added/removed/changed.
|
|
38
46
|
render_server_element(e)
|
|
47
|
+
elsif e.class== HAProxy::Treetop::ConfigLine and @context.class == HAProxy::Default
|
|
48
|
+
# Use a custom rendering method for configs, since we allow them to be
|
|
49
|
+
# added/removed/changed.
|
|
50
|
+
render_config_line_element(e)
|
|
39
51
|
elsif e.elements && e.elements.size > 0
|
|
40
52
|
render_node(e)
|
|
41
53
|
else
|
|
@@ -51,6 +63,17 @@ module HAProxy
|
|
|
51
63
|
@context != @prev_context
|
|
52
64
|
end
|
|
53
65
|
|
|
66
|
+
def render_config_line_element(e)
|
|
67
|
+
config_key = e.key.gsub(/\s+/, ' ')
|
|
68
|
+
config_value = @context.config[e.key]
|
|
69
|
+
config_value = config_value.gsub(/\s+/, ' ') if not config_value.nil?
|
|
70
|
+
render_config_line(config_key, config_value)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def render_config_line(key, value)
|
|
74
|
+
@config_text << "\t#{key} #{value}\n"
|
|
75
|
+
end
|
|
76
|
+
|
|
54
77
|
def render_server_element(e)
|
|
55
78
|
server = @context.servers[e.name]
|
|
56
79
|
render_server(server)
|
|
@@ -62,6 +85,16 @@ module HAProxy
|
|
|
62
85
|
end
|
|
63
86
|
|
|
64
87
|
def handle_context_change
|
|
88
|
+
if [HAProxy::Default].include?(@prev_context.class)
|
|
89
|
+
# Render any configs which were added
|
|
90
|
+
new_configs = @prev_context.config.keys - @config_list.keys
|
|
91
|
+
|
|
92
|
+
new_configs.each do |config_name|
|
|
93
|
+
config_value = @prev_context.config[config_name]
|
|
94
|
+
render_config_line(config_name, config_value)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
65
98
|
if [HAProxy::Listener, HAProxy::Backend].include?(@prev_context.class)
|
|
66
99
|
# Render any servers that were added
|
|
67
100
|
new_servers = @prev_context.servers.keys - @server_list.keys
|
|
@@ -77,10 +110,10 @@ module HAProxy
|
|
|
77
110
|
def render_server_attributes(attributes)
|
|
78
111
|
attribute_string = ""
|
|
79
112
|
attributes.each do |name, value|
|
|
80
|
-
attribute_string << name
|
|
113
|
+
attribute_string << name.to_s
|
|
81
114
|
attribute_string << " "
|
|
82
115
|
if value && value != true
|
|
83
|
-
attribute_string << value
|
|
116
|
+
attribute_string << value.to_s
|
|
84
117
|
attribute_string << " "
|
|
85
118
|
end
|
|
86
119
|
end
|
|
@@ -105,6 +105,15 @@ module HAProxy
|
|
|
105
105
|
class ConfigLine < ::Treetop::Runtime::SyntaxNode
|
|
106
106
|
include StrippedTextContent
|
|
107
107
|
include OptionalValueElement
|
|
108
|
+
|
|
109
|
+
def key
|
|
110
|
+
self.keyword.content
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def attribute
|
|
114
|
+
self.value.content
|
|
115
|
+
end
|
|
116
|
+
|
|
108
117
|
end
|
|
109
118
|
|
|
110
119
|
class OptionLine < ::Treetop::Runtime::SyntaxNode
|
data/lib/haproxy/version.rb
CHANGED
data/spec/haproxy/config_spec.rb
CHANGED
|
@@ -29,7 +29,7 @@ describe "HAProxy::Config" do
|
|
|
29
29
|
|
|
30
30
|
it 'can re-render a config file with a server added' do
|
|
31
31
|
b = @config.backend('www_main')
|
|
32
|
-
b.add_server('prd_www_4', '99.99.99.99', :port => '8000')
|
|
32
|
+
b.add_server('prd_www_4', '99.99.99.99', :port => '8000', attributes: { :weight => 128 })
|
|
33
33
|
|
|
34
34
|
new_config_text = @config.render
|
|
35
35
|
|
|
@@ -39,7 +39,7 @@ describe "HAProxy::Config" do
|
|
|
39
39
|
s.name.should == 'prd_www_4'
|
|
40
40
|
s.host.should == '99.99.99.99'
|
|
41
41
|
s.port.should == '8000'
|
|
42
|
-
s.attributes.to_a.should == []
|
|
42
|
+
s.attributes.to_a.should == [['weight', '128']]
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it 'can re-render a config file with a server added based on template' do
|
|
@@ -65,11 +65,50 @@ describe "HAProxy::Config" do
|
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
describe 'render simple 1.5 config' do
|
|
69
|
+
before(:each) do
|
|
70
|
+
@config = HAProxy::Config.parse_file('spec/fixtures/simple.haproxy15.cfg')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'cen re-render a config file with an error page removed' do
|
|
74
|
+
@config.default.config.should have_key('errorfile 400')
|
|
75
|
+
@config.default.config.delete('errorfile 400')
|
|
76
|
+
|
|
77
|
+
new_config_text = @config.render
|
|
78
|
+
|
|
79
|
+
new_config = HAProxy::Parser.new.parse(new_config_text)
|
|
80
|
+
new_config.default.config.should_not have_key('errorfile 400')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'can re-render a config file with an error page added' do
|
|
84
|
+
@config.default.config.should_not have_key('errorfile 401')
|
|
85
|
+
@config.default.config['errorfile 401'] = '/etc/haproxy/errors/401.http'
|
|
86
|
+
|
|
87
|
+
new_config_text = @config.render
|
|
88
|
+
|
|
89
|
+
new_config = HAProxy::Parser.new.parse(new_config_text)
|
|
90
|
+
new_config.default.config.should have_key('errorfile 401')
|
|
91
|
+
new_config.default.config['errorfile 401'].should == '/etc/haproxy/errors/401.http'
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
68
96
|
describe 'render simple config' do
|
|
69
97
|
before(:each) do
|
|
70
98
|
@config = HAProxy::Config.parse_file('spec/fixtures/simple.haproxy.cfg')
|
|
71
99
|
end
|
|
72
100
|
|
|
101
|
+
it 'can re-render a config file with a config removed' do
|
|
102
|
+
@config.default.config.should have_key('clitimeout')
|
|
103
|
+
@config.default.config.delete('clitimeout')
|
|
104
|
+
|
|
105
|
+
new_config_text = @config.render
|
|
106
|
+
|
|
107
|
+
new_config = HAProxy::Parser.new.parse(new_config_text)
|
|
108
|
+
new_config.default.config.should_not have_key('clitimeout')
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
73
112
|
it 'can re-render a config file with a server removed' do
|
|
74
113
|
l = @config.listener('http_proxy')
|
|
75
114
|
l.servers.delete('web1')
|
metadata
CHANGED
|
@@ -1,126 +1,111 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: haproxy-tools
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.4.2
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Jason Wadsworth
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date: 2015-
|
|
11
|
+
date: 2015-03-29 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: net-scp
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - ">="
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: '0'
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
|
-
- -
|
|
24
|
+
- - ">="
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
26
|
version: '0'
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: treetop
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
|
-
- -
|
|
31
|
+
- - ">="
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
37
33
|
version: '0'
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
|
-
- -
|
|
38
|
+
- - ">="
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
45
40
|
version: '0'
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
|
47
42
|
name: rake
|
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
44
|
requirements:
|
|
51
|
-
- -
|
|
45
|
+
- - ">="
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
53
47
|
version: '0'
|
|
54
48
|
type: :development
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
51
|
requirements:
|
|
59
|
-
- -
|
|
52
|
+
- - ">="
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
61
54
|
version: '0'
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
|
63
56
|
name: rspec
|
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
58
|
requirements:
|
|
67
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
68
60
|
- !ruby/object:Gem::Version
|
|
69
61
|
version: '2.14'
|
|
70
62
|
type: :development
|
|
71
63
|
prerelease: false
|
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
65
|
requirements:
|
|
75
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
77
68
|
version: '2.14'
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
|
79
70
|
name: yard
|
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
72
|
requirements:
|
|
83
|
-
- -
|
|
73
|
+
- - ">="
|
|
84
74
|
- !ruby/object:Gem::Version
|
|
85
75
|
version: '0'
|
|
86
76
|
type: :development
|
|
87
77
|
prerelease: false
|
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
79
|
requirements:
|
|
91
|
-
- -
|
|
80
|
+
- - ">="
|
|
92
81
|
- !ruby/object:Gem::Version
|
|
93
82
|
version: '0'
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
|
95
84
|
name: simplecov
|
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
|
97
|
-
none: false
|
|
98
86
|
requirements:
|
|
99
|
-
- -
|
|
87
|
+
- - ">="
|
|
100
88
|
- !ruby/object:Gem::Version
|
|
101
89
|
version: '0'
|
|
102
90
|
type: :development
|
|
103
91
|
prerelease: false
|
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
-
none: false
|
|
106
93
|
requirements:
|
|
107
|
-
- -
|
|
94
|
+
- - ">="
|
|
108
95
|
- !ruby/object:Gem::Version
|
|
109
96
|
version: '0'
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
|
111
98
|
name: cane
|
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
none: false
|
|
114
100
|
requirements:
|
|
115
|
-
- -
|
|
101
|
+
- - ">="
|
|
116
102
|
- !ruby/object:Gem::Version
|
|
117
103
|
version: '0'
|
|
118
104
|
type: :development
|
|
119
105
|
prerelease: false
|
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
none: false
|
|
122
107
|
requirements:
|
|
123
|
-
- -
|
|
108
|
+
- - ">="
|
|
124
109
|
- !ruby/object:Gem::Version
|
|
125
110
|
version: '0'
|
|
126
111
|
description: Ruby tools for HAProxy, including config file management.
|
|
@@ -130,12 +115,12 @@ executables: []
|
|
|
130
115
|
extensions: []
|
|
131
116
|
extra_rdoc_files: []
|
|
132
117
|
files:
|
|
133
|
-
- .document
|
|
134
|
-
- .gitignore
|
|
135
|
-
- .rspec
|
|
136
|
-
- .ruby-version
|
|
137
|
-
- .simplecov
|
|
138
|
-
- .travis.yml
|
|
118
|
+
- ".document"
|
|
119
|
+
- ".gitignore"
|
|
120
|
+
- ".rspec"
|
|
121
|
+
- ".ruby-version"
|
|
122
|
+
- ".simplecov"
|
|
123
|
+
- ".travis.yml"
|
|
139
124
|
- CHANGES.rdoc
|
|
140
125
|
- Gemfile
|
|
141
126
|
- LICENSE.txt
|
|
@@ -164,27 +149,26 @@ files:
|
|
|
164
149
|
homepage: https://github.com/subakva/haproxy-tools
|
|
165
150
|
licenses:
|
|
166
151
|
- MIT
|
|
152
|
+
metadata: {}
|
|
167
153
|
post_install_message:
|
|
168
154
|
rdoc_options: []
|
|
169
155
|
require_paths:
|
|
170
156
|
- lib
|
|
171
157
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
|
-
none: false
|
|
173
158
|
requirements:
|
|
174
|
-
- -
|
|
159
|
+
- - ">="
|
|
175
160
|
- !ruby/object:Gem::Version
|
|
176
161
|
version: 1.9.3
|
|
177
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
|
-
none: false
|
|
179
163
|
requirements:
|
|
180
|
-
- -
|
|
164
|
+
- - ">="
|
|
181
165
|
- !ruby/object:Gem::Version
|
|
182
166
|
version: '0'
|
|
183
167
|
requirements: []
|
|
184
168
|
rubyforge_project:
|
|
185
|
-
rubygems_version:
|
|
169
|
+
rubygems_version: 2.4.5
|
|
186
170
|
signing_key:
|
|
187
|
-
specification_version:
|
|
171
|
+
specification_version: 4
|
|
188
172
|
summary: HAProxy Tools for Ruby
|
|
189
173
|
test_files:
|
|
190
174
|
- spec/fixtures/multi-pool.haproxy.cfg
|