consul-templaterb 1.6.3 → 1.7.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.
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