consul-templaterb 1.27.2 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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