consul-templaterb 1.27.2 → 1.30.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.
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.27.2'.freeze
3
+ VERSION = '1.30.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1 @@
1
+ SORT_CONSUL_SERVICE_NODES = -> (nodes) { nodes.sort {|a,b| a['Node']['Node'] <=> b['Node']['Node'] } }
@@ -94,3 +94,9 @@ This app supports the following environment variables:
94
94
  * `EXCLUDE_SERVICES`: comma-separated services to exclude (default: lbl7.*,netsvc-probe.*,consul-probed.*)
95
95
  * `CONSUL_TIMELINE_BUFFER`: number of entries to keep in the timeline. 1000 by default.
96
96
  * `CONSUL_TIMELINE_BLACKLIST`: regexp of services to hide from timeline
97
+
98
+ ### Preferences
99
+
100
+ Some templates allows you to override some behavior through `.preferences.rb` file.
101
+ In order to do that, rename `.preferences.rb.samples` file to `.preferences.rb`
102
+ and update lambda defined inside to match targeted behavior.
@@ -6,6 +6,19 @@
6
6
  # INSTANCE_EXCLUDE_TAG: Exclude instances having the given tag (default: canary)
7
7
  # EXCLUDE_SERVICES: comma-separated services regexps to exclude (default: lbl7.*,netsvc-probe.*,consul-probed.*)
8
8
 
9
+ unless @sort_consul_service_nodes
10
+ begin
11
+ target_dir = File.split(File.expand_path(template_info['source']))[0]
12
+ target = File.join(target_dir, '.preferences.rb')
13
+ load "#{target}"
14
+ STDERR.puts "Using #{target} file."
15
+ @sort_consul_service_nodes = SORT_CONSUL_SERVICE_NODES
16
+ rescue LoadError
17
+ STDERR.puts 'Couldn\'t find .preferences.rb file ; default configuration will be used.'
18
+ @sort_consul_service_nodes = -> (nodes) { nodes.sort {|a,b| a['Node']['Node'] <=> b['Node']['Node'] } }
19
+ end
20
+ end
21
+
9
22
  service_tag_filter = ENV['SERVICES_TAG_FILTER'] || nil
10
23
  instance_must_tag = ENV['INSTANCE_MUST_TAG'] || service_tag_filter
11
24
  instance_exclude_tag = ENV['INSTANCE_EXCLUDE_TAG']
@@ -20,7 +33,7 @@
20
33
  if !services_blacklist.any? {|r| r.match(service_name)} && (instance_must_tag.nil? || tags.include?(instance_must_tag))
21
34
  tags_per_service[service_name] = tags.sort
22
35
  the_backends = []
23
- service(service_name).sort {|a,b| a['Node']['Node'] <=> b['Node']['Node'] }.each do |snode|
36
+ @sort_consul_service_nodes.call(service(service_name)).each do |snode|
24
37
  tags_of_instance = snode['Service']['Tags'].sort
25
38
  if (instance_must_tag.nil? || tags_of_instance.include?(instance_must_tag)) && !tags_of_instance.include?(instance_exclude_tag)
26
39
  the_backends << snode if snode['Service']['Port']
@@ -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']['Name'], node['Node']['Address']));
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);
@@ -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, serviceName) {
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]
@@ -86,7 +86,10 @@ function serviceTitleGenerator(instance, serviceName) {
86
86
  instanceLink.setAttribute('target', '_blank');
87
87
  }
88
88
 
89
- instanceLink.appendChild(document.createTextNode(instance.name + appendPort));
89
+ var nodemeta = (node_info != null) ? node_info.meta : null;
90
+ instanceLink.appendChild(createNodeDisplayElement(instance.name, nodemeta));
91
+ instanceLink.appendChild(document.createTextNode(appendPort));
92
+
90
93
  const nodeInfo = document.createElement('a');
91
94
  nodeInfo.appendChild(document.createTextNode('\u24D8'));
92
95
  nodeInfo.setAttribute('title', 'Click to see details of Node: ' + instance.name +
@@ -103,7 +106,7 @@ function serviceTitleGenerator(instance, serviceName) {
103
106
  return htmlTitle;
104
107
  }
105
108
 
106
- function nodeNameGenator(nodename, nodeaddr) {
109
+ function nodeNameGenator(node) {
107
110
  var protocol = 'ssh://'
108
111
 
109
112
  var htmlTitle = document.createElement('h5');
@@ -111,10 +114,10 @@ function nodeNameGenator(nodename, nodeaddr) {
111
114
  var instanceLink = document.createElement('a');
112
115
  instanceLink.setAttribute('class', 'instance-name');
113
116
  if (protocol != null) {
114
- instanceLink.setAttribute('href', protocol + nodeaddr);
117
+ instanceLink.setAttribute('href', protocol + node['Address']);
115
118
  instanceLink.setAttribute('target', '_blank');
116
119
  }
117
- instanceLink.appendChild(document.createTextNode(nodename));
120
+ instanceLink.appendChild(createNodeDisplayElement(node['Name'], node['Meta']));
118
121
  htmlTitle.appendChild(instanceLink);
119
122
 
120
123
  return htmlTitle;
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.27.2
4
+ version: 1.30.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-09-04 00:00:00.000000000 Z
11
+ date: 2020-12-18 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.5
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.5
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.7
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.7
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.7
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.7
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.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.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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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
@@ -199,6 +181,7 @@ files:
199
181
  - samples/all_services_multi_agents.txt.erb
200
182
  - samples/all_templates.erb
201
183
  - samples/checks_in_warning_or_critical_state.yaml.erb
184
+ - samples/consul-ui/.preferences.rb.samples
202
185
  - samples/consul-ui/README.md
203
186
  - samples/consul-ui/common/footer.html.erb
204
187
  - samples/consul-ui/common/header.html.erb
@@ -252,7 +235,7 @@ files:
252
235
  - samples/vault-ldap.txt.erb
253
236
  homepage: https://rubygems.org/gems/consul-templaterb
254
237
  licenses:
255
- - Apache v2
238
+ - Apache-2.0
256
239
  metadata:
257
240
  bug_tracker_uri: https://github.com/criteo/consul-templaterb/issues
258
241
  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
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
@@ -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
-
data/.ruby_app DELETED
File without changes
@@ -1,19 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.10
4
- - 2.5.8
5
- - 2.6.6
6
- - 2.7.1
7
- jobs:
8
- include:
9
- - stage: Gem release
10
- rvm: 2.5.8
11
- script: echo "Publishing consul-templaterb on rubygems.org ..."
12
- deploy:
13
- provider: rubygems
14
- api_key:
15
- secure: l78H6Ow9HCeEz0hcAP2XCXaGGBNRXZ/QLFPNzwyNmHToko9WqZj6mbiNIcVwZ8aCcZEzFmtcB7m1lC1l+mvot3Snfh4OUErK7EXMLiNxUWybtA4qJqmsb2J8JGS69pTohPKagi1YyRbyVs2tJpM5OVazcNxEQDAVkWVxJuPVz6tsn4rXZsL77nTSVyB6YGKgguRGhtS/3M0ufk1ymOpuk8pxXKaotlYGRXmht2OHW+FDQczTMgqu6jiZubjWlNHVxtYn+CsLYNj1BswzD6fF1uous6nchV0if2QW5N4OJVyZCx3yEQ0RswfI8G1kG/Jm8wd2lSknY2wpnd1qkRnAcFlKBpUv8aQd6SdbSO84GTAOvucgK7Mcf0LRvYSE2FyagaAPFSfMybWd+GS26g5AuRPpkhtsS9ijfdIzpudiF18pvnJ+wQj+hWM/THWowYNyKv9NeckxdrULaHPisA346r5eM/EADOhyEUtPm11PFgcheGjff1H4qXGc9gcm50u6mNNHkWv38oGhAPpRk/bU7qybTKqRKNGWGP0MiT4WVIFXp62/JMY7AmufOdJx5Ca5JVsaWoN4fsS9r3+R+FxvRtV9NOrRJVKKaQhzi4UHEUDQ2hQjpLDijD5L0vUsl6arl+nufTt5G5jp9QvdY7fhYT1mpGgWj0hTBd8Pxsl3N8U=
16
- gem: consul-templaterb
17
- on:
18
- tags: true
19
- repo: criteo/consul-templaterb