consul-templaterb 1.27.2 → 1.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +13 -0
- data/README.md +18 -3
- data/bin/consul-templaterb +22 -6
- data/lib/consul/async/consul_template_render.rb +1 -1
- data/lib/consul/async/process_handler.rb +7 -1
- data/lib/consul/async/version.rb +1 -1
- data/samples/consul-ui/js/service.js +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c15ee78520048d7d091882b9d3b1d43b4cc5f5658cf39d782f06e1dc617d8cd9
|
4
|
+
data.tar.gz: 6f77a9daab557420f2640a314a97f78af68e26fec91c1a66f3ee575d9bf150f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c2b374a9400061f3ffd673e418771bb5685ec3d13a631c3839660121d86575be1fbbd1cd99f7ee1a4ddedf850ec72fa984ca084575da587b7a239d2e4654b2e
|
7
|
+
data.tar.gz: '0933c0a2f1f58c617c184679ab68c1e90d55f1d9ab796e45336ddbbf49ae2fd73cf1aafbfea6e921254a520c8be3e5f0f380cfbdacd694ba2de6c5f8e4f5a074'
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
## (UNRELEASED)
|
4
4
|
|
5
|
+
## 1.28.0 (Sept 25, 2020)
|
6
|
+
|
7
|
+
NEW FEATURES:
|
8
|
+
|
9
|
+
* Added `-W` or `--wait-between-reload-signal` to avoid sending too many signals
|
10
|
+
to a process executed. This avoids for instance reloading too much a HAProxy configuration
|
11
|
+
without having to play with `-w` as described in [#69](https://github.com/criteo/consul-templaterb/issues/69)
|
12
|
+
|
13
|
+
BUGFIX:
|
14
|
+
|
15
|
+
* Removed warnings at runtime with Ruby 2.7+
|
16
|
+
* Minor JS fix in Consul-UI (Added missing unused parameter to function `serviceTitleGenerator`)
|
17
|
+
|
5
18
|
## 1.27.2 (Sept 4, 2020)
|
6
19
|
|
7
20
|
IMPROVEMENTS:
|
data/README.md
CHANGED
@@ -165,9 +165,19 @@ USAGE: consul-templaterb [[options]]
|
|
165
165
|
-f, --[no-]fail-fast If consul/vault endpoints fail at startup, fail immediately
|
166
166
|
-g, --no-gzip-compression Disable GZIP compression in HTTP requests
|
167
167
|
-c, --consul-addr=<address> Address of Consul, eg: http://localhost:8500
|
168
|
+
--consul-cert-chain=<path/to/cert_chain>
|
169
|
+
Path to Consul TLS client certificate chain to use
|
170
|
+
--consul-private-key=<path/to/private_key>
|
171
|
+
Path to Consul TLS client private key to use
|
172
|
+
--skip-consul-verify-tls Skip verifying Consul TLS via certificate authority (DANGEROUS)
|
168
173
|
-l, --log-level=<log_level> Log level, default=info, any of none|error|info|debug
|
169
174
|
--consul-token=<token> Use a token to connect to Consul
|
170
175
|
-V, --vault-addr=<address> Address of Vault, eg: http://localhost:8200
|
176
|
+
--vault-cert-chain=<path/to/cert_chain>
|
177
|
+
Path to Vault TLS client certificate chain to use
|
178
|
+
--vault-private-key=<path/to/private_key>
|
179
|
+
Path to Vault TLS client private key to use
|
180
|
+
--skip-vault-verify-tls Skip verifying Vault TLS via certificate authority (DANGEROUS)
|
171
181
|
--vault-token=<token> Token used to authenticate against vault.
|
172
182
|
--[no-]vault-renew Control auto-renewal of the Vault token. Default: activated
|
173
183
|
--vault-retry, --vault-retry-attempts [RETRIES]
|
@@ -178,10 +188,11 @@ USAGE: consul-templaterb [[options]]
|
|
178
188
|
-r, --retry-delay=<min_duration> Min Retry delay on Error/Missing Consul Index
|
179
189
|
-k, --hot-reload=<behavior> Control hot reload behaviour, one of :[die (kill daemon on hot reload failure), keep (on error, keep running), disable (hot reload disabled)]
|
180
190
|
-K, --sig-term=kill_signal Signal to send to next --exec command on kill, default=TERM
|
191
|
+
-M, --debug-memory-usage Display messages when RAM grows
|
181
192
|
-T, --trim-mode=trim_mode ERB Trim mode to use (- by default)
|
182
193
|
-R, --sig-reload=reload_signal Signal to send to next --exec command on reload (NONE supported), default=HUP
|
183
|
-
-
|
184
|
-
-e, --exec=<command> Execute the following command
|
194
|
+
-W, --wait-signal=min_duration Wait at least n seconds before each reload signal being sent to next --exec process
|
195
|
+
-e, --exec=<command> Execute the following command in as a subprocess when all templates are ready
|
185
196
|
-d, --debug-network-usage Debug the network usage
|
186
197
|
-t erb_file:[output]:[command]:[params_file],
|
187
198
|
--template Add a erb template, its output and optional reload command
|
@@ -235,7 +246,11 @@ nor write the file.
|
|
235
246
|
Signals can be customized per process. Two signals are supported with options `--sig-reload` and
|
236
247
|
`--sig-term`. When the option is added, the next `--exec` options to start a process will use the
|
237
248
|
given signal. By default, HUP will be sent to reload events (you can use NONE to avoid sending any
|
238
|
-
reload signal), TERM will be used when leaving consul-templaterb.
|
249
|
+
reload signal), TERM will be used when leaving consul-templaterb. A minimum duration between reload
|
250
|
+
signals can be specified for each sub process by prepending `--wait-signal=min_duration` to `--exec`
|
251
|
+
command.
|
252
|
+
In such case, the signal will be sent every `min_duration` as a maximum (very useful for templates
|
253
|
+
changing a lot, but you don't want to trigger too many reloads, for instance for a load-balancer).
|
239
254
|
|
240
255
|
### Bandwidth limitation
|
241
256
|
|
data/bin/consul-templaterb
CHANGED
@@ -94,6 +94,7 @@ consul_engine = Consul::Async::ConsulTemplateEngine.new
|
|
94
94
|
@programs = {}
|
95
95
|
cur_sig_reload = 'HUP'.freeze
|
96
96
|
cur_sig_term = 'TERM'.freeze
|
97
|
+
cur_min_duration_between_signals = 1
|
97
98
|
|
98
99
|
optparse = OptionParser.new do |opts|
|
99
100
|
opts.banner = usage_text
|
@@ -215,6 +216,10 @@ optparse = OptionParser.new do |opts|
|
|
215
216
|
cur_sig_term = compute_signal(sig, nil)
|
216
217
|
end
|
217
218
|
|
219
|
+
opts.on('-M', '--debug-memory-usage', 'Display messages when RAM grows') do
|
220
|
+
consul_engine.debug_memory = true
|
221
|
+
end
|
222
|
+
|
218
223
|
opts.on('-T', '--trim-mode=trim_mode', String,
|
219
224
|
"ERB Trim mode to use (#{options[:erb][:trim_mode]} by default)") do |trim_mode|
|
220
225
|
options[:erb][:trim_mode] = trim_mode
|
@@ -225,25 +230,36 @@ optparse = OptionParser.new do |opts|
|
|
225
230
|
cur_sig_reload = compute_signal(sig, 'NONE')
|
226
231
|
end
|
227
232
|
|
228
|
-
opts.on('-
|
229
|
-
|
233
|
+
opts.on('-W', '--wait-signal=min_duration', Float, 'Wait at least n seconds before each reload signal being sent to next --exec process') do |min_duration|
|
234
|
+
raise "-wait-between-reload-signal=#{min_duration} must be greater than 0" unless min_duration.positive?
|
235
|
+
|
236
|
+
cur_min_duration_between_signals = min_duration
|
230
237
|
end
|
231
238
|
|
232
|
-
opts.on('-e', '--exec=<command>', String, 'Execute the following command') do |cmd|
|
239
|
+
opts.on('-e', '--exec=<command>', String, 'Execute the following command in as a subprocess when all templates are ready') do |cmd|
|
233
240
|
sig_reload = cur_sig_reload
|
234
241
|
sig_term = cur_sig_term
|
242
|
+
sig_min_interval = cur_min_duration_between_signals
|
235
243
|
consul_engine.add_template_callback do |all_ready, template_manager, results|
|
236
244
|
if all_ready
|
237
245
|
modified = results.any?(&:modified)
|
238
246
|
if @programs[cmd].nil?
|
239
|
-
warn "[EXEC] Starting process: #{cmd}... on_reload=#{sig_reload || 'NONE'} on_term=#{sig_term}"
|
247
|
+
warn "[EXEC] Starting process: #{cmd}... on_reload=#{sig_reload || 'NONE'} on_term=#{sig_term}, delay between reloads=#{sig_min_interval}s"
|
240
248
|
@programs[cmd] = Consul::Async::ProcessHandler.new(cmd, sig_reload: sig_reload, sig_term: sig_term)
|
241
249
|
@programs[cmd].start
|
242
250
|
else
|
251
|
+
|
243
252
|
# At least one template has been modified
|
244
|
-
@programs[cmd]
|
253
|
+
process_to_reload = @programs[cmd]
|
254
|
+
if modified && !process_to_reload.reload_scheduled
|
255
|
+
process_to_reload.reload_scheduled = true
|
256
|
+
now = Time.now
|
257
|
+
delay = sig_min_interval - (now - @programs[cmd].last_signal_sent)
|
258
|
+
delay = 0 if delay.negative?
|
259
|
+
EventMachine.add_timer(delay) { process_to_reload.reload }
|
260
|
+
end
|
245
261
|
begin
|
246
|
-
|
262
|
+
process_to_reload.process_status
|
247
263
|
rescue Consul::Async::ProcessDoesNotExist => e
|
248
264
|
warn "[FATAL] The process is dead, aborting run: #{e.inspect}"
|
249
265
|
template_manager.terminate
|
@@ -59,7 +59,7 @@ module Consul
|
|
59
59
|
return false unless new_template != @template
|
60
60
|
|
61
61
|
# We render to ensure the template is valid
|
62
|
-
render(new_template, current_template_info)
|
62
|
+
render(new_template, current_template_info: current_template_info)
|
63
63
|
@template = new_template.freeze
|
64
64
|
true
|
65
65
|
end
|
@@ -7,7 +7,8 @@ module Consul
|
|
7
7
|
# Handle the full lifecycle of a process and allows to forward
|
8
8
|
# Posix signals to child process when needed.
|
9
9
|
class ProcessHandler
|
10
|
-
attr_reader :command, :sig_reload, :sig_term, :pid, :exit_status
|
10
|
+
attr_reader :command, :sig_reload, :sig_term, :pid, :exit_status, :last_signal_sent, :reload_scheduled
|
11
|
+
attr_writer :reload_scheduled
|
11
12
|
def initialize(command, sig_reload: 'HUP', sig_term: 'TERM')
|
12
13
|
raise 'empty sig_term is not supported' unless sig_term
|
13
14
|
|
@@ -16,18 +17,23 @@ module Consul
|
|
16
17
|
@sig_term = sig_term
|
17
18
|
@pid = nil
|
18
19
|
@exit_status = nil
|
20
|
+
@last_signal_sent = Time.now
|
21
|
+
@reload_scheduled = false
|
19
22
|
end
|
20
23
|
|
21
24
|
def start
|
22
25
|
return pid unless pid.nil?
|
23
26
|
|
24
27
|
@pid = Process.spawn(command)
|
28
|
+
@last_signal_sent = Time.now
|
25
29
|
end
|
26
30
|
|
27
31
|
def reload
|
28
32
|
return if sig_reload.nil?
|
29
33
|
|
34
|
+
@last_signal_sent = Time.now
|
30
35
|
warn "Sending SIG #{sig_reload} to #{pid}..."
|
36
|
+
@reload_scheduled = false
|
31
37
|
begin
|
32
38
|
Process.kill(sig_reload, pid)
|
33
39
|
rescue Errno::ESRCH => e
|
data/lib/consul/async/version.rb
CHANGED
@@ -304,7 +304,7 @@ class ServiceMainSelector extends MainSelector {
|
|
304
304
|
element.setAttribute("class", "list-group-item service-instance");
|
305
305
|
var state = nodeState(instance.checks);
|
306
306
|
element.appendChild(weightsGenerator(instance.weights, state));
|
307
|
-
element.appendChild(serviceTitleGenerator(instance));
|
307
|
+
element.appendChild(serviceTitleGenerator(instance, serviceName));
|
308
308
|
var node_info = this.nodes[instance.name];
|
309
309
|
if (node_info != null) {
|
310
310
|
node_info = node_info.meta;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consul-templaterb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SRE Core Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|