consul-templaterb 1.7.0 → 1.8.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 +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/TemplateAPI.md +45 -0
- data/lib/consul/async/consul_template.rb +18 -5
- data/lib/consul/async/consul_template_render.rb +21 -6
- data/lib/consul/async/version.rb +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: d6f546cec480feae29069b3458138d65bdeacc686b5a0e2a0e6762a306ee7cbe
|
4
|
+
data.tar.gz: edad0a361f2bfc627994e05ea590cb5c1f62c81a1f25aeaaad9c150110e0ed5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4882996d68193413e3b9b2cacdb182c14cd6c952b6a53397488689d140e90ce0b6f7cefd898028d85e0cb22114c9a53b1c6333fd06aaa50d73dcc9158560836
|
7
|
+
data.tar.gz: 8cbeeda5ae647a91fe9744a5240c0113f216c29613e802f58ec8ffcbb5b49d632192573fe0e4fd1dc357c498d48c81935d38f3f58886bd72c0d37270100efa7f
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## (UNRELEASED)
|
4
4
|
|
5
|
+
## 1.8.0 (December 11, 2018)
|
6
|
+
|
7
|
+
NEW FEATURES:
|
8
|
+
|
9
|
+
* Added new function `template_info` to get information about the file being rendered and whether
|
10
|
+
the first rendering phase is completed.
|
11
|
+
|
5
12
|
## 1.7.0 (December 7, 2018)
|
6
13
|
|
7
14
|
OPTIMIZATIONS:
|
data/README.md
CHANGED
@@ -290,8 +290,8 @@ Please consult [CHANGELOG.md](CHANGELOG.md) for fixed bugs.
|
|
290
290
|
|
291
291
|
* [x] Hashi's Vault support (EXPERIMENTAL)
|
292
292
|
* [ ] Implement automatic dynamic rate limit
|
293
|
-
* [
|
294
|
-
* [
|
293
|
+
* [x] More samples: apache, nginx, full website displaying consul information...
|
294
|
+
* [x] Optimize rendering speed at start-up: an iteration is done very second by default, but it would be possible to speed
|
295
295
|
up rendering by iterating with higher frequency until the first write of result has been performed.
|
296
296
|
* [ ] Allow to tune bandwidth using a simple configuration file (while it should not be necessary for 90% of use-cases)
|
297
297
|
|
data/TemplateAPI.md
CHANGED
@@ -377,3 +377,48 @@ secret('secret/foo', [force_ttl: intInSecond])
|
|
377
377
|
|
378
378
|
</div>
|
379
379
|
</details>
|
380
|
+
|
381
|
+
## template_info()
|
382
|
+
|
383
|
+
It returns information about current template being rendered.
|
384
|
+
The information returned has the following structure:
|
385
|
+
|
386
|
+
```json
|
387
|
+
{
|
388
|
+
'destination': destination_file_for_root_template
|
389
|
+
'source': absolute_path_to_template_file.erb
|
390
|
+
'source_root': absolute_path_to_root_template.erb
|
391
|
+
'was_rendered_once': true|false
|
392
|
+
}
|
393
|
+
```
|
394
|
+
|
395
|
+
- `destination`: absolute path where the file is gonna be written
|
396
|
+
- `source`: the template absolute path file, most of the time, if will be
|
397
|
+
equal to `source_root`, except when the current template is included
|
398
|
+
in another template using `render_file()`
|
399
|
+
- `source_root`: the root template absolute file.
|
400
|
+
- `was_rendered_once` true if whole template structure has been rendered
|
401
|
+
at least once, false if current template data is still incomplete.
|
402
|
+
|
403
|
+
<details><summary>Examples</summary>
|
404
|
+
<div class="samples">
|
405
|
+
|
406
|
+
### Display template info
|
407
|
+
|
408
|
+
```erb
|
409
|
+
I am the file <%= File.basename(template_info['source']) %><%
|
410
|
+
if template_info['source'] != template_info['source_root']
|
411
|
+
%> included from template <%= File.basename(template_info['source_root']) %><%
|
412
|
+
end
|
413
|
+
%> rendered as <%= File.basename(template_info['destination']) %>
|
414
|
+
```
|
415
|
+
|
416
|
+
The command `consul-template template_info.erb` would render:
|
417
|
+
`I am the file template_info.erb rendered as template_info`
|
418
|
+
|
419
|
+
If creating a file called include.erb with contents: `<%= render_file('template_info.erb') %>`,
|
420
|
+
the command `consul-templaterb --template include.erb:destination_file.txt` would render:
|
421
|
+
`I am the file template_info.erb included from template include.erb rendered as destination_file.txt`
|
422
|
+
|
423
|
+
</div>
|
424
|
+
</details>
|
@@ -36,6 +36,12 @@ module Consul
|
|
36
36
|
}
|
37
37
|
@context = {
|
38
38
|
current_erb_path: nil,
|
39
|
+
template_info: {
|
40
|
+
'source_root' => nil,
|
41
|
+
'source' => nil,
|
42
|
+
'destination' => nil,
|
43
|
+
'was_rendered_once' => false
|
44
|
+
},
|
39
45
|
params: {}
|
40
46
|
}
|
41
47
|
|
@@ -104,6 +110,11 @@ module Consul
|
|
104
110
|
v
|
105
111
|
end
|
106
112
|
|
113
|
+
# Get information about current template
|
114
|
+
def template_info
|
115
|
+
@context[:template_info]
|
116
|
+
end
|
117
|
+
|
107
118
|
# https://www.consul.io/api/catalog.html#list-services
|
108
119
|
def services(dc: nil, tag: nil)
|
109
120
|
path = '/v1/catalog/services'
|
@@ -153,7 +164,7 @@ module Consul
|
|
153
164
|
def render_file(path, params = {})
|
154
165
|
new_path = File.expand_path(path, File.dirname(@context[:current_erb_path]))
|
155
166
|
raise "render_file ERROR: #{path} is resolved as #{new_path}, but the file does not exists" unless File.exist? new_path
|
156
|
-
render(File.read(new_path), new_path, params)
|
167
|
+
render(File.read(new_path), new_path, params, current_template_info: template_info)
|
157
168
|
end
|
158
169
|
|
159
170
|
def find_line(e)
|
@@ -164,12 +175,14 @@ module Consul
|
|
164
175
|
nil
|
165
176
|
end
|
166
177
|
|
167
|
-
def render(tpl, tpl_file_path, params = {})
|
178
|
+
def render(tpl, tpl_file_path, params = {}, current_template_info: nil)
|
168
179
|
# Ugly, but allow to use render_file well to support stack of calls
|
169
180
|
old_value = @context
|
181
|
+
tpl_info = current_template_info.merge('source' => tpl_file_path.freeze)
|
170
182
|
@context = {
|
171
183
|
current_erb_path: tpl_file_path,
|
172
|
-
params: params
|
184
|
+
params: params,
|
185
|
+
template_info: tpl_info
|
173
186
|
}
|
174
187
|
result = ERB.new(tpl, nil, @trim_mode).result(binding)
|
175
188
|
@context = old_value
|
@@ -182,8 +195,8 @@ module Consul
|
|
182
195
|
raise e2, "[TEMPLATE SYNTAX ERROR] #{tpl_file_path}#{find_line(e)}: #{e.message}"
|
183
196
|
end
|
184
197
|
|
185
|
-
def write(file, tpl, last_result, tpl_file_path, params = {})
|
186
|
-
data = render(tpl, tpl_file_path, params)
|
198
|
+
def write(file, tpl, last_result, tpl_file_path, params = {}, current_template_info: {})
|
199
|
+
data = render(tpl, tpl_file_path, params, current_template_info: current_template_info)
|
187
200
|
not_ready = []
|
188
201
|
ready = 0
|
189
202
|
@iteration = Time.now.utc - @start_time
|
@@ -30,10 +30,11 @@ module Consul
|
|
30
30
|
@last_result = File.read(output_file) if File.exist? output_file
|
31
31
|
@template = load_template
|
32
32
|
@params = params
|
33
|
+
@was_rendered_once = false
|
33
34
|
end
|
34
35
|
|
35
|
-
def render(tpl = @template)
|
36
|
-
@template_manager.render(tpl, template_file, params)
|
36
|
+
def render(tpl = @template, current_template_info: _build_default_template_info)
|
37
|
+
@template_manager.render(tpl, template_file, params, current_template_info: current_template_info)
|
37
38
|
end
|
38
39
|
|
39
40
|
def run
|
@@ -50,17 +51,28 @@ module Consul
|
|
50
51
|
end
|
51
52
|
|
52
53
|
# Will throw Consul::Async::InvalidTemplateException if template invalid
|
53
|
-
def update_template(new_template)
|
54
|
+
def update_template(new_template, current_template_info)
|
54
55
|
return false unless new_template != @template
|
55
56
|
# We render to ensure the template is valid
|
56
|
-
render(new_template)
|
57
|
+
render(new_template, current_template_info)
|
57
58
|
@template = new_template.freeze
|
58
59
|
true
|
59
60
|
end
|
60
61
|
|
62
|
+
def _build_default_template_info
|
63
|
+
{
|
64
|
+
'destination' => @output_file,
|
65
|
+
'source_root' => template_file.freeze,
|
66
|
+
'source' => template_file.freeze,
|
67
|
+
'was_rendered_once' => @was_rendered_once
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
61
71
|
def write
|
62
|
-
|
72
|
+
current_template_info = _build_default_template_info
|
73
|
+
success, modified, last_res = @template_manager.write(@output_file, @template, @last_result, template_file, params, current_template_info: current_template_info)
|
63
74
|
@last_result = last_res if last_res
|
75
|
+
@was_rendered_once = success unless @was_rendered_once
|
64
76
|
[success, modified, @last_result]
|
65
77
|
end
|
66
78
|
|
@@ -68,8 +80,11 @@ module Consul
|
|
68
80
|
new_time = File.ctime(template_file)
|
69
81
|
if template_file_ctime != new_time
|
70
82
|
begin
|
83
|
+
current_template_info = {}
|
84
|
+
current_template_info.!merge(current_template_info)
|
85
|
+
current_template_info['ready'] = false
|
71
86
|
@template_file_ctime = new_time
|
72
|
-
return update_template(load_template)
|
87
|
+
return update_template(load_template, current_template_info: current_template_info)
|
73
88
|
rescue Consul::Async::InvalidTemplateException => e
|
74
89
|
STDERR.puts "****\n[ERROR] HOT Reload of template #{template_file} did fail due to:\n #{e}\n****\n"
|
75
90
|
raise e unless hot_reload_failure == 'keep'
|
data/lib/consul/async/version.rb
CHANGED
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.8.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-
|
11
|
+
date: 2018-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|