consul_syncer 0.5.0 → 1.0.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 +5 -5
- data/lib/consul_syncer.rb +16 -7
- data/lib/consul_syncer/version.rb +1 -1
- data/lib/consul_syncer/wrapper.rb +6 -2
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bb9445e925d6b0268c3449351cd3bfc56c51d767238265382e80e7bfc0cd3ee9
|
4
|
+
data.tar.gz: 436992e07cc03d4f2eac53a93be937a48a1308bfc5aaa0d7e5a70f28d97b0782
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02b2761bf351a62609de73be6e7e3ba250bbffef95e86806757f1ed24b7db9cadb22cb16322787d6856ac91c21ed6c95d8bb342c049da2f557e408f1023dc918
|
7
|
+
data.tar.gz: 9da6e8093bd5c99a4c683fa61e75b76748051e9173d3a4057a2ed52d07c8b06c8f51f3312ba358d78f5f62bea8aa2826566bb99e13aa800fccee3fadd30b2a4a
|
data/lib/consul_syncer.rb
CHANGED
@@ -5,13 +5,14 @@ require 'consul_syncer/endpoint'
|
|
5
5
|
require 'consul_syncer/wrapper'
|
6
6
|
|
7
7
|
# syncs a given list of endpoints into consul
|
8
|
+
# - sorts tags
|
8
9
|
# - adds missing
|
9
10
|
# - updates changed
|
10
11
|
# - removes deprecated
|
11
12
|
class ConsulSyncer
|
12
13
|
def initialize(url, logger: Logger.new(STDOUT), params: {})
|
13
14
|
@logger = logger
|
14
|
-
@consul = Wrapper.new(
|
15
|
+
@consul = Wrapper.new(url, params: params, logger: @logger)
|
15
16
|
end
|
16
17
|
|
17
18
|
# changing tags means all previous services need to be removed manually since
|
@@ -44,18 +45,26 @@ class ConsulSyncer
|
|
44
45
|
interesting = [*identifying, :service, :service_address, :address, :tags, :port]
|
45
46
|
|
46
47
|
expected_definitions.each do |expected|
|
47
|
-
description = "#{expected
|
48
|
-
|
49
|
-
if
|
48
|
+
description = "#{expected[:service] || "*"} / #{expected[:service_id] || "*"} on #{expected.fetch(:node)} in Consul"
|
49
|
+
|
50
|
+
if expected[:keep]
|
51
|
+
keep_identifying = identifying.dup
|
52
|
+
keep_identifying.delete(:service_id) unless expected[:service_id]
|
53
|
+
if remove_matching_service!(actual_definitions, expected, keep_identifying)
|
54
|
+
@logger.warn "Kept #{description}"
|
55
|
+
else
|
56
|
+
@logger.error "Unable to keep #{description} since it was not found"
|
57
|
+
end
|
58
|
+
elsif remove_matching_service!(actual_definitions, expected, interesting)
|
50
59
|
@logger.debug "Found #{description}"
|
51
60
|
elsif remove_matching_service!(actual_definitions, expected, identifying)
|
52
61
|
@logger.info "Updating #{description}"
|
53
62
|
modified += 1
|
54
|
-
register expected
|
63
|
+
register **expected
|
55
64
|
else
|
56
65
|
@logger.info "Adding #{description}"
|
57
66
|
modified += 1
|
58
|
-
register expected
|
67
|
+
register **expected
|
59
68
|
end
|
60
69
|
end
|
61
70
|
|
@@ -72,7 +81,7 @@ class ConsulSyncer
|
|
72
81
|
private
|
73
82
|
|
74
83
|
def consul_endpoints(requested_tags)
|
75
|
-
services = @consul.request(:get, "/v1/catalog/services?tag=#{requested_tags.first}")
|
84
|
+
services = @consul.request(:get, "/v1/catalog/services?cached&stale&tag=#{requested_tags.first}")
|
76
85
|
services.each_with_object([]) do |(name, tags), all|
|
77
86
|
# cannot query for multiple tags via query, so handle multi-matching manually
|
78
87
|
next if (requested_tags - tags).any?
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# - parses json responses
|
3
3
|
# - fails with descriptive output when a request fails
|
4
|
+
|
5
|
+
require 'json'
|
6
|
+
|
4
7
|
class ConsulSyncer
|
5
8
|
class Wrapper
|
6
9
|
BACKOFF = [0.1, 0.5, 1.0, 2.0].freeze
|
@@ -8,8 +11,9 @@ class ConsulSyncer
|
|
8
11
|
class ConsulError < StandardError
|
9
12
|
end
|
10
13
|
|
11
|
-
def initialize(
|
12
|
-
|
14
|
+
def initialize(consul_url, params:, logger:)
|
15
|
+
consul_url = "http://#{consul_url}" unless consul_url.include?("://")
|
16
|
+
@consul = Faraday.new(consul_url)
|
13
17
|
@params = params
|
14
18
|
@logger = logger
|
15
19
|
end
|
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: 0.
|
4
|
+
version: 1.0.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: 2020-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -47,15 +47,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
47
|
requirements:
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 2.
|
50
|
+
version: 2.4.0
|
51
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
|
-
|
58
|
-
rubygems_version: 2.5.1
|
57
|
+
rubygems_version: 3.1.2
|
59
58
|
signing_key:
|
60
59
|
specification_version: 4
|
61
60
|
summary: Sync remote services into consul
|