haproxy-tools 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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.9.3
1
+ 2.2.1
data/CHANGES.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.4.2
2
+ * [#11] Added functionality to allow addition of new configs (@drewsonne)
3
+ * [#12] Support symbols as server attributes
4
+
1
5
  == 0.4.0
2
6
  * Added support for 1.5 "keyword-type-argument" config (@drewsonne)
3
7
 
@@ -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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module HAProxy
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -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.1
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-02-24 00:00:00.000000000 Z
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: 1.8.23.2
169
+ rubygems_version: 2.4.5
186
170
  signing_key:
187
- specification_version: 3
171
+ specification_version: 4
188
172
  summary: HAProxy Tools for Ruby
189
173
  test_files:
190
174
  - spec/fixtures/multi-pool.haproxy.cfg