consul-templaterb 1.25.2 → 1.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -7
- data/.travis.yml +5 -5
- data/CHANGELOG.md +43 -0
- data/Dockerfile +1 -1
- data/INTERNALS.md +2 -0
- data/README.md +3 -1
- data/TemplateAPI.md +184 -164
- data/bin/consul-templaterb +30 -0
- data/docs/article-06_Template-based_discovery_with_consul-templaterb.md +124 -0
- data/docs/images/consul-templaterb.png +0 -0
- data/docs/images/consul-templaterb.svg +3 -0
- data/lib/consul/async/consul_endpoint.rb +28 -7
- data/lib/consul/async/consul_template.rb +56 -34
- data/lib/consul/async/json_endpoint.rb +15 -2
- data/lib/consul/async/vault_endpoint.rb +25 -6
- data/lib/consul/async/version.rb +1 -1
- data/samples/all_services.txt.erb +1 -1
- data/samples/all_services_multi_agents.txt.erb +69 -0
- data/samples/checks_in_warning_or_critical_state.yaml.erb +13 -0
- data/samples/consul-ui/README.md +19 -0
- data/samples/consul-ui/decorators.js.erb +2 -171
- data/samples/display_timestamped_changes.txt.erb +17 -0
- data/samples/find_all_invalid_dns_labels.json.erb +12 -0
- data/samples/find_nodes_in_catalog_but_not_in_members.json.erb +28 -0
- data/samples/metrics.erb +14 -0
- metadata +10 -2
@@ -0,0 +1,17 @@
|
|
1
|
+
<%
|
2
|
+
# This example show how to display local time informaition about changes
|
3
|
+
# Example of usage to display logs of changes on nodes() endpoint:
|
4
|
+
#
|
5
|
+
# consul-templaterb --template "display_timestamped_changes.txt.erb:display_timestamped_changes.txt:cat display_timestamped_changes.txt" -l error
|
6
|
+
#
|
7
|
+
# Would output:
|
8
|
+
# Last update: 1588800554 (2020-05-06 21:29:14 UTC), X-Consul-Index: 4345827328
|
9
|
+
# Last update: 1588800569 (2020-05-06 21:29:29 UTC), X-Consul-Index: 4345829548
|
10
|
+
# Last update: 1588800676 (2020-05-06 21:31:16 UTC), X-Consul-Index: 4345836342
|
11
|
+
#
|
12
|
+
@my_last_time = Time.now.utc unless @my_last_time
|
13
|
+
val = nodes()
|
14
|
+
new_idx = val.endpoint.x_consul_index
|
15
|
+
@my_last_time = Time.now.utc if @my_last_idx != new_idx
|
16
|
+
@my_last_idx = new_idx
|
17
|
+
%>Last update: <%= @my_last_time.to_i %> (<%= @my_last_time %>), X-Consul-Index: <%= new_idx %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%
|
2
|
+
r = /^[a-zA-Z0-9]([a-zA-Z0-9\-]{0,62}[a-zA-Z0-9])?$/
|
3
|
+
invalid_services = {}
|
4
|
+
services.each do |servive_name, tags|
|
5
|
+
errors = []
|
6
|
+
errors << "Invalid service name #{servive_name}" unless r.match(servive_name)
|
7
|
+
tags.each do |tag|
|
8
|
+
errors << "Invalid tag #{tag}" unless r.match(tag)
|
9
|
+
end
|
10
|
+
invalid_services[servive_name] = errors unless errors.empty?
|
11
|
+
end
|
12
|
+
%><%= JSON.pretty_generate({"errors": invalid_services.size, "details": invalid_services}) %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%=
|
2
|
+
all_catalog = nodes.map{ |n| [n['Node'], n] }.to_h
|
3
|
+
all_members = agent_members.sort{ |a,b| a['Name'] <=> b['Name'] }
|
4
|
+
members_by_state = {}
|
5
|
+
all_members.each do |m|
|
6
|
+
state = m.status
|
7
|
+
members = members_by_state[state] || 0
|
8
|
+
members_by_state[state] = members + 1
|
9
|
+
end
|
10
|
+
# Find all virtual nodes (eg: k8s-sync)
|
11
|
+
catalog_external_sources = nodes.select{|n| (n['Meta']||{})['external-source'] }.map{|n| n['Node']}
|
12
|
+
in_catalog_but_not_in_members = all_catalog.keys - all_members.map{ |m| m['Name'] }
|
13
|
+
not_virtual_not_in_members = in_catalog_but_not_in_members - catalog_external_sources
|
14
|
+
JSON.pretty_generate(
|
15
|
+
{
|
16
|
+
'stats' => {
|
17
|
+
'catalog' => all_catalog.count,
|
18
|
+
'catalog_virtual' => in_catalog_but_not_in_members.count,
|
19
|
+
'members' => all_members.count,
|
20
|
+
'members_by_state': members_by_state,
|
21
|
+
'catalog_external_sources' => catalog_external_sources,
|
22
|
+
},
|
23
|
+
'errors': {
|
24
|
+
'in_catalog_but_not_in_members' => in_catalog_but_not_in_members,
|
25
|
+
'not_virtual_not_in_members' => not_virtual_not_in_members,
|
26
|
+
}
|
27
|
+
})
|
28
|
+
%>
|
data/samples/metrics.erb
CHANGED
@@ -21,6 +21,20 @@
|
|
21
21
|
all_stats = {}
|
22
22
|
service_count = 0
|
23
23
|
|
24
|
+
statuses = agent_members().map {|m| m.status}.reduce({}) do |sum, s|
|
25
|
+
v = sum[s] || 0
|
26
|
+
sum[s] = v + 1
|
27
|
+
sum
|
28
|
+
end
|
29
|
+
%>
|
30
|
+
# HELP consul_members_count A gauge of number of serf members with their count and their status('alive', 'leaving', 'left', 'failed')
|
31
|
+
# TYPE consul_members_count gauge
|
32
|
+
<%
|
33
|
+
statuses.each do |k, v|
|
34
|
+
%>
|
35
|
+
consul_members_count{serf="lan",status="<%= k %>"} <%= v %><%
|
36
|
+
end
|
37
|
+
|
24
38
|
services(tag: service_tag_filter).each do |service_name, tags|
|
25
39
|
if !services_blacklist.any? {|r| r.match(service_name)} && (instance_must_tag.nil? || tags.include?(instance_must_tag))
|
26
40
|
service_count += 1
|
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.27.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-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|
@@ -180,6 +180,9 @@ files:
|
|
180
180
|
- bin/consul-templaterb
|
181
181
|
- consul-templaterb.gemspec
|
182
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
|
183
186
|
- docs/images/consul-ui_001.png
|
184
187
|
- lib/consul/async/consul_endpoint.rb
|
185
188
|
- lib/consul/async/consul_template.rb
|
@@ -193,7 +196,9 @@ files:
|
|
193
196
|
- lib/consul/async/vault_endpoint.rb
|
194
197
|
- lib/consul/async/version.rb
|
195
198
|
- samples/all_services.txt.erb
|
199
|
+
- samples/all_services_multi_agents.txt.erb
|
196
200
|
- samples/all_templates.erb
|
201
|
+
- samples/checks_in_warning_or_critical_state.yaml.erb
|
197
202
|
- samples/consul-ui/README.md
|
198
203
|
- samples/consul-ui/common/footer.html.erb
|
199
204
|
- samples/consul-ui/common/header.html.erb
|
@@ -225,6 +230,9 @@ files:
|
|
225
230
|
- samples/criteo/haproxy.cfg.erb
|
226
231
|
- samples/debug/compare_connect_services.txt.erb
|
227
232
|
- samples/demos/compute_pricing.txt.erb
|
233
|
+
- samples/display_timestamped_changes.txt.erb
|
234
|
+
- samples/find_all_invalid_dns_labels.json.erb
|
235
|
+
- samples/find_nodes_in_catalog_but_not_in_members.json.erb
|
228
236
|
- samples/ha_proxy.cfg.erb
|
229
237
|
- samples/haproxy_dns.cfg.erb
|
230
238
|
- samples/hosts.erb
|