consul-templaterb 1.27.1 → 1.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -29
- data/README.md +18 -3
- data/TemplateAPI.md +1 -1
- data/bin/consul-templaterb +27 -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/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
- metadata +31 -49
- 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
@@ -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) {
|
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.29.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-
|
11
|
+
date: 2020-10-06 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
|
@@ -252,7 +234,7 @@ files:
|
|
252
234
|
- samples/vault-ldap.txt.erb
|
253
235
|
homepage: https://rubygems.org/gems/consul-templaterb
|
254
236
|
licenses:
|
255
|
-
- Apache
|
237
|
+
- Apache-2.0
|
256
238
|
metadata:
|
257
239
|
bug_tracker_uri: https://github.com/criteo/consul-templaterb/issues
|
258
240
|
changelog_uri: https://github.com/criteo/consul-templaterb/blob/master/CHANGELOG.md
|
data/.gitignore
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
/.bundle/
|
2
|
-
/.yardoc
|
3
|
-
/Gemfile.lock
|
4
|
-
/_yardoc/
|
5
|
-
/coverage/
|
6
|
-
/doc/
|
7
|
-
/pkg/
|
8
|
-
/spec/reports/
|
9
|
-
/tmp/
|
10
|
-
/samples/**/*.json
|
11
|
-
/samples/**/*.xml
|
12
|
-
/samples/**/*.html
|
13
|
-
/samples/**/*.txt
|
14
|
-
/samples/**/*.cfg
|
15
|
-
samples/consul-ui/decorators.js
|
16
|
-
/samples/hosts
|
17
|
-
/samples/hosts_per_services
|
18
|
-
/samples/prometheus_consul_coordinates
|
19
|
-
/samples/ready
|
20
|
-
/samples/render_template_from_kv
|
21
|
-
/samples/consul_template
|
22
|
-
/samples/metrics
|
23
|
-
/samples/service_checks_metrics
|
24
|
-
/samples/find_blocked_choregraphies
|
25
|
-
/spec/consul/async/resources/templates/*.txt
|
26
|
-
/spec/consul/async/resources/templates/*.result
|
27
|
-
/out.txt
|
28
|
-
|
29
|
-
# rspec failure tracking
|
30
|
-
.rspec_status
|
31
|
-
# Mac OS
|
32
|
-
.DS_Store
|
33
|
-
|
34
|
-
# IntelliJ project files
|
35
|
-
*.iml
|
36
|
-
*.iws
|
37
|
-
*.ipr
|
38
|
-
.idea/
|
39
|
-
|
40
|
-
# Misc
|
41
|
-
*.swp
|
data/.rspec
DELETED
data/.rubocop.yml
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
Exclude:
|
3
|
-
- bundle/**/*
|
4
|
-
TargetRubyVersion: 2.4
|
5
|
-
|
6
|
-
Layout/LineLength:
|
7
|
-
Max: 175
|
8
|
-
|
9
|
-
Metrics/AbcSize:
|
10
|
-
Max: 87
|
11
|
-
|
12
|
-
Metrics/BlockLength:
|
13
|
-
Max: 182
|
14
|
-
|
15
|
-
Metrics/BlockNesting:
|
16
|
-
Max: 4
|
17
|
-
|
18
|
-
Metrics/ClassLength:
|
19
|
-
Max: 285
|
20
|
-
|
21
|
-
Metrics/CyclomaticComplexity:
|
22
|
-
Max: 21
|
23
|
-
|
24
|
-
Metrics/MethodLength:
|
25
|
-
Max: 68
|
26
|
-
|
27
|
-
Metrics/ParameterLists:
|
28
|
-
Max: 18
|
29
|
-
|
30
|
-
Metrics/PerceivedComplexity:
|
31
|
-
Max: 24
|
32
|
-
|
33
|
-
# We use `dc` as a parameter in many methods
|
34
|
-
Naming/MethodParameterName:
|
35
|
-
Enabled: false
|
36
|
-
|
37
|
-
Naming/VariableNumber:
|
38
|
-
Enabled: false
|
39
|
-
|
40
|
-
Style/Documentation:
|
41
|
-
Enabled: true
|
42
|
-
|
43
|
-
Style/FrozenStringLiteralComment:
|
44
|
-
Enabled: false
|
45
|
-
|
46
|
-
Style/HashEachMethods:
|
47
|
-
Enabled: true
|
48
|
-
|
49
|
-
Style/HashTransformKeys:
|
50
|
-
Enabled: true
|
51
|
-
|
52
|
-
Style/HashTransformValues:
|
53
|
-
Enabled: true
|
54
|
-
|
55
|
-
Style/MultilineBlockChain:
|
56
|
-
Enabled: false
|
57
|
-
|