consul-templaterb 1.6.3 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6f2b125d1d399813f7fe9ce1233034d077b514d0e27fa23c8134dd0d27a80df
4
- data.tar.gz: 4c35fdf085bcbe8d21d9df515f749e0e19d75270cdefe8e21b742e4ef7775e82
3
+ metadata.gz: d5b4bfc2f950af28c0c5db345700d15cdf01076cab18efea784e6ad6d1329e81
4
+ data.tar.gz: 725e4f3abcae9d3891b6956547dbb94a1c35beb3c810a34d2e8ade1f59e6f47c
5
5
  SHA512:
6
- metadata.gz: 321da736b94e7fb8fbcc203cd778089d6a5e48148bf35eb09ad8d301682f1e91733e5d2cfc473672df3bb0e035112f08f6e328a83981db32cdc0ef723836dac2
7
- data.tar.gz: 43d74d35bf97ece9e77ba32e52ee875e55024393b296b50310e287d521d276d5ed0a51379d8f77e7a6f22e684c89a055ac0658d3f5aa69959be88171eea7cf01
6
+ metadata.gz: 10f434a98600c5d2613fd6cfc1c195ed2344a2f9c4929d8fe8625815b9cd9ec086452e10cfbb55d6be9645fc81bd967d9556f40da7e408adb2d52089b260da7a
7
+ data.tar.gz: c2ba837aced1ca0db90480b4deb91dffafa0fa5f621ac9f9161e557d25e7ad580fee23f6bbd04fbe2759d2df9f7c75578725d4d50389ab71fd19c246e84dc13b
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
+ ## 1.7.0 (December 7, 2018)
6
+
7
+ OPTIMIZATIONS:
8
+
9
+ * Improved startup time (especially useful with `--once` option)
10
+ * Now iterate as fast as possible until scheduled rendering has started, so rendering is way faster
11
+
12
+ BUG FIXES:
13
+
14
+ * --wait was not working as expected, no properly set the minimum time between templates generation
15
+
5
16
  ## 1.6.3 (December 4, 2018)
6
17
 
7
18
  BUG FIXES:
@@ -118,8 +118,9 @@ optparse = OptionParser.new do |opts|
118
118
  options[:vault][:lease_duration_factor] = factor
119
119
  end
120
120
 
121
- opts.on('-w', '--wait=<min_duration>', Float, 'Wait at least n seconds before each template generation') do |min_duration|
122
- options[:consul][:min_duration] = min_duration
121
+ opts.on('-w', '--wait=<min_duration>', Integer, 'Wait at least n seconds before each template generation') do |min_duration|
122
+ raise "--wait=#{min_duration} must be greater than 0" unless min_duration.positive?
123
+ consul_engine.template_frequency = min_duration
123
124
  end
124
125
 
125
126
  opts.on('-r', '--retry-delay=<min_duration>', Float, 'Min Retry delay on Error/Missing Consul Index') do |min_duration|
@@ -9,13 +9,15 @@ require 'erb'
9
9
  module Consul
10
10
  module Async
11
11
  class ConsulTemplateEngine
12
- attr_reader :template_manager, :hot_reload_failure
13
- attr_writer :hot_reload_failure
12
+ attr_reader :template_manager, :hot_reload_failure, :template_frequency
13
+ attr_writer :hot_reload_failure, :template_frequency
14
14
  def initialize
15
15
  @templates = []
16
16
  @template_callbacks = []
17
17
  @hot_reload_failure = 'die'
18
18
  @all_templates_rendered = false
19
+ @template_frequency = 1
20
+ @periodic_started = false
19
21
  end
20
22
 
21
23
  def add_template_callback(&block)
@@ -26,6 +28,43 @@ module Consul
26
28
  @templates.push([source, dest, params])
27
29
  end
28
30
 
31
+ # Run templating engine once
32
+ def do_run(template_manager, template_renders)
33
+ results = template_renders.map(&:run)
34
+ all_ready = results.reduce(true) { |a, e| a && e.ready? }
35
+ if !@all_templates_rendered && all_ready
36
+ @all_templates_rendered = true
37
+ STDERR.puts "[INFO] First rendering of #{results.count} templates completed"
38
+ end
39
+ begin
40
+ @template_callbacks.each do |c|
41
+ c.call([all_ready, template_manager, results])
42
+ end
43
+ rescue StandardError => cbk_error
44
+ STDERR.puts "[ERROR] callback error: #{cbk_error.inspect}"
45
+ raise cbk_error
46
+ end
47
+ rescue Consul::Async::InvalidTemplateException => e
48
+ STDERR.puts "[FATAL]#{e}"
49
+ template_manager.terminate
50
+ EventMachine.stop
51
+ rescue StandardError => e
52
+ STDERR.puts "[ERROR] Fatal error occured: #{e.inspect} - #{e.backtrace.join("\n\t")}"
53
+ template_manager.terminate
54
+ EventMachine.stop
55
+ end
56
+
57
+ # Run template engine as fast as possible until first rendering occurs
58
+ def do_run_fast(template_manager, template_renders)
59
+ do_run(template_manager, template_renders)
60
+
61
+ return if @all_templates_rendered || @periodic_started
62
+ # We continue if rendering not done and periodic not started
63
+ EventMachine.next_tick do
64
+ do_run_fast(template_manager, template_renders)
65
+ end
66
+ end
67
+
29
68
  def run(template_manager)
30
69
  @template_manager = template_manager
31
70
  EventMachine.run do
@@ -35,31 +74,13 @@ module Consul
35
74
  hot_reload_failure: hot_reload_failure,
36
75
  params: params)
37
76
  end
38
- EventMachine.add_periodic_timer(1) do
39
- begin
40
- results = template_renders.map(&:run)
41
- all_ready = results.reduce(true) { |a, e| a && e.ready? }
42
- if !@all_templates_rendered && all_ready
43
- @all_templates_rendered = true
44
- STDERR.puts "[INFO] First rendering of #{results.count} templates completed"
45
- end
46
- begin
47
- @template_callbacks.each do |c|
48
- c.call([all_ready, template_manager, results])
49
- end
50
- rescue StandardError => cbk_error
51
- STDERR.puts "[ERROR] callback error: #{cbk_error.inspect}"
52
- raise cbk_error
53
- end
54
- rescue Consul::Async::InvalidTemplateException => e
55
- STDERR.puts "[FATAL]#{e}"
56
- template_manager.terminate
57
- EventMachine.stop
58
- rescue StandardError => e
59
- STDERR.puts "[ERROR] Fatal error occured: #{e.inspect} - #{e.backtrace.join("\n\t")}"
60
- template_manager.terminate
61
- EventMachine.stop
62
- end
77
+ # Initiate first run immediately to speed up rendering
78
+ EventMachine.next_tick do
79
+ do_run_fast(template_manager, template_renders)
80
+ end
81
+ EventMachine.add_periodic_timer(template_frequency) do
82
+ @periodic_started = true
83
+ do_run(template_manager, template_renders)
63
84
  end
64
85
  end
65
86
  end
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.6.3'.freeze
3
+ VERSION = '1.7.0'.freeze
4
4
  end
5
5
  end
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.6.3
4
+ version: 1.7.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: 2018-12-04 00:00:00.000000000 Z
11
+ date: 2018-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request