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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2618a879de065213c36e30009a88e0cac3122bc2
4
- data.tar.gz: 72ab3f1f2c69f0a7a5f0a7c02eb9c7f6c67c35e3
2
+ SHA256:
3
+ metadata.gz: bb9445e925d6b0268c3449351cd3bfc56c51d767238265382e80e7bfc0cd3ee9
4
+ data.tar.gz: 436992e07cc03d4f2eac53a93be937a48a1308bfc5aaa0d7e5a70f28d97b0782
5
5
  SHA512:
6
- metadata.gz: cbd1382d959415d7df8b1879221557809b9ee7a05227dfe6a369fb323b05beede32d2c542b99cacbb4eff9fc688edcad0e8b328af3e5e7ec017835e12e20e04f
7
- data.tar.gz: 178f0dd62685e2610b8b17928fef903968e82a4224b62556b3a3ee8d61f20b2d4689e7badb1dfa005c57f3add19ca2a02eb0376b2661fad764011bfc716f198b
6
+ metadata.gz: 02b2761bf351a62609de73be6e7e3ba250bbffef95e86806757f1ed24b7db9cadb22cb16322787d6856ac91c21ed6c95d8bb342c049da2f557e408f1023dc918
7
+ data.tar.gz: 9da6e8093bd5c99a4c683fa61e75b76748051e9173d3a4057a2ed52d07c8b06c8f51f3312ba358d78f5f62bea8aa2826566bb99e13aa800fccee3fadd30b2a4a
@@ -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(Faraday.new(url), params: params, logger: @logger)
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.fetch(:service)} / #{expected.fetch(:service_id)} on #{expected.fetch(:node)} in Consul"
48
-
49
- if remove_matching_service!(actual_definitions, expected, interesting)
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,3 +1,3 @@
1
1
  class ConsulSyncer
2
- VERSION = "0.5.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -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(consul, params:, logger:)
12
- @consul = consul
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.5.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: 2017-12-01 00:00:00.000000000 Z
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.2.0
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
- rubyforge_project:
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