consul-templaterb 1.27.0 → 1.28.2
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/CHANGELOG.md +64 -27
- data/README.md +18 -3
- data/TemplateAPI.md +1 -1
- data/bin/consul-templaterb +22 -6
- data/lib/consul/async/consul_template.rb +14 -8
- 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/css/style.css +4 -0
- data/samples/consul-ui/decorators.js.erb +7 -0
- data/samples/consul-ui/js/nodes.js +2 -2
- data/samples/consul-ui/js/service.js +1 -1
- data/samples/consul-ui/js/utils.js +52 -24
- data/samples/prometheus_datacenter_coordinates.erb +56 -0
- metadata +33 -51
- data/.gitignore +0 -41
- data/.rspec +0 -2
- data/.rubocop.yml +0 -57
- data/.ruby_app +0 -0
- data/.travis.yml +0 -19
- data/CODE_OF_CONDUCT.md +0 -76
- data/CONTRIBUTING.md +0 -25
- data/Dockerfile +0 -15
- data/Gemfile +0 -5
- data/INTERNALS.md +0 -49
- data/LICENSE.txt +0 -201
- data/Rakefile +0 -8
- data/consul-templaterb.gemspec +0 -42
- data/docker-nginx-conf/nginx.conf +0 -27
- data/docs/article-06_Template-based_discovery_with_consul-templaterb.md +0 -124
- data/docs/images/consul-templaterb.png +0 -0
- data/docs/images/consul-templaterb.svg +0 -3
- data/docs/images/consul-ui_001.png +0 -0
data/lib/consul/async/version.rb
CHANGED
|
@@ -36,6 +36,13 @@ function usefullLinksGenerator(instance, serviceName, node_meta_info) {
|
|
|
36
36
|
return top;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* createNodeDisplayElement resolves and displays the node name.
|
|
41
|
+
*/
|
|
42
|
+
function createNodeDisplayElement(nodeName, nodemeta) {
|
|
43
|
+
return document.createTextNode(nodeName);
|
|
44
|
+
}
|
|
45
|
+
|
|
39
46
|
/**
|
|
40
47
|
* serviceInstanceDecorator is called to decorate an instance.
|
|
41
48
|
*/
|
|
@@ -71,7 +71,7 @@ class NodeMainSelector extends MainSelector {
|
|
|
71
71
|
content.setAttribute('class', 'instance-content');
|
|
72
72
|
var contentHead = document.createElement('div');
|
|
73
73
|
contentHead.setAttribute('class', 'instance-content-header');
|
|
74
|
-
contentHead.appendChild(nodeNameGenator(node['Node']
|
|
74
|
+
contentHead.appendChild(nodeNameGenator(node['Node']));
|
|
75
75
|
contentHead.appendChild(nodeAddressGenator(node['Node']['Address']));
|
|
76
76
|
contentHead.appendChild(nodeMetaGenerator(node['Node']['Meta']));
|
|
77
77
|
content.appendChild(contentHead);
|
|
@@ -111,7 +111,7 @@ class NodeMainSelector extends MainSelector {
|
|
|
111
111
|
nodesChecks.appendChild(checksStatusGenerator(node, node['Node']['Name']));
|
|
112
112
|
content.appendChild(nodesChecks);
|
|
113
113
|
|
|
114
|
-
content.appendChild(servicesGenerator(node['Service']));
|
|
114
|
+
content.appendChild(servicesGenerator(node['Service'], node));
|
|
115
115
|
content.appendChild(tagsGenerator(getTagsNode(node)));
|
|
116
116
|
|
|
117
117
|
sidebar.setAttribute('status', state);
|
|
@@ -304,8 +304,8 @@ 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));
|
|
308
307
|
var node_info = this.nodes[instance.name];
|
|
308
|
+
element.appendChild(serviceTitleGenerator(instance, serviceName, node_info));
|
|
309
309
|
if (node_info != null) {
|
|
310
310
|
node_info = node_info.meta;
|
|
311
311
|
element.appendChild(nodeMetaGenerator(node_info, instance.sMeta));
|
|
@@ -63,7 +63,7 @@ function nodeState(checks) {
|
|
|
63
63
|
|
|
64
64
|
supported_protocols = ['https', 'http', 'sftp', 'ftp', 'ssh', 'telnet']
|
|
65
65
|
|
|
66
|
-
function serviceTitleGenerator(instance) {
|
|
66
|
+
function serviceTitleGenerator(instance, serviceName, node_info) {
|
|
67
67
|
var protocol = null;
|
|
68
68
|
for (i in supported_protocols) {
|
|
69
69
|
var protoc = supported_protocols[i]
|
|
@@ -74,10 +74,6 @@ function serviceTitleGenerator(instance) {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
var htmlTitle = document.createElement('h5');
|
|
77
|
-
htmlTitle.setAttribute('title', 'Node Name: ' + instance.name +
|
|
78
|
-
'\nAddress: ' + instance.addr +
|
|
79
|
-
'\nService ID: ' + instance.id +
|
|
80
|
-
'\nService Port: ' + instance.port);
|
|
81
77
|
|
|
82
78
|
htmlTitle.setAttribute('class', 'instance-name');
|
|
83
79
|
var instanceLink = document.createElement('a');
|
|
@@ -90,7 +86,19 @@ function serviceTitleGenerator(instance) {
|
|
|
90
86
|
instanceLink.setAttribute('target', '_blank');
|
|
91
87
|
}
|
|
92
88
|
|
|
93
|
-
|
|
89
|
+
var nodemeta = (node_info != null) ? node_info.meta : null;
|
|
90
|
+
instanceLink.appendChild(createNodeDisplayElement(instance.name, nodemeta));
|
|
91
|
+
instanceLink.appendChild(document.createTextNode(appendPort));
|
|
92
|
+
|
|
93
|
+
const nodeInfo = document.createElement('a');
|
|
94
|
+
nodeInfo.appendChild(document.createTextNode('\u24D8'));
|
|
95
|
+
nodeInfo.setAttribute('title', 'Click to see details of Node: ' + instance.name +
|
|
96
|
+
'\nAddress: ' + instance.addr +
|
|
97
|
+
'\nService ID: ' + instance.id +
|
|
98
|
+
'\nService Port: ' + instance.port);
|
|
99
|
+
nodeInfo.setAttribute('href', 'consul-nodes-ui.html?node_filter=^' + encodeURIComponent(instance.name) + '$');
|
|
100
|
+
htmlTitle.appendChild(nodeInfo);
|
|
101
|
+
htmlTitle.appendChild(document.createTextNode(' '));
|
|
94
102
|
htmlTitle.appendChild(instanceLink);
|
|
95
103
|
htmlTitle.appendChild(document.createTextNode(' '));
|
|
96
104
|
htmlTitle.appendChild(document.createTextNode(instance.addr));
|
|
@@ -98,7 +106,7 @@ function serviceTitleGenerator(instance) {
|
|
|
98
106
|
return htmlTitle;
|
|
99
107
|
}
|
|
100
108
|
|
|
101
|
-
function nodeNameGenator(
|
|
109
|
+
function nodeNameGenator(node) {
|
|
102
110
|
var protocol = 'ssh://'
|
|
103
111
|
|
|
104
112
|
var htmlTitle = document.createElement('h5');
|
|
@@ -106,10 +114,10 @@ function nodeNameGenator(nodename, nodeaddr) {
|
|
|
106
114
|
var instanceLink = document.createElement('a');
|
|
107
115
|
instanceLink.setAttribute('class', 'instance-name');
|
|
108
116
|
if (protocol != null) {
|
|
109
|
-
instanceLink.setAttribute('href', protocol +
|
|
117
|
+
instanceLink.setAttribute('href', protocol + node['Address']);
|
|
110
118
|
instanceLink.setAttribute('target', '_blank');
|
|
111
119
|
}
|
|
112
|
-
instanceLink.appendChild(
|
|
120
|
+
instanceLink.appendChild(createNodeDisplayElement(node['Name'], node['Meta']));
|
|
113
121
|
htmlTitle.appendChild(instanceLink);
|
|
114
122
|
|
|
115
123
|
return htmlTitle;
|
|
@@ -216,24 +224,44 @@ function toCSSClass(state) {
|
|
|
216
224
|
return state;
|
|
217
225
|
}
|
|
218
226
|
|
|
219
|
-
function servicesGenerator(instanceServices) {
|
|
220
|
-
var
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
function servicesGenerator(instanceServices, node) {
|
|
228
|
+
var servicesTop = document.createElement('div');
|
|
229
|
+
servicesTop.className = 'instance-services';
|
|
230
|
+
const card = document.createElement('div');
|
|
231
|
+
card.setAttribute('class', 'card');
|
|
232
|
+
const servicesCard = document.createElement('div');
|
|
233
|
+
servicesCard.setAttribute('class', 'card-body');
|
|
234
|
+
const title = document.createElement('h5');
|
|
235
|
+
title.appendChild(document.createTextNode('Services'));
|
|
236
|
+
title.setAttribute('class', 'card-title')
|
|
237
|
+
servicesCard.appendChild(title);
|
|
238
|
+
const services = document.createElement('div');
|
|
239
|
+
servicesCard.appendChild(services);
|
|
224
240
|
for (var serviceKey in instanceServices) {
|
|
225
|
-
|
|
226
|
-
|
|
241
|
+
const serviceGrp = document.createElement('span');
|
|
242
|
+
serviceGrp.setAttribute('class', 'btn btn-sm');
|
|
243
|
+
serviceGrp.classList.add('btn-outline-' + toCSSClass(nodeState(instanceServices[serviceKey]['Checks'])))
|
|
244
|
+
const service = document.createElement('a');
|
|
245
|
+
serviceGrp.appendChild(service);
|
|
246
|
+
const serviceName = instanceServices[serviceKey]['Service']['Service'];
|
|
247
|
+
service.setAttribute('class', 'serviceLink');
|
|
248
|
+
service.setAttribute('href', 'consul-services-ui.html?service=' + encodeURIComponent(serviceName) + '&node_filter=^' + encodeURIComponent(node['Node']['Name'])+'$');
|
|
249
|
+
service.appendChild(document.createTextNode(serviceName));
|
|
227
250
|
var servicePort = instanceServices[serviceKey]['Service']['Port'];
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
251
|
+
if (servicePort) {
|
|
252
|
+
// Add unbreakable space
|
|
253
|
+
serviceGrp.appendChild(document.createTextNode('\u00A0'));
|
|
254
|
+
const servicePortElem = document.createElement('a');
|
|
255
|
+
servicePortElem.setAttribute('class', 'serviceTargetPort');
|
|
256
|
+
const nodeAddr = instanceServices[serviceKey]['Service']['Address'];
|
|
257
|
+
servicePortElem.setAttribute('href', 'http://' + nodeAddr + ':' + servicePort);
|
|
258
|
+
servicePortElem.appendChild(document.createTextNode(':' + servicePort));
|
|
259
|
+
serviceGrp.appendChild(servicePortElem);
|
|
260
|
+
}
|
|
261
|
+
services.appendChild(serviceGrp);
|
|
235
262
|
}
|
|
236
|
-
|
|
263
|
+
servicesTop.appendChild(servicesCard);
|
|
264
|
+
return servicesTop;
|
|
237
265
|
}
|
|
238
266
|
|
|
239
267
|
function checksStatusGenerator(instance, prefix) {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# HELP consul_wan_servers_rtt_seconds Min Round trip with other servers of DC
|
|
2
|
+
# TYPE consul_wan_servers_rtt_seconds gauge
|
|
3
|
+
<%
|
|
4
|
+
# This computes the RTT over WAN for all DCs
|
|
5
|
+
results = {'min' => {}, 'max' => {}, 'p50' => {}, 'p90' => {}}
|
|
6
|
+
my_dcname = (agent_self['Config'] || {})['Datacenter']
|
|
7
|
+
my_dc = coordinate.datacenters.select { |d| d['Datacenter'] == my_dcname }.first
|
|
8
|
+
|
|
9
|
+
def percentile(values_sorted, percentile)
|
|
10
|
+
k = (percentile*(values_sorted.length-1)+1).floor - 1
|
|
11
|
+
f = (percentile*(values_sorted.length-1)+1).modulo(1)
|
|
12
|
+
return values_sorted[k] + (f * (values_sorted[k+1] - values_sorted[k]))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
if my_dc
|
|
16
|
+
from = my_dc['Datacenter']
|
|
17
|
+
coordinate.datacenters.each do |dc_coords|
|
|
18
|
+
min = Float::MAX
|
|
19
|
+
max = 0
|
|
20
|
+
rtts = []
|
|
21
|
+
dc_coords['Coordinates'].each do |s2|
|
|
22
|
+
my_dc['Coordinates'].each do |s1|
|
|
23
|
+
rtt = coordinate.rtt(s1['Coord'], s2['Coord'])
|
|
24
|
+
min = rtt if rtt < min
|
|
25
|
+
max = rtt if rtt > max
|
|
26
|
+
idx = rtts.bsearch_index { |x| x > rtt }
|
|
27
|
+
if idx.nil?
|
|
28
|
+
rtts << rtt
|
|
29
|
+
else
|
|
30
|
+
rtts = rtts.insert(idx, rtt)
|
|
31
|
+
end
|
|
32
|
+
%>
|
|
33
|
+
consul_wan_servers_rtt_seconds{from="<%= from %>",to="<%= dc_coords['Datacenter'] %>",from_node="<%= s1['Node'] %>",to_node="<%= s2['Node'] %>"} <%= rtt.round(3) %><%
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
results['min'][dc_coords['Datacenter']] = min
|
|
37
|
+
results['max'][dc_coords['Datacenter']] = max
|
|
38
|
+
results['p50'][dc_coords['Datacenter']] = percentile(rtts, 0.5)
|
|
39
|
+
results['p90'][dc_coords['Datacenter']] = percentile(rtts, 0.9)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Now, we iterate over aggregated results, type is min, max...
|
|
43
|
+
results.each do |type, res_type|
|
|
44
|
+
%>
|
|
45
|
+
|
|
46
|
+
# HELP consul_wan_dc_<%= type %>_seconds <%= type %> round trip with other DCs
|
|
47
|
+
# TYPE consul_wan_dc_<%= type %>_seconds gauge
|
|
48
|
+
<%
|
|
49
|
+
# Iterate over destinations
|
|
50
|
+
res_type.each do |dst, val|
|
|
51
|
+
%>consul_wan_dc_<%= type %>_seconds{from="<%= my_dcname %>",to="<%= dst %>"} <%= val.round(3) %>
|
|
52
|
+
<%
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
%>
|
metadata
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
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.2
|
|
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-
|
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: em-http-request
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.1
|
|
19
|
+
version: '1.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.1
|
|
26
|
+
version: '1.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: eventmachine
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.2
|
|
33
|
+
version: '1.2'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 1.2
|
|
40
|
+
version: '1.2'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: parallel
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.2
|
|
47
|
+
version: '1.2'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.2
|
|
54
|
+
version: '1.2'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,14 +72,14 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 12.3
|
|
75
|
+
version: '12.3'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 12.3
|
|
82
|
+
version: '12.3'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rspec
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -98,58 +98,58 @@ dependencies:
|
|
|
98
98
|
name: rspec_junit_formatter
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- - "
|
|
101
|
+
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: 0.4.1
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- - "
|
|
108
|
+
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
110
|
+
version: 0.4.1
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rubocop
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- -
|
|
115
|
+
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
117
|
version: 0.80.0
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- -
|
|
122
|
+
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: 0.80.0
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: rubocop-junit-formatter
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
|
-
- -
|
|
129
|
+
- - '='
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
131
|
+
version: 0.1.4
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
|
-
- -
|
|
136
|
+
- - '='
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
138
|
+
version: 0.1.4
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: webmock
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
|
-
- - "
|
|
143
|
+
- - "~>"
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
145
|
+
version: '2.1'
|
|
146
146
|
type: :development
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
|
-
- - "
|
|
150
|
+
- - "~>"
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
152
|
+
version: '2.1'
|
|
153
153
|
description: A ruby implementation of Consul Template with support of erb templating
|
|
154
154
|
with hi-performance on large clusters and advanced process management features.
|
|
155
155
|
email:
|
|
@@ -162,28 +162,10 @@ extra_rdoc_files:
|
|
|
162
162
|
- CHANGELOG.md
|
|
163
163
|
- TemplateAPI.md
|
|
164
164
|
files:
|
|
165
|
-
- ".gitignore"
|
|
166
|
-
- ".rspec"
|
|
167
|
-
- ".rubocop.yml"
|
|
168
|
-
- ".ruby_app"
|
|
169
|
-
- ".travis.yml"
|
|
170
165
|
- CHANGELOG.md
|
|
171
|
-
- CODE_OF_CONDUCT.md
|
|
172
|
-
- CONTRIBUTING.md
|
|
173
|
-
- Dockerfile
|
|
174
|
-
- Gemfile
|
|
175
|
-
- INTERNALS.md
|
|
176
|
-
- LICENSE.txt
|
|
177
166
|
- README.md
|
|
178
|
-
- Rakefile
|
|
179
167
|
- TemplateAPI.md
|
|
180
168
|
- bin/consul-templaterb
|
|
181
|
-
- consul-templaterb.gemspec
|
|
182
|
-
- docker-nginx-conf/nginx.conf
|
|
183
|
-
- docs/article-06_Template-based_discovery_with_consul-templaterb.md
|
|
184
|
-
- docs/images/consul-templaterb.png
|
|
185
|
-
- docs/images/consul-templaterb.svg
|
|
186
|
-
- docs/images/consul-ui_001.png
|
|
187
169
|
- lib/consul/async/consul_endpoint.rb
|
|
188
170
|
- lib/consul/async/consul_template.rb
|
|
189
171
|
- lib/consul/async/consul_template_engine.rb
|
|
@@ -242,6 +224,7 @@ files:
|
|
|
242
224
|
- samples/members.json.erb
|
|
243
225
|
- samples/metrics.erb
|
|
244
226
|
- samples/prometheus_consul_coordinates.erb
|
|
227
|
+
- samples/prometheus_datacenter_coordinates.erb
|
|
245
228
|
- samples/render_template_from_kv.erb
|
|
246
229
|
- samples/sample_keys.html.erb
|
|
247
230
|
- samples/service_checks_metrics.erb
|
|
@@ -251,7 +234,7 @@ files:
|
|
|
251
234
|
- samples/vault-ldap.txt.erb
|
|
252
235
|
homepage: https://rubygems.org/gems/consul-templaterb
|
|
253
236
|
licenses:
|
|
254
|
-
- Apache
|
|
237
|
+
- Apache-2.0
|
|
255
238
|
metadata:
|
|
256
239
|
bug_tracker_uri: https://github.com/criteo/consul-templaterb/issues
|
|
257
240
|
changelog_uri: https://github.com/criteo/consul-templaterb/blob/master/CHANGELOG.md
|
|
@@ -272,8 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
272
255
|
- !ruby/object:Gem::Version
|
|
273
256
|
version: '0'
|
|
274
257
|
requirements: []
|
|
275
|
-
|
|
276
|
-
rubygems_version: 2.7.7
|
|
258
|
+
rubygems_version: 3.0.8
|
|
277
259
|
signing_key:
|
|
278
260
|
specification_version: 4
|
|
279
261
|
summary: Implementation of Consul template using Ruby and .erb templating language
|