consul_syncer 1.0.1 → 1.2.1
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/lib/consul_syncer/version.rb +1 -1
- data/lib/consul_syncer.rb +22 -15
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b2bef9d0c04323f933176da717b088e7179d8c1654bad10a5c91d1e83f957fb
|
4
|
+
data.tar.gz: 25ecfe6ce76a967aefdb2d89fd82137664a418848587645a29fc1346fc95165a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42d34c44dc46d220efff7759e423aa3c2e62ed69e9a63e91fc342111f09ed14ba073798be9edb22c956c3e8007cb0746105c144dedac5bdb1cca0b2a27e94653
|
7
|
+
data.tar.gz: 32eeeb25cb89d0f20802abc6a61cf9437bc8f6c44158fc5c84999cca42eb0f4761bfeaf1a97a9062d9ceedadc7588186c3f82e6fe97688138ff4032f1ad04107
|
data/lib/consul_syncer.rb
CHANGED
@@ -17,16 +17,21 @@ class ConsulSyncer
|
|
17
17
|
|
18
18
|
# changing tags means all previous services need to be removed manually since
|
19
19
|
# they can no longer be found
|
20
|
-
def sync(expected_definitions, tags)
|
21
|
-
|
20
|
+
def sync(expected_definitions, tags, dry: false)
|
21
|
+
planned = plan(expected_definitions, tags)
|
22
|
+
execute planned unless dry
|
23
|
+
planned.size # let users know what we did and keep legacy api working
|
24
|
+
end
|
22
25
|
|
23
|
-
|
26
|
+
def plan(expected_definitions, tags)
|
27
|
+
raise ArgumentError, "Need at least 1 tag to reliably update endpoints" if tags.empty?
|
24
28
|
|
25
29
|
# ensure consistent tags to find the endpoints after adding
|
26
30
|
expected_definitions = expected_definitions.dup
|
27
31
|
expected_definitions.each do |d|
|
28
32
|
d[:tags] += tags
|
29
33
|
d[:tags].sort!
|
34
|
+
d[:tags].uniq!
|
30
35
|
end
|
31
36
|
|
32
37
|
actual_definitions = consul_endpoints(tags).map do |consul_endpoint|
|
@@ -43,6 +48,7 @@ class ConsulSyncer
|
|
43
48
|
|
44
49
|
identifying = [:node, :service_id]
|
45
50
|
interesting = [*identifying, :service, :service_address, :address, :tags, :port]
|
51
|
+
planned = []
|
46
52
|
|
47
53
|
expected_definitions.each do |expected|
|
48
54
|
description = "#{expected[:service] || "*"} / #{expected[:service_id] || "*"} on #{expected.fetch(:node)} in Consul"
|
@@ -58,24 +64,23 @@ class ConsulSyncer
|
|
58
64
|
elsif remove_matching_service!(actual_definitions, expected, interesting)
|
59
65
|
@logger.debug "Found #{description}"
|
60
66
|
elsif remove_matching_service!(actual_definitions, expected, identifying)
|
61
|
-
|
62
|
-
modified += 1
|
63
|
-
register **expected
|
67
|
+
planned << [:register, [], expected.merge(reason: "Updating #{description}")]
|
64
68
|
else
|
65
|
-
|
66
|
-
modified += 1
|
67
|
-
register **expected
|
69
|
+
planned << [:register, [], expected.merge(reason: "Adding #{description}")]
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
73
|
# all definitions that are left did not match any expected definitions and are no longer needed
|
72
74
|
actual_definitions.each do |actual|
|
73
|
-
|
74
|
-
|
75
|
-
deregister actual.fetch(:node), actual.fetch(:service_id)
|
75
|
+
reason = "Removing #{actual.fetch(:service)} / #{actual.fetch(:service_id)} on #{actual.fetch(:node)} in Consul"
|
76
|
+
planned << [:deregister, [actual.fetch(:node), actual.fetch(:service_id)], {reason: reason}]
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
+
planned
|
80
|
+
end
|
81
|
+
|
82
|
+
def execute(planned)
|
83
|
+
planned.each { |m, args, kwargs| send m, *args, **kwargs }
|
79
84
|
end
|
80
85
|
|
81
86
|
private
|
@@ -103,7 +108,8 @@ class ConsulSyncer
|
|
103
108
|
end
|
104
109
|
|
105
110
|
# creates or updates based on node and service
|
106
|
-
def register(node:, service:, service_id:, service_address:, address:, tags:, port:)
|
111
|
+
def register(node:, service:, service_id:, service_address:, address:, tags:, port:, reason:)
|
112
|
+
@logger.info reason
|
107
113
|
@consul.request(
|
108
114
|
:put,
|
109
115
|
'/v1/catalog/register',
|
@@ -119,7 +125,8 @@ class ConsulSyncer
|
|
119
125
|
)
|
120
126
|
end
|
121
127
|
|
122
|
-
def deregister(node, service_id)
|
128
|
+
def deregister(node, service_id, reason:)
|
129
|
+
@logger.info reason
|
123
130
|
@consul.request(
|
124
131
|
:put,
|
125
132
|
'/v1/catalog/deregister',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consul_syncer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
|
-
rubygems_version: 3.
|
57
|
+
rubygems_version: 3.2.16
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
60
|
summary: Sync remote services into consul
|